Hej alle sammen! Vi fortsætter med at lancere nye streams for de kurser, I allerede kender og holder af, og nu har vi glæden af at meddele, at vi starter et nyt hold for kurset , som starter i slutningen af april. Denne begivenhed vil blive markeret med en ny publikation. Den originale tekst kan .
Virtuelle filsystemer fungerer som en slags magisk abstraktion, der gør det muligt for Linux-filosofien at sige, at "alt er en fil".

Hvad er et filsystem? Ifølge en af de første bidragydere og forfattere af Linux , "Et filsystem er et hierarkisk datalager, der er organiseret efter en bestemt struktur." Ikke desto mindre passer denne definition lige godt til VFAT (Virtual File Allocation Table), Git og (). Hvad definerer så et begreb som "filsystem"?
Grundlæggende om filsystemet
Linux-kernen har bestemte krav til entiteten, der kan betragtes som et filsystem. Det skal implementere metoderne open(), read() og write() til vedvarende objekter, der har navne. Fra synspunktet for objektorienteret , definerer kernen et generisk filsystem som et abstrakt interface, og disse tre store funktioner betragtes som "virtuelle" og har ikke en specifik definition. Derfor kaldes implementeringen af filsystemet som standard det virtuelle filsystem (VFS).

Hvis vi kan åbne, læse og skrive til en entitet, betragtes denne entitet som en fil, som vi ser i eksemplet i konsollen ovenfor.
Fænomenet VFS understreger blot den observation, der er karakteristisk for Unix-lignende systemer, at "alt er en fil". Tænk over, hvor mærkeligt det er, at det lille eksempel ovenfor med /dev/console viser, hvordan konsollen rent faktisk fungerer. Billedet viser en interaktiv Bash-session. At sende en streng til konsollen (virtuel konsol-enhed) viser det på den virtuelle skærm. VFS har andre, endnu mere mærkelige egenskaber. For eksempel gør det det muligt at søge i .
De systemer, vi kender, såsom ext4, NFS og /proc, har tre vigtige funktioner i datastrukturen C, der kaldes . Derudover udvider og overskriver visse filsystemer VFS-funktioner på en velkendt objektorienteret måde. Som Robert Love bemærker, giver VFS-abstraktionen Linux-brugere mulighed for problemfrit at kopiere filer til eller fra eksterne operativsystemer eller abstrakte entiteter som pipes, uden at bekymre sig om deres interne dataformat. Fra brugerens (userspace) side kan en proces gennem systemopkald kopiere fra en fil til kerne datastrukturer ved hjælp af metoden read() for et filsystem og derefter bruge metoden write () for et andet filsystem til at skrive data.
Definitionerne af funktioner, der tilhører de grundlæggende typer VFS, findes i filerne i kildekoden til kernen, mens undermapperne fs/ indeholder specifikke filsystemer. Kernen indeholder også entiteter som cgroups, /dev og tmpfs, som er nødvendige under opstart og derfor defineres i undermappen til kernen init/. Bemærk, at cgroups, /dev og tmpfs de ikke kalder de „store tre“ funktioner file_operations, men læser og skriver direkte til hukommelsen.
Diagrammet nedenfor viser, hvordan userspace interagerer med forskellige typer filsystemer, der normalt er monteret i Linux-systemer. Konstruktørerne som pipes, dmesg og POSIX clocks, som også implementerer strukturen, er ikke vist, da adgangen til dem går gennem VFS-laget. file_operationsVFS er et „skale“ mellem systemopkald og implementeringer af specifikke

, såsom file_operationsext4 procfs og . Funktionerkan interagere enten med enhedsdrivere eller med hukommelsestilgangsenheder. file_operations devtmpfs tmpfs, bruger ikke og cgroups , men henvender sig direkte til hukommelsen. file_operationsEksistensen af VFS muliggør genbrug af kode, da de grundlæggende metoder relateret til filsystemer ikke skal implementeres af hver type filsystem. Genbrug af kode er en udbredt praksis blandt softwareingeniører! Men hvis den genbrugsbare kode indeholder
alvorlige fejl En enkel måde at opdage, om VFS er til stede i systemet, er at indtaste
/tmp: Простая подсказка
mount | grep -v sd | grep -v :/ , hvilket viser alle monterede (mounted)) filsystemer, der ikke er residenter på disken og ikke NFS, hvilket gælder for de fleste computere. En af de nævnte mountsmounts) VFS vil uden tvivl være /tmp, ikke sandt?

Alle ved, at det er vanvittigt at opbevare / tmp på et fysisk medie! .
Hvorfor er det uønsket at opbevare /tmp på et fysisk medie? Fordi filer i /tmp er temporære, og lagringsenheder er langsommere end hukommelsen, hvor tmpfs oprettes. Desuden er fysiske medier mere udsat for slid ved omskrivning end hukommelse. Endelig kan filer i /tmp indeholde følsomme oplysninger, så deres forsvinden ved hver genstart er en væsentlig funktion.
Desværre opretter nogle installationsscripts til Linux-distributioner /tmp på lagringsenheden som standard. Bekymr dig ikke, hvis dette er sket med dit system. Følg et par enkle instruktioner fra , for at rette op på dette, og husk at hukommelsen tildelt til tmpfs bliver utilgængelig til andre formål. Med andre ord kan et system med en gigantisk tmpfs og store filer i den opbruge al hukommelsen og fejle. En anden påmindelse: når du redigerer filen /etc/fstab, husk at den skal slutte med en ny linje, ellers vil dit system ikke kunne starte.
/proc и /sys
Udover /tmp, VFS (virtuelle filsystemer), der er mest kendt af Linux-brugere, er /proc og /sys. (/dev placeret i delt hukommelse og har ikke file_operations). Hvorfor netop disse to komponenter? Lad os dykke ned i dette spørgsmål.
. Funktioner skaber et øjebliksbillede af kernen og de processer, den kontrollerer for userspace. I /proc kernen vises oplysninger om, hvilke ressourcer der er tilgængelige, såsom afbrydelser, virtuel hukommelse og planlægger. Desuden /proc/sys er det stedet, hvor parametre, der er konfigureret med kommandoen sysctl, er tilgængelige for userspace. Status og statistik for individuelle processer vises i mapperne /proc/.

Her /proc/meminfo — det er en tom fil, men indeholder værdifuld information.
Adfærd /proc af filer viser, hvor forskellige diskfilsystemer VFS kan være. På den ene side /proc/meminfo indeholder oplysninger, der kan ses med kommandoen free. På den anden side er det tomt! Hvordan kan det være? Situationen minder om den berømte artikel med titlen , skrevet af professor i fysik ved Cornell University, David Mermin, i 1985. Sagen er, at kernen indsamler hukommelsesstatistik, når der sker en anmodning til /proc, og der er faktisk ingenting i filer, /proc når ingen kigger derhen. Som Mermin sagde, , «Den fundamentale kvantemekaniske doktrin siger, at måling som regel ikke afslører et tidligere eksisterende værdi af den målte egenskab.» (Og tænk på spørgsmålet om månen som en hjemmearbejde!)
Den tilsyneladende tomhed . Funktioner giver mening, da informationen der eksisterer, er dynamisk. En lidt anderledes situation med sysfs. Lad os sammenligne, hvor mange filer med en størrelse på mindst en byte der er i /proc og i /sys.

Procfs har én fil, nemlig den eksporterede kernekonfiguration, som er en undtagelse, da den kun skal genereres én gang pr. opstart. På den anden side ligger der mange mere omfangsrige filer i /sys , mange af hvilke optager en hel side hukommelse. Normalt indeholder filerne sysfs præcis ét tal eller en streng, i modsætning til informations tabeller, der opnås ved at læse sådanne filer som /proc/meminfo.
Formålet sysfs er at give egenskaber tilgængelige for læsning og skrivning af det, som kernen kalder «kobjects» i brugerrummet. Den eneste funktion af kobjects er referenceoptælling: når det sidste reference til kobject fjernes, vil systemet genvinde de ressourcer, der er tilknyttet det. Ikke desto mindre /sys udgør det størstedelen af den berømte kern, som ingen nogensinde, under nogen omstændigheder, kan Det betyder ikke, at filer i sysfs er statiske, da det ville være i strid med referenceoptællingen af ustabile objekter.
Den stabile binære applikationsgrænseflade i kernen (kernens stabile ABI) begrænser, hvad der kan vises i /sys, og ikke hvad der faktisk er til stede på et givet tidspunkt. Oplistningen af tilladelser til filer i sysfs giver forståelse af, hvordan konfigurerbare parametre for enheder, moduler, filsystemer osv. kan tilpasses eller læses. Det kan konkluderes, at procfs også er en del af kernens stabile ABI, selvom dette ikke er angivet eksplicit i .

Filer i sysfs beskriver én konkret egenskab ved hver enhed og kan være læsbare, overskrivbare eller begge dele samtidigt. «0» i filen indikerer, at SSD'en ikke kan fjernes.
Den anden del af oversættelsen starter med, hvordan man observerer VFS ved hjælp af eBPF og bcc-værktøjer, og vi venter nu på jeres kommentarer og inviterer traditionelt til , som vores instruktør — .
Kilde: habr.com
