Virtualne datotečne sustave u Linuxu: zašto su potrebni i kako rade? Dio 1

Pozdrav svima! Nastavljamo s pokretanjem novih tečajeva prema onim koje ste već zavoljeli i sada vam želimo javiti da započinjemo novi upis za tečaj „Administrator Linuxa“, koji će započeti krajem travnja. Ovom događaju bit će posvećen novi članak. S originalnim materijalom možete upuštati se ovdje.

Virtualni datotečni sustavi igraju ulogu neke vrste čarobne apstrakcije koja omogućuje filozofiji Linuxa da kaže da je "sve datoteka".

Virtualne datotečne sustave u Linuxu: zašto su potrebni i kako rade? Dio 1

Što je datotečni sustav? Oslanjajući se na riječi jednog od prvih doprinositelja i autora Linuxa Roberta Lava, "Datotečni sustav je hijerarhijska pohrana podataka organizirana prema određenoj strukturi". Ipak, ova definicija jednako dobro odgovara za VFAT (Virtual File Allocation Table), Git i Cassandra (NoSQL bazu podataka). Što zapravo definira pojam "datotečni sustav"?

Osnove datotečnih sustava

Jezgra Linuxa ima određene zahtjeve prema entitetu koji se može smatrati datotečnim sustavom. Mora implementirati metode open(), read() i write() za stalne objekte koji imaju imena. Sa stajališta objektno-orijentiranog programiranja, jezgra definira opći datotečni sustav (generic filesystem) kao apstraktni sučelje, a te tri velike funkcije smatraju se "virtualnima" i nemaju konkretno definiranje. Stoga, implementacija datotečnog sustava prema zadanim postavkama naziva se virtualnim datotečnim sustavom (VFS).

Virtualne datotečne sustave u Linuxu: zašto su potrebni i kako rade? Dio 1

Ako možemo otvoriti, čitati i pisati u entitet, taj entitet se smatra datotekom, kao što vidimo iz primjera u konzoli iznad.
Fenomen VFS samo naglašava zapažanje karakteristično za Unix-slične sustave, koje kaže da je "sve datoteka". Razmislite o tome koliko je čudno što taj mali primjer iznad s /dev/console pokazuje kako zapravo konzola radi. Na slici je prikazana interaktivna Bash sesija. Slanje retka u konzolu (virtualni uređaj konzole) prikazuje ga na virtualnom ekranu. VFS ima i druge, još čudnije osobine. Na primjer, omogućuje pretraživanje kroz njih.

Poznati sustavi, poput ext4, NFS i /proc imaju tri važne funkcije u strukturi podataka C koja se naziva file_operations. Osim toga, određeni datotečni sustavi proširuju i redefiniraju funkcije VFS na uobičajen objektno-orijentirani način. Kao što Robert Love ističe, apstrakcija VFS omogućuje Linux korisnicima da bez brige kopiraju datoteke u ili iz vanjskih operativnih sustava ili apstraktnih entiteta poput cijevi, ne brinući se o njihovom internom formatu podataka. S korisničke strane, putem sistemskog poziva, proces može kopirati iz datoteke u strukture podataka jezgre koristeći metodu read() jednog datotečnog sustava, a zatim koristiti metodu write () drugog datotečnog sustava za ispis podataka.

