Sisteme de fișiere virtuale în Linux: de ce sunt necesare și cum funcționează? Partea 1

Salut tuturor! Continuăm lansările de noi cursuri pe care le-ați îndrăgit deja și acum ne grăbim să vă anunțăm că vom începe un nou curs „Administrator Linux”, care va fi lansat la sfârșitul lunii aprilie. Această ocazie va fi marcată printr-o nouă publicație. Puteți citi materialul original aici.

Sistemele de fișiere virtuale joacă rolul unei abstracții magice, care permite filozofiei Linux să afirmе că „totul este un fișier”.

Sisteme de fișiere virtuale în Linux: de ce sunt necesare și cum funcționează? Partea 1

Ce este un sistem de fișiere? Bazându-ne pe cuvintele unuia dintre primii contribuitori și autori ai Linux Robert Love, „Un sistem de fișiere este un depozit ierarhic de date, organizat conform unei anumite structuri”. Oricum, această definiție se aplică la fel de bine pentru VFAT (Virtual File Allocation Table), Git și Cassandra (baze de date NoSQL). Așadar, ce anume definește conceptul de „sistem de fișiere”?

Bazele sistemului de fișiere

Kernelul Linux are cerințe specifice pentru entitatea care poate fi considerată un sistem de fișiere. Aceasta trebuie să implementeze metode open(), read() și write() pentru obiecte persistente care au nume. Din perspectiva programării orientate pe obiecte , kernelul definește un sistem de fișiere generalizat (generic filesystem) ca o interfață abstractă, iar aceste trei mari funcții sunt considerate „virtuale” și nu au o definiție concretă. În consecință, implementarea sistemului de fișiere implicit se numește sistem de fișiere virtual (VFS).Dacă putem deschide, citi și scrie într-o entitate, atunci acea entitate este considerată un fișier, așa cum putem observa din exemplul de mai sus în consolă.

Sisteme de fișiere virtuale în Linux: de ce sunt necesare și cum funcționează? Partea 1

Fenomenul VFS subliniază observația caracteristică sistemelor Unix-like, care afirmă că „totul este un fișier”. Gândiți-vă cât de ciudat este că acel mic exemplu de mai sus cu /dev/console arată cum funcționează efectiv consola. Imaginea ilustrează o sesiune interactivă Bash. Trimiterea unei linii în consolă (dispozitivul consolei virtuale) o afișează pe ecranul virtual. VFS are alte, și mai ciudate, proprietăți. De exemplu, ea permite efectuarea căutărilor peste
acestea Sistemele pe care le cunoaștem, cum ar fi ext4, NFS și /proc, au trei funcții importante în structura de date C, numită.

file_operations file_operations. În plus, anumite sisteme de fișiere extind și redefinirea funcțiilor VFS într-un mod obiectual obișnuit. Așa cum observă Robert Love, abstractizarea VFS permite utilizatorilor Linux să copieze fișiere în sau din sisteme de operare externe sau entități abstracte, cum ar fi pipes, fără a se îngrijora de formatul lor intern de date. Din perspectiva utilizatorului (userspace), printr-un apel de sistem, procesul poate copia dintr-un fișier în structuri de date ale nucleului prin metoda read() unei sisteme de fișiere, apoi folosi metoda write () a unei alte sisteme de fișiere pentru a scrie datele.

