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.