Virtuele bestandssystemen in Linux: waarom zijn ze nodig en hoe werken ze? Deel 1

Dag Allemaal! We blijven nieuwe streams lanceren voor de cursussen waar je al verliefd op bent geworden en nu hebben we haast om aan te kondigen dat we een nieuwe reeks cursussen starten "Linux-beheerder"die eind april van start gaat. Een nieuwe publicatie zal worden gedateerd voor dit evenement. Met het originele materiaal kan dat lees hier.

Virtuele bestandssystemen dienen als een soort magische abstractie waardoor de filosofie van Linux kan zeggen dat "alles een bestand is".

Virtuele bestandssystemen in Linux: waarom zijn ze nodig en hoe werken ze? Deel 1

Wat is een bestandssysteem? Gebaseerd op de woorden van een van de eerste bijdragers en auteurs van Linux Robert Lava, "Een bestandssysteem is een hiërarchische opslag van gegevens die volgens een specifieke structuur zijn samengesteld." Hoe het ook zij, deze definitie is net zo geschikt voor VFAT (Virtual File Allocation Table), Git en Cassandra (NoSQL-database). Dus wat definieert zoiets als een "bestandssysteem" precies?

Basisprincipes van het bestandssysteem

De Linux-kernel heeft bepaalde vereisten voor een entiteit die als een bestandssysteem kan worden beschouwd. Het moet de methoden implementeren open(), read() и write() voor persistente objecten die namen hebben. Vanuit een objectgeoriënteerd oogpunt programmeren, definieert de kernel een generiek bestandssysteem als een abstracte interface, en deze drie grote functies worden als "virtueel" beschouwd en hebben geen concrete definitie. Dienovereenkomstig wordt de standaardimplementatie van het bestandssysteem een ​​virtueel bestandssysteem (VFS) genoemd.

Virtuele bestandssystemen in Linux: waarom zijn ze nodig en hoe werken ze? Deel 1

Als we een entiteit kunnen openen, lezen en naar een entiteit kunnen schrijven, wordt die entiteit als een bestand beschouwd, zoals we kunnen zien in het voorbeeld in de console hierboven.
Het VFS-fenomeen onderstreept alleen maar de Unix-achtige observatie dat "alles een bestand is". Bedenk eens hoe raar dat dat kleine /dev/console voorbeeld hierboven laat zien hoe de console eigenlijk werkt. De afbeelding toont een interactieve Bash-sessie. Door een tekenreeks naar de console (virtueel consoleapparaat) te sturen, wordt deze op een virtueel scherm weergegeven. VFS heeft andere, nog vreemdere eigenschappen. Hiermee kunt u bijvoorbeeld zoeken op zij.

Bekende systemen zoals ext4, NFS en /proc hebben drie belangrijke functies in een C datastructuur genaamd bestand_operaties. Bovendien breiden bepaalde bestandssystemen de VFS-functionaliteit uit en herdefiniëren deze op een bekende objectgeoriënteerde manier. Zoals Robert Love opmerkt, stelt de VFS-abstractie Linux-gebruikers in staat om nonchalant bestanden te kopiëren van of naar besturingssystemen van derden of abstracte entiteiten zoals pijpen zonder zich zorgen te hoeven maken over hun interne gegevensformaat. Aan de gebruikerskant (userspace) kan een proces met behulp van een systeemaanroep kopiëren van een bestand naar kernelgegevensstructuren met behulp van de methode read() één bestandssysteem en gebruik dan de methode write () een ander bestandssysteem voor gegevensuitvoer.

