Mengapa tabel inode biasanya tidak resizable?

19

Sistem file Unix biasanya memiliki tabel inode, dan jumlah entri dalam tabel ini biasanya diperbaiki pada saat sistem file dibuat. Ini kadang-kadang menyebabkan orang-orang dengan banyak ruang disk mendapatkan pesan kesalahan yang membingungkan tentang tidak ada ruang kosong, dan bahkan setelah mereka mengetahui apa masalahnya, tidak ada solusi mudah untuk apa yang harus dilakukan.

Tetapi tampaknya (bagi saya) bahwa akan sangat diinginkan untuk menghindari seluruh kekacauan ini dengan mengalokasikan inode on demand, sepenuhnya transparan kepada pengguna dan administrator sistem. Jika Anda suka peretasan yang lucu, Anda bahkan bisa membuat tabel inode itu sendiri menjadi file, dan dengan demikian menggunakan kembali kode yang sudah Anda miliki yang menemukan ruang kosong pada disk. Jika Anda beruntung, Anda mungkin berakhir dengan inode di dekat file itu sendiri, tanpa secara eksplisit mencoba mencapai hasil ini.

Tapi tak seorang pun (yang saya tahu) benar-benar melakukan ini, jadi mungkin ada tangkapan yang saya lewatkan. Adakah yang tahu apa itu?

Tandai VY
sumber
4
Anda baru saja menemukan kembali Direktori File Master dan Indeks File-11 di VMS, pendahulu dari Tabel File Master di NTFS.
JdeBP
Saya menemukan kembali prekursor ke MFT? Keren!
Mark VY

Jawaban:

26

Katakanlah Anda memang membuat tabel inode menjadi file; maka pertanyaan selanjutnya adalah ... di mana Anda menyimpan informasi tentang file itu? Dengan demikian Anda membutuhkan inode "asli" dan inode "extended", seperti tabel partisi MS-DOS. Mengingat, Anda hanya perlu satu (atau mungkin beberapa - misalnya, agar jurnal Anda menjadi file). Tetapi Anda sebenarnya memiliki kasing khusus, kode berbeda. Setiap kerusakan pada file itu akan menjadi bencana juga. Dan pertimbangkan bahwa, sebelum penjurnalan, adalah umum untuk file yang sedang ditulis misalnya, ketika listrik padam menjadi sangat rusak. Operasi file Anda harus jauh lebih kuat vs kegagalan daya / crash / dll. daripada mereka, misalnya, ext2.

Filesystem Unix tradisional menemukan solusi yang lebih sederhana (dan lebih kuat): letakkan blok inode (atau kelompok blok) setiap blok X. Kemudian Anda menemukannya dengan aritmatika sederhana. Tentu saja, maka tidak mungkin untuk menambahkan lebih banyak (tanpa merestrukturisasi seluruh sistem file). Dan bahkan jika Anda kehilangan / merusak blok inode yang Anda tulis ketika daya gagal, itu hanya kehilangan beberapa inode - jauh lebih baik daripada sebagian besar dari sistem file.

Lebih banyak desain modern menggunakan hal-hal seperti varian B-tree . Sistem file modern seperti btrfs, XFS, dan ZFS tidak mengalami batasan inode.

derobert
sumber
2
Ketika Anda mengatakan "jangan menderita batas inode", apakah itu berarti inode baru dialokasikan sepenuhnya di belakang layar, atau apakah seseorang perlu menjalankan perintah seperti "expand-table-now-please"?
Tandai VY
3
@MarkVY benar-benar di belakang layar (jika inode benar-benar digunakan sama sekali).
derobert
Oke, jadi pengetahuan saya agak ketinggalan zaman. Terima kasih atas jawaban terincinya. Saya tidak pernah memikirkan apa yang akan terjadi jika listrik padam atau sejenisnya. Jadi hack lucu saya cukup berbahaya kecuali "append to file" sudah merupakan operasi atom dalam sistem file. Yang Anda klaim cukup langka di masa lalu.
Mark VY
Saya ingat XFS dan btrfs sangat kadang-kadang menderita dari korupsi filesystem ringan - ZFS juga? Ini bukan risiko bagi sebagian orang, tetapi bisa menjadi risiko untuk data penting, dan biaya alokasi dinamis. Untuk XFS di toko ini, masalah pemecahannya adalah ketidakmampuan untuk menyusutkan sistem file dengan cara apa pun.
user2066657
Btrfs mungkin tidak menderita dari batas inode, tetapi menderita dari kesalahan yang sama sekali berbeda yang menyebabkan gejala membingungkan yang sama (pada dasarnya, ia kehabisan ruang metadata sementara masih memiliki banyak ruang data yang tersedia, karena penggunaan yang tidak efisien dari kelompok blok). Ini tidak hanya menyebabkannya melaporkan kesalahan disk penuh ketika dfmelaporkan banyak ruang yang tersedia, itu tidak dapat diperbaiki dengan menghapus file karena menghapus file memerlukan alokasi ruang metadata.
Tandai
17

Banyak filesystem memiliki tabel inode yang dapat dialokasikan secara dinamis (atau setara dengan moralnya) (XFS, BTRFS, ZFS, VxFS ...)

Meskipun Unix UFS asli memiliki inode yang diperbaiki pada waktu pembuatan filesystem dan filesystem yang berasal darinya (Linux EXT, Solaris UFS) sering melanjutkan skema. Ini kuat dan sederhana untuk diterapkan. Begitu banyak kasus penggunaan yang cocok, yang merancang sistem file baru hanya untuk menghindari satu masalah tidak mudah dibenarkan.

BowlOfRed
sumber
Begitu banyak kemajuan dalam komputasi telah dibuat oleh orang-orang yang memecahkan masalah yang tidak mudah dibenarkan.
user253751
2
Tetapi juga, banyak kemajuan dalam solusi yang tidak mudah untuk dipecahkan :) Sistem file "rumit" awal - era NT NTFS, reiserfs - memiliki cara gagal secara dahsyat KAPAN mereka gagal ....
rackandboneman
6

Ada filesystem yang mengalokasikan inode secara dinamis: dari atas kepala saya, setidaknya Veritas VxFS (= sistem file default HP-UX, dan salah satu pilihan yang tersedia di Solaris) dan XFS (tipe sistem file standar pada RHEL 7) berfungsi seperti itu. Btrfs dan IBM's JFS juga.

telcoM
sumber