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

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 ‘Linux Beheerder’, die eind april van start gaat. Deze gebeurtenis zal aanleiding geven tot een nieuwe publicatie. De originele inhoud kun je hier lezen.

Virtuele bestandssystemen fungeren als een soort magische abstractie, die het mogelijk maakt dat de filosofie van Linux zegt: ‘alles is een bestand’.

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 auteur van Linux Robert Love, ‘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 Cassandra (NoSQL-database). 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 programmeren, 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.

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

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 hen.

Bekende systemen, zoals ext4, NFS en /proc hebben drie belangrijke functies in de datastructuur in C die file_operations. 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 fs/*.c 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

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

, 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 , lijden alle implementaties die de gemeenschappelijke methoden erven.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?

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

Iedereen weet dat opslag / tmp op een fysiek medium – waanzin! Bron.

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 , om dit op te lossen, en vergeet niet dat het geheugen dat aanwordt 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/.

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

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’ «Bestaat de maan als niemand ernaar 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: Mermin, “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.

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

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” van de kernel, die niemand ooit, onder welke omstandigheid dan ook, kan “verbreken”. Dit betekent niet dat de bestanden in sysfs statisch zijn, wat tegenstrijdig zou zijn met het bijhouden van referentietellingen voor onstabiele objecten.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 de documentatie.

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

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 de openbare webinar, die onze docent — Vladimir Drozdetsky.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster