Apa itu Superblock, Inode, Dentry, dan File?

125

Dari artikel Anatomi sistem file Linux oleh M. Tim Jones, saya membaca bahwa Linux melihat semua sistem file dari perspektif seperangkat objek umum dan objek-objek ini adalah superblock , inode , dentry , dan file . Meskipun sisa paragraf menjelaskan hal di atas, saya tidak merasa nyaman dengan penjelasan itu.

Bisakah seseorang menjelaskan kepada saya syarat-syarat ini?

Sen
sumber

Jawaban:

136

Pertama dan terpenting, dan saya menyadari bahwa itu bukan salah satu syarat dari pertanyaan Anda, Anda harus memahami metadata . Secara ringkas, dan dicuri dari Wikipedia, metadata adalah data tentang data. Artinya metadata berisi informasi tentang sepotong data. Sebagai contoh, jika saya memiliki mobil maka saya memiliki seperangkat informasi tentang mobil tetapi yang bukan merupakan bagian dari mobil itu sendiri. Informasi seperti nomor registrasi, merek, model, tahun pembuatan, informasi asuransi, dan sebagainya. Semua informasi itu secara kolektif disebut sebagai metadata. Di Linux dan sistem file UNIX, metadata ada di berbagai tingkat organisasi seperti yang akan Anda lihat.

The superblok dasarnya sistem file metadata dan mendefinisikan jenis file sistem, ukuran, status, dan informasi tentang struktur metadata lainnya (metadata dari metadata). Superblock sangat penting untuk sistem file dan oleh karena itu disimpan dalam beberapa salinan berlebih untuk setiap sistem file. Superblock adalah struktur metadata yang sangat "tinggi" untuk sistem file. Misalnya, jika superblok partisi, / var, menjadi rusak maka sistem file yang dimaksud (/ var) tidak dapat dipasang oleh sistem operasi. Umumnya dalam acara ini, Anda harus berlarifsckyang secara otomatis akan memilih salinan cadangan alternatif superblok dan berupaya memulihkan sistem file. Salinan cadangan sendiri disimpan dalam kelompok blok yang disebarkan melalui sistem file dengan yang pertama disimpan pada offset 1 blok dari awal partisi. Ini penting dalam hal pemulihan manual diperlukan. Anda dapat melihat informasi tentang cadangan superblok dengan perintah dumpe2fs /dev/foo | grep -i superblockyang berguna jika terjadi upaya pemulihan manual. Mari kita anggap bahwa perintah dumpe2fs menampilkan baris Backup superblock at 163840, Group descriptors at 163841-163841. Kami dapat menggunakan informasi ini, dan pengetahuan tambahan tentang struktur sistem file, untuk mencoba menggunakan cadangan superblok ini: /sbin/fsck.ext3 -b 163840 -B 1024 /dev/foo. Harap perhatikan bahwa saya telah mengasumsikan ukuran blok 1024 byte untuk contoh ini.

Sebuah inode ada di, atau pada, sistem file dan mewakili metadata tentang file. Untuk lebih jelasnya, semua objek dalam sistem Linux atau UNIX adalah file; file aktual, direktori, perangkat, dan sebagainya. Harap perhatikan bahwa, di antara metadata yang terkandung dalam inode, tidak ada nama file seperti yang dipikirkan manusia, ini akan menjadi penting nanti. Inode pada dasarnya berisi informasi tentang kepemilikan (pengguna, grup), mode akses (baca, tulis, jalankan izin), dan jenis file.

Sebuah dentry adalah lem yang memegang inode dan file bersama-sama oleh berkaitan nomor inode untuk mengajukan nama. Gigi tiruan juga berperan dalam caching direktori yang, idealnya, menyimpan file yang paling sering digunakan untuk akses yang lebih cepat. Travers sistem file adalah aspek lain dari dentry karena mempertahankan hubungan antara direktori dan file-file mereka.

Sebuah berkas , selain menjadi apa yang manusia biasanya pikirkan ketika disajikan dengan kata, benar-benar hanya sebuah blok data sewenang-wenang terkait secara logis. Relatif sangat membosankan mengingat semua pekerjaan yang dilakukan (di atas) untuk melacak mereka.

Saya sepenuhnya menyadari bahwa beberapa kalimat tidak memberikan penjelasan lengkap tentang konsep-konsep ini jadi jangan ragu untuk meminta rincian tambahan kapan dan di mana diperlukan.

Tok
sumber
@ Tok: Akankah dump seperti ini (seperti yang ditunjukkan dalam jawaban): Backup superblock di 163840, deskriptor grup di 163841-163841 atau begini: Backup superblock di 163840, Group deskriptor di 163841-163842? Apakah itu kesalahan ketik? :-)
Sen
@TOK: Cadangan superblock di 163840, deskriptor grup di 163841-163842, Info apa yang disampaikan oleh Deskriptor Grup?
Sen
@Sen - secara teoritis deskriptor grup dapat menjangkau beberapa blok, tetapi untuk sebagian besar sistem desktop Anda akan melihatnya hanya mengambil satu blok dan dirujuk sebagai $ ((BackupBlock + 1)) - $ ((BackupBlock + 1))
Tok
@TOK: ok di sistem saya, saya melihatnya seperti $ ((BackupBlock + 1)) - $ ((BackupBlock + 2))
Sen
@Sen - Deskriptor grup menjelaskan grup blok. Apa artinya? Lebih banyak metadata. Pada dasarnya deskriptor grup berisi bitmap blok (nomor blok dari bitmap alokasi blok), bitmap inode (sama tetapi untuk inode), tabel inode (nomor blok dari blok awal untuk tabel inode), blok bebas dan jumlah inode, dan jumlah direktori yang digunakan. Ini semua didasarkan pada sistem file ext2. Deskriptor grup sangat penting untuk operasi sistem file yang tepat dan digandakan di samping superblok.
Tok
49

Mengajukan

File hanya berarti banyak byte yang disusun dalam urutan tertentu. Itu yang orang biasa sebut sebagai isi file. Ketika Linux membuka file, itu juga membuat objek file, yang menyimpan data tentang di mana file disimpan dan proses apa yang menggunakannya. Objek file (tetapi bukan data file itu sendiri) dibuang ketika file ditutup.

Inode

Inode (kependekan dari "node indeks") adalah banyak atribut tentang file yang disimpan oleh Linux. Ada satu inode untuk setiap file (walaupun dengan beberapa filesystem, Linux harus membuat inode sendiri karena informasi tersebar di sekitar filesystem). Inode menyimpan informasi seperti siapa yang memiliki file tersebut, seberapa besar file tersebut, dan siapa yang diizinkan untuk membuka file tersebut. Setiap inode juga berisi nomor unik untuk partisi sistem file; itu seperti nomor seri untuk file yang dijelaskan oleh inode itu.

Dentry

Dentry (kependekan dari "entry direktori") adalah apa yang digunakan kernel Linux untuk melacak hierarki file dalam direktori. Setiap dentry memetakan nomor inode ke nama file dan direktori induk.

Superblock

Superblock adalah struktur data unik dalam sistem file (meskipun ada banyak salinan untuk melindungi dari korupsi). Superblock menyimpan metadata tentang sistem file, seperti inode mana yang merupakan direktori tingkat atas dan jenis sistem file yang digunakan.

pingswept
sumber
11

superblock , simpul indeks (atau inode ), entri direktori (atau dentry ), dan akhirnya, objek file adalah bagian dari sistem file virtual (VFS) atau switch sistem file virtual . Tujuan dari VFS adalah untuk memungkinkan aplikasi klien untuk mengakses berbagai jenis sistem file beton dengan cara yang seragam.

Hubungan benda-benda utama di VFS

masukkan deskripsi gambar di sini


Sebuah inode adalah struktur data pada sistem file Unix / Linux. Inode menyimpan data meta tentang file biasa, direktori, atau objek sistem file lainnya. Inode bertindak sebagai antarmuka antara file dan data. Inode dapat merujuk ke file atau direktori atau tautan simbolik ke objek lain. Ini berisi nomor unik (nomor-i), atribut file, termasuk nama, tanggal, ukuran dan izin baca / tulis, dan penunjuk ke lokasi file. Ini adalah pasangan ke tabel FAT di dunia DOS / Windows.

Program, layanan, teks, gambar, dan sebagainya, semuanya adalah file . Perangkat input dan output, dan umumnya semua perangkat, dianggap sebagai file , menurut sistem.

The superblok adalah wadah untuk metadata tingkat tinggi tentang sistem file. Superblock adalah struktur yang ada pada disk (sebenarnya, beberapa tempat pada disk untuk redundansi) dan juga dalam memori. Ini memberikan dasar untuk berurusan dengan sistem file on-disk, karena ia mendefinisikan parameter pengelolaan sistem file (misalnya, jumlah total blok, blok bebas, simpul indeks root).

Dentry adalah antarmuka antara file dan Inode. Gigi tiruan juga berperan dalam caching direktori yang, idealnya, menyimpan file yang paling sering digunakan untuk akses yang lebih cepat.

Sumber

Premraj
sumber
5

Dalam kesederhanaan, dentry dan inode adalah hal yang sama, sebuah abstraksi dari file atau direktori. Perbedaan antara dentry dan inode adalah bahwa dentry digunakan untuk memfasilitasi operasi direktori-spesifik, inode hanyalah kumpulan metadata tentang file atau direktori. Superblock adalah abstraksi dari sistem file.

struct file, di kernel linux, disalahartikan sebagai banyak yang lain (misal struct address_space) dan bukan abstraksi dari "file" nyata (mis. / etc / passwd). Itu singkatan dari "file" atau direktori yang terbuka. struct filedibuat oleh sys_opendalam kernel, sehingga suatu proses dapat memiliki banyak struct files untuk file yang sama.

Mengapa kita membutuhkan gigi? Ini digunakan untuk mempercepat penerjemahan dari nama path (mis. / Etc / passwd) ke inode. Kernel Linux menggunakan inode untuk memanipulasi "file" atau direktori, bukan nama mereka.

Firo
sumber
4

Perhatikan bahwa istilah ini tidak spesifik untuk Linux tetapi khusus untuk sistem file. Sebagian besar filesystem yang digunakan oleh sistem Unix dan Unix like saat ini diturunkan atau terinspirasi oleh filesystem Unix asli yang mendefinisikan idiom superblock dan inode. Linux juga dapat me-mount beberapa filesystem yang tidak ada konsep superblock dan / atau inode, yang paling umum adalah FAT. Satu lagi, ZFS, tidak menggunakan superblok tetapi überblock.

Jlliagre
sumber
Semoga Anda bisa membaca komentar ini setelah sekian lama. Saya membaca bahwa VFS memiliki inode dan superblok yang tidak terkait dengan inodes dan superblok dari katakanlah EXT2. Jadi, jangan sampai salah paham dengan apa yang Anda katakan, berdasarkan setiap Linux yang memiliki VFS, mereka semua harus menggunakan inode dan superblok, kan?
CuriousKimchi
1
@CuriousKimchi Terlepas dari kenyataan bahwa mereka memiliki nama yang sama di sini, Anda seharusnya tidak membingungkan informasi yang tersimpan pada disk (superblock / inode) dan struktur yang digunakan oleh kernel untuk mengakses sistem file dan file-file tersebut. Setiap sistem file memiliki beberapa metadata pada disk yang menggambarkan karakteristik sistem file, metadata ini digunakan untuk mengisi struktur superblock VFS Linux. Demikian pula, file memiliki struktur inode kernel di bawah VFS. Ketika sistem file yang mendasari tidak memiliki gagasan inode, struktur ini berisi nomor inode palsu yang dibuat dengan cepat oleh OS.
jlliagre