Definițiile funcțiilor care aparțin tipurilor de bază VFS se află în fișierele fs/*.c ale codului sursă al nucleului, în timp ce subdirectoarele fs/ conțin anumite sisteme de fișiere. În nucleu se găsesc, de asemenea, entități, cum ar fi cgroups, /dev și tmpfs, care sunt necesare în procesul de încărcare și, prin urmare, sunt definite în subdirectorul nucleului init/. Rețineți că cgroups, /dev și tmpfs nu invocă „cele trei mari” funcții file_operations, ci citesc și scriu direct în memorie.
Diagrama de mai jos arată cum userspace interacționează cu diferite tipuri de sisteme de fișiere, de obicei montate pe sistemele Linux. Construcțiile precum pipes, dmesg și ceasurile POSIX, care implementează, de asemenea, structuri file_operations, la care se accesează prin stratul VFS.

Sisteme de fișiere virtuale în Linux: de ce sunt necesare și cum funcționează? Partea 1

VFS este un „strat de înveliș” între apelurile de sistem și implementările anumitor file_operations, cum ar fi ext4 și procfs. Funcțiile file_operations pot interacționa fie cu driverele de dispozitive, fie cu dispozitivele de acces la memorie. tmpfs, devtmpfs și cgroups nu folosesc file_operations, având acces direct la memorie.
Existența VFS permite reutilizarea codului, deoarece metodele de bază legate de sistemele de fișiere nu trebuie să fie implementate din nou de fiecare tip de sistem de fișiere. Reutilizarea codului este o practică larg răspândită printre inginerii software! Cu toate acestea, dacă codul reutilizabil conține erori severe, toate implementările care moștenesc metodele comune sunt afectate.

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

O metodă simplă de a determina că VFS este prezent în sistem este să introduceți mount | grep -v sd | grep -v :/, care va arăta toate sistemele de fișiere montate (mounted) care nu sunt rezidente pe disc și nu sunt NFS, ceea ce este adevărat în majoritatea computerelor. Una dintre montările enumerate (mounts) VFS va fi, fără îndoială, /tmp, corect?

Sisteme de fișiere virtuale în Linux: de ce sunt necesare și cum funcționează? Partea 1

Toți știu că stocarea / tmp pe un suport fizic este o nebunie! Sursa.

De ce nu este recomandat să stocăm /tmp pe un suport fizic? Pentru că fișierele din /tmp sunt temporare, iar dispozitivele de stocare sunt mai lente decât memoria, unde se creează tmpfs. Mai mult, suporturile fizice sunt mai predispuse la uzură la scriere decât memoria. În cele din urmă, fișierele din /tmp pot conține informații confidențiale, astfel că dispariția lor la fiecare repornire este o funcție esențială.

Din păcate, unele scripturi de instalare a distribuțiilor Linux creează /tmp pe un dispozitiv de stocare în mod implicit. Nu vă descurajați dacă s-a întâmplat și cu sistemul dumneavoastră. Urmați câteva instrucțiuni simple de pe Arch Wiki, pentru a corecta asta, și amintiți-vă că memoria alocată pentru tmpfs devine indisponibilă pentru alte scopuri. Cu alte cuvinte, un sistem cu un tmpfs gigant și fișiere mari în el poate consuma toată memoria și se poate bloca. Un alt sfat: când editați fișierul /etc/fstab, amintiți-vă că acesta trebuie să se încheie cu un newline, altfel sistemul nu va porni.

/proc и /sys

În plus /tmp, VFS (sisteme de fișiere virtuale), care sunt cele mai cunoscute utilizatorilor Linux – este /proc și /sys. (/dev situat în memoria comună și nu are file_operations). De ce exact aceste două componente? Să încercăm să înțelegem această chestiune.

procfs creează o instantanee a stării curente a nucleului și a proceselor pe care le controlează pentru userspace. În /proc nucleul furnizează informații despre resursele disponibile, cum ar fi întreruperi, memorie virtuală și planificator. În plus, /proc/sys este locul unde parametrii setați cu comanda sysctl, sunt disponibili pentru userspace. Starea și statisticile proceselor individuale sunt afișate în directoare /proc/.

Sisteme de fișiere virtuale în Linux: de ce sunt necesare și cum funcționează? Partea 1

Aici /proc/meminfo — este un fișier gol care, cu toate acestea, conține informații valoroase.

Comportamentul /proc fișierelor arată cât de diferite pot fi sistemele de fișiere VFS. Pe de o parte, /proc/meminfo conțin informații care pot fi aflate prin comanda free. Pe de altă parte, acolo este gol! Cum se face asta? Situația amintește de binecunoscuta lucrare intitulată «Există lună atunci când nimeni nu o privește? Realitate și teorie cuantică», scrisă de profesorul de fizică de la Universitatea Cornell, David Mermin, în 1985. Adevărul este că nucleul colectează statistici ale memoriei atunci când are loc o solicitare la /proc, și, de fapt, în fișiere. /proc nu este nimic atunci când nimeni nu se uită acolo. Așa cum a spus Mermin, „Doctrina fundamentală a cuantelor afirmă că măsurarea, în general, nu dezvăluie o valoare existentă anterior a proprietății măsurate.” (Iar către întrebarea despre lună, gândiți-vă ca temă pentru acasă!)
Vidul aparent procfs are sens, deoarece informația aflată acolo este dinamică. O situație ceva diferită este cu sysfs. Să comparăm câte fișiere de cel puțin un byte sunt în /proc și în /sys.

Sisteme de fișiere virtuale în Linux: de ce sunt necesare și cum funcționează? Partea 1

Procfs are un singur fișier, și anume configurația exportată a nucleului, care este o excepție, deoarece trebuie generată doar o dată la boot. Pe de altă parte, în /sys se află multe fișiere mai voluminoase, multe dintre ele ocupând o pagină întreagă de memorie. De obicei, fișierele sysfs conțin exact un număr sau un șir, spre deosebire de tabelele de informații obținute la citirea unor fișiere precum /proc/meminfo.

Scop sysfs – pentru a oferi proprietăți disponibile pentru citire și scriere a ceea ce nucleul denumește „kobjects” în userspace. Singurul scop al kobjects este numărarea referințelor: atunci când ultima referință la un kobject este ștearsă, sistemul va elibera resursele asociate cu acesta. Cu toate acestea, /sys reprezintă cea mai mare parte a faimosului „stable ABI pentru userspace” al nucleului, care nu poate fi niciodată „stricat” . Aceasta nu înseamnă că fișierele din sysfs sunt statice, ceea ce ar contrazice numărarea referințelor la obiecte instabile.Interfața binară stabilă a aplicațiilor nucleului (kernel’s stable ABI) limitează ceea ce poate apărea în
, și nu ceea ce este de fapt prezent în acel moment specific. Listarea permisiunilor fișierelor din sysfs oferă o înțelegere a modului în care parametrii configurabili ai dispozitivelor, modulelor, sistemelor de fișiere etc. pot fi setați sau citiți. Conchidem logic că procfs este de asemenea parte din stable ABI al nucleului, deși acest lucru nu este specificat explicit în /sysFișierele din documentation.

Sisteme de fișiere virtuale în Linux: de ce sunt necesare și cum funcționează? Partea 1

descriu o proprietate specifică pentru fiecare entitate și pot fi citite, rescrise sau ambele simultan. „0” în fișier indică faptul că SSD-ul nu poate fi șters. sysfs Vom începe partea a doua a traducerii discutând despre observarea VFS cu ajutorul instrumentelor eBPF și bcc, iar acum așteptăm comentariile dumneavoastră și vă invităm tradițional la

, care pe 9 aprilie va fi condus de instructorul nostru — webinarul deschisVladimir Drozdetsky Владимир Дроздецкий.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster