Sistem file virtual dina Linux: naha aranjeunna diperyogikeun sareng kumaha jalanna? Bagian 1

Halo sadayana! Kami terus ngaluncurkeun aliran anyar pikeun kursus-kursus anu anjeun parantos resep sareng ayeuna urang buru-buru ngumumkeun yén kami ngamimitian sét kursus-kursus anyar. "Linux Administrator"anu bakal diluncurkeun dina ahir April. A publikasi anyar bakal tanggal pikeun acara ieu. Kalayan bahan aslina, anjeun tiasa baca di dieu.

Sistem file maya dianggo salaku jenis abstraksi magis anu ngamungkinkeun filsafat Linux nyarios yén "sagala mangrupikeun file."

Sistem file virtual dina Linux: naha aranjeunna diperyogikeun sareng kumaha jalanna? Bagian 1

Naon sistem file? Dumasar kana kecap salah sahiji kontributor munggaran sareng pangarang Linux Roberta Lava, "Sistem file nyaéta panyimpen hirarki data anu dirakit dumasar kana struktur anu khusus." Janten, definisi ieu sami-sami cocog sareng VFAT (Virtual File Allocation Table), Git sareng Cassandra (pangkalan data NoSQL). Janten naon anu leres-leres ngahartikeun hal sapertos "sistem file"?

Dasar Filesystem

Kernel Linux gaduh sarat anu tangtu pikeun éntitas anu tiasa dianggap sistem file. Eta kudu nerapkeun métode open(), read() и write() pikeun objék pengkuh nu boga ngaran. Tina sudut pandang anu berorientasi obyék pamrograman, kernel ngahartikeun filesystem generik salaku antarbeungeut abstrak, sarta tilu fungsi badag ieu dianggap "virtual" jeung teu boga harti konkret. Sasuai, palaksanaan sistem file standar disebut sistem file virtual (VFS).

Sistem file virtual dina Linux: naha aranjeunna diperyogikeun sareng kumaha jalanna? Bagian 1

Upami urang tiasa muka, maca, sareng nyerat ka éntitas, éntitas éta dianggap file, sakumaha anu urang tingali tina conto dina konsol di luhur.
Fenomena VFS ngan ukur negeskeun observasi sapertos Unix yén "sadayana mangrupikeun file". Pikirkeun kumaha anéh yén conto leutik / dev / konsol di luhur nunjukkeun kumaha konsolna leres-leres jalanna. Gambar nunjukkeun sési Bash interaktif. Ngirim string ka konsol (alat konsol virtual) mintonkeun eta dina layar virtual. VFS boga séjén, malah sipat muhrim. Salaku conto, éta ngamungkinkeun anjeun milarian ku ku anjeunna.

Sistem anu biasa sapertos ext4, NFS, sareng /proc gaduh tilu fungsi penting dina struktur data C anu disebut. file_operations. Salaku tambahan, sistem file tangtu ngalegaan sareng ngadefinisikeun deui fungsionalitas VFS dina cara berorientasi obyék anu akrab. Sakumaha anu ditunjukkeun ku Robert Love, abstraksi VFS ngamungkinkeun pangguna Linux pikeun nyalin file ka atanapi tina sistem operasi pihak katilu atanapi éntitas abstrak sapertos pipa tanpa hariwang ngeunaan format data internalna. Di sisi pamaké (spasi pamaké), ngagunakeun panggero sistem, prosés bisa nyalin tina file kana struktur data kernel ngagunakeun métode. read() hiji sistem file lajeng nganggo metodeu write () sistem file sejen pikeun kaluaran data.

Definisi fungsi anu kalebet kana jinis dasar VFS aya dina file fs/*.c kode sumber kernel, sedengkeun subdirectories fs/ ngandung sistem file tangtu. Inti ogé ngandung éntitas sapertos cgroups, /dev и tmpfs, nu diperlukeun salila prosés boot sahingga dihartikeun dina subdirectory kernel init/. Perhatikeun éta cgroups, /dev и tmpfs ulah nelepon "tilu badag" fungsi file_operations, tapi langsung maca jeung nulis ka memori.
Diagram di handap ieu nunjukkeun kumaha ruang pangguna ngaksés sababaraha jinis sistem file anu biasa dipasang dina sistem Linux. Struktur teu ditémbongkeun pipes, dmesg и POSIX clocks, anu ogé ngalaksanakeun struktur file_operations, diaksés ngaliwatan lapisan VFS.

Sistem file virtual dina Linux: naha aranjeunna diperyogikeun sareng kumaha jalanna? Bagian 1

VFS mangrupakeun "lapisan wrapper" antara panggero sistem jeung palaksanaan tinangtu file_operationssapertos ext4 и procfs. Fungsi file_operations tiasa berinteraksi sareng supir alat atanapi alat aksés memori. tmpfs, devtmpfs и cgroups teu make file_operations, tapi langsung ngaksés mémori.
Ayana VFS nyadiakeun kasempetan pikeun make deui kode, sabab métode dasar pakait sareng sistem file teu kudu ulang dilaksanakeun ku unggal tipe sistem file. Paké deui kode mangrupikeun prakték umum di kalangan insinyur parangkat lunak! Sanajan kitu, lamun kode reusable ngandung kasalahan serius, Sadaya palaksanaan anu ngawariskeun metodeu umum ngalaman aranjeunna.

/tmp: pitunjuk basajan

Cara anu gampang pikeun ngadeteksi yén VFS aya dina sistem nyaéta ngetik mount | grep -v sd | grep -v :/, anu bakal nunjukkeun sadaya anu dipasang (mounted) sistem file nu teu disk-nyicingan jeung non-NFS, nu bener dina kalolobaan komputer. Salah sahiji mounts didaptarkeun (mounts) VFS bakal undoubtedly /tmp, leres?

Sistem file virtual dina Linux: naha aranjeunna diperyogikeun sareng kumaha jalanna? Bagian 1

Sarerea weruh yén gudang / tmp dina medium fisik - madness! sumber.

Naha teu pikaresepeun pikeun nyimpen /tmp dina média fisik? Kusabab file di /tmp samentara sareng alat panyimpen langkung laun tibatan mémori dimana tmpfs didamel. Leuwih ti éta, média fisik leuwih rentan mun maké nalika overwritten ti memori. Tungtungna, file dina /tmp tiasa ngandung inpormasi sénsitip, janten ngaleungit dina unggal reboot mangrupikeun fitur anu penting.

Hanjakalna, sababaraha skrip pamasangan distribusi Linux nyiptakeun /tmp dina alat panyimpen sacara standar. Entong hariwang upami ieu ogé kajantenan ka sistem anjeun. Turutan sababaraha parentah basajan kalawan Arch Wiktionarypikeun ngalereskeun ieu, sarta jadi sadar yen memori disadiakeun pikeun tmpfs janten teu sadia pikeun tujuan séjén. Dina basa sejen, sistem kalawan tmpfs raksasa sarta file badag dina eta bisa kaluar tina mémori jeung kacilakaan. Petunjuk sanésna: nalika ngédit file /etc/fstab, Inget yen eta kudu ditungtungan ku newline a, disebutkeun sistem Anjeun moal boot.

/proc jeung /sys

sajaba ti /tmp, VFS (sistem file virtual) anu paling akrab pikeun pangguna Linux nyaéta /proc и /sys. (/dev resides dina memori dibagikeun jeung teu boga file_operations). Naha dua komponén ieu? Hayu urang nalungtik masalah ieu.

procfs nyiptakeun snapshot tina kernel sareng prosés anu dipantau userspace. The /proc kernel nyitak inpormasi ngeunaan naon anu sayogi, sapertos interrupts, mémori virtual, sareng jadwal. Salian ti éta, /proc/sys nyaeta tempat dimana parameter ngonpigurasi kalawan paréntah sysctl, sadia pikeun userspace. Status sareng statistik prosés individu dipintonkeun dina diréktori /proc/.

Sistem file virtual dina Linux: naha aranjeunna diperyogikeun sareng kumaha jalanna? Bagian 1

Ieu téh /proc/meminfo mangrupa file kosong nu tapi ngandung émbaran berharga.

tingkah laku /proc file nembongkeun sabaraha béda sistem file disk VFS tiasa. Di hiji sisi, /proc/meminfo ngandung inpormasi anu tiasa ditingali kalayan paréntah free. Di sisi séjén, éta kosong! Kumaha jalanna? Kaayaan ieu reminiscent tina artikel kawentar judulna Naha bulan aya nalika teu aya anu ningali? Realitas sareng Teori Kuantum"Ditulis ku profésor fisika Universitas Cornell David Mermin dina 1985. Kanyataan yén kernel ngumpulkeun statistik memori nalika pamundut dijieun pikeun /proc, sarta sabenerna dina file /proc aya nanaon lamun euweuh nu pilari. Sakumaha ceuk Mermin, "Doktrin kuantum Fundamental nyebutkeun yén pangukuran umumna teu nembongkeun hiji nilai pre-aya tina sipat keur diukur." (Sareng anggap patarosan ngeunaan bulan salaku PR!)
Semu kosong procfs asup akal sabab informasi aya dinamis. Hiji kaayaan rada béda jeung sysfs. Hayu urang bandingkeun sabaraha file anu ukuranna sahenteuna hiji bait /proc jeung /sys.

Sistem file virtual dina Linux: naha aranjeunna diperyogikeun sareng kumaha jalanna? Bagian 1

Procfs gaduh hiji file, nyaéta konfigurasi kernel anu diékspor, anu mangrupikeun pengecualian sabab ngan ukur kedah dibangkitkeun sakali per boot. Di sisi séjén, di /sys aya loba file nu leuwih gede, loba nu nyokot hiji sakabéh kaca memori. Biasana file sysfs ngandung persis hiji angka atawa garis, teu kawas tabel informasi diala tina maca file kayaning /proc/meminfo.

tujuan sysfs - nyadiakeun maca / nulis sipat naon nelepon kernel «kobjects» dina rohangan pamaké. Hiji-hijina tujuan kobjects nyaeta link cacah: lamun link panungtungan pikeun kobject a dihapus, Sistim bakal mulangkeun sumberdaya pakait sareng eta. Sanajan kitu, /sys ngajadikeun paling kawentar "ABI stabil pikeun ruang pangguna" inti, nu teu saurang ogé bisa kantos, dina kaayaan naon "break". Ieu lain hartosna yén file dina sysfs statik, nu bakal inconsistent jeung rujukan cacah objék stabil.
ABI stabil kernel ngabatesan naon anu tiasa muncul /sys, teu naon sabenerna hadir dina momen nu tangtu. Listing idin file dina sysfs nyadiakeun wawasan kumaha setelan configurable pikeun alat, modul, filesystems, jsb. bisa dikonpigurasikeun atawa dibaca. Kacindekan logis nyaéta procfs ogé bagian tina ABI stabil kernel, sanajan ieu teu sacara eksplisit dinyatakeun dina dokuméntasi.

Sistem file virtual dina Linux: naha aranjeunna diperyogikeun sareng kumaha jalanna? Bagian 1

Berkas di sysfs ngajelaskeun hiji sipat husus pikeun tiap éntitas sarta bisa dibaca, ditulis, atawa duanana. "0" dina file hartina SSD teu bisa dihapus.

Hayu urang mimitian bagian kadua tarjamahan ku cara ngawas VFS nganggo alat eBPF sareng bcc, sareng ayeuna urang ngantosan koméntar anjeun sareng sacara tradisional ngajak anjeun muka webinar, anu bakal dilaksanakeun ku guru urang dina 9 April - Vladimir Drozdetsky.

sumber: www.habr.com

Tambahkeun komentar