Sistemes de fitxers virtuals a Linux: per què són necessaris i com funcionen? Part 1

Hola a tots! Continuem llançant nous streams per als cursos dels quals ja us heu enamorat i ara tenim pressa per anunciar que comencem un nou conjunt de cursos "Administrador Linux"que es posarà en marxa a finals d'abril. Es data una nova publicació per a aquest esdeveniment. Amb el material original, pots llegiu aquí.

Els sistemes de fitxers virtuals serveixen com una mena d'abstracció màgica que permet que la filosofia de Linux digui que "tot és un fitxer".

Sistemes de fitxers virtuals a Linux: per què són necessaris i com funcionen? Part 1

Què és un sistema de fitxers? Basat en les paraules d'un dels primers col·laboradors i autors de Linux Roberta Lava, "Un sistema de fitxers és un emmagatzematge jeràrquic de dades reunides segons una estructura específica". Sigui com sigui, aquesta definició s'adapta igualment a VFAT (Virtual File Allocation Table), Git i Cassandra (Base de dades NoSQL). Aleshores, què defineix exactament una cosa com a "sistema de fitxers"?

Conceptes bàsics del sistema de fitxers

El nucli de Linux té certs requisits per a una entitat que es pot considerar un sistema de fitxers. Ha d'implementar els mètodes open(), read() и write() per a objectes persistents que tenen noms. Des d'un punt de vista orientat a objectes programació, el nucli defineix un sistema de fitxers genèric com una interfície abstracta, i aquestes tres grans funcions es consideren "virtuals" i no tenen una definició concreta. En conseqüència, la implementació del sistema de fitxers per defecte s'anomena sistema de fitxers virtual (VFS).

Sistemes de fitxers virtuals a Linux: per què són necessaris i com funcionen? Part 1

Si podem obrir, llegir i escriure en una entitat, aquesta entitat es considera un fitxer, com podem veure a l'exemple de la consola anterior.
El fenomen VFS només subratlla l'observació semblant a Unix que "tot és un fitxer". Penseu que estrany que aquest petit exemple de /dev/console anterior mostri com funciona realment la consola. La imatge mostra una sessió de Bash interactiva. En enviar una cadena a la consola (dispositiu de consola virtual) la mostra en una pantalla virtual. VFS té altres propietats encara més estranyes. Per exemple, us permet cercar per per ell.

Els sistemes familiars com ext4, NFS i /proc tenen tres funcions importants en una estructura de dades C anomenada operacions_fitxer. A més, certs sistemes de fitxers estenen i redefineixen la funcionalitat VFS d'una manera familiar orientada a objectes. Tal com assenyala Robert Love, l'abstracció VFS permet als usuaris de Linux copiar fitxers amb indiferència a o des de sistemes operatius de tercers o entitats abstractes com les canonades sense preocupar-se pel format de dades interns. Al costat de l'usuari (espai d'usuari), mitjançant una trucada al sistema, un procés pot copiar des d'un fitxer a estructures de dades del nucli mitjançant el mètode read() un sistema de fitxers i després utilitzeu el mètode write () un altre sistema de fitxers per a la sortida de dades.

Les definicions de funcions que pertanyen als tipus VFS base es troben als fitxers fs/*.c codi font del nucli, mentre que els subdirectoris fs/ conté determinats sistemes de fitxers. El nucli també conté entitats com ara cgroups, /dev и tmpfs, que es requereixen durant el procés d'arrencada i, per tant, es defineixen al subdirectori del nucli init/. Adona't que cgroups, /dev и tmpfs no anomeneu les funcions "tres grans". file_operations, però directament llegir i escriure a la memòria.
El diagrama següent mostra com l'espai d'usuari accedeix als diferents tipus de sistemes de fitxers muntats habitualment als sistemes Linux. Estructures no mostrades pipes, dmesg и POSIX clocks, que també implementen l'estructura file_operations, s'hi accedeix a través de la capa VFS.

Sistemes de fitxers virtuals a Linux: per què són necessaris i com funcionen? Part 1

VFS és una "capa d'embolcall" entre trucades al sistema i implementacions de certes file_operationsCom ext4 и procfs. Funcions file_operations pot interactuar amb els controladors de dispositiu o amb els dispositius d'accés a la memòria. tmpfs, devtmpfs и cgroups no utilitzi file_operations, però accedeix directament a la memòria.
L'existència de VFS ofereix una oportunitat per reutilitzar codi, ja que els mètodes bàsics associats als sistemes de fitxers no han de ser reimplementats per cada tipus de sistema de fitxers. La reutilització del codi és una pràctica habitual entre els enginyers de programari! Tanmateix, si el codi reutilitzable conté errors greus, totes les implementacions que hereten mètodes comuns en pateixen.

/tmp: pista senzilla

Una manera senzilla de detectar que els VFS estan presents en un sistema és escriure mount | grep -v sd | grep -v :/, que mostrarà tots els muntats (mounted) sistemes de fitxers que no són residents al disc i que no són NFS, que és cert a la majoria d'ordinadors. Un dels muntatges enumerats (mounts) VFS ho farà sens dubte /tmp, dret?

Sistemes de fitxers virtuals a Linux: per què són necessaris i com funcionen? Part 1

Tothom sap aquest emmagatzematge / tmp en un mitjà físic: bogeria! Font.

Per què no és desitjable emmagatzemar /tmp en mitjans físics? Perquè els fitxers a /tmp són temporals i els dispositius d'emmagatzematge són més lents que la memòria on es crea tmpfs. A més, els mitjans físics són més susceptibles de desgastar-se quan se sobreescriuen que la memòria. Finalment, els fitxers de /tmp poden contenir informació sensible, de manera que fer-los desaparèixer a cada reinici és una característica essencial.

Malauradament, alguns scripts d'instal·lació de distribució de Linux creen /tmp al dispositiu d'emmagatzematge de manera predeterminada. No us desespereu si això també li va passar al vostre sistema. Seguiu unes quantes instruccions senzilles amb Arch Wikiper solucionar-ho, i tingueu en compte que la memòria assignada per tmpfs no està disponible per a altres finalitats. En altres paraules, un sistema amb un tmpfs gegant i fitxers grans pot quedar-se sense memòria i bloquejar-se. Un altre consell: mentre editeu un fitxer /etc/fstab, recordeu que ha d'acabar amb una nova línia, en cas contrari el vostre sistema no arrencarà.

/proc i /sys

A més /tmp, VFS (sistemes de fitxers virtuals) que són més familiars per als usuaris de Linux són /proc и /sys. (/dev resideix a la memòria compartida i no té file_operations). Per què aquests dos components? Anem a analitzar aquest tema.

procfs crea una instantània del nucli i dels processos que supervisa userspace. En /proc el nucli imprimeix informació sobre el que té disponible, com ara interrupcions, memòria virtual i el planificador. A més, /proc/sys és el lloc on es configuren els paràmetres amb l'ordre sysctl, disponible per userspace. L'estat i les estadístiques dels processos individuals es mostren als directoris /proc/.

Sistemes de fitxers virtuals a Linux: per què són necessaris i com funcionen? Part 1

Aquí /proc/meminfo és un fitxer buit que, tanmateix, conté informació valuosa.

Comportament /proc fitxers mostra com poden ser diferents sistemes de fitxers de disc VFS. D'una banda, /proc/meminfo conté informació que es pot veure amb l'ordre free. D'altra banda, està buit! Com funciona? La situació recorda al famós article titulat Existeix la lluna quan ningú la mira? Realitat i teoria quàntica"escrit pel professor de física de la Universitat de Cornell David Mermin el 1985. El fet és que el nucli recopila estadístiques de memòria quan es fa una sol·licitud /proc, i de fet en fitxers /proc no hi ha res quan ningú mira. Com s'ha dit Mermin, "La doctrina quàntica fonamental diu que la mesura generalment no revela un valor preexistent de la propietat que es mesura". (I considereu la pregunta sobre la lluna com a deures!)
Aparent buit procfs té sentit perquè la informació allà és dinàmica. Una situació una mica diferent amb sysfs. Comparem quants fitxers tenen una mida d'almenys un byte /proc i /sys.

Sistemes de fitxers virtuals a Linux: per què són necessaris i com funcionen? Part 1

Procfs té un fitxer, és a dir, la configuració del nucli exportada, que és una excepció perquè només s'ha de generar una vegada per arrencada. D'altra banda, en /sys hi ha molts fitxers més grans, molts dels quals ocupen una pàgina sencera de memòria. Normalment arxius sysfs contenen exactament un número o una línia, a diferència de les taules d'informació obtingudes de la lectura de fitxers com ara /proc/meminfo.

Objectiu sysfs - proporcionar propietats de lectura/escriptura del que el nucli crida «kobjects» a l'espai d'usuari. L'únic objectiu kobjects és el recompte d'enllaços: quan s'elimina l'últim enllaç a un kobject, el sistema restaurarà els recursos associats a aquest. No obstant, /sys constitueix la majoria dels famosos "ABI estable per a l'espai d'usuari" nucli, que ningú pot mai, sota cap circumstància "trencar". Això no vol dir que els fitxers de sysfs siguin estàtics, cosa que seria inconsistent amb el recompte de referència d'objectes inestables.
L'ABI estable del nucli limita el que pot aparèixer /sys, no el que està realment present en aquell moment concret. Llistar els permisos de fitxers a sysfs proporciona informació sobre com es poden configurar els paràmetres per a dispositius, mòduls, sistemes de fitxers, etc. es pot configurar o llegir. La conclusió lògica és que procfs també forma part de l'ABI estable del nucli, tot i que això no s'indica explícitament a documentació.

Sistemes de fitxers virtuals a Linux: per què són necessaris i com funcionen? Part 1

Arxius a sysfs descriure una propietat particular per a cada entitat i es pot llegir, escriure o ambdues. "0" al fitxer significa que l'SSD no es pot treure.

Comencem la segona part de la traducció amb com controlar VFS mitjançant les eines eBPF i bcc, i ara estem esperant els vostres comentaris i us convidem tradicionalment a webinar obert, que tindrà lloc pel nostre professor el 9 d'abril - Vladimir Drozdetsky.

Font: www.habr.com

Afegeix comentari