Virtuelle filsystemer i Linux: hvorfor er de nødvendige, og hvordan fungerer de? Del 1

Hej alle! Vi fortsætter med at lancere nye streams til de kurser, du allerede har forelsket dig i, og nu har vi travlt med at annoncere, at vi starter et nyt sæt kurser "Linux-administrator"som lanceres i slutningen af ​​april. En ny publikation vil blive dateret til denne begivenhed. Med det originale materiale kan du læs her.

Virtuelle filsystemer fungerer som en slags magisk abstraktion, der tillader Linux-filosofien at sige, at "alt er en fil."

Virtuelle filsystemer i Linux: hvorfor er de nødvendige, og hvordan fungerer de? Del 1

Hvad er et filsystem? Baseret på ordene fra en af ​​de første bidragydere og forfattere til Linux Roberta Lava, "Et filsystem er en hierarkisk lagring af data samlet i henhold til en specifik struktur." Hvorom alting er, så er denne definition lige så velegnet til VFAT (Virtual File Allocation Table), Git og Cassandra (NoSQL database). Så hvad definerer sådan noget som et "filsystem"?

Grundlæggende om filsystemet

Linux-kernen har visse krav til en enhed, der kan betragtes som et filsystem. Den skal implementere metoderne open(), read() и write() for vedvarende objekter, der har navne. Fra et objektorienteret synspunkt programmering, definerer kernen et generisk filsystem som en abstrakt grænseflade, og disse tre store funktioner betragtes som "virtuelle" og har ingen konkret definition. Følgelig kaldes standardfilsystemimplementeringen et virtuelt filsystem (VFS).

Virtuelle filsystemer i Linux: hvorfor er de nødvendige, og hvordan fungerer de? Del 1

Hvis vi kan åbne, læse og skrive til en enhed, så betragtes den enhed som en fil, som vi kan se fra eksemplet i konsollen ovenfor.
VFS-fænomenet understreger kun den Unix-lignende observation, at "alt er en fil". Tænk, hvor mærkeligt, at det lille /dev/console eksempel ovenfor viser, hvordan konsollen faktisk fungerer. Billedet viser en interaktiv Bash-session. Sender du en streng til konsollen (virtuel konsolenhed), vises den på en virtuel skærm. VFS har andre, endnu mærkeligere egenskaber. For eksempel giver det dig mulighed for at søge efter det.

Kendte systemer som ext4, NFS og /proc har tre vigtige funktioner i en C-datastruktur kaldet file_operations. Derudover udvider og omdefinerer visse filsystemer VFS-funktionalitet på en velkendt objektorienteret måde. Som Robert Love påpeger, giver VFS-abstraktionen Linux-brugere mulighed for nonchalant at kopiere filer til eller fra tredjeparts operativsystemer eller abstrakte enheder som pipes uden at bekymre sig om deres interne dataformat. På brugersiden (brugerområdet) kan en proces ved hjælp af et systemkald kopiere fra en fil til kernedatastrukturer ved hjælp af metoden read() ét filsystem, og brug derefter metoden write () et andet filsystem til dataoutput.

De funktionsdefinitioner, der hører til basis VFS-typerne, er i filerne fs/*.c kernekildekode, mens undermapper fs/ indeholde visse filsystemer. Kernen indeholder også enheder som f.eks cgroups, /dev и tmpfs, som kræves under opstartsprocessen og er derfor defineret i kerneunderbiblioteket init/. Læg mærke til det cgroups, /dev и tmpfs Kald ikke de "tre store" funktioner file_operations, men direkte læse og skrive til hukommelsen.
Diagrammet nedenfor viser, hvordan brugerområdet får adgang til de forskellige typer filsystemer, der almindeligvis er monteret på Linux-systemer. Strukturer ikke vist pipes, dmesg и POSIX clocks, som også implementerer strukturen file_operations, tilgås gennem VFS-laget.

Virtuelle filsystemer i Linux: hvorfor er de nødvendige, og hvordan fungerer de? Del 1

VFS er et "indpakningslag" mellem systemkald og implementeringer af visse file_operations, som f.eks ext4 и procfs. Funktioner file_operations kan interagere med enten enhedsdrivere eller hukommelsesadgangsenheder. tmpfs, devtmpfs и cgroups Brug ikke file_operations, men få direkte adgang til hukommelsen.
Eksistensen af ​​VFS giver mulighed for at genbruge kode, da de grundlæggende metoder forbundet med filsystemer ikke skal genimplementeres af hver type filsystem. Genbrug af kode er en almindelig praksis blandt softwareingeniører! Men hvis den genbrugelige kode indeholder alvorlige fejl, lider alle implementeringer, der arver almindelige metoder, under dem.

/tmp: Simpelt tip

En nem måde at opdage, at VFS er til stede på et system, er at skrive mount | grep -v sd | grep -v :/, som vil vise alle monterede (mounted) filsystemer, der ikke er diskresidente og ikke-NFS, hvilket er sandt på de fleste computere. En af de angivne monteringer (mounts) VFS vil uden tvivl /tmp, ret?

Virtuelle filsystemer i Linux: hvorfor er de nødvendige, og hvordan fungerer de? Del 1

Alle kender den opbevaring / tmp på et fysisk medie - galskab! Kilde.

Hvorfor er det uønsket at opbevare /tmp på fysiske medier? Fordi filerne i /tmp er midlertidige, og lagerenheder er langsommere end den hukommelse, hvor tmpfs oprettes. Desuden er fysiske medier mere modtagelige for slid, når de overskrives, end hukommelse. Endelig kan filer i /tmp indeholde følsomme oplysninger, så det er en væsentlig funktion at få dem til at forsvinde ved hver genstart.

Desværre opretter nogle Linux-distributionsinstallationsscripts som standard /tmp på lagerenheden. Fortvivl ikke, hvis dette også skete med dit system. Følg et par enkle instruktioner med Arch Wikifor at rette dette, og vær opmærksom på, at den hukommelse, der er allokeret til tmpfs bliver utilgængelig til andre formål. Med andre ord kan et system med en kæmpe tmpfs og store filer løbe tør for hukommelse og gå ned. Et andet tip: mens du redigerer en fil /etc/fstab, husk at det skal slutte med en ny linje, ellers starter dit system ikke.

/proc og /sys

udover /tmp, VFS (virtuelle filsystemer), der er mest velkendte for Linux-brugere /proc и /sys. (/dev ligger i delt hukommelse og har ikke file_operations). Hvorfor disse to komponenter? Lad os se nærmere på dette spørgsmål.

procfs opretter et øjebliksbillede af kernen og de processer, den overvåger for userspace. I /proc kernen udskriver information om, hvad den har til rådighed, såsom interrupts, virtuel hukommelse og skemalæggeren. Udover, /proc/sys er stedet, hvor parametrene er konfigureret med kommandoen sysctl, tilgængelig for userspace. Status og statistik for individuelle processer vises i mapper /proc/.

Virtuelle filsystemer i Linux: hvorfor er de nødvendige, og hvordan fungerer de? Del 1

Her /proc/meminfo er en tom fil, der ikke desto mindre indeholder værdifuld information.

adfærd /proc filer viser, hvor forskellige VFS-diskfilsystemer kan være. På den ene side, /proc/meminfo indeholde information, der kan ses med kommandoen free. På den anden side er den tom! Hvordan virker det? Situationen minder om den berømte artikel med titlen Findes månen, når ingen ser på den? Virkelighed og kvanteteori"skrevet af Cornell University fysikprofessor David Mermin i 1985. Faktum er, at kernen indsamler hukommelsesstatistik, når der sendes en anmodning til /proc, og faktisk i filer /proc der er intet, når ingen kigger. Som sagt Mermin, "Fundamental kvantedoktrin siger, at måling generelt ikke afslører en allerede eksisterende værdi af den ejendom, der måles." (Og overvej spørgsmålet om månen som hjemmearbejde!)
Tilsyneladende tomhed procfs giver mening, fordi informationen der er dynamisk. En lidt anderledes situation med sysfs. Lad os sammenligne, hvor mange filer, der er mindst én byte store, er i /proc og /sys.

Virtuelle filsystemer i Linux: hvorfor er de nødvendige, og hvordan fungerer de? Del 1

Procfs har én fil, nemlig den eksporterede kernekonfiguration, hvilket er en undtagelse, fordi den kun skal genereres én gang pr. opstart. På den anden side, i /sys der er mange større filer, hvoraf mange fylder en hel side i hukommelsen. Normalt filer sysfs indeholde præcis ét tal eller linje, i modsætning til tabeller med information, der er opnået ved at læse filer som f.eks /proc/meminfo.

mål sysfs - Angiv læse/skriveegenskaber for, hvad kernen kalder «kobjects» i brugerrummet. Det eneste mål kobjects er linktælling: når det sidste link til et kobject fjernes, vil systemet gendanne de ressourcer, der er knyttet til det. Alligevel, /sys udgør de fleste af de berømte "stabil ABI for brugerrum" kerne, som ingen nogensinde kan under nogen omstændigheder "pause". Dette betyder ikke, at filer i sysfs er statiske, hvilket ville være inkonsistent med referencetælling af ustabile objekter.
Kernens stabile ABI begrænser, hvad der kan vises i /sys, ikke hvad der faktisk er til stede i det pågældende øjeblik. Liste over filtilladelser i sysfs giver indsigt i, hvordan konfigurerbare indstillinger for enheder, moduler, filsystemer osv. kan konfigureres eller læses. Den logiske konklusion er, at procfs også er en del af kernens stabile ABI, selvom dette ikke er eksplicit angivet i dokumentation.

Virtuelle filsystemer i Linux: hvorfor er de nødvendige, og hvordan fungerer de? Del 1

Filer i sysfs beskrive en bestemt egenskab for hver enhed og kan være læsbar, skrivbar eller begge dele. "0" i filen betyder, at SSD'en ikke kan fjernes.

Lad os starte anden del af oversættelsen med, hvordan man overvåger VFS ved hjælp af eBPF- og bcc-værktøjerne, og nu venter vi på dine kommentarer og inviterer dig traditionelt til at åbent webinar, som afholdes af vores lærer den 9. april - Vladimir Drozdetsky.

Kilde: www.habr.com

Tilføj en kommentar