Salutare tuturor! Continuăm să lansăm noi fluxuri pentru cursurile de care te-ai îndrăgostit deja și acum ne grăbim să anunțăm că începem un nou set de cursuri
Sistemele de fișiere virtuale servesc ca un fel de abstractizare magică care permite filozofiei Linux să spună că „totul este un fișier”.
Ce este un sistem de fișiere? Bazat pe cuvintele unuia dintre primii contribuitori și autori ai Linux
Bazele sistemului de fișiere
Nucleul Linux are anumite cerințe pentru o entitate care poate fi considerată un sistem de fișiere. Trebuie să implementeze metodele open()
, read()
и write()
pentru obiectele persistente care au nume. Din punct de vedere orientat pe obiecte
Dacă putem deschide, citi și scrie într-o entitate, atunci acea entitate este considerată un fișier, așa cum putem vedea din exemplul din consola de mai sus.
Fenomenul VFS subliniază doar observația Unix-like că „totul este un fișier”. Gândiți-vă cât de ciudat că acel mic exemplu /dev/console de mai sus arată cum funcționează de fapt consola. Imaginea arată o sesiune interactivă Bash. Trimiterea unui șir către consolă (dispozitiv de consolă virtuală) îl afișează pe un ecran virtual. VFS are alte proprietăți, chiar mai ciudate. De exemplu, vă permite să căutați după
Sistemele familiare precum ext4, NFS și /proc au trei funcții importante într-o structură de date C numită read()
un sistem de fișiere și apoi utilizați metoda write ()
un alt sistem de fișiere pentru ieșirea datelor.
Definițiile funcției care aparțin tipurilor de bază VFS sunt în fișiere fs/
conţin anumite sisteme de fişiere. Nucleul conține, de asemenea, entități precum cgroups
, /dev
и tmpfs
, care sunt necesare în timpul procesului de pornire și, prin urmare, sunt definite în subdirectorul kernelului init/
. Observa asta cgroups
, /dev
и tmpfs
nu numiți funcțiile „trei mari”. file_operations
, dar citiți și scrieți direct în memorie.
Diagrama de mai jos arată modul în care spațiul utilizatorului accesează diferitele tipuri de sisteme de fișiere montate în mod obișnuit pe sistemele Linux. Structuri nu sunt afișate pipes
, dmesg
и POSIX clocks
, care implementează și structura file_operations
, accesat prin stratul VFS.
VFS este un „layer de înveliș” între apelurile de sistem și implementările anumitor file_operations
cum ar fi ext4
и procfs
. Funcții file_operations
poate interacționa fie cu driverele de dispozitiv, fie cu dispozitivele de acces la memorie. tmpfs
, devtmpfs
и cgroups
nu folosi file_operations
, dar accesați direct memoria.
Existența VFS oferă o oportunitate de reutilizare a codului, deoarece metodele de bază asociate sistemelor de fișiere nu trebuie să fie reimplementate de fiecare tip de sistem de fișiere. Reutilizarea codului este o practică comună în rândul inginerilor de software! Totuși, dacă codul reutilizabil conține
/tmp: Sugestie simplă
O modalitate ușoară de a detecta dacă VFS sunt prezente pe un sistem este să tastați mount | grep -v sd | grep -v :/
, care va afișa toate montate (mounted
) sisteme de fișiere care nu sunt rezidente pe disc și non-NFS, ceea ce este valabil pe majoritatea computerelor. Unul dintre monturile enumerate (mounts
) VFS va, fără îndoială /tmp
, dreapta?
Toată lumea știe acel depozit / tmp
pe un mediu fizic - nebunie!
De ce nu este de dorit să se depoziteze /tmp
pe medii fizice? Pentru că fișierele din /tmp
sunt temporare, iar dispozitivele de stocare sunt mai lente decât memoria în care este creat tmpfs. Mai mult, mediile fizice sunt mai susceptibile de a fi uzate atunci când sunt suprascrise decât memoria. În cele din urmă, fișierele din /tmp pot conține informații sensibile, astfel încât să le facă să dispară la fiecare repornire este o caracteristică esențială.
Din păcate, unele scripturi de instalare a distribuției Linux creează /tmp pe dispozitivul de stocare în mod implicit. Nu disperați dacă acest lucru s-a întâmplat și cu sistemul dvs. Urmați câteva instrucțiuni simple cu tmpfs
devine indisponibilă pentru alte scopuri. Cu alte cuvinte, un sistem cu un tmpfs gigant și fișiere mari pe el poate rămâne fără memorie și să se prăbușească. Un alt indiciu: în timp ce editați un fișier /etc/fstab
, amintiți-vă că trebuie să se încheie cu o linie nouă, altfel sistemul dumneavoastră nu va porni.
/proc și /sys
În afară de /tmp
, VFS (sisteme de fișiere virtuale) care sunt cele mai familiare utilizatorilor Linux sunt /proc
и /sys
. (/dev
rezidă în memoria partajată și nu are file_operations
). De ce aceste două componente? Să ne uităm la această problemă.
procfs
creează un instantaneu al nucleului și al proceselor pe care le monitorizează userspace
. În /proc
nucleul imprimă informații despre ceea ce are disponibil, cum ar fi întreruperi, memoria virtuală și planificatorul. In afara de asta, /proc/sys
este locul unde sunt configurați parametrii cu comanda sysctl
, Disponibil pentru userspace
. Starea și statisticile proceselor individuale sunt afișate în directoare /proc/
.
Aici /proc/meminfo
este un fișier gol care conține totuși informații valoroase.
comportament /proc
fișierele arată cât de diferite pot fi sistemele de fișiere de disc VFS. Pe de o parte, /proc/meminfo
conțin informații care pot fi vizualizate cu comanda free
. Pe de altă parte, e gol! Cum functioneazã? Situația amintește de celebrul articol intitulat /proc
, și de fapt în fișiere /proc
nu există nimic când nimeni nu se uită. După cum s-a spus
Părea de gol procfs
are sens deoarece informațiile de acolo sunt dinamice. O situație puțin diferită cu sysfs
. Să comparăm câte fișiere care au dimensiunea de cel puțin un octet se află /proc
și /sys
.
Procfs
are un singur fișier, și anume configurația kernel-ului exportată, care este o excepție deoarece trebuie generată o singură dată per pornire. Pe de altă parte, în /sys
există multe fișiere mai mari, dintre care multe ocupă o întreagă pagină de memorie. De obicei fișiere sysfs
conțin exact un număr sau o linie, spre deosebire de tabelele de informații obținute din citirea fișierelor precum /proc/meminfo
.
Scop sysfs
- furnizați proprietăți de citire/scriere a ceea ce apelează nucleul «kobjects»
în spațiul utilizatorului. Singurul scop kobjects
este contorizarea linkurilor: când ultima legătură către un kobject este eliminată, sistemul va restaura resursele asociate cu acesta. Cu toate acestea, /sys
alcătuiește majoritatea celebrilor
ABI stabil al nucleului limitează ceea ce poate apărea în /sys
, nu ceea ce este de fapt prezent în acel moment anume. Listarea permisiunilor de fișiere în sysfs oferă o perspectivă asupra modului în care setările configurabile pentru dispozitive, module, sisteme de fișiere etc. poate fi configurat sau citit. Concluzia logică este că procfs face, de asemenea, parte din ABI stabil al nucleului, deși acest lucru nu este menționat în mod explicit în
Fișiere în sysfs
descrie o proprietate particulară pentru fiecare entitate și poate fi citită, scrisă sau ambele. „0” din fișier înseamnă că SSD-ul nu poate fi îndepărtat.
Să începem a doua parte a traducerii cu cum să monitorizăm VFS folosind instrumentele eBPF și bcc, iar acum așteptăm comentariile dvs. și vă invităm în mod tradițional să
Sursa: www.habr.com