Virtualni datotečni sustavi u Linuxu: zašto su potrebni i kako rade? 1. dio

Bok svima! Nastavljamo s pokretanjem novih streamova za tečajeve u koje ste se već zaljubili, a sada žurimo objaviti da pokrećemo novi set tečajeva "Linux administrator"koji će biti lansiran krajem travnja. Nova publikacija bit će datumirana za ovaj događaj. S izvornim materijalom, možete pročitajte ovdje.

Virtualni datotečni sustavi služe kao neka vrsta magične apstrakcije koja omogućuje filozofiji Linuxa da kaže da je "sve datoteka".

Virtualni datotečni sustavi u Linuxu: zašto su potrebni i kako rade? 1. dio

Što je datotečni sustav? Temeljeno na riječima jednog od prvih suradnika i autora Linuxa Roberta Lava, "Sustav datoteka je hijerarhijska pohrana podataka sastavljenih prema specifičnoj strukturi." Bilo kako bilo, ova je definicija jednako prikladna za VFAT (Virtual File Allocation Table), Git i Cassandra (NoSQL baza podataka). Dakle, što točno definira nešto poput "datotečnog sustava"?

Osnove datotečnog sustava

Linux kernel ima određene zahtjeve za entitet koji se može smatrati datotečnim sustavom. Mora implementirati metode open(), read() и write() za postojane objekte koji imaju imena. S objektno orijentirane točke gledišta programiranje, kernel definira generički datotečni sustav kao apstraktno sučelje, a ove tri velike funkcije smatraju se "virtualnima" i nemaju konkretnu definiciju. U skladu s tim, zadana implementacija datotečnog sustava naziva se virtualni datotečni sustav (VFS).

Virtualni datotečni sustavi u Linuxu: zašto su potrebni i kako rade? 1. dio

Ako možemo otvoriti, čitati i pisati u entitet, tada se taj entitet smatra datotekom, kao što možemo vidjeti iz primjera u gornjoj konzoli.
Fenomen VFS-a samo naglašava zapažanje slično Unixu da je "sve datoteka". Zamislite koliko je čudno da onaj mali primjer /dev/console iznad pokazuje kako konzola zapravo radi. Slika prikazuje interaktivnu Bash sesiju. Slanje niza na konzolu (uređaj virtualne konzole) prikazuje ga na virtualnom zaslonu. VFS ima druga, još čudnija svojstva. Na primjer, omogućuje vam pretraživanje prema to.

Poznati sustavi kao što su ext4, NFS i /proc imaju tri važne funkcije u C strukturi podataka tzv datoteke_operacije. Osim toga, određeni datotečni sustavi proširuju i redefiniraju VFS funkcionalnost na poznati objektno orijentirani način. Kao što Robert Love ističe, VFS apstrakcija omogućuje korisnicima Linuxa da bezbrižno kopiraju datoteke u ili iz operativnih sustava trećih strana ili apstraktnih entiteta poput cijevi bez brige o internom formatu podataka. Na korisničkoj strani (korisnički prostor), korištenjem sistemskog poziva, proces može kopirati iz datoteke u podatkovne strukture jezgre koristeći metodu read() jedan datotečni sustav i zatim upotrijebite metodu write () drugi datotečni sustav za izlaz podataka.

Definicije funkcija koje pripadaju osnovnim VFS tipovima nalaze se u datotekama fs/*.c izvorni kod jezgre, dok poddirektorije fs/ sadrže određene datotečne sustave. Jezgra također sadrži entitete kao što su cgroups, /dev и tmpfs, koji su potrebni tijekom procesa dizanja i stoga su definirani u poddirektoriju kernela init/. Primijeti da cgroups, /dev и tmpfs ne pozivajte funkcije "velike tri". file_operations, ali izravno čitati i pisati u memoriju.
Donji dijagram pokazuje kako korisnički prostor pristupa različitim vrstama datotečnih sustava koji se obično montiraju na Linux sustavima. Strukture nisu prikazane pipes, dmesg и POSIX clocks, koji također implementiraju strukturu file_operations, kojima se pristupa kroz VFS sloj.

Virtualni datotečni sustavi u Linuxu: zašto su potrebni i kako rade? 1. dio

VFS je "sloj omotača" između sistemskih poziva i implementacija određenih file_operationskao što su ext4 и procfs. Funkcije file_operations može komunicirati s upravljačkim programima uređaja ili uređajima za pristup memoriji. tmpfs, devtmpfs и cgroups nemojte koristiti file_operations, ali izravno pristupite memoriji.
Postojanje VFS-a pruža mogućnost ponovne upotrebe koda, budući da osnovne metode povezane sa sustavima datoteka ne moraju biti ponovno implementirane od strane svake vrste sustava datoteka. Ponovna uporaba koda uobičajena je praksa među softverskim inženjerima! Međutim, ako višekratni kôd sadrži ozbiljne greške, sve implementacije koje nasljeđuju zajedničke metode pate od njih.

/tmp: Jednostavan savjet

Jednostavan način otkrivanja prisutnosti VFS-a na sustavu je upisivanje mount | grep -v sd | grep -v :/, koji će prikazati sve montirane (mounted) datotečni sustavi koji nisu rezidentni na disku i nisu NFS, što je istina na većini računala. Jedan od navedenih nosača (mounts) VFS će nedvojbeno /tmp, zar ne?

Virtualni datotečni sustavi u Linuxu: zašto su potrebni i kako rade? 1. dio

Svi znaju to skladištenje / tmp na fizičkom mediju - ludilo! Источник.

Zašto je nepoželjno pohraniti /tmp na fizičkom mediju? Budući da datoteke u /tmp su privremeni i uređaji za pohranu su sporiji od memorije u kojoj se stvara tmpfs. Štoviše, fizički medij je podložniji trošenju kada se prepisuje preko njega nego memorija. Naposljetku, datoteke u /tmp mogu sadržavati osjetljive informacije, tako da je njihovo nestajanje pri svakom ponovnom pokretanju bitna značajka.

Nažalost, neke instalacijske skripte distribucije Linuxa prema zadanim postavkama stvaraju /tmp na uređaju za pohranu. Ne očajavajte ako se to dogodilo i vašem sustavu. Slijedite nekoliko jednostavnih uputa s Arch Wikida to popravite i imajte na umu da je memorija dodijeljena za tmpfs postaje nedostupan za druge svrhe. Drugim riječima, sustav s ogromnim tmpfs-om i velikim datotekama na njemu može ostati bez memorije i srušiti se. Još jedan savjet: tijekom uređivanja datoteke /etc/fstab, zapamtite da mora završavati s novim retkom, inače se vaš sustav neće pokrenuti.

/proc i /sys

osim toga /tmp, VFS (virtualni datotečni sustavi) koji su najpoznatiji korisnicima Linuxa su /proc и /sys, (/dev nalazi se u zajedničkoj memoriji i nema file_operations). Zašto ove dvije komponente? Pogledajmo ovo pitanje.

procfs stvara snimku kernela i procesa koje nadzire userspace. U /proc kernel ispisuje informacije o tome što ima na raspolaganju, kao što su prekidi, virtualna memorija i planer. Osim, /proc/sys je mjesto gdje se nalaze parametri konfigurirani naredbom sysctl, dostupan za userspace. Status i statistika pojedinih procesa prikazani su u katalozima /proc/.

Virtualni datotečni sustavi u Linuxu: zašto su potrebni i kako rade? 1. dio

Ovdje /proc/meminfo je prazna datoteka koja ipak sadrži vrijedne informacije.

ponašanje /proc pokazuje koliko različiti mogu biti datotečni sustavi VFS diska. S jedne strane, /proc/meminfo sadrže informacije koje se mogu vidjeti pomoću naredbe free. S druge strane, prazan je! Kako radi? Situacija podsjeća na poznati članak pod naslovom Postoji li mjesec kad ga nitko ne gleda? Stvarnost i kvantna teorija"napisao profesor fizike sa Sveučilišta Cornell David Mermin 1985. Činjenica je da kernel prikuplja statistiku memorije kada se uputi zahtjev /proc, a zapravo u datotekama /proc nema ničega kad nitko ne gleda. Kao što je rečeno Mermin, "Temeljna kvantna doktrina kaže da mjerenje općenito ne otkriva već postojeću vrijednost svojstva koje se mjeri." (I pitanje o mjesecu smatrajte domaćom zadaćom!)
Prividna praznina procfs ima smisla jer su informacije tamo dinamične. Malo drugačija situacija sa sysfs. Usporedimo koliko se nalazi datoteka koje su veličine najmanje jedan bajt /proc i /sys.

Virtualni datotečni sustavi u Linuxu: zašto su potrebni i kako rade? 1. dio

Procfs ima jednu datoteku, naime izvezenu konfiguraciju kernela, što je iznimka jer se treba generirati samo jednom po pokretanju. S druge strane, u /sys postoji mnogo većih datoteka, od kojih mnoge zauzimaju cijelu stranicu memorije. Obično datoteke sysfs sadrže točno jedan broj ili red, za razliku od tablica informacija dobivenih čitanjem datoteka kao što su /proc/meminfo.

Cilj sysfs - pružiti svojstva čitanja/pisanja onoga što kernel poziva «kobjects» u korisničkom prostoru. Jedini cilj kobjects je brojanje veza: kada se posljednja veza na kobject ukloni, sustav će vratiti resurse povezane s njom. Štoviše, /sys čini većinu poznatih "stabilan ABI za korisnički prostor" srž, što nitko ne može nikada, ni pod kojim okolnostima "pauza". To ne znači da su datoteke u sysfs statične, što bi bilo u suprotnosti s brojanjem referenci nestabilnih objekata.
Stabilni ABI kernela ograničava ono što se može pojaviti u /sys, a ne ono što je stvarno prisutno u tom trenutku. Navođenje dopuštenja za datoteke u sysfs pruža uvid u to kako se mogu konfigurirati postavke za uređaje, module, datotečne sustave itd. može se konfigurirati ili čitati. Logičan zaključak je da je procfs također dio stabilnog ABI-ja kernela, iako to nije eksplicitno navedeno u dokumentacija.

Virtualni datotečni sustavi u Linuxu: zašto su potrebni i kako rade? 1. dio

Datoteke u sysfs opisuju jedno određeno svojstvo za svaki entitet i mogu biti čitljivi, pisivi ili oboje. "0" u datoteci znači da se SSD ne može ukloniti.

Započnimo drugi dio prijevoda s načinom praćenja VFS-a pomoću eBPF i bcc alata, a sada čekamo vaše komentare i tradicionalno vas pozivamo na otvoreni webinar, koju će održati naša profesorica 9. travnja - Vladimir Drozdecki.

Izvor: www.habr.com

Dodajte komentar