Hallo allemaal! We gaan door met het lanceren van nieuwe opleidingen voor de cursussen die jullie al goed kennen, en we willen jullie nu informeren dat we een nieuwe instapronde starten voor de cursus , die eind april van start gaat. Deze gebeurtenis zal aanleiding geven tot een nieuwe publicatie. De originele inhoud kun je .
Virtuele bestandssystemen fungeren als een soort magische abstractie, die het mogelijk maakt dat de filosofie van Linux zegt: ‘alles is een bestand’.

Wat is een bestandssysteem? Gebaseerd op de woorden van een van de eerste bijdragers en auteur van Linux , ‘Een bestandssysteem is een hiërarchische gegevensopslag die is samengesteld volgens een bepaalde structuur’. Hoe dan ook, deze definitie is even goed van toepassing op VFAT (Virtual File Allocation Table), Git en (). Wat bepaalt nu precies wat we onder ‘bestandssysteem’ verstaan?
Basisprincipes van bestandssystemen
De Linux-kernel heeft bepaalde vereisten voor de entiteit die als bestandssysteem kan worden beschouwd. Deze moet methodes implementeren als open(), read() en write() voor permanente objecten die namen hebben. Vanuit het perspectief van object-georiënteerd , definieert de kernel een generiek bestandssysteem als een abstracte interface, en deze drie grote functies worden beschouwd als ‘virtueel’ en hebben geen specifieke definitie. Dienovereenkomstig wordt de standaardimplementatie van een bestandssysteem de virtuele bestandssysteem (VFS) genoemd.

Als we entiteiten kunnen openen, lezen en schrijven, dan wordt die entiteit als een bestand beschouwd, zoals we kunnen zien in het voorbeeld hierboven.
Het fenomeen van VFS benadrukt alleen maar de observatie die kenmerkend is voor Unix-achtige systemen, die stelt dat ‘alles een bestand is’. Denk na over hoe vreemd het is dat het kleine voorbeeld hierboven met /dev/console laat zien hoe de console daadwerkelijk werkt. De afbeelding toont een interactieve Bash-sessie. Het verzenden van een regel naar de console (virtueel console-apparaat) toont deze op het virtuele scherm. VFS heeft andere, nog vreemdere eigenschappen. Bijvoorbeeld, het maakt het mogelijk om te zoeken naar .
Bekende systemen, zoals ext4, NFS en /proc hebben drie belangrijke functies in de datastructuur in C die . Bovendien breiden bepaalde bestandssystemen de functies van VFS uit en herdefiniëren deze op een gebruikelijke objectgeoriënteerde manier. Zoals Robert Love opmerkt, stelt de abstractie van VFS Linux-gebruikers in staat om bestanden zorgeloos te kopiëren naar of vanuit externe besturingssystemen of abstracte entiteiten zoals pipes, zonder zich zorgen te maken over hun interne gegevensindeling. Aan de gebruikerszijde kan een proces met systeemoproepen gegevens kopiëren vanuit een bestand naar gegevensstructuren van de kernel met de methode read() van één bestandssysteem, en vervolgens de methode write () van een ander bestandssysteem gebruiken om gegevens uit te voeren.
Definities van functies die behoren tot de basis typen VFS zijn te vinden in de bestanden van de broncode van de kernel, terwijl de submappen fs/ bepaalde bestandssystemen bevatten. In de kernel zijn ook entiteiten aanwezig zoals cgroups, /dev en tmpfs, die nodig zijn tijdens het opstartproces en daarom zijn gedefinieerd in de submap van de kernel init/. Let op dat cgroups, /dev en tmpfs ze de 'grote drie' functies niet aanroepen file_operations, maar rechtstreeks lezen en schrijven in het geheugen.
In het onderstaande diagram wordt getoond hoe userspace toegang krijgt tot verschillende soorten bestandssystemen die normaal gesproken zijn gemonteerd in Linux-systemen. Constructies zoals pipes, dmesg en POSIX-klokken, die ook de structuur implementeren, hebben toegang via de VFS-laag. file_operationsVFS is een 'shell-laag' tussen systeemoproepen en implementaties van bepaalde

, zoals file_operationsext4 procfs en . Functieskunnen communiceren met ofwel apparaatstuurprogramma's of met geheugen-toegang apparaten. file_operations devtmpfs tmpfs, maakt geen gebruik van en cgroups , maar heeft rechtstreeks toegang tot het geheugen. file_operationsHet bestaan van VFS biedt de mogelijkheid om code herbruikbaar te maken, aangezien de basismethoden die verband houden met bestandssystemen niet door elk type bestandssysteem opnieuw geïmplementeerd hoeven te worden. Het hergebruiken van code is een veelvoorkomende praktijk onder software-ingenieurs! Echter, als de herbruikbare code
ernstige fouten bevat Een eenvoudige manier om te ontdekken of VFS aanwezig is in het systeem, is door
/tmp: Простая подсказка
mount | grep -v sd | grep -v :/ in te voeren, wat alle gemonteerde (mounted) bestandssystemen toont die geen resident zijn op de schijf en geen NFS zijn, wat geldt voor de meeste computers. Een van de genoemde mounts (mounts)) VFS zal ongetwijfeld bestaan /tmp, toch?

