File system virtuali in Linux: perché sono necessari e come funzionano? Parte 1

Ciao a tutti! Continuiamo a lanciare nuovi flussi per i corsi di cui ti sei già innamorato e ora abbiamo fretta di annunciare che stiamo iniziando una nuova serie di corsi "Amministratore Linux"che verrà lanciato alla fine di aprile. Una nuova pubblicazione sarà datata per questo evento. Con il materiale originale, puoi leggi qui.

I file system virtuali servono come una sorta di astrazione magica che consente alla filosofia di Linux di affermare che "tutto è un file".

File system virtuali in Linux: perché sono necessari e come funzionano? Parte 1

Che cos'è un file system? Basato sulle parole di uno dei primi contributori e autori di Linux Roberta Lava, "Un file system è un archivio gerarchico di dati assemblati secondo una struttura specifica." Comunque sia, questa definizione è ugualmente adatta a VFAT (Virtual File Allocation Table), Git e Cassandra (Banca dati NoSQL). Quindi cosa definisce esattamente una cosa come un "file system"?

Nozioni di base sui file system

Il kernel Linux ha determinati requisiti per un'entità che può essere considerata un file system. Deve implementare i metodi open(), read() и write() per oggetti persistenti che hanno nomi. Da un punto di vista orientato agli oggetti di programmazione, il kernel definisce un filesystem generico come un'interfaccia astratta, e queste tre grandi funzioni sono considerate "virtuali" e non hanno una definizione concreta. Di conseguenza, l'implementazione predefinita del file system è chiamata file system virtuale (VFS).

File system virtuali in Linux: perché sono necessari e come funzionano? Parte 1

Se possiamo aprire, leggere e scrivere su un'entità, allora quell'entità è considerata un file, come possiamo vedere dall'esempio nella console sopra.
Il fenomeno VFS sottolinea solo l'osservazione simile a Unix che "tutto è un file". Pensa a quanto sia strano che quel piccolo esempio di /dev/console sopra mostri come funziona effettivamente la console. L'immagine mostra una sessione Bash interattiva. L'invio di una stringa alla console (dispositivo della console virtuale) la visualizza su uno schermo virtuale. VFS ha altre proprietà ancora più strane. Ad esempio, ti consente di cercare per ним.

Sistemi familiari come ext4, NFS e /proc hanno tre funzioni importanti in una struttura dati C chiamata operazioni_file. Inoltre, alcuni file system estendono e ridefiniscono le funzioni VFS in un modo familiare orientato agli oggetti. Come sottolinea Robert Love, l'astrazione VFS consente agli utenti Linux di copiare con nonchalance file da o verso sistemi operativi di terze parti o entità astratte come pipe senza preoccuparsi del formato dei dati interni. Sul lato utente (spazio utente), utilizzando una chiamata di sistema, un processo può copiare da un file alle strutture dati del kernel utilizzando il metodo read() un file system e quindi utilizzare il metodo write () un altro file system per l'output dei dati.

Le definizioni delle funzioni che appartengono ai tipi VFS di base si trovano nei file fs/*.c codice sorgente del kernel, mentre sottodirectory fs/ contengono determinati file system. Il nucleo contiene anche entità come cgroups, /dev и tmpfs, che sono richiesti durante il processo di avvio e sono quindi definiti nella sottodirectory del kernel init/. Notare che cgroups, /dev и tmpfs non chiamare le "tre grandi" funzioni file_operations, ma leggono e scrivono direttamente nella memoria.
Il diagramma seguente mostra come lo spazio utente accede ai diversi tipi di filesystem comunemente montati sui sistemi Linux. Strutture non mostrate pipes, dmesg и POSIX clocks, che implementano anche la struttura file_operations, accessibile tramite il livello VFS.

File system virtuali in Linux: perché sono necessari e come funzionano? Parte 1

VFS è un "livello wrapper" tra le chiamate di sistema e le implementazioni di determinati file_operationsCome ad esempio ext4 и procfs. Funzioni file_operations può interagire con driver di dispositivo o dispositivi di accesso alla memoria. tmpfs, devtmpfs и cgroups non usare file_operations, ma accedono direttamente alla memoria.
L'esistenza di VFS offre l'opportunità di riutilizzare il codice, poiché i metodi di base associati ai file system non devono essere reimplementati da ciascun tipo di file system. Il riutilizzo del codice è una pratica comune tra gli ingegneri del software! Tuttavia, se il codice riutilizzabile contiene gravi errori, tutte le implementazioni che ereditano metodi comuni ne risentono.

/tmp: suggerimento semplice

Un modo semplice per rilevare la presenza di VFS su un sistema consiste nel digitare mount | grep -v sd | grep -v :/, che mostrerà tutti i montati (mounted) filesystem che non sono residenti su disco e non NFS, il che è vero sulla maggior parte dei computer. Uno dei monti elencati (mounts) VFS lo farà senza dubbio /tmp, Giusto?

File system virtuali in Linux: perché sono necessari e come funzionano? Parte 1

Tutti conoscono quel deposito / tmp su un supporto fisico - follia! Fonte.

Perché è indesiderabile conservare /tmp su supporto fisico? Perché i file in /tmp sono temporanei e i dispositivi di archiviazione sono più lenti della memoria in cui viene creato tmpfs. Inoltre, i supporti fisici sono più suscettibili all'usura se sovrascritti rispetto alla memoria. Infine, i file in /tmp possono contenere informazioni riservate, quindi farli sparire ad ogni riavvio è una caratteristica essenziale.

Sfortunatamente, alcuni script di installazione della distribuzione Linux creano /tmp sul dispositivo di archiviazione per impostazione predefinita. Non disperare se questo è successo anche al tuo sistema. Segui alcune semplici istruzioni con Arch Wikiper risolvere questo problema e tieni presente che la memoria allocata per tmpfs diventa non disponibile per altri scopi. In altre parole, un sistema con un tmpfs gigante e file di grandi dimensioni può esaurire la memoria e bloccarsi. Un altro suggerimento: durante la modifica di un file /etc/fstab, ricorda che deve terminare con una nuova riga, altrimenti il ​​tuo sistema non si avvierà.

/proc e /sys

Oltre a /tmp, VFS (file system virtuali) che sono più familiari agli utenti Linux /proc и /sys. (/dev risiede nella memoria condivisa e non ha file_operations). Perché questi due componenti? Diamo un'occhiata a questo problema.

procfs crea un'istantanea del kernel e dei processi che monitora userspace. In /proc il kernel stampa le informazioni su ciò che ha a disposizione, come gli interrupt, la memoria virtuale e lo scheduler. Oltretutto, /proc/sys è il luogo dove si trovano i parametri configurati con il comando sysctl, disponibile per userspace. Lo stato e le statistiche dei singoli processi vengono visualizzati nelle directory /proc/.

File system virtuali in Linux: perché sono necessari e come funzionano? Parte 1

Qui /proc/meminfo è un file vuoto che tuttavia contiene informazioni preziose.

comportamento /proc files mostra come possono essere diversi i file system del disco VFS. Da un lato, /proc/meminfo contengono informazioni che possono essere visualizzate con il comando free. D'altra parte, è vuoto! Come funziona? La situazione ricorda il famoso articolo intitolato La luna esiste quando nessuno la guarda? Realtà e teoria quantistica"scritto dal professore di fisica della Cornell University David Mermin nel 1985. Il fatto è che il kernel raccoglie statistiche sulla memoria quando viene fatta una richiesta a /proc, e in realtà nei file /proc non c'è niente quando nessuno sta guardando. Come detto Mermino, "La dottrina quantistica fondamentale afferma che la misurazione generalmente non rivela un valore preesistente della proprietà misurata." (E considera la domanda sulla luna come compito a casa!)
Vuoto apparente procfs ha senso perché le informazioni sono dinamiche. Una situazione leggermente diversa con sysfs. Confrontiamo il numero di file che hanno una dimensione di almeno un byte /proc e /sys.

File system virtuali in Linux: perché sono necessari e come funzionano? Parte 1

Procfs ha un file, vale a dire la configurazione del kernel esportata, che è un'eccezione perché deve essere generata solo una volta per avvio. D'altra parte, dentro /sys ci sono molti file più grandi, molti dei quali occupano un'intera pagina di memoria. Di solito file sysfs contengono esattamente un numero o una riga, a differenza delle tabelle di informazioni ottenute dalla lettura di file come /proc/meminfo.

bersaglio sysfs - fornire proprietà di lettura/scrittura di ciò che il kernel chiama «kobjects» nello spazio utente. L'unico obiettivo kobjects è il conteggio dei collegamenti: quando viene rimosso l'ultimo collegamento a un kobject, il sistema ripristinerà le risorse ad esso associate. Tuttavia, /sys costituisce la maggior parte dei famosi "ABI stabile per spazio utente" nucleo, che nessuno può mai, in nessun caso "rottura". Ciò non significa che i file in sysfs siano statici, il che sarebbe incoerente con il conteggio dei riferimenti di oggetti instabili.
L'ABI stabile del kernel limita ciò che può apparire in /sys, non ciò che è effettivamente presente in quel particolare momento. L'elenco dei permessi dei file in sysfs fornisce informazioni su come le impostazioni configurabili per dispositivi, moduli, filesystem, ecc. può essere configurato o letto. La conclusione logica è che anche procfs fa parte dell'ABI stabile del kernel, sebbene ciò non sia esplicitamente affermato in documentazione.

File system virtuali in Linux: perché sono necessari e come funzionano? Parte 1

File in sysfs descrivono una particolare proprietà per ciascuna entità e possono essere leggibili, scrivibili o entrambi. "0" nel file significa che l'SSD non può essere rimosso.

Iniziamo la seconda parte della traduzione con come monitorare VFS utilizzando gli strumenti eBPF e bcc, e ora stiamo aspettando i tuoi commenti e tradizionalmente ti invitiamo a webinar aperto, che sarà tenuto dal nostro insegnante il 9 aprile - Vladimir Drozdeckij.

Fonte: habr.com

Aggiungi un commento