Sistem file virtual di Linux: mengapa dibutuhkan dan bagaimana cara kerjanya? Bagian 1

Halo semua! Kami terus meluncurkan aliran baru untuk kursus yang Anda sukai dan sekarang kami sedang terburu-buru untuk mengumumkan bahwa kami memulai serangkaian kursus baru "Pengelola Linux"yang akan diluncurkan pada akhir April. Publikasi baru akan diberi tanggal untuk acara ini. Dengan bahan asli, Anda bisa baca di sini.

Sistem file virtual berfungsi sebagai semacam abstraksi ajaib yang memungkinkan filosofi Linux mengatakan bahwa "semuanya adalah file".

Sistem file virtual di Linux: mengapa dibutuhkan dan bagaimana cara kerjanya? Bagian 1

Apa itu sistem file? Berdasarkan kata-kata salah satu kontributor dan penulis pertama Linux Robert Lava, "Sistem file adalah penyimpanan data hierarkis yang disusun menurut struktur tertentu." Meskipun demikian, definisi ini juga cocok untuk VFAT (Virtual File Allocation Table), Git dan Cassandra (basis data NoSQL). Jadi apa sebenarnya yang mendefinisikan hal seperti "sistem file"?

Dasar-dasar Sistem File

Kernel Linux memiliki persyaratan tertentu untuk entitas yang dapat dianggap sebagai sistem file. Itu harus menerapkan metode open(), read() ΠΈ write() untuk objek persisten yang memiliki nama. Dari sudut pandang berorientasi objek pemrograman, kernel mendefinisikan sistem file generik sebagai antarmuka abstrak, dan ketiga fungsi besar ini dianggap "virtual" dan tidak memiliki definisi konkret. Dengan demikian, implementasi sistem file default disebut sistem file virtual (VFS).

Sistem file virtual di Linux: mengapa dibutuhkan dan bagaimana cara kerjanya? Bagian 1

Jika kita dapat membuka, membaca, dan menulis ke suatu entitas, maka entitas tersebut dianggap sebagai file, seperti yang dapat kita lihat dari contoh di konsol di atas.
Fenomena VFS hanya menggarisbawahi pengamatan mirip Unix bahwa "semuanya adalah file". Pikirkan betapa anehnya contoh kecil /dev/console di atas menunjukkan bagaimana konsol benar-benar bekerja. Gambar menunjukkan sesi Bash interaktif. Mengirim string ke konsol (perangkat konsol virtual) menampilkannya di layar virtual. VFS memiliki properti lain yang bahkan lebih aneh. Misalnya, ini memungkinkan Anda untuk mencari berdasarkan olehnya.

Sistem yang sudah dikenal seperti ext4, NFS, dan /proc memiliki tiga fungsi penting dalam struktur data C yang disebut file_operasi. Selain itu, sistem file tertentu memperluas dan mendefinisikan kembali fungsionalitas VFS dengan cara berorientasi objek yang sudah dikenal. Seperti yang ditunjukkan oleh Robert Love, abstraksi VFS memungkinkan pengguna Linux untuk dengan santai menyalin file ke atau dari sistem operasi pihak ketiga atau entitas abstrak seperti pipa tanpa mengkhawatirkan format data internalnya. Di sisi pengguna (userspace), dengan menggunakan system call, sebuah proses dapat menyalin dari file ke struktur data kernel menggunakan metode tersebut read() satu sistem file dan kemudian gunakan metode ini write () sistem file lain untuk keluaran data.

Definisi fungsi yang termasuk dalam tipe VFS dasar ada di dalam file fs/*.c kode sumber kernel, sedangkan subdirektori fs/ berisi sistem file tertentu. Inti juga berisi entitas seperti cgroups, /dev ΠΈ tmpfs, yang diperlukan selama proses booting dan karenanya ditentukan dalam subdirektori kernel init/. Perhatikan itu cgroups, /dev ΠΈ tmpfs jangan panggil fungsi "tiga besar". file_operations, tetapi langsung membaca dan menulis ke memori.
Diagram di bawah ini menunjukkan bagaimana userspace mengakses berbagai jenis filesystem yang biasanya dipasang pada sistem Linux. Struktur tidak ditampilkan pipes, dmesg ΠΈ POSIX clocks, yang juga mengimplementasikan struktur file_operations, diakses melalui lapisan VFS.

Sistem file virtual di Linux: mengapa dibutuhkan dan bagaimana cara kerjanya? Bagian 1

VFS adalah "lapisan pembungkus" antara panggilan sistem dan implementasi tertentu file_operationsSeperti ext4 ΠΈ procfs. Fungsi file_operations dapat berinteraksi dengan driver perangkat atau perangkat akses memori. tmpfs, devtmpfs ΠΈ cgroups jangan gunakan file_operations, tetapi langsung mengakses memori.
Keberadaan VFS memberikan kesempatan untuk menggunakan kembali kode, karena metode dasar yang terkait dengan sistem file tidak harus diimplementasikan ulang oleh setiap jenis sistem file. Penggunaan kembali kode adalah praktik umum di kalangan insinyur perangkat lunak! Namun, jika kode yang dapat digunakan kembali berisi kesalahan serius, semua implementasi yang mewarisi metode umum menderita karenanya.

/tmp: Petunjuk sederhana

Cara mudah untuk mendeteksi keberadaan VFS pada sistem adalah dengan mengetik mount | grep -v sd | grep -v :/, yang akan menampilkan semua yang terpasang (mounted) sistem file yang bukan penghuni disk dan non-NFS, yang berlaku di sebagian besar komputer. Salah satu tunggangan yang terdaftar (mounts) VFS pasti akan /tmp, Baik?

Sistem file virtual di Linux: mengapa dibutuhkan dan bagaimana cara kerjanya? Bagian 1

Semua orang tahu penyimpanan itu / tmp pada media fisik - kegilaan! Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ.

Mengapa tidak diinginkan untuk disimpan /tmp di media fisik? Karena file di /tmp bersifat sementara dan perangkat penyimpanan lebih lambat dari memori tempat tmpfs dibuat. Apalagi, media fisik lebih rentan aus saat ditimpa daripada memori. Terakhir, file di /tmp dapat berisi informasi sensitif, jadi menghilangkannya di setiap reboot adalah fitur penting.

Sayangnya, beberapa skrip penginstalan distribusi Linux membuat /tmp di perangkat penyimpanan secara default. Jangan putus asa jika ini juga terjadi pada sistem Anda. Ikuti beberapa petunjuk sederhana dengan Arch Wikiuntuk memperbaikinya, dan ketahuilah bahwa memori dialokasikan untuk tmpfs menjadi tidak tersedia untuk tujuan lain. Dengan kata lain, sistem dengan tmpfs raksasa dan file besar di dalamnya dapat kehabisan memori dan crash. Petunjuk lain: saat mengedit file /etc/fstab, ingat bahwa itu harus diakhiri dengan baris baru, jika tidak, sistem Anda tidak akan bisa boot.

/proc dan /sys

Selain /tmp, VFS (sistem file virtual) yang paling akrab bagi pengguna Linux adalah /proc ΠΈ /sys. (/dev berada dalam memori bersama dan tidak memiliki file_operations). Mengapa kedua komponen ini? Mari kita lihat masalah ini.

procfs membuat snapshot dari kernel dan proses yang dimonitornya userspace. Di /proc kernel mencetak informasi tentang apa yang tersedia, seperti interupsi, memori virtual, dan penjadwal. Di samping itu, /proc/sys adalah tempat dimana parameter dikonfigurasi dengan perintah sysctl, tersedia untuk userspace. Status dan statistik proses individual ditampilkan dalam direktori /proc/.

Sistem file virtual di Linux: mengapa dibutuhkan dan bagaimana cara kerjanya? Bagian 1

Di sini /proc/meminfo adalah file kosong yang tetap berisi informasi berharga.

Perilaku /proc file menunjukkan betapa berbedanya sistem file disk VFS. Di satu sisi, /proc/meminfo berisi informasi yang dapat dilihat dengan perintah free. Di sisi lain, itu kosong! Bagaimana cara kerjanya? Situasinya mengingatkan pada artikel terkenal berjudul Apakah bulan ada ketika tidak ada yang melihatnya? Realitas dan Teori Kuantum"ditulis oleh profesor fisika Universitas Cornell David Mermin pada tahun 1985. Faktanya adalah bahwa kernel mengumpulkan statistik memori ketika ada permintaan /proc, dan sebenarnya di file /proc tidak ada apa-apa ketika tidak ada yang melihat. Seperti Yang Dikatakan mermin, "Doktrin kuantum mendasar mengatakan bahwa pengukuran umumnya tidak mengungkapkan nilai yang sudah ada sebelumnya dari properti yang diukur." (Dan pertimbangkan pertanyaan tentang bulan sebagai pekerjaan rumah!)
Tampak kekosongan procfs masuk akal karena informasi di sana bersifat dinamis. Situasi yang sedikit berbeda dengan sysfs. Mari kita bandingkan berapa banyak file yang berukuran setidaknya satu byte /proc ΠΈ Π² /sys.

Sistem file virtual di Linux: mengapa dibutuhkan dan bagaimana cara kerjanya? Bagian 1

Procfs memiliki satu file, yaitu konfigurasi kernel yang diekspor, yang merupakan pengecualian karena hanya perlu dibuat satu kali per boot. Di sisi lain, di /sys ada banyak file yang lebih besar, banyak di antaranya menggunakan seluruh halaman memori. Biasanya file sysfs berisi tepat satu nomor atau baris, tidak seperti tabel informasi yang diperoleh dari membaca file seperti /proc/meminfo.

target sysfs - menyediakan properti baca/tulis dari apa yang dipanggil oleh kernel Β«kobjectsΒ» di ruang pengguna. Satu-satunya tujuan kobjects adalah penghitungan tautan: ketika tautan terakhir ke kobject dihapus, sistem akan memulihkan sumber daya yang terkait dengannya. Namun demikian, /sys membuat sebagian besar terkenal "ABI stabil untuk ruang pengguna" inti, yang tak seorang pun bisa, dalam keadaan apa pun "merusak". Ini tidak berarti bahwa file di sysfs bersifat statis, yang tidak konsisten dengan penghitungan referensi objek yang tidak stabil.
ABI kernel yang stabil membatasi apa yang dapat muncul /sys, bukan apa yang sebenarnya hadir pada saat itu. Daftar izin file di sysfs memberikan wawasan tentang bagaimana pengaturan yang dapat dikonfigurasi untuk perangkat, modul, sistem file, dll. dapat dikonfigurasi atau dibaca. Kesimpulan logisnya adalah bahwa procfs juga merupakan bagian dari ABI stabil kernel, meskipun hal ini tidak dinyatakan secara eksplisit di dokumentasi.

Sistem file virtual di Linux: mengapa dibutuhkan dan bagaimana cara kerjanya? Bagian 1

File masuk sysfs menggambarkan satu properti tertentu untuk setiap entitas dan dapat dibaca, ditulis, atau keduanya. "0" dalam file berarti SSD tidak dapat dihapus.

Mari kita mulai bagian kedua dari terjemahan dengan cara memantau VFS menggunakan alat eBPF dan bcc, dan sekarang kami menunggu komentar Anda dan secara tradisional mengundang Anda untuk buka webinar, yang akan diadakan oleh guru kami pada tanggal 9 April - Vladimir Drozdetsky.

Sumber: www.habr.com

Tambah komentar