De functiedefinities die bij de basis VFS-typen horen, staan ​​in de bestanden fs/*.c kernel-broncode, terwijl subdirectories fs/ bevatten bepaalde bestandssystemen. De kern bevat ook entiteiten zoals cgroups, /dev и tmpfs, die vereist zijn tijdens het opstartproces en daarom worden gedefinieerd in de subdirectory kernel init/. Let erop dat cgroups, /dev и tmpfs noem niet de "grote drie" functies file_operations, maar direct lezen en schrijven naar het geheugen.
Het onderstaande diagram laat zien hoe de gebruikersruimte toegang krijgt tot de verschillende soorten bestandssystemen die gewoonlijk op Linux-systemen zijn gemonteerd. Constructies niet getoond pipes, dmesg и POSIX clocks, die ook de structuur implementeren file_operations, toegankelijk via de VFS-laag.

Virtuele bestandssystemen in Linux: waarom zijn ze nodig en hoe werken ze? Deel 1

VFS is een "omhullingslaag" tussen systeemaanroepen en implementaties van bepaalde file_operationsZoals ext4 и procfs. Functies file_operations kan communiceren met apparaatstuurprogramma's of apparaten voor geheugentoegang. tmpfs, devtmpfs и cgroups gebruik niet file_operations, maar direct toegang tot het geheugen.
Het bestaan ​​van VFS biedt de mogelijkheid om code opnieuw te gebruiken, aangezien de basismethoden die bij bestandssystemen horen niet door elk type bestandssysteem opnieuw hoeven te worden geïmplementeerd. Hergebruik van code is een gangbare praktijk onder software-engineers! Als de herbruikbare code echter bevat ernstige fouten, hebben alle implementaties die gemeenschappelijke methoden erven er last van.

/tmp: Eenvoudige hint

Een gemakkelijke manier om te detecteren dat VFS op een systeem aanwezig is, is door te typen mount | grep -v sd | grep -v :/, die alle gemonteerde (mounted) bestandssystemen die niet schijf-resident en niet-NFS zijn, wat op de meeste computers het geval is. Een van de vermelde mounts (mounts) VFS zal ongetwijfeld /tmp, Rechtsaf?

Virtuele bestandssystemen in Linux: waarom zijn ze nodig en hoe werken ze? Deel 1

Iedereen kent die opslag / tmp op een fysiek medium - waanzin! Bron.

Waarom is het onwenselijk om op te slaan /tmp op fysieke media? Omdat de bestanden in /tmp zijn tijdelijk en opslagapparaten zijn langzamer dan het geheugen waarin tmpfs wordt gemaakt. Bovendien zijn fysieke media gevoeliger voor slijtage wanneer ze worden overschreven dan geheugen. Ten slotte kunnen bestanden in /tmp gevoelige informatie bevatten, dus het is een essentieel kenmerk om ze bij elke herstart te laten verdwijnen.

Helaas maken sommige Linux-distributie-installatiescripts standaard /tmp aan op het opslagapparaat. Wanhoop niet als dit ook met uw systeem is gebeurd. Volg een paar eenvoudige instructies met Arch Wikiom dit op te lossen, en houd er rekening mee dat het toegewezen geheugen voor tmpfs niet meer beschikbaar is voor andere doeleinden. Met andere woorden, een systeem met een gigantische tmpfs en grote bestanden erop kan te weinig geheugen hebben en crashen. Nog een hint: tijdens het bewerken van een bestand /etc/fstab, onthoud dat het moet eindigen met een nieuwe regel, anders zal uw systeem niet opstarten.

/proc en /sys

Behalve /tmp, VFS (virtuele bestandssystemen) die het meest bekend zijn bij Linux-gebruikers /proc и /sys. (/dev bevindt zich in gedeeld geheugen en heeft niet file_operations). Waarom deze twee componenten? Laten we dit probleem eens bekijken.

procfs maakt een momentopname van de kernel en de processen waarop deze wordt gecontroleerd userspace. In /proc de kernel drukt informatie af over wat er beschikbaar is, zoals interrupts, virtueel geheugen en de planner. Daarnaast, /proc/sys is de plaats waar de parameters zijn geconfigureerd met de opdracht sysctl, beschikbaar voor userspace. De status en statistieken van individuele processen worden weergegeven in mappen /proc/.

Virtuele bestandssystemen in Linux: waarom zijn ze nodig en hoe werken ze? Deel 1

Hier /proc/meminfo is een leeg bestand dat toch waardevolle informatie bevat.

gedrag /proc bestanden laat zien hoe verschillend VFS-schijfbestandssystemen kunnen zijn. Aan de ene kant, /proc/meminfo bevatten informatie die kan worden bekeken met de opdracht free. Aan de andere kant, het is leeg! Hoe werkt het? De situatie doet denken aan het beroemde artikel met de titel Bestaat de maan als niemand ernaar kijkt? Werkelijkheid en kwantumtheorie"geschreven door natuurkundeprofessor David Mermin aan de Cornell University in 1985. Het feit is dat de kernel geheugenstatistieken verzamelt wanneer er een verzoek aan wordt gedaan /proc, en eigenlijk in bestanden /proc er is niets als niemand kijkt. Zoals gezegd Meermin, "Fundamentele kwantumdoctrine zegt dat meting over het algemeen geen reeds bestaande waarde onthult van de eigenschap die wordt gemeten." (En beschouw de vraag over de maan als huiswerk!)
Schijnbare leegte procfs logisch omdat de informatie daar dynamisch is. Een iets andere situatie met sysfs. Laten we vergelijken hoeveel bestanden van ten minste één byte groot zijn /proc en /sys.

Virtuele bestandssystemen in Linux: waarom zijn ze nodig en hoe werken ze? Deel 1

Procfs heeft één bestand, namelijk de geëxporteerde kernelconfiguratie, wat een uitzondering is omdat het maar één keer per boot hoeft te worden gegenereerd. Aan de andere kant, binnen /sys er zijn veel grotere bestanden, waarvan er vele een hele pagina geheugen in beslag nemen. Meestal bestanden sysfs bevatten precies één nummer of regel, in tegenstelling tot tabellen met informatie die zijn verkregen uit het lezen van bestanden zoals /proc/meminfo.

doelwit sysfs - bieden lees-/schrijfeigenschappen van wat de kernel aanroept «kobjects» in gebruikersruimte. Het enige doel kobjects is het tellen van referenties: wanneer de laatste referentie naar een kobject wordt verwijderd, herstelt het systeem de bijbehorende bronnen. Hoe dan ook, /sys maakt de meeste van de beroemde "stabiele ABI voor gebruikersruimte" kern, die niemand ooit kan, onder welke omstandigheden dan ook "pauze". Dit betekent niet dat bestanden in sysfs statisch zijn, wat inconsistent zou zijn met het tellen van referenties van onstabiele objecten.
De stabiele ABI van de kernel beperkt wat er in kan verschijnen /sys, niet wat er op dat moment daadwerkelijk aanwezig is. Het weergeven van bestandsmachtigingen in sysfs geeft inzicht in hoe configureerbare instellingen voor apparaten, modules, bestandssystemen, enz. kan worden geconfigureerd of gelezen. De logische conclusie is dat procfs ook deel uitmaakt van de stabiele ABI van de kernel, hoewel dit niet expliciet wordt vermeld in documentatie.

Virtuele bestandssystemen in Linux: waarom zijn ze nodig en hoe werken ze? Deel 1

Bestanden binnen sysfs beschrijf een bepaalde eigenschap voor elke entiteit en kan leesbaar, beschrijfbaar of beide zijn. "0" in het bestand betekent dat de SSD niet kan worden verwijderd.

Laten we beginnen met het tweede deel van de vertaling met hoe VFS te monitoren met behulp van de eBPF- en bcc-tools, en nu wachten we op uw opmerkingen en nodigen we u traditioneel uit om webinar openen, die wordt gehouden door onze leraar op 9 april - Vladimir Drozdetski.

Bron: www.habr.com

Voeg een reactie