Virtuele lêerstelsels in Linux: hoekom is dit nodig en hoe werk dit? Deel 1

Hi almal! Ons gaan voort om nuwe strome bekend te stel vir die kursusse waarop jy reeds verlief geraak het en nou is ons haastig om aan te kondig dat ons 'n nuwe stel kursusse begin "Linux Administrateur"wat aan die einde van April bekendgestel word. 'n Nuwe publikasie sal vir hierdie geleentheid gedateer word. Met die oorspronklike materiaal kan jy lees hier.

Virtuele lêerstelsels dien as 'n soort magiese abstraksie wat die filosofie van Linux toelaat om te sê dat "alles 'n lêer is."

Virtuele lêerstelsels in Linux: hoekom is dit nodig en hoe werk dit? Deel 1

Wat is 'n lêerstelsel? Gebaseer op die woorde van een van die eerste bydraers en skrywers van Linux Roberta Lava, "'n Lêerstelsel is 'n hiërargiese berging van data wat volgens 'n spesifieke struktuur saamgestel is." Hoe dit ook al sy, hierdie definisie is ewe goed geskik vir VFAT (Virtual File Allocation Table), Git en Cassandra (NoSQL databasis). So, wat presies definieer so iets as 'n "lêerstelsel"?

Lêerstelsel basiese beginsels

Die Linux-kern het sekere vereistes vir 'n entiteit wat as 'n lêerstelsel beskou kan word. Dit moet die metodes implementeer open(), read() и write() vir aanhoudende voorwerpe wat name het. Vanuit 'n objekgeoriënteerde oogpunt Programmering, die kern definieer 'n generiese lêerstelsel as 'n abstrakte koppelvlak, en hierdie drie groot funksies word as "virtueel" beskou en het geen konkrete definisie nie. Gevolglik word die standaard lêerstelselimplementering 'n virtuele lêerstelsel (VFS) genoem.

Virtuele lêerstelsels in Linux: hoekom is dit nodig en hoe werk dit? Deel 1

As ons 'n entiteit kan oopmaak, lees en skryf, dan word daardie entiteit as 'n lêer beskou, soos ons kan sien uit die voorbeeld in die konsole hierbo.
Die VFS-verskynsel onderstreep net die Unix-agtige waarneming dat "alles 'n lêer is". Dink hoe vreemd dat daardie klein /dev/console-voorbeeld hierbo wys hoe die konsole eintlik werk. Die foto wys 'n interaktiewe Bash-sessie. Deur 'n string na die konsole (virtuele konsole-toestel) te stuur, word dit op 'n virtuele skerm vertoon. VFS het ander, selfs vreemder eienskappe. Dit laat jou byvoorbeeld toe om deur te soek deur hom.

Bekende stelsels soos ext4, NFS en /proc het drie belangrike funksies in 'n C-datastruktuur genaamd lêer_operasies. Daarbenewens brei en herdefinieer sekere lêerstelsels VFS-funksionaliteit op 'n bekende objekgeoriënteerde manier. Soos Robert Love uitwys, laat die VFS-abstraksie Linux-gebruikers toe om lêers nonchalant na of van derdeparty-bedryfstelsels of abstrakte entiteite soos pype te kopieer sonder om bekommerd te wees oor hul interne dataformaat. Aan die gebruikerskant (gebruikersruimte), met behulp van 'n stelseloproep, kan 'n proses van 'n lêer na kerndatastrukture kopieer deur gebruik te maak van die metode read() een lêerstelsel en gebruik dan die metode write () 'n ander lêerstelsel vir data-uitvoer.

Die funksiedefinisies wat aan die basis VFS-tipes behoort, is in die lêers fs/*.c kernbronkode, terwyl subgidse fs/ sekere lêerstelsels bevat. Die kern bevat ook entiteite soos cgroups, /dev и tmpfs, wat tydens die selflaaiproses benodig word en dus in die kernsubgids gedefinieer word init/. Neem waar dat cgroups, /dev и tmpfs moenie die "groot drie" funksies noem nie file_operations, maar direk lees en skryf na die geheue.
Die diagram hieronder wys hoe gebruikersruimte toegang verkry tot die verskillende tipes lêerstelsels wat algemeen op Linux-stelsels gemonteer word. Strukture nie getoon nie pipes, dmesg и POSIX clocks, wat ook die struktuur implementeer file_operations, verkry deur die VFS-laag.

Virtuele lêerstelsels in Linux: hoekom is dit nodig en hoe werk dit? Deel 1

VFS is 'n "wrapper laag" tussen stelsel oproepe en implementering van sekere file_operationssoos ext4 и procfs. Funksies file_operations kan interaksie hê met óf toestelbestuurders óf geheuetoegangstoestelle. tmpfs, devtmpfs и cgroups Moenie gebruik nie file_operations, maar direk toegang tot die geheue.
Die bestaan ​​van VFS bied die vermoë om kode te hergebruik, aangesien die basiese metodes wat met lêerstelsels geassosieer word, nie deur elke tipe lêerstelsel hergeïmplementeer hoef te word nie. Kode hergebruik is 'n algemene praktyk onder sagteware-ingenieurs! As die herbruikbare kode egter bevat ernstige foute, alle implementerings wat algemene metodes erf, ly daaronder.

/tmp: Eenvoudige wenk

'n Maklike manier om op te spoor dat VFS op 'n stelsel teenwoordig is, is om te tik mount | grep -v sd | grep -v :/, wat alles gemonteer sal wys (mounted) lêerstelsels wat nie skyf-inwoner en nie-NFS is, wat waar is op die meeste rekenaars. Een van die gelyste monterings (mounts) VFS sal ongetwyfeld /tmp, reg?

Virtuele lêerstelsels in Linux: hoekom is dit nodig en hoe werk dit? Deel 1

Almal ken daardie stoorplek / tmp op 'n fisiese medium - waansin! Bron.

Hoekom is dit ongewens om te stoor /tmp op fisiese media? Omdat die lêers in /tmp is tydelik en stoortoestelle is stadiger as die geheue waar tmpfs geskep word. Daarbenewens is fisiese media meer geneig om slytasie te oorskryf as geheue. Laastens kan lêers in /tmp sensitiewe inligting bevat, so dit is 'n noodsaaklike kenmerk om hulle met elke herlaai te laat verdwyn.

Ongelukkig skep sommige Linux-verspreidingsinstallasieskrifte /tmp by verstek op die stoortoestel. Moenie moed verloor as dit ook met jou stelsel gebeur het nie. Volg 'n paar eenvoudige instruksies met Arch Wikiom dit reg te stel, en wees bewus daarvan dat die geheue wat vir tmpfs onbeskikbaar word vir ander doeleindes. Met ander woorde, 'n stelsel met 'n reuse-tmpfs en groot lêers daarop kan sonder geheue opraak en ineenstort. Nog 'n wenk: terwyl 'n lêer redigeer /etc/fstab, onthou dat dit met 'n nuwe reël moet eindig, anders sal jou stelsel nie selflaai nie.

/proc en /sys

Behalwe /tmp, VFS (virtuele lêerstelsels) wat die meeste bekend is aan Linux-gebruikers is /proc и /sys. (/dev woon in gedeelde geheue en het nie file_operations). Hoekom hierdie twee komponente? Kom ons kyk na hierdie kwessie.

procfs skep 'n momentopname van die kern en die prosesse waarvoor dit gemonitor word userspace. In /proc die kern druk inligting oor wat dit beskikbaar het, soos onderbrekings, virtuele geheue en die skeduleerder. Buitendien, /proc/sys is die plek waar die parameters gekonfigureer is met die opdrag sysctl, beskikbaar vir userspace. Die status en statistieke van individuele prosesse word in gidse vertoon /proc/.

Virtuele lêerstelsels in Linux: hoekom is dit nodig en hoe werk dit? Deel 1

Hier /proc/meminfo is 'n leë lêer wat nietemin waardevolle inligting bevat.

gedrag /proc lêers wys hoe verskillende VFS-skyflêerstelsels kan wees. Aan die een kant, /proc/meminfo inligting bevat wat met die opdrag bekyk kan word free. Aan die ander kant is dit leeg! Hoe werk dit? Die situasie herinner aan die bekende artikel getiteld Bestaan ​​die maan as niemand daarna kyk nie? Werklikheid en kwantumteorie"geskryf deur Cornell Universiteit fisika professor David Mermin in 1985. Die feit is dat die kern geheuestatistieke insamel wanneer 'n versoek gerig word /proc, en eintlik in lêers /proc daar is niks as niemand kyk nie. Soos gesê Mermin, "Fundamentele kwantumleerstellings sê dat meting oor die algemeen nie 'n voorafbestaande waarde van die eiendom wat gemeet word openbaar nie." (En beskou die vraag oor die maan as huiswerk!)
Oënskynlike leegheid procfs maak sin omdat die inligting daar dinamies is. N effens ander situasie met sysfs. Kom ons vergelyk hoeveel lêers in is wat ten minste een greep groot is /proc en /sys.

Virtuele lêerstelsels in Linux: hoekom is dit nodig en hoe werk dit? Deel 1

Procfs het een lêer, naamlik die uitgevoerde kernkonfigurasie, wat 'n uitsondering is omdat dit net een keer per selflaai gegenereer hoef te word. Aan die ander kant, in /sys daar is baie groter lêers, waarvan baie 'n hele bladsy geheue in beslag neem. Gewoonlik lêers sysfs bevat presies een nommer of reël, anders as tabelle van inligting wat verkry word deur die lees van lêers soos /proc/meminfo.

Doel sysfs - verskaf lees/skryf eienskappe van wat die kern noem «kobjects» in gebruikersruimte. Die enigste doelwit kobjects is skakeltelling: wanneer die laaste skakel na 'n kobject verwyder word, sal die stelsel die hulpbronne wat daarmee geassosieer word, herstel. Nietemin, /sys maak die meeste van die bekendes uit "stabiele ABI vir gebruikersruimte" kern, wat niemand ooit, onder enige omstandighede kan nie "breek". Dit beteken nie dat lêers in sysfs staties is nie, wat teenstrydig sou wees met verwysingtelling van onstabiele voorwerpe.
Die kern se stabiele ABI beperk wat in kan verskyn /sys, nie wat werklik teenwoordig is op daardie spesifieke oomblik nie. Die lys van lêertoestemmings in sysfs bied insig in hoe konfigureerbare instellings vir toestelle, modules, lêerstelsels, ens. gekonfigureer of gelees kan word. Die logiese gevolgtrekking is dat procfs ook deel is van die kern se stabiele ABI, alhoewel dit nie uitdruklik in dokumentasie.

Virtuele lêerstelsels in Linux: hoekom is dit nodig en hoe werk dit? Deel 1

Lêers in sysfs beskryf een spesifieke eienskap vir elke entiteit en kan leesbaar, skryfbaar of albei wees. "0" in die lêer beteken dat die SSD nie verwyder kan word nie.

Kom ons begin die tweede deel van die vertaling met hoe om VFS te monitor deur die eBPF- en bcc-nutsmiddels te gebruik, en nou wag ons vir jou kommentaar en nooi ons jou tradisioneel om oop webinar, wat op 9 April deur ons onderwyser gehou word - Vladimir Drozdetsky.

Bron: will.com

Voeg 'n opmerking