Definicije funkcija koje pripadaju osnovnim tipovima VFS nalaze se u datotekama fs/*.c izvornog koda jezgre, dok poddirektoriji fs/ sadrže određene datotečne sustave. U jezgri se također nalaze entiteti poput cgroups, /dev i tmpfs, koji su potrebni u procesu pokretanja i stoga se definiraju u poddirektoriju jezgre init/. Primijetite da cgroups, /dev i tmpfs ne pozivaju «veliku trojku» funkcija file_operations, već izravno čitaju i pišu u memoriju.
Na donjoj dijagrami prikazano je kako userspace pristupa različitim vrstama datotečnih sustava koje se obično montiraju u Linux sustavima. Nisu prikazane konstrukcije poput pipes, dmesg i POSIX satova, koje također implementiraju strukturu file_operations, a pristup im ide kroz sloj VFS.

Virtualne datotečne sustave u Linuxu: zašto su potrebni i kako rade? Dio 1

VFS je «sloj omota» između sistemskih poziva i implementacija određenih file_operations, kao što su ext4 i procfs. Funkcije file_operations mogu komunicirati ili s upravljačkim programima uređaja ili s uređajima za pristup memoriji. tmpfs, devtmpfs i cgroups ne koristi file_operations, a izravno pristupaju memoriji.
Postojanje VFS omogućuje ponovnu upotrebu koda, budući da osnovne metode povezane s datotečnim sustavima ne moraju biti ponovno implementirane za svaku vrstu datotečnog sustava. Ponovna upotreba koda je široko rasprostranjena praksa među inženjerima! Ipak, ako ponovo korišteni kod sadrži ozbiljne greške, svi će se implikacije kojima je zajedničke metode naslijedile suočiti s tim problemima.

/tmp: Простая подсказка

Jednostavan način da se otkrije da su VFS prisutni u sustavu je unijeti mount | grep -v sd | grep -v :/, što će prikazati sve montirane (mounted) datotečne sustave koji nisu rezidentni na disku i nisu NFS, što vrijedi za većinu računala. Jedan od navedenih montaža (mounts) VFS, zasigurno će biti /tmp, zar ne?

Virtualne datotečne sustave u Linuxu: zašto su potrebni i kako rade? Dio 1

Svi znaju da pohrana / tmp na fizičkom nositelju – ludilo! Izvor.

Zašto nije preporučljivo pohranjivati /tmp na fizičkom nositelju? Zato što su datoteke u /tmp privremene, a uređaji za pohranu su sporiji od memorije gdje se kreira tmpfs. Štoviše, fizički nositelji su skloniji trošenju prilikom prepisivanja nego memorija. Na kraju, datoteke u /tmp mogu sadržavati povjerljive informacije, pa je njihovo nestajanje pri svakom ponovnom podizanju sustava neizostavna funkcija.

Nažalost, neki instalacijski skripti Linux distribucija po defaultu kreiraju /tmp na uređaju za pohranu. Ne očajavajte ako se to dogodilo i vašem sustavu. Izvršite nekoliko jednostavnih uputa s Arch Wiki, da biste to ispravili, i zapamtite da memorija dodijeljena za tmpfs ne postaje dostupna za druge svrhe. Drugim riječima, sustav s ogromnim tmpfs-om i velikim datotekama u njemu može potrošiti svu memoriju i srušiti se. Drugi savjet: tijekom uređivanja datoteke /etc/fstab, zapamtite da bi trebala završiti novim retkom, inače se vaš sustav neće podići.

/proc и /sys

Osim /tmp, VFS (virtualni datotečni sustavi), koji su najpoznatiji korisnicima Linux-a – to su /proc i /sys. (/dev smješteni u zajedničkoj memoriji i nemaju file_operations). Zašto baš ova dva komponente? Razjasnimo ovo pitanje.

procfs stvara snimak trenutnog stanja jezgre i procesa koje kontrolira za userspace. U /proc jezgra ispisuje informacije o sredstvima koja ima na raspolaganju, poput prekida, virtualne memorije i rasporeda. Osim toga, /proc/sys – to je mjesto gdje su opcije konfigurirane pomoću naredbe sysctl, dostupne za userspace. Status i statistika pojedinih procesa ispisuju se u direktorijima /proc/.

Virtualne datotečne sustave u Linuxu: zašto su potrebni i kako rade? Dio 1

Ovdje /proc/meminfo — to je prazna datoteka koja ipak sadrži dragocjene informacije.

Ponašanje /proc datoteka pokazuje kako se diskovni datotečni sustavi VFS mogu jako razlikovati. S jedne strane, /proc/meminfo sadrži informacije koje se mogu pregledati pomoću naredbe free. S druge strane, tamo je prazno! Kako to? Situacija podsjeća na poznati članak pod nazivom„Postoji li mjesec kada ga nitko ne gleda? Stvarnost i kvantna teorija” /proc, koji je napisao profesor fizike s Cornell univerziteta David Mermin 1985. godine. Naime, jezgra prikuplja statistiku memorije kada dođe do zahtjeva za /proc nema ničega kada nitko ne gleda. Kako je rekao Mermin, "Osnovna kvantna doktrina kaže da mjerenje, u pravilu, ne otkriva prethodno postojeću vrijednost mjerenog svojstva." (A razmislite o pitanju o mjesecu kao domaću zadaću!)
Čini se kao praznina procfs ima smisla jer je informacije koje se tamo nalaze dinamične. Malo drugačija situacija je s sysfs. Uporedimo koliko datoteka veličine barem jedan bajt ima u /proc i u /sys.

Virtualne datotečne sustave u Linuxu: zašto su potrebni i kako rade? Dio 1

Procfs ima jednu datoteku, a to je exportirana konfiguracija kernela, koja je iznimka jer se mora generirati samo jednom po pokretanju. S druge strane, u /sys ima mnogo većih datoteka, od kojih mnoge zauzimaju cijelu stranicu memorije. Obično datoteke sysfs sadrže točno jedan broj ili niz, za razliku od tablica informacija dobivenih čitanjem takvih datoteka kao /proc/meminfo.

Cilj sysfs – pruža svojstva koja su dostupna za čitanje i pisanje onoga što kernel naziva "kobjects" u userspaceu. Jedini cilj kobjects je brojanje referenci: kada se posljednja referenca na kobject ukloni, sustav će osloboditi resurse povezane s njim. Ipak, /sys čin čin "stabilni ABI za userspace" kernela, koji nitko nikada, ni pod kojim okolnostima ne može "slomiti". To ne znači da su datoteke u sysfs statične, što bi bilo u suprotnosti s brojanjem referenci na nestabilne objekte.
Stabilno binarno sučelje aplikacija kernela (kernel’s stable ABI) ograničava ono što može biti prisutno u /sys, a ne ono što je zapravo prisutno u tom određenom trenutku. Popis dopuštenja za datoteke u sysfs omogućava razumijevanje kako se konfigurabilni parametri uređaja, modula, datotečnih sustava itd. mogu postaviti ili pročitati. Izvlačimo logički zaključak da je procfs također dio stabilnog ABI-ja kernela, iako to nije izričito navedeno u dokumentaciju.

Virtualne datotečne sustave u Linuxu: zašto su potrebni i kako rade? Dio 1

Datoteke u sysfs opisuju jednu konkretnu osobinu za svaki entitet i mogu biti čitljive, prepisive ili oboje u isto vrijeme. "0" u datoteci ukazuje da SSD ne može biti uklonjen.

Drugi dio prijevoda započinjemo s time kako promatrati VFS pomoću alata eBPF i bcc, a sada čekamo vaše komentare i tradicionalno vas pozivamo na otvoreni webinar, koji će 9. travnja održati naš predavač — Vladimir Drozdetsky.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster