Sistem fail Linux ialah komponen teras sistem pengendalian, dan mekanisme pengendaliannya adalah perkara yang perlu difahami dan dikuasai oleh pengaturcara. Cakera menyediakan storan berterusan yang paling asas untuk sistem, dan sistem fail menyediakan semua fail dalam sistem asas cakera Di Linux, semuanya adalah fail Bukan sahaja fail dan direktori biasa, tetapi juga peranti blok, soket, paip, dan lain-lain, mesti diuruskan melalui sistem fail bersatu. Hari ini kita akan bercakap bersama: Bagaimanakah cakera dan sistem fail berfungsi?
Nod indeks dan entri direktori
Dalam sistem fail Linux, metadata fail termasuk: entri direktori, nod indeks dan blok data.
- Entri direktori: dirujuk sebagai dentry, digunakan untuk merekodkan nama fail, penunjuk nod indeks dan kaitan dengan entri direktori lain. Berbilang entri direktori yang berkaitan membentuk struktur direktori sistem fail. Entri direktori ialah struktur data memori yang dikekalkan oleh kernel, jadi ia sering dipanggil cache kemasukan direktori (Cache).
- Nod indeks: dirujuk sebagai inod, digunakan untuk merekodkan metadata fail, termasuk nombor inod, saiz fail, kebenaran akses, tarikh pengubahsuaian, lokasi data, bilangan pautan, dsb. Maklumat nod indeks akan disimpan pada cakera untuk penyimpanan, menduduki ruang cakera.
- Blok data: dirujuk sebagai blok, tempat data fail disimpan. Unit storan terkecil cakera dipanggil sektor Setiap sektor menyimpan 512 bait, yang bersamaan dengan 0.5KB Apabila sistem pengendalian membaca cakera keras, ia tidak akan membacanya mengikut sektor, yang terlalu tidak cekap membaca pelbagai sektor secara berterusan pada satu masa, iaitu membaca satu "blok" pada satu masa. "Blok" yang terdiri daripada pelbagai sektor ini ialah unit akses fail terkecil. Saiz "Sekat", yang paling biasa ialah 4KB (lapan sektor).
Untuk mempercepatkan akses fail, nod indeks biasanya dimuatkan ke dalam memori, dan cakera keras dibahagikan kepada tiga kawasan storan: blok super, kawasan nod indeks dan kawasan blok data apabila diformatkan.
- Super block digunakan untuk menyimpan maklumat terperinci sistem fail, seperti bilangan blok, saiz blok, blok percuma, dll.
- Kawasan nod indeks, digunakan untuk menyimpan nod indeks.
- Kawasan blok data, digunakan untuk menyimpan data fail atau direktori.
Sistem Fail Maya
Sistem fail maya (VFS, Sistem Fail Maya) sistem Linux ialah lapisan abstraksi utama yang menyediakan pengguna dan aplikasi dengan antara muka sistem fail yang konsisten, membolehkan mereka mengakses pelbagai jenis sistem fail dengan cara yang bersatu perlu bimbang tentang butiran pelaksanaan sistem fail asas.
Kedua-dua program pengguna dan perpustakaan glibc adalah milik ruang pengguna, dan operasi fail diselesaikan dengan memanggil fungsi lapisan panggilan sistem (SCI). Fungsi ini adalah antara muka yang disediakan oleh kernel Linux untuk pengguna meminta operasi daripada sistem. Sebagai contoh, arahan kucing dalam sistem akan memanggil fungsi open() untuk membuka fail, kemudian memanggil fungsi read() untuk membaca kandungan fail, dan akhirnya memanggil fungsi write() untuk mengeluarkan kandungan fail ke konsol . Jenis sistem fail biasa boleh dibahagikan kepada beberapa kategori yang luas.
- Berdasarkan cakera setempat: EXT3, EXT4, XFS, OverlayFS, dll. Ciri sistem fail jenis ini ialah data disimpan terus dalam cakera yang dipasang secara tempatan pada komputer, dengan prestasi yang baik dan tiada penggunaan akses IO rangkaian.
- Berdasarkan sistem fail rangkaian: NFS, CIFS/SMB, CephFS, GlusterFS, dll. Ciri-ciri fail jenis ini ialah ia membenarkan pengguna mengakses dan mengurus fail melalui rangkaian. Pengedaran, merentas platform, fleksibiliti dan skalabiliti adalah kelebihan terbesar mereka.
- Sistem fail berasaskan memori: tmpfs, ramfs, /proc, dsb. Sistem fail berasaskan memori ini biasanya digunakan untuk tujuan tertentu, seperti storan fail sementara, caching, akses data pantas, dsb. Mereka menyediakan penyelesaian berprestasi tinggi untuk membaca dan menulis fail dalam ingatan, tetapi mereka juga perlu sedar tentang had memori dan turun naik data.
Fail I/O
Kami membahagi dan memformat cakera untuk mencipta pelbagai jenis sistem fail, yang mesti dipasang pada direktori tertentu pada VFS Linux sebelum ia boleh digunakan oleh sistem. Terdapat jenis I/O yang berbeza untuk operasi membaca dan menulis fail, dan program aplikasi memilih kaedah yang sesuai mengikut keperluan.
Timbal lwn. I/O Tidak Tertimbal
- Apa yang dipanggil tiada penimbalan tidak bermakna kernel tidak menyediakan penimbalan, tetapi hanya panggilan sistem yang mudah, bukan panggilan perpustakaan berfungsi. Kernel sistem menyediakan penimbal blok untuk membaca dan menulis ke cakera Apabila menggunakan fungsi tulis untuk menulis data kepadanya, panggilan sistem dipanggil terus untuk menulis data ke penimbal blok dan beratur apabila penampan blok mencapai a jumlah tertentu, penimbal blok akan beratur Data ditulis ke cakera. Oleh itu, apa yang dipanggil unbuffered I/O bermakna proses tersebut tidak menyediakan fungsi buffering. Setiap kali fungsi tulis atau baca dipanggil, ia dipanggil terus oleh sistem. (Disampan oleh kernel).
- Buffered I/O bermaksud proses itu menambah baik aliran input dan output serta menyediakan penimbal strim. Apabila menggunakan fungsi tulis untuk menulis data, data pertama kali ditulis ke dalam penimbal strim Apabila keadaan tertentu dicapai, seperti penimbal strim penuh, data akan dihantar ke penimbal blok yang disediakan oleh kernel sekali gus. kemudian ditulis melalui penimbal blok ke dalam cakera. (penimbalan berganda)
- Oleh itu, I/O buffer akan memerlukan lebih sedikit panggilan sistem daripada I/O yang tidak buffer apabila menulis jumlah data yang sama ke cakera.
I/O terus dan I/O tidak langsung
- I/O Terus: Aplikasi mengakses data cakera secara langsung tanpa melalui penimbal kernel Tujuannya adalah untuk mengurangkan salinan data daripada penimbal kernel ke cache program pengguna.
- I/O Tidak Langsung: Apabila fail dibaca atau ditulis, ia mesti melalui cache halaman sistem dahulu, dan kemudian ditulis ke cakera melalui kernel atau panggilan sistem tambahan.
- Untuk I/O langsung, jika data yang diakses tiada dalam cache aplikasi, maka data akan dimuatkan terus dari cakera setiap kali, dan kecekapan pemuatan langsung ini akan menjadi lebih perlahan. Walau bagaimanapun, untuk aplikasi seperti sistem pengurusan pangkalan data, mereka lebih cenderung untuk memilih mekanisme caching mereka sendiri, kerana sistem pengurusan pangkalan data sering mengetahui data yang disimpan dalam pangkalan data lebih baik daripada sistem pengendalian, dan I/O langsung adalah lebih sesuai.
Menyekat I/O dan tidak menyekat I/O
- Menyekat I/O: Proses aplikasi disekat apabila memanggil operasi I/O Ia hanya kembali selepas menunggu data dikendalikan untuk disediakan dan disalin ke penimbal proses permohonan. Ciri-cirinya ialah: kesukaran pelaksanaan yang rendah, pembangunan aplikasi yang mudah, dan sesuai untuk pembangunan aplikasi rangkaian dengan konkurensi kecil.
- I/O tidak menyekat: bermakna selepas aplikasi menjalankan operasi I/O, ia tidak akan menyekat urutan semasa dan boleh terus melaksanakan tugas lain, dan kemudian mendapatkan keputusan panggilan melalui undian atau pemberitahuan acara. Ciri-cirinya ialah: agak kompleks. Sesuai untuk pembangunan aplikasi rangkaian yang mempunyai jumlah concurrency yang kecil dan tidak memerlukan respons tepat pada masanya
I/O segerak dan tak segerak
- I/O Segerak: bermakna selepas aplikasi melakukan operasi I/O, ia mesti menunggu sehingga keseluruhan I/O selesai sebelum ia boleh mendapatkan respons I/O.
- I/O tak segerak: bermakna selepas aplikasi menjalankan operasi I/O, ia tidak perlu menunggu untuk selesai dan respons selepas selesai, tetapi boleh terus melaksanakan. Selepas I/O ini selesai, maklum balas akan dimaklumkan kepada permohonan dalam bentuk pemberitahuan acara.
Beberapa pengetahuan umum tentang fail
Masih terdapat banyak ruang yang tinggal pada cakera, dan ruang tidak mencukupi untuk fail dan direktori baharu.
- Idea penyelesaian masalah: Terdapat kebarangkalian tinggi bahawa terdapat terlalu banyak fail kecil dan inod telah digunakan. Anda boleh menggunakan df -i.
Statistik penggunaan cakera keras antara du dan df adalah tidak konsisten.
- du mengira saiz setiap fail yang direkodkan oleh sistem fail, dan kemudian mengumpul jumlah saiz, yang diperoleh melalui sistem fail. df terutamanya membaca maklumat penggunaan cakera keras daripada superblock (superblock) Apa yang df peroleh ialah penggunaan blok cakera. Keadaan ini berkemungkinan besar disebabkan oleh fail yang dipadamkan, tetapi proses lain sedang menggunakannya (memiliki pemegang), yang boleh didapati melalui lsof | grep deleted. Apabila proses berhenti atau dimatikan, ruang ini akan dilepaskan.
Apabila kami menanyakan kapasiti cakera, mengapa saiz Used+Avail sentiasa lebih kecil daripada jumlah kapasiti (SAIZ).
- Untuk mengelakkan kecemasan, sistem fail ext Linux akan menempah sebahagian daripada ruang cakera keras Nilai simpanan khusus boleh dilihat melalui tune2fs -l [dev_name] | , yang dikhaskan di sini Ruang akan dikira oleh df ke dalam ruang yang digunakan, menyebabkan statistik tidak konsisten antara df dan du. Jika anda perlu melaraskan saiz ruang yang dikhaskan, kami boleh menggunakan tune2fs -m [saiz] [dev_name] untuk membuat pelarasan.
Atas ialah kandungan terperinci Ingin mengetahui cara sistem fail Linux berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!