Rumah  >  Artikel  >  Tutorial sistem  >  Metadata fail dalam sistem Linux: penjelasan terperinci inode

Metadata fail dalam sistem Linux: penjelasan terperinci inode

WBOY
WBOYke hadapan
2024-02-10 09:09:13607semak imbas

Inode ialah struktur data penting dalam sistem Linux Ia digunakan untuk menyimpan metadata fail, seperti jenis fail, saiz, kebenaran, cap waktu, bilangan pautan, lokasi blok data, dll. Inode ialah komponen teras sistem fail, yang boleh digunakan untuk mencipta, memadam, mengubah suai, mencari dan operasi lain pada fail. Dalam artikel ini, kami akan memperkenalkan prinsip dan ciri inod, termasuk penomboran inod, peruntukan, pelepasan, carian, pengindeksan, dsb., dan memberi contoh penggunaan dan langkah berjaga-jaganya.

Nama fail -> inod -> blok peranti

Metadata fail dalam sistem Linux: penjelasan terperinci inode

1. Apakah itu inode?

Memahami inod bermula dengan penyimpanan fail.

Fail disimpan pada cakera keras Unit storan terkecil cakera keras dipanggil "Sektor". Setiap sektor menyimpan 512 bait (bersamaan dengan 0.5KB).

Apabila sistem pengendalian membaca cakera keras, ia tidak membacanya sektor demi sektor, yang terlalu tidak cekap sebaliknya, ia membaca pelbagai sektor secara berterusan pada satu masa, iaitu, ia membaca satu "blok" pada satu masa. "Blok" yang terdiri daripada pelbagai sektor ini ialah unit akses fail terkecil. Saiz "blok" yang paling biasa ialah 4KB, iaitu, lapan sektor berturut-turut membentuk satu blok.

Data fail disimpan dalam "blok", jadi jelas sekali, kita juga mesti mencari tempat untuk menyimpan maklumat meta fail, seperti pencipta fail, tarikh penciptaan fail, saiz fail, dll. Kawasan yang menyimpan metamaklumat fail ini dipanggil inode, dan terjemahan bahasa Cinanya ialah "nod indeks".

2. Kandungan inode

inode mengandungi maklumat meta fail, khususnya kandungan berikut:

* Bilangan bait dalam fail

* ID pengguna pemilik fail

* ID Kumpulan fail

* Fail baca, tulis dan laksanakan kebenaran

* Terdapat tiga cap masa untuk fail: ctime merujuk kepada masa inod kali terakhir ditukar, mtime merujuk kepada masa kandungan fail kali terakhir ditukar dan atime merujuk kepada masa kali terakhir fail dibuka.

* Bilangan pautan, iaitu, berapa banyak nama fail yang menunjuk ke inod ini

* Lokasi blok data fail

Anda boleh menggunakan arahan stat untuk melihat maklumat inod bagi fail tertentu:

stat example.txt

Ringkasnya, semua maklumat fail kecuali nama fail disimpan dalam inode. Mengenai mengapa tiada nama fail, akan ada penjelasan terperinci di bawah.

3. Saiz Inode

Inode juga menggunakan ruang cakera keras, jadi apabila cakera keras diformat, sistem pengendalian secara automatik membahagikan cakera keras kepada dua kawasan. Satu ialah kawasan data, yang menyimpan data fail; yang lain ialah kawasan inode (jadual inode), yang menyimpan maklumat yang terkandung dalam inode.

Saiz setiap nod inod secara amnya ialah 128 bait atau 256 bait. Jumlah bilangan nod inod diberikan semasa pemformatan, biasanya satu inod ditetapkan setiap 1KB atau setiap 2KB. Dengan mengandaikan bahawa dalam cakera keras 1GB, saiz setiap nod inod ialah 128 bait, dan satu inod ditetapkan untuk setiap 1KB, maka saiz jadual inod akan mencapai 128MB, menyumbang 12.8% daripada keseluruhan cakera keras.

Untuk melihat jumlah bilangan inod dan nombor terpakai bagi setiap partition cakera keras, anda boleh menggunakan arahan df.

df -i

Untuk melihat saiz setiap nod inod, anda boleh menggunakan arahan berikut:

sudo dumpe2fs -h /dev/hda |

Oleh kerana setiap fail mesti mempunyai inod, mungkin berlaku inod telah habis tetapi cakera keras tidak penuh. Pada masa ini, fail baharu tidak boleh dibuat pada cakera keras.

4. Nombor Inode

Setiap inod mempunyai nombor, dan sistem pengendalian menggunakan nombor inod untuk mengenal pasti fail yang berbeza.

Perlu diulang di sini, sistem Unix/Linux tidak menggunakan nama fail secara dalaman, tetapi menggunakan nombor inod untuk mengenal pasti fail. Untuk sistem, nama fail hanyalah alias atau nama panggilan untuk nombor inod untuk pengenalan mudah. Di permukaan, pengguna membuka fail dengan nama fail. Sebenarnya, proses dalam sistem ini dibahagikan kepada tiga langkah: pertama, sistem mencari nombor inod yang sepadan dengan nama fail kedua, mendapatkan maklumat inode melalui nombor inod, akhirnya, berdasarkan maklumat inode; blok di mana data fail terletak dan membaca data.

Gunakan arahan ls -i untuk melihat nombor inod yang sepadan dengan nama fail:

ls -i example.txt

5. Fail direktori

Dalam sistem Unix/Linux, direktori juga merupakan sejenis fail. Membuka direktori sebenarnya bermakna membuka fail direktori.

Struktur fail direktori adalah sangat mudah, ia adalah senarai siri entri direktori (dirent). Setiap entri direktori terdiri daripada dua bahagian: nama fail fail yang terkandung, dan nombor inod yang sepadan dengan nama fail.

Arahan

ls hanya menyenaraikan semua nama fail dalam fail direktori:

ls /etc

Arahan

ls -i menyenaraikan keseluruhan fail direktori, iaitu nama fail dan nombor inod:

ls -i /etc

Jika anda ingin melihat maklumat terperinci fail, anda mesti mengakses nod inod dan membaca maklumat mengikut nombor inod. Perintah ls -l menyenaraikan maklumat terperinci tentang fail.

ls -l /etc

6. Pautan keras

Secara amnya, nama fail dan nombor inod mempunyai hubungan "satu-dengan-satu surat-menyurat", dan setiap nombor inod sepadan dengan nama fail. Walau bagaimanapun, sistem Unix/Linux membenarkan berbilang nama fail untuk menunjuk ke nombor inod yang sama. Ini bermakna kandungan yang sama boleh diakses dengan nama fail yang berbeza, mengubah suai kandungan fail akan menjejaskan semua nama fail, namun pemadaman satu nama fail tidak akan menjejaskan akses kepada nama fail yang lain; Keadaan ini dipanggil "pautan keras".

Perintah

ln boleh mencipta pautan keras:

dalam fail sumber fail sasaran

Selepas menjalankan arahan di atas, nombor inod bagi fail sumber dan fail sasaran adalah sama dan menghala ke inod yang sama. Terdapat item dalam maklumat inode yang dipanggil "Bilangan Pautan", yang merekodkan jumlah bilangan nama fail yang menunjuk ke inod, dan akan dinaikkan sebanyak 1 pada masa ini. Sebaliknya, pemadaman nama fail akan mengurangkan "bilangan pautan" dalam nod inod sebanyak 1. Apabila nilai ini berkurangan kepada 0, menunjukkan bahawa tiada nama fail yang menunjuk ke inod ini, sistem akan mengitar semula nombor inod dan kawasan blok yang sepadan.

By the way, mari kita bincangkan tentang "bilangan pautan" fail direktori. Semasa membuat direktori, dua entri direktori dijana secara lalai: "." dan "..". Nombor inod yang pertama ialah nombor inod bagi direktori semasa, yang bersamaan dengan "pautan keras" direktori semasa; nombor inod yang terakhir ialah nombor inod direktori induk bagi direktori semasa, iaitu bersamaan dengan "pautan keras" direktori induk. Oleh itu, jumlah bilangan "pautan keras" mana-mana direktori sentiasa bersamaan dengan 2 ditambah jumlah bilangan subdirektorinya (termasuk direktori tersembunyi 2 di sini ialah "pautan keras" direktori induk dan "pautan keras". daripada direktori semasa.

7. Pautan lembut

Selain pautan keras, terdapat kes khas. Walaupun nombor inod fail A dan fail B berbeza, kandungan fail A ialah laluan fail B. Apabila membaca fail A, sistem secara automatik akan mengarahkan pelawat ke fail B. Oleh itu, tidak kira fail mana yang dibuka, fail B akhirnya dibaca. Pada masa ini, fail A dipanggil "pautan lembut" atau "pautan simbolik" bagi fail B.

Ini bermakna fail A bergantung pada fail B untuk kewujudan Jika fail B dipadamkan, ralat akan dilaporkan semasa membuka fail A: "Tiada fail atau direktori sedemikian". Ini adalah perbezaan terbesar antara pautan lembut dan pautan keras: fail A menunjuk kepada nama fail B, bukan nombor inod fail B. "Nombor pautan" inod fail B tidak akan berubah akibatnya.

Arahan

ln -s boleh mencipta pautan lembut.

ln -s fail sumber atau fail sasaran direktori atau direktori

8 Fungsi khas inode

Disebabkan pemisahan nombor inod dan nama fail, mekanisme ini membawa kepada beberapa fenomena unik kepada sistem Unix/Linux.

1 Kadangkala, nama fail mengandungi aksara khas dan tidak boleh dipadamkan seperti biasa. Pada masa ini, pemadaman terus nod inod boleh memainkan peranan untuk memadam fail.

2. Memindahkan fail atau menamakan semula fail hanya menukar nama fail dan tidak menjejaskan nombor inod.

3 Selepas membuka fail, sistem akan mengenal pasti fail berdasarkan nombor inod dan tidak lagi mempertimbangkan nama fail. Oleh itu, secara amnya, sistem tidak dapat mempelajari nama fail daripada nombor inod.

Point 3 menjadikan kemas kini perisian mudah Ia boleh dikemas kini tanpa menutup perisian dan tanpa memulakan semula. Kerana sistem mengenal pasti fail yang sedang berjalan melalui nombor inod, bukan nama fail. Apabila mengemas kini, versi baharu fail akan menjana inod baharu dengan nama fail yang sama, yang tidak akan menjejaskan fail yang sedang berjalan. Apabila perisian dijalankan pada masa akan datang, nama fail akan secara automatik menghala ke versi baharu fail, dan inod versi lama fail akan dikitar semula.

Sembilan soalan praktikal

Apabila mencipta fail dalam partition /data pelayan Linux dengan konfigurasi rendah (memori kecil dan cakera keras), sistem menggesa bahawa ruang cakera tidak mencukupi saya menggunakan arahan df -h untuk menyemak penggunaan cakera dan mendapati bahawa partition /data hanya menggunakan Ia telah mencapai 66%, dan masih terdapat 12G ruang yang tinggal. Kemudian, saya menggunakan df -i untuk menyemak nod indeks (inod) partition /data dan mendapati ia penuh (IUsed=100%), menyebabkan sistem tidak dapat mencipta direktori dan fail baharu.

Cari sebabnya:

Terdapat sejumlah besar fail cache bait kecil dalam direktori /data/cache, yang menduduki tidak banyak Blok, tetapi menduduki sejumlah besar inod.

Penyelesaian:
1. Padamkan beberapa fail dalam direktori /data/cache dan lepaskan beberapa inod dalam partition /data.
2. Gunakan sambungan lembut untuk menyambungkan direktori newcache dalam partition percuma /opt to /data/cache, dan gunakan inode partition /opt untuk mengurangkan masalah inode yang tidak mencukupi dalam partition /data:
ln -s /opt/newcache /data/cache

Melalui artikel ini, kami memahami prinsip dan ciri inode, yang boleh digunakan untuk mengurus dan mengendalikan fail. Kita harus memilih sistem fail yang sesuai berdasarkan keperluan sebenar dan mengikuti beberapa prinsip asas, seperti mengelakkan keletihan inode, kerap menyemak status inod, menggunakan pautan keras atau pautan lembut, dsb. Inode ialah salah satu konsep paling asas dalam sistem Linux Ia boleh mengabstrak dan merangkum fail, dan juga boleh meningkatkan prestasi dan kebolehpercayaan sistem fail. Saya harap artikel ini dapat membantu dan memberi inspirasi kepada anda.

Atas ialah kandungan terperinci Metadata fail dalam sistem Linux: penjelasan terperinci inode. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:lxlinux.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam