Virtuelle filsystemer i Linux: hvorfor trengs de og hvordan fungerer de? Del 1

Hei alle sammen! Vi fortsetter å lansere nye strømmer for kursene du allerede har forelsket deg i, og nå har vi det travelt med å annonsere at vi starter et nytt sett med kurs "Linux-administrator"som lanseres i slutten av april. En ny publikasjon vil bli datert for dette arrangementet. Med originalmaterialet kan du les her.

Virtuelle filsystemer fungerer som en slags magisk abstraksjon som lar filosofien til Linux si at "alt er en fil."

Virtuelle filsystemer i Linux: hvorfor trengs de og hvordan fungerer de? Del 1

Hva er et filsystem? Basert på ordene til en av de første bidragsyterne og forfatterne av Linux Roberta Lava, "Et filsystem er en hierarkisk lagring av data satt sammen i henhold til en bestemt struktur." Uansett er denne definisjonen like godt egnet for VFAT (Virtual File Allocation Table), Git og Cassandra (NoSQL database). Så hva definerer noe slikt som et "filsystem"?

Grunnleggende om filsystem

Linux-kjernen har visse krav til en enhet som kan betraktes som et filsystem. Den må implementere metodene open(), read() и write() for vedvarende objekter som har navn. Fra et objektorientert synspunkt programmering, definerer kjernen et generisk filsystem som et abstrakt grensesnitt, og disse tre store funksjonene anses som "virtuelle" og har ingen konkret definisjon. Følgelig kalles standard filsystemimplementering et virtuelt filsystem (VFS).

Virtuelle filsystemer i Linux: hvorfor trengs de og hvordan fungerer de? Del 1

Hvis vi kan åpne, lese og skrive til en enhet, anses den enheten som en fil, som vi kan se fra eksempelet i konsollen ovenfor.
VFS-fenomenet understreker bare den Unix-lignende observasjonen om at "alt er en fil". Tenk så rart at det lille /dev/console-eksemplet ovenfor viser hvordan konsollen faktisk fungerer. Bildet viser en interaktiv Bash-økt. Når du sender en streng til konsollen (virtuell konsollenhet), vises den på en virtuell skjerm. VFS har andre, enda merkeligere egenskaper. For eksempel lar den deg søke etter det.

Kjente systemer som ext4, NFS og /proc har tre viktige funksjoner i en C-datastruktur kalt filoperasjoner. I tillegg utvider og redefinerer visse filsystemer VFS-funksjonalitet på en kjent objektorientert måte. Som Robert Love påpeker, lar VFS-abstraksjonen Linux-brukere nonchalant kopiere filer til eller fra tredjeparts operativsystemer eller abstrakte enheter som piper uten å bekymre seg for deres interne dataformat. På brukersiden (brukerområdet), ved hjelp av et systemkall, kan en prosess kopiere fra en fil til kjernedatastrukturer ved hjelp av metoden read() ett filsystem og bruk deretter metoden write () et annet filsystem for datautgang.

Funksjonsdefinisjonene som tilhører basis-VFS-typene er i filene fs/*.c kjernekildekode, mens underkataloger fs/ inneholder visse filsystemer. Kjernen inneholder også entiteter som f.eks cgroups, /dev и tmpfs, som kreves under oppstartsprosessen og derfor er definert i kjerneunderkatalogen init/. Legg merke til det cgroups, /dev и tmpfs ikke kall de "tre store" funksjonene file_operations, men direkte les og skriv til minnet.
Diagrammet nedenfor viser hvordan brukerområdet får tilgang til de forskjellige typene filsystemer som vanligvis er montert på Linux-systemer. Strukturer ikke vist pipes, dmesg и POSIX clocks, som også implementerer strukturen file_operations, tilgjengelig via VFS-laget.

Virtuelle filsystemer i Linux: hvorfor trengs de og hvordan fungerer de? Del 1

VFS er et "innpakningslag" mellom systemanrop og implementeringer av visse file_operationsSlik som ext4 и procfs. Funksjoner file_operations kan samhandle med enten enhetsdrivere eller minnetilgangsenheter. tmpfs, devtmpfs и cgroups ikke bruk file_operations, men direkte tilgang til minnet.
Eksistensen av VFS gir en mulighet til å gjenbruke kode, siden de grunnleggende metodene knyttet til filsystemer ikke må implementeres på nytt av hver type filsystem. Gjenbruk av kode er en vanlig praksis blant programvareingeniører! Men hvis den gjenbrukbare koden inneholder alvorlige feil, lider alle implementeringer som arver vanlige metoder av dem.

/tmp: Enkelt hint

En enkel måte å oppdage at VFS er tilstede på et system er å skrive mount | grep -v sd | grep -v :/, som vil vise alt montert (mounted) filsystemer som ikke er diskresidente og ikke-NFS, noe som er sant på de fleste datamaskiner. En av de oppførte festene (mounts) VFS vil utvilsomt /tmp, Ikke sant?

Virtuelle filsystemer i Linux: hvorfor trengs de og hvordan fungerer de? Del 1

Alle kjenner til den lagringen / tmp på et fysisk medium - galskap! Kilde.

Hvorfor er det uønsket å lagre /tmp på fysiske medier? Fordi filene i /tmp er midlertidige og lagringsenheter er tregere enn minnet der tmpfs opprettes. Dessuten er fysiske medier mer utsatt for slitasje når de overskrives enn minne. Endelig kan filer i /tmp inneholde sensitiv informasjon, så det er en viktig funksjon å få dem til å forsvinne ved hver omstart.

Dessverre oppretter noen installasjonsskript for Linux-distribusjon /tmp på lagringsenheten som standard. Fortvil ikke hvis dette skjedde med systemet ditt også. Følg noen enkle instruksjoner med Arch Wikifor å fikse dette, og vær oppmerksom på at minnet som er tildelt for tmpfs blir utilgjengelig for andre formål. Med andre ord, et system med en gigantisk tmpfs og store filer på kan gå tom for minne og krasje. Et annet hint: mens du redigerer en fil /etc/fstab, husk at den må ende med en ny linje, ellers vil ikke systemet starte opp.

/proc og /sys

Foruten /tmp, VFS (virtuelle filsystemer) som er mest kjent for Linux-brukere /proc и /sys. (/dev ligger i delt minne og har ikke file_operations). Hvorfor disse to komponentene? La oss se nærmere på dette problemet.

procfs oppretter et øyeblikksbilde av kjernen og prosessene den overvåker for userspace. I /proc kjernen skriver ut informasjon om hva den har tilgjengelig, for eksempel avbrudd, virtuelt minne og planleggeren. I tillegg, /proc/sys er stedet der parametrene er konfigurert med kommandoen sysctl, tilgjengelig for userspace. Status og statistikk for individuelle prosesser vises i kataloger /proc/.

Virtuelle filsystemer i Linux: hvorfor trengs de og hvordan fungerer de? Del 1

Her /proc/meminfo er en tom fil som likevel inneholder verdifull informasjon.

oppførsel /proc filer viser hvor forskjellige VFS-diskfilsystemer kan være. På den ene siden, /proc/meminfo inneholder informasjon som kan vises med kommandoen free. På den annen side er det tomt! Hvordan virker det? Situasjonen minner om den berømte artikkelen med tittelen Finnes månen når ingen ser på den? Virkelighet og kvanteteori"skrevet av Cornell University fysikkprofessor David Mermin i 1985. Faktum er at kjernen samler inn minnestatistikk når en forespørsel sendes til /proc, og faktisk i filer /proc det er ingenting når ingen ser. Som sagt Mermin, "Fundamental kvantedoktrine sier at måling generelt ikke avslører en forhåndseksisterende verdi av eiendommen som måles." (Og se på spørsmålet om månen som lekser!)
Tilsynelatende tomhet procfs gir mening fordi informasjonen der er dynamisk. En litt annen situasjon med sysfs. La oss sammenligne hvor mange filer som er på minst én byte store /proc og /sys.

Virtuelle filsystemer i Linux: hvorfor trengs de og hvordan fungerer de? Del 1

Procfs har én fil, nemlig den eksporterte kjernekonfigurasjonen, som er et unntak fordi den bare må genereres én gang per oppstart. På den annen side, i /sys det er mange større filer, hvorav mange tar opp en hel side med minne. Vanligvis filer sysfs inneholde nøyaktig ett tall eller linje, i motsetning til tabeller med informasjon hentet fra lesing av filer som f.eks /proc/meminfo.

target sysfs - gi lese-/skriveegenskaper for hva kjernen kaller «kobjects» i brukerområdet. Det eneste målet kobjects er koblingtelling: når den siste lenken til et kobjekt fjernes, vil systemet gjenopprette ressursene knyttet til det. Likevel, /sys utgjør det meste av det kjente "stabil ABI for brukerrom" kjerne, som ingen noensinne kan, under noen omstendigheter "gå i stykker". Dette betyr ikke at filer i sysfs er statiske, noe som ville være inkonsistent med referansetelling av ustabile objekter.
Kjernens stabile ABI begrenser hva som kan vises i /sys, ikke hva som faktisk er tilstede i det aktuelle øyeblikket. Oppføring av filtillatelser i sysfs gir innsikt i hvordan konfigurerbare innstillinger for enheter, moduler, filsystemer osv. kan konfigureres eller leses. Den logiske konklusjonen er at procfs også er en del av kjernens stabile ABI, selv om dette ikke er eksplisitt angitt i dokumentasjon.

Virtuelle filsystemer i Linux: hvorfor trengs de og hvordan fungerer de? Del 1

Filer inn sysfs beskrive én bestemt egenskap for hver enhet og kan være lesbar, skrivbar eller begge deler. "0" i filen betyr at SSD-en ikke kan fjernes.

La oss starte den andre delen av oversettelsen med hvordan du overvåker VFS ved å bruke eBPF- og bcc-verktøyene, og nå venter vi på kommentarene dine og inviterer deg tradisjonelt til å åpne webinar, som holdes av læreren vår 9. april - Vladimir Drozdetsky.

Kilde: www.habr.com

Legg til en kommentar