Sistemi ta 'fajls virtwali fil-Linux: għaliex huma meħtieġa u kif jaħdmu? Parti 1

Hi kollha! Inkomplu nniedu streams ġodda għall-korsijiet li diġà tħobbhom u issa aħna mgħaġġlin inħabbru li qed nibdew sett ġdid ta’ korsijiet "Amministratur tal-Linux"li se tniedi fl-a[[ar ta’ April. Pubblikazzjoni ġdida se tkun datata għal dan l-avveniment. Bil-materjal oriġinali, tista ' aqra hawn.

Sistemi ta 'fajls virtwali jservu bħala tip ta' astrazzjoni maġika li tippermetti lill-filosofija tal-Linux tgħid li "kollox huwa fajl."

Sistemi ta 'fajls virtwali fil-Linux: għaliex huma meħtieġa u kif jaħdmu? Parti 1

X'inhi sistema ta' fajls? Ibbażat fuq il-kliem ta 'wieħed mill-ewwel kontributuri u awturi ta' Linux Roberta Lava, "Sistema ta 'fajls hija ħażna ġerarkika ta' data immuntata skond struttura speċifika." Tkun kif tkun, din id-definizzjoni hija ugwalment adattata għal VFAT (Virtual File Allocation Table), Git u Cassandra (database NoSQL). Allura x'jiddefinixxi eżattament tali ħaġa bħala "sistema ta 'fajls"?

Bażi tas-sistema tal-fajls

Il-kernel tal-Linux għandu ċerti rekwiżiti għal entità li tista 'titqies bħala sistema ta' fajls. Għandu jimplimenta l-metodi open(), read() и write() għal oġġetti persistenti li għandhom ismijiet. Minn perspettiva orjentata lejn l-oġġetti programmazzjoni, il-kernel jiddefinixxi sistema ta 'fajls ġenerika bħala interface astratt, u dawn it-tliet funzjonijiet kbar huma kkunsidrati "virtwali" u m'għandhom l-ebda definizzjoni konkreta. Għaldaqstant, l-implimentazzjoni default tas-sistema tal-fajl tissejjaħ sistema ta 'fajls virtwali (VFS).

Sistemi ta 'fajls virtwali fil-Linux: għaliex huma meħtieġa u kif jaħdmu? Parti 1

Jekk nistgħu niftħu, naqraw u niktbu lil entità, allura dik l-entità titqies bħala fajl, kif nistgħu naraw mill-eżempju fil-console hawn fuq.
Il-fenomenu VFS jenfasizza biss l-osservazzjoni bħal Unix li "kollox huwa fajl". Aħseb kemm stramb li dak l-eżempju żgħir /dev/console hawn fuq juri kif il-console fil-fatt taħdem. L-istampa turi sessjoni Bash interattiva. Li tibgħat string lill-console (apparat tal-console virtwali) juriha fuq skrin virtwali. Il-VFS għandu proprjetajiet oħra, saħansitra barranin. Pereżempju, jippermettilek tfittex minn minnu.

Sistemi familjari bħal ext4, NFS, u / proc għandhom tliet funzjonijiet importanti fi struttura tad-dejta C imsejħa file_operations. Barra minn hekk, ċerti sistemi ta 'fajls jestendu u jiddefinixxu mill-ġdid il-funzjonalità tal-VFS b'mod familjari orjentat lejn l-oġġetti. Kif jindika Robert Love, l-estrazzjoni tal-VFS tippermetti lill-utenti tal-Linux jikkupjaw fajls b'mod nonchalant lejn jew minn sistemi operattivi ta 'partijiet terzi jew entitajiet astratti bħal pajpijiet mingħajr ma joqogħdu jinkwetaw dwar il-format intern tad-dejta tagħhom. Min-naħa tal-utent (spazju tal-utent), bl-użu ta’ sejħa tas-sistema, proċess jista’ jikkopja minn fajl għal strutturi tad-dejta tal-kernel bl-użu tal-metodu read() sistema ta 'fajls waħda u mbagħad uża l-metodu write () sistema oħra ta 'fajls għall-output tad-data.

Id-definizzjonijiet tal-funzjoni li jappartjenu għat-tipi bażi VFS huma fil-fajls fs/*.c kodiċi tas-sors tal-kernel, filwaqt li subdirettorji fs/ fihom ċerti sistemi ta’ fajls. Il-qalba fiha wkoll entitajiet bħal cgroups, /dev и tmpfs, li huma meħtieġa matul il-proċess tal-ibbutjar u għalhekk huma definiti fis-subdirettorju tal-kernel init/. Avviż li cgroups, /dev и tmpfs issejjaħx il-funzjonijiet "tlieta kbar". file_operations, iżda direttament aqra u tikteb fil-memorja.
Id-dijagramma t'hawn taħt turi kif l-ispazju tal-utent jaċċessa t-tipi differenti ta 'sistemi ta' fajls komunement mmuntati fuq sistemi Linux. Strutturi mhux murija pipes, dmesg и POSIX clocks, li jimplimentaw ukoll l-istruttura file_operations, aċċessata permezz tas-saff VFS.

Sistemi ta 'fajls virtwali fil-Linux: għaliex huma meħtieġa u kif jaħdmu? Parti 1

VFS huwa "wrapper saff" bejn is-sejħiet tas-sistema u l-implimentazzjonijiet ta 'ċerti file_operationsbħal ext4 и procfs. Funzjonijiet file_operations jistgħu jinteraġixxu jew ma 'sewwieqa ta' apparat jew tagħmir ta 'aċċess għall-memorja. tmpfs, devtmpfs и cgroups tużax file_operations, iżda aċċess direttament għall-memorja.
L-eżistenza ta' VFS tipprovdi opportunità biex jerġa' jintuża l-kodiċi, peress li l-metodi bażiċi assoċjati mas-sistemi ta' fajls m'għandhomx għalfejn jerġgħu jiġu implimentati minn kull tip ta' sistema ta' fajls. L-użu mill-ġdid tal-kodiċi huwa prattika komuni fost l-inġiniera tas-softwer! Madankollu, jekk il-kodiċi li jista 'jerġa' jintuża fih żbalji serji, l-implimentazzjonijiet kollha li jirtu metodi komuni jbatu minnhom.

/tmp: Ħjiel sempliċi

Mod faċli biex tiskopri li VFS huma preżenti fuq sistema huwa li tittajpja mount | grep -v sd | grep -v :/, li se turi kollha mmuntati (mounted) sistemi ta' fajls li mhumiex residenti fid-disk u mhux NFS, li huwa minnu fil-biċċa l-kbira tal-kompjuters. Wieħed mill-muntaturi elenkati (mounts) VFS bla dubju se /tmp, hux?

Sistemi ta 'fajls virtwali fil-Linux: għaliex huma meħtieġa u kif jaħdmu? Parti 1

Kulħadd jaf dak il-ħażna / tmp fuq mezz fiżiku - ġenn! Sors.

Għaliex mhux mixtieq li tinħażen /tmp fuq il-midja fiżika? Minħabba li l-fajls fil /tmp huma temporanji u l-apparati tal-ħażna huma aktar bil-mod mill-memorja fejn tinħoloq tmpfs. Barra minn hekk, il-midja fiżika hija aktar suxxettibbli li tintlibes meta tinkiteb mill-ġdid mill-memorja. Fl-aħħarnett, fajls f'/tmp jista 'jkun fihom informazzjoni sensittiva, għalhekk li jagħmluhom jisparixxu f'kull reboot hija karatteristika essenzjali.

Sfortunatament, xi skripts ta 'installazzjoni tad-distribuzzjoni Linux joħolqu /tmp fuq l-apparat tal-ħażna b'mod awtomatiku. Taqtax qalbek jekk dan ġara lis-sistema tiegħek ukoll. Segwi ftit istruzzjonijiet sempliċi ma Arch Wikibiex tiffissa dan, u tkun konxju li l-memorja allokata għall tmpfs isir mhux disponibbli għal skopijiet oħra. Fi kliem ieħor, sistema b'tmpfs ġgant u fajls kbar fuqha tista' tispiċċa mingħajr memorja u tiġġarraf. Ħjiel ieħor: waqt li teditja fajl /etc/fstab, ftakar li trid tispiċċa b'linja ġdida, inkella s-sistema tiegħek ma tibbotjax.

/proc u /sys

Minbarra /tmp, VFS (sistemi ta 'fajls virtwali) li huma l-aktar familjari għall-utenti Linux huma /proc и /sys. (/dev jirrisjedi f'memorja kondiviża u m'għandux file_operations). Għaliex dawn iż-żewġ komponenti? Ejja nħarsu lejn din il-kwistjoni.

procfs joħloq stampa tal-qalba u l-proċessi li jimmonitorja għalihom userspace. Fil /proc il-kernel jistampa informazzjoni dwar dak li għandu disponibbli, bħal interruzzjonijiet, memorja virtwali, u l-iskedar. Barra minn hekk, /proc/sys huwa l-post fejn il-parametri kkonfigurati bil-kmand sysctl, disponibbli għal userspace. L-istatus u l-istatistika tal-proċessi individwali jintwerew fid-direttorji /proc/.

Sistemi ta 'fajls virtwali fil-Linux: għaliex huma meħtieġa u kif jaħdmu? Parti 1

Hawnhekk /proc/meminfo huwa fajl vojt li madankollu fih informazzjoni siewja.

Imġieba /proc fajls juri kemm is-sistemi tal-fajls tad-disk VFS jistgħu jkunu differenti. Fuq naħa waħda, /proc/meminfo ikun fihom informazzjoni li tista’ tara mal-kmand free. Min-naħa l-oħra, huwa vojt! Kif taħdem? Is-sitwazzjoni hija reminixxenti tal-artiklu famuż intitolat Il-qamar jeżisti meta ħadd ma jkun qed iħares lejh? Ir-Realtà u t-Teorija Quantum"miktub mill-professur tal-fiżika tal-Università ta’ Cornell David Mermin fl-1985. Il-fatt hu li l-kernel jiġbor statistika tal-memorja meta ssir talba /proc, u fil-fatt fil-fajls /proc m'hemm xejn meta ħadd ma jkun qed iħares. Kif intqal Mermin, "Id-duttrina quantum fundamentali tgħid li l-kejl ġeneralment ma jiżvelax valur pre-eżistenti tal-proprjetà li qed titkejjel." (U ikkunsidra l-mistoqsija dwar il-qamar bħala xogħol tad-dar!)
Jidher vojt procfs jagħmel sens għaliex l-informazzjoni hemm hija dinamika. Sitwazzjoni kemmxejn differenti ma sysfs. Ejja nqabblu kemm hemm fajls li għandhom daqs mill-inqas byte wieħed /proc u /sys.

Sistemi ta 'fajls virtwali fil-Linux: għaliex huma meħtieġa u kif jaħdmu? Parti 1

Procfs għandu fajl wieħed, jiġifieri l-konfigurazzjoni tal-qalba esportata, li hija eċċezzjoni għaliex jeħtieġ li tiġi ġġenerata biss darba għal kull boot. Min-naħa l-oħra, fil /sys hemm ħafna fajls akbar, li ħafna minnhom jieħdu paġna sħiħa tal-memorja. Normalment fajls sysfs fihom eżattament numru jew linja waħda, b'differenza tabelli ta 'informazzjoni miksuba mill-qari ta' fajls bħal /proc/meminfo.

Goal sysfs - jipprovdu proprjetajiet ta 'qari/kitba ta' dak li jsejjaħ il-kernel «kobjects» fl-ispazju tal-utent. L-uniku għan kobjects huwa l-għadd tal-links: meta titneħħa l-aħħar link għal kobject, is-sistema tirrestawra r-riżorsi assoċjati magħha. Madankollu, /sys jagħmel ħafna mill-famużi "ABI stabbli għall-ispazju tal-utent" qalba, li ħadd ma jista’ qatt, taħt l-ebda ċirkostanza "waqfa". Dan ma jfissirx li l-fajls fis-sysfs huma statiċi, li jkun inkonsistenti mal-għadd ta 'referenza ta' oġġetti instabbli.
L-ABI stabbli tal-qalba jillimita dak li jista' jidher fih /sys, mhux dak li huwa attwalment preżenti f'dak il-mument partikolari. L-elenkar tal-permessi tal-fajls fis-sysfs jipprovdi għarfien dwar kif is-settings konfigurabbli għal apparati, moduli, sistemi ta 'fajls, eċċ. jistgħu jiġu kkonfigurati jew jinqraw. Il-konklużjoni loġika hija li procfs hija wkoll parti mill-ABI stabbli tal-qalba, għalkemm dan mhux iddikjarat b'mod espliċitu f' dokumentazzjoni.

Sistemi ta 'fajls virtwali fil-Linux: għaliex huma meħtieġa u kif jaħdmu? Parti 1

Fajls fil sysfs iddeskrivi proprjetà partikolari waħda għal kull entità u tista’ tinqara, tinkiteb, jew it-tnejn. "0" fil-fajl ifisser li l-SSD ma jistax jitneħħa.

Ejja nibdew it-tieni parti tat-traduzzjoni b'kif timmonitorja l-VFS billi tuża l-għodod eBPF u bcc, u issa qed nistennew il-kummenti tiegħek u tradizzjonalment nistiednuk biex webinar miftuħ, li se ssir mill-għalliema tagħna fid-9 ta’ April - Vladimir Drozdetsky.

Sors: www.habr.com

Żid kumment