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
Virtuele bestandssystemen dienen als een soort magische abstractie waardoor de filosofie van Linux kan zeggen dat "alles een bestand is".
Wat is een bestandssysteem? Gebaseerd op de woorden van een van de eerste bijdragers en auteurs van Linux
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
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
Bekende systemen zoals ext4, NFS en /proc hebben drie belangrijke functies in een C datastructuur genaamd 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/
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.
VFS is een "omhullingslaag" tussen systeemaanroepen en implementaties van bepaalde file_operations
Zoals 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
/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?
Iedereen kent die opslag / tmp
op een fysiek medium - waanzin!
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 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/
.
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 /proc
, en eigenlijk in bestanden /proc
er is niets als niemand kijkt. Zoals gezegd
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
.
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
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
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
Bron: www.habr.com