Virtualni datotečni sistemi u Linuxu: zašto su potrebni i kako funkcioniraju? Dio 1

Zdravo svima! Nastavljamo sa pokretanjem novih streamova za kurseve u koje ste se već zaljubili, a sada žurimo objaviti da pokrećemo novi set kurseva "Linux administrator"koji će se pokrenuti krajem aprila. Nova publikacija će biti data za ovaj događaj. Sa originalnim materijalom možete pročitajte ovdje.

Virtualni datotečni sistemi služe kao neka vrsta magične apstrakcije koja dozvoljava filozofiji Linuxa da kaže da je "sve datoteka".

Virtualni datotečni sistemi u Linuxu: zašto su potrebni i kako funkcioniraju? Dio 1

Šta je sistem datoteka? Zasnovan na riječima jednog od prvih saradnika i autora Linuxa Roberta Lava, "Sistem datoteka je hijerarhijsko skladište podataka sastavljenih prema specifičnoj strukturi." Kako god bilo, ova definicija je podjednako pogodna za VFAT (Virtual File Allocation Table), Git i Cassandra (NoSQL baza podataka). Dakle, šta tačno definiše takvu stvar kao "sistem datoteka"?

Osnove sistema datoteka

Linux kernel ima određene zahtjeve za entitet koji se može smatrati sistemom datoteka. Mora implementirati metode open(), read() и write() za trajne objekte koji imaju imena. Sa objektno orijentisane tačke gledišta programiranje, kernel definiše generički sistem datoteka kao apstraktni interfejs, a ove tri velike funkcije se smatraju "virtualnim" i nemaju konkretnu definiciju. Prema tome, podrazumevana implementacija sistema datoteka naziva se virtuelni sistem datoteka (VFS).

Virtualni datotečni sistemi u Linuxu: zašto su potrebni i kako funkcioniraju? Dio 1

Ako možemo otvoriti, čitati i pisati u entitet, onda se taj entitet smatra datotekom, kao što možemo vidjeti iz primjera u konzoli iznad.
Fenomen VFS samo naglašava zapažanje slično Unixu da je "sve fajl". Zamislite kako je čudno što ovaj mali /dev/console primjer iznad pokazuje kako konzola zapravo radi. Slika prikazuje interaktivnu Bash sesiju. Slanje stringa na konzolu (virtuelni konzolni uređaj) prikazuje ga na virtuelnom ekranu. VFS ima druga, još čudnija svojstva. Na primjer, omogućava vam da pretražujete po od njega.

Poznati sistemi kao što su ext4, NFS i /proc imaju tri važne funkcije u C strukturi podataka koja se zove file_operations. Pored toga, određeni sistemi datoteka proširuju i redefinišu VFS funkcionalnost na poznati objektno orijentisan način. Kako Robert Love ističe, VFS apstrakcija omogućava korisnicima Linuxa da nonšalantno kopiraju datoteke u ili sa operativnih sistema trećih strana ili apstraktnih entiteta poput cijevi bez brige o njihovom internom formatu podataka. Na korisničkoj strani (korisnički prostor), koristeći sistemski poziv, proces može kopirati iz datoteke u strukture podataka kernela koristeći metodu read() jedan sistem datoteka, a zatim koristite metod write () drugi sistem datoteka za izlaz podataka.

