Halo semuanya! Kami terus meluncurkan utas baru di kursus yang sudah Anda sukai dan sedang terburu-buru untuk memberi tahu Anda bahwa kami sedang memulai set baru di kursus 
Administrator Linux , yang akan dimulai pada akhir April. Publikasi baru akan bertepatan dengan acara ini. Bahan aslinya dapat 
ditemukan di sini .
Sistem file virtual bertindak sebagai semacam abstraksi magis yang memungkinkan filosofi Linux untuk mengatakan bahwa "semuanya adalah file".

Apa itu sistem file? Berdasarkan kata-kata dari salah satu kontributor dan penulis Linux pertama, 
Robert Love , "Sistem file adalah gudang data hierarkis, dirakit sesuai dengan struktur tertentu." Bagaimanapun, definisi ini sama-sama cocok untuk VFAT (Tabel Alokasi File Virtual), Git, dan 
Cassandra ( 
Database NoSQL ). Jadi apa sebenarnya yang mendefinisikan konsep seperti "sistem file"? 
Dasar-dasar Sistem FileKernel Linux memiliki persyaratan khusus untuk suatu entitas yang dapat dianggap sebagai sistem file. Ini harus mengimplementasikan metode 
open() , 
read() dan 
write() untuk objek persisten yang memiliki nama. Dari sudut pandang 
pemrograman berorientasi 
objek , kernel mendefinisikan sistem file generik (generic filesystem) sebagai antarmuka abstrak, dan ketiga fungsi besar ini dianggap "virtual" dan tidak memiliki definisi khusus. Dengan demikian, implementasi standar sistem file disebut sistem file virtual (VFS).

Jika kita dapat membuka, membaca, dan menulis ke suatu entitas, maka entitas ini dianggap sebagai file, seperti yang kita lihat dari contoh di konsol di atas.
Fenomena VFS hanya menggarisbawahi karakteristik pengamatan sistem mirip Unix, yang menyatakan bahwa "semuanya adalah file." Pikirkan betapa anehnya bahwa contoh kecil di atas dengan / dev / console menunjukkan cara kerja konsol sebenarnya. 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, memungkinkan untuk mencari melalui 
mereka .
Sistem yang familier seperti ext4, NFS, dan / proc memiliki tiga fungsi penting dalam struktur data C yang disebut 
operasi file_ . Selain itu, sistem file tertentu memperluas dan mendefinisikan kembali fungsi VFS dengan cara yang akrab, berorientasi objek. Seperti yang dicatat oleh Robert Love, abstraksi VFS memungkinkan pengguna Linux untuk menyalin file ke atau dari sistem operasi pihak ketiga atau entitas abstrak seperti pipa, tanpa khawatir tentang format data internal mereka. Di sisi pengguna (userspace), menggunakan panggilan sistem, suatu proses dapat menyalin dari file ke struktur data kernel menggunakan metode 
read() dari satu sistem file, dan kemudian menggunakan metode 
write() dari sistem file lain untuk menghasilkan data.
Definisi fungsi yang termasuk dalam tipe VFS dasar ditemukan dalam file 
fs / *. C dari sumber kernel, sedangkan 
fs/ subdirektori berisi sistem file tertentu. Kernel juga berisi entitas, seperti 
cgroups , 
/dev dan 
tmpfs , yang diperlukan selama proses boot dan oleh karena itu didefinisikan dalam subdirektori 
init/ kernel. Perhatikan bahwa 
cgroups , 
/dev dan 
tmpfs tidak memanggil fungsi Tiga Besar operasi 
file_operations , tetapi langsung membaca dan menulis ke memori.
Diagram di bawah ini menunjukkan bagaimana userspace mengakses berbagai jenis sistem file yang biasanya dipasang pada sistem Linux. Konstruksi seperti 
pipes , 
POSIX clocks dmesg dan 
POSIX clocks , yang juga menerapkan struktur 
file_operations , akses yang melewati lapisan VFS, tidak ditampilkan.

VFS adalah "lapisan shell" antara panggilan sistem dan implementasi 
procfs tertentu, seperti 
ext4 dan 
procfs . Fungsi 
file_operations dapat berinteraksi dengan driver perangkat atau perangkat akses memori. 
tmpfs , 
devtmpfs , dan 
cgroups tidak menggunakan 
cgroups , tetapi mengakses memori secara langsung.
Keberadaan VFS menyediakan kemampuan untuk menggunakan kembali kode, karena metode dasar yang terkait dengan sistem file tidak perlu diimplementasikan kembali oleh setiap jenis sistem file. Menggunakan kembali kode adalah praktik yang diterima secara luas untuk insinyur perangkat lunak! Namun, jika kode yang dapat digunakan kembali berisi 
kesalahan serius , semua implementasi yang mewarisi metode umum menderita karenanya.
/ tmp: Petunjuk sederhanaCara mudah untuk mendeteksi bahwa VFS hadir pada sistem adalah dengan memasukkan 
mount | grep -v sd | grep -v :/ mount | grep -v sd | grep -v :/ mount | grep -v sd | grep -v :/ , yang akan menampilkan semua sistem file yang dipasang yang tidak ada pada disk dan bukan NFS, yang berlaku pada sebagian besar komputer. Salah satu mount VFS yang tercantum di atas tidak diragukan lagi adalah 
/tmp , kan?

Semua orang tahu bahwa menyimpan 
/tmp pada media fisik itu gila! 
SumberMengapa menyimpan 
/tmp di media fisik tidak diinginkan? Karena file di 
/tmp bersifat sementara dan perangkat penyimpanan lebih lambat daripada memori tempat tmpfs dibuat. Selain itu, media fisik lebih rentan untuk menimpa keausan daripada memori. Akhirnya, file-file di / tmp mungkin berisi informasi sensitif, sehingga hilangnya mereka dengan setiap reboot adalah fungsi yang tidak terpisahkan.
Sayangnya, beberapa skrip instalasi distribusi Linux membuat / tmp pada perangkat penyimpanan default. Jangan putus asa jika ini terjadi pada sistem Anda. Ikuti beberapa instruksi sederhana dari 
Arch Wiki untuk memperbaikinya, dan ingat bahwa memori yang dialokasikan untuk 
tmpfs menjadi tidak dapat diakses untuk keperluan 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 boot.
/ proc dan / sysSelain 
/tmp , VFS (sistem file virtual) yang paling dikenal pengguna Linux adalah 
/proc dan 
/sys . ( 
/dev terletak di memori bersama dan tidak memiliki 
file_operations ). Mengapa persis dua komponen ini? Mari kita bahas masalah ini.
procfs mengambil snapshot dari kernel dan proses yang 
procfs untuk 
userspace . Di 
/proc kernel menampilkan informasi tentang alat apa yang dimilikinya, misalnya, interupsi, memori virtual, dan penjadwal. Selain itu, 
/proc/sys adalah tempat di mana opsi yang dikonfigurasikan dengan perintah 
sysctl tersedia untuk 
userspace . Status dan statistik masing-masing proses ditampilkan di direktori 
/proc/ .

Di sini 
/proc/meminfo adalah file kosong yang tetap mengandung informasi berharga.
Perilaku file 
/proc menunjukkan bagaimana sistem file disk VFS berbeda. Di satu sisi, 
/proc/meminfo berisi informasi yang dapat dilihat dengan perintah 
free . Di sisi lain, itu kosong di sana! Bagaimana itu? Situasinya menyerupai sebuah artikel terkenal yang berjudul, 
"Apakah bulan ada ketika tidak ada yang melihatnya?" Teori Realitas dan Kuantum, ” ditulis oleh profesor fisika Universitas Cornell David Mermin pada tahun 1985. Faktanya adalah bahwa kernel mengumpulkan statistik memori ketika permintaan dibuat ke 
/proc , dan pada kenyataannya tidak ada dalam file 
/proc ketika tidak ada yang melihat ke sana. Seperti yang dikatakan 
Mermin , "Doktrin kuantum mendasar menyatakan bahwa pengukuran, sebagai suatu peraturan, tidak mengungkapkan nilai yang sudah ada sebelumnya dari properti yang diukur." (Pikirkan pertanyaan bulan sebagai pekerjaan rumah!)
Kekosongan yang tampak dari akal masuk akal, karena informasi di sana dinamis. Situasi yang sedikit berbeda dengan 
sysfs . Mari kita bandingkan berapa banyak file setidaknya satu byte di 
/proc dan 
/sys .

Procfs memiliki satu file, yaitu konfigurasi kernel yang diekspor, yang merupakan pengecualian karena hanya perlu dihasilkan satu kali per boot. 
/sys di sisi lain, mengandung lebih banyak file yang banyak, banyak di antaranya menempati seluruh halaman memori. Biasanya, file 
sysfs persis mengandung satu angka atau baris, tidak seperti tabel informasi yang diperoleh dengan membaca file seperti 
/proc/meminfo .
Tujuan dari 
sysfs adalah untuk menyediakan properti yang 
«kobjects» dibaca dan 
«kobjects» dari apa yang disebut kernel 
«kobjects» di userspace. Satu-satunya tujuan 
kobjects adalah untuk menghitung tautan: ketika tautan terakhir ke kobject dihapus, sistem akan mengembalikan sumber daya yang terkait dengannya. Namun, 
/sys membuat sebagian besar kernel 
"stable ABI for userspace" yang terkenal , yang tidak dapat 
dipecahkan oleh siapa pun, dalam keadaan apa pun. Ini tidak berarti bahwa file dalam sysfs adalah statis, yang akan bertentangan dengan penghitungan tautan ke objek yang tidak stabil.
Antarmuka aplikasi kernel yang stabil (ABI stable kernel) membatasi apa yang mungkin muncul di 
/sys , bukan apa yang sebenarnya ada pada saat ini. Mendaftarkan izin file di sysfs memberikan pemahaman tentang bagaimana pengaturan yang dapat dikonfigurasi untuk perangkat, modul, sistem file, dll. dapat disesuaikan atau dibaca. Kami menyimpulkan bahwa procfs juga merupakan bagian dari kernel ABI yang stabil, meskipun ini tidak secara eksplisit dinyatakan dalam 
dokumentasi .

File dalam 
sysfs menggambarkan satu properti spesifik untuk setiap entitas dan dapat dibaca, ditulis ulang, atau keduanya sekaligus. "0" dalam file menunjukkan bahwa SSD tidak dapat dihapus.
Kami memulai bagian 
kedua dari terjemahan dengan cara mengamati VFS menggunakan alat eBPF dan bcc, dan sekarang kami menunggu komentar Anda dan secara tradisional mengundang Anda ke 
webinar terbuka , yang akan diadakan oleh guru kami 
Vladimir Drozdetsky pada 9 April.
Bagian kedua.