Iedereen weet dat opslag / tmp op een fysiek medium – waanzin! .
Waarom is het ongewenst om te Storen op een fysiek medium? Omdat bestanden in /tmp tijdelijk zijn, en opslagapparaten trager zijn dan het geheugen waar tmpfs wordt aangemaakt. Bovendien zijn fysieke media kwetsbaarder voor slijtage bij herschrijven dan geheugen. Tenslotte kunnen bestanden in /tmp gevoelige informatie bevatten, waardoor hun verdwijning bij elke herstart een noodzakelijke functie is. /tmp Helaas creëren sommige installatie-scripts van Linux-distributies standaard /tmp op een opslagapparaat. Wees niet wanhopig als dit ook met jouw systeem is gebeurd. Volg een paar eenvoudige instructies in
Arch Wiki wordt toegewezen, niet beschikbaar is voor andere doeleinden. Met andere woorden, een systeem met een enorme tmpfs en grote bestanden daarin kan al het geheugen verbruiken en crashen. Een andere tip: tijdens het bewerken van het bestand tmpfs , onthoud dat het moet eindigen met een nieuwe regel, anders kan jouw systeem niet opstarten. /etc/fstabNaast
/proc и /sys
, VFS (virtuele bestandssystemen) die het meest bekend zijn bij Linux-gebruikers – dit /tmpbevindt zich in het gedeeld geheugen en heeft geen /proc en /sys. (/dev ). Waarom precies deze twee componenten? Laten we dit probleem eens nader bekijken. file_operationsmaakt een snapshot van de onmiddellijke status van de kernel en de processen die het beheert voor
. Functies userspace de kernel geeft informatie over welke middelen het ter beschikking heeft, zoals onderbrekingen, virtueel geheugen en scheduler. Bovendien,wordt een tabel met wijzigingen en instructies voor de overgang naar de nieuwe configuratie gegeven. Voor meer informatie, zie /proc dit is de plek waar parameters, ingesteld met het commando /proc/sys sysctl , beschikbaar zijn voor. De status en statistieken van individuele processen worden weergegeven in de mappen de kernel geeft informatie over welke middelen het ter beschikking heeft, zoals onderbrekingen, virtueel geheugen en scheduler. Bovendien,— dit is een leeg bestand dat echter waardevolle informatie bevat. /proc/.

Hier /proc/meminfo Het gedrag
van bestanden toont aan hoe verschillend de schijf-bestandssystemen VFS kunnen zijn. Aan de ene kant, /proc bevatten informatie die kan worden bekeken met het commando /proc/meminfo . Aan de andere kant, daar is niets! Hoe kan dat? De situatie doet denken aan het beroemde artikel met de titel free‘Bestaat de maan als niemand naar haar kijkt? Realiteit en kwantumtheorie’ , geschreven door de natuurkundeprofessor van de Cornell Universiteit David Mermin in 1985. Het punt is dat de kernel geheugenstatistieken verzamelt wanneer een verzoek wordt gedaan aan /proc, en eigenlijk is er in de bestanden /proc niets als niemand kijkt. Zoals Mermin zei: , “De fundamentele kwantumdoctrine stelt dat metingen doorgaans geen eerder bestaand meetresultaat onthullen.” (Denk aan de vraag over de maan als huiswerk!)
Schijnbare leegte . Functies maakt zin omdat de informatie die daar is dynamisch is. Een iets andere situatie geldt voor sysfs. Laten we vergelijken hoeveel bestanden van minstens één byte er zijn in /proc en in /sys.

Procfs heeft één bestand, namelijk de geëxporteerde kernelconfiguratie, die een uitzondering is omdat deze slechts één keer per opstart hoeft te worden gegenereerd. Aan de andere kant ligt er in /sys een groot aantal omvangrijkere bestanden, waarvan vele een hele pagina geheugen in beslag nemen. Gewoonlijk bevatten bestanden sysfs precies één getal of regel, in tegenstelling tot de informatietabellen verkregen bij het lezen van bestanden zoals /proc/meminfo.
Doel sysfs – om de eigenschappen die lees- en schrijfbaar zijn te verstrekken van wat de kernel 'kobjects' noemt in de userspace. Het enige doel van kobjects is het bijhouden van referentietellingen: wanneer de laatste referentie naar een kobject wordt verwijderd, zal het systeem de bijbehorende middelen herstellen. Desondanks maakt een groot deel uit van het beroemde /sys “stabiele ABI voor de userspace” “verbreken”. De stabiele binaire applicatie-interface van de kernel (kernel's stable ABI) beperkt wat er in kan verschijnen
, en niet wat er op dat specifieke moment daadwerkelijk aanwezig is. De lijst met bestandstoegangsrechten in sysfs biedt inzicht in hoe configureerbare parameters voor apparaten, modules, besturingssystemen, enzovoort kunnen worden aangepast of gelezen. We concluderen logisch dat procfs ook een onderdeel van de stabiele ABI van de kernel is, hoewel dit niet expliciet vermeld wordt in /sysBestanden in .

beschrijven één specifiek eigenschap voor elke entiteit en kunnen leesbaar, herschrijfbaar of beide tegelijkertijd zijn. “0” in het bestand geeft aan dat de SSD niet kan worden verwijderd. sysfs beschrijven één specifiek kenmerk voor elke entiteit en kunnen leesbaar, herschrijfbaar of beide tegelijk zijn. «0» in het bestand geeft aan dat de SSD niet kan worden verwijderd.
We beginnen het tweede deel van de vertaling met hoe je VFS kunt observeren met behulp van eBPF en bcc-tools, en we wachten nu op jullie reacties en nodigen traditioneel uit voor , die onze docent — .
Bron: habr.com