Definicije funkcija koje pripadaju osnovnim tipovima VFS nalaze se u datotekama fs/*.c izvorni kod kernela, dok poddirektorijumi fs/ sadrže određene sisteme datoteka. Jezgro također sadrži entitete kao što su cgroups, /dev и tmpfs, koji su potrebni tokom procesa pokretanja i stoga su definisani u poddirektorijumu kernela init/. Primetite to cgroups, /dev и tmpfs nemojte zvati funkcije "velike tri". file_operations, ali direktno čitanje i pisanje u memoriju.
Dijagram ispod pokazuje kako korisnički prostor pristupa različitim tipovima sistema datoteka koji se obično montiraju na Linux sistemima. Strukture nisu prikazane pipes, dmesg и POSIX clocks, koji takođe implementiraju strukturu file_operations, kojem se pristupa preko VFS sloja.

Virtualni datotečni sistemi u Linuxu: zašto su potrebni i kako funkcioniraju? Dio 1

VFS je "sloj omotača" između sistemskih poziva i implementacija određenih file_operations, kao što su ext4 и procfs. Funkcije file_operations može komunicirati ili sa upravljačkim programima uređaja ili sa uređajima za pristup memoriji. tmpfs, devtmpfs и cgroups nemojte koristiti file_operations, ali direktno pristupa memoriji.
Postojanje VFS-a pruža mogućnost ponovnog korištenja koda, budući da se osnovne metode povezane sa sistemima datoteka ne moraju ponovo implementirati od strane svakog tipa sistema datoteka. Ponovna upotreba koda je uobičajena praksa među softverskim inženjerima! Međutim, ako kod za višekratnu upotrebu sadrži ozbiljne greške, sve implementacije koje nasljeđuju uobičajene metode pate od njih.

/tmp: Jednostavan nagoveštaj

Jednostavan način da otkrijete da je VFS prisutan na sistemu je kucanje mount | grep -v sd | grep -v :/, koji će pokazati sve montirane (mounted) sistem datoteka koji nisu rezidentni na disku i koji nisu NFS, što je tačno na većini računara. Jedan od navedenih nosača (mounts) VFS će nesumnjivo /tmp, zar ne?

Virtualni datotečni sistemi u Linuxu: zašto su potrebni i kako funkcioniraju? Dio 1

Svi znaju to skladište / tmp na fizičkom mediju - ludilo! Izvor.

Zašto je nepoželjno čuvati /tmp na fizičkim medijima? Zato što su fajlovi u /tmp su privremeni i uređaji za skladištenje su sporiji od memorije u kojoj se kreira tmpfs. Štaviše, fizički mediji su podložniji habanju kada se prepisuju nego memorija. Konačno, datoteke u /tmp mogu sadržavati osjetljive informacije, tako da je nestanak pri svakom ponovnom pokretanju ključna karakteristika.

Nažalost, neke instalacijske skripte distribucije Linuxa kreiraju /tmp na uređaju za pohranu prema zadanim postavkama. Ne očajavajte ako se ovo desilo i vašem sistemu. Slijedite nekoliko jednostavnih uputa sa Arch Wikida to popravite i budite svjesni da je memorija dodijeljena za tmpfs postaje nedostupan za druge svrhe. Drugim riječima, sistemu sa ogromnim tmpfs-om i velikim datotekama na njemu može ponestati memorije i može se srušiti. Još jedan savjet: dok uređujete datoteku /etc/fstab, zapamtite da se mora završiti novim redom, inače se vaš sistem neće pokrenuti.

/proc i /sys

Osim toga /tmp, VFS (virtualni sistem datoteka) koji su najpoznatiji korisnicima Linuxa /proc и /sys. (/dev nalazi se u zajedničkoj memoriji i nema file_operations). Zašto ove dvije komponente? Hajde da pogledamo ovo pitanje.

procfs kreira snimak kernela i procesa koje nadgleda userspace. The /proc kernel ispisuje informacije o tome šta ima na raspolaganju, kao što su prekidi, virtuelna memorija i planer. osim toga, /proc/sys je mjesto gdje su parametri konfigurisani naredbom sysctl, dostupno za userspace. Status i statistika pojedinačnih procesa prikazani su u katalozima /proc/.

Virtualni datotečni sistemi u Linuxu: zašto su potrebni i kako funkcioniraju? Dio 1

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

Ponašanje /proc datoteke pokazuje koliko različiti VFS sistemi datoteka diska mogu biti. s jedne strane, /proc/meminfo sadrže informacije koje se mogu vidjeti pomoću naredbe free. S druge strane, prazan je! Kako to radi? Situacija podsjeća na poznati članak pod naslovom Postoji li mjesec kada ga niko ne gleda? Realnost i kvantna teorija"koju je napisao profesor fizike Univerziteta Cornell David Mermin 1985. Činjenica je da kernel prikuplja statistiku memorije kada je upućen zahtjev /proc, i zapravo u fajlovima /proc nema ničega kad niko ne gleda. Kao što je rečeno Mermin, "Fundamentalna kvantna doktrina kaže da mjerenje općenito ne otkriva već postojeću vrijednost svojstva koje se mjeri." (I smatrajte pitanje o mjesecu kao domaći zadatak!)
Prividna praznina procfs ima smisla jer su informacije tamo dinamične. Malo drugačija situacija sa sysfs. Uporedimo koliko datoteka ima najmanje jedan bajt veličine /proc i unutra /sys.

Virtualni datotečni sistemi u Linuxu: zašto su potrebni i kako funkcioniraju? Dio 1

Procfs ima jednu datoteku, naime izvezenu konfiguraciju kernela, što je izuzetak 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 fajlovi sysfs sadrže tačno jedan broj ili red, za razliku od tabela informacija dobijenih čitanjem datoteka kao što su /proc/meminfo.

Cilj sysfs - obezbijedi svojstva čitanja/pisanja onoga što kernel poziva «kobjects» u korisničkom prostoru. Jedini cilj kobjects je broj veza: kada se ukloni posljednja veza do kobject-a, sistem će vratiti resurse povezane s njim. ipak, /sys čini većinu poznatih "stabilan ABI za korisnički prostor" jezgro, koje niko nikada, ni pod kojim okolnostima ne može "prekid". To ne znači da su datoteke u sysfs-u statične, što ne bi bilo u skladu s brojanjem referenci nestabilnih objekata.
Stabilni ABI kernela ograničava ono u čemu se može pojaviti /sys, a ne ono što je zapravo prisutno u tom trenutku. Navođenje dozvola datoteka u sysfs-u pruža uvid u to kako se konfiguriraju postavke za uređaje, module, sisteme datoteka itd. može se konfigurirati ili čitati. Logičan zaključak je da je procfs također dio stabilnog ABI kernela, iako to nije eksplicitno navedeno u dokumentaciju.

Virtualni datotečni sistemi u Linuxu: zašto su potrebni i kako funkcioniraju? Dio 1

Fajlovi u sysfs opisuju jedno posebno svojstvo za svaki entitet i mogu biti čitljivi, pisani ili oboje. "0" u datoteci znači da se SSD ne može ukloniti.

Započnimo drugi dio prijevoda kako pratiti VFS pomoću eBPF i bcc alata, a sada čekamo vaše komentare i tradicionalno vas pozivamo da otvoreni webinar, koji će održati naša učiteljica 9. aprila - Vladimir Drozdetski.

izvor: www.habr.com

Dodajte komentar