Sistemi di file virtuali in Linux: a cosa servono e come funzionano? Parte 1

Ciao a tutti! Continuiamo a lanciare nuovi corsi dei programmi già a voi noti e siamo lieti di annunciare che stiamo avviando un nuovo ciclo per il corso «Amministratore Linux», che inizierà a fine aprile. A questo evento sarà dedicata una nuova pubblicazione. È possibile consultare l'originale qui.

Le file system virtuali svolgono il ruolo di una sorta di astrazione magica, che consente alla filosofia di Linux di affermare che "tutto è un file".

Sistemi di file virtuali in Linux: a cosa servono e come funzionano? Parte 1

Cos'è un file system? Basandosi sulle parole di uno dei primi collaboratori e autori di Linux Robert Love, "Il file system è un'archiviazione gerarchica dei dati organizzata secondo una determinata struttura". In ogni caso, questa definizione si adatta altrettanto bene a VFAT (Virtual File Allocation Table), Git e Cassandra (database NoSQL). Quindi, cosa definisce un concetto come "file system"?

Basi del file system

Il kernel Linux ha specifici requisiti per l'entità che può essere considerata un file system. Deve implementare i metodi open(), read() e write() per oggetti persistenti che hanno nomi. In termini di programmazione orientata agli oggetti programmazione, il kernel definisce un filesystem generico (generic filesystem) come interfaccia astratta, e queste tre grandi funzioni sono considerate «virtuali» e non hanno una definizione specifica. Di conseguenza, l'implementazione del filesystem predefinito è chiamata filesystem virtuale (VFS).

Sistemi di file virtuali in Linux: a cosa servono e come funzionano? Parte 1

Se possiamo aprire, leggere e scrivere in un'entità, allora questa entità è considerata un file, come si può vedere dall'esempio nella console sopra.
Il fenomeno VFS sottolinea solo l'osservazione caratteristica dei sistemi Unix-like, che afferma che «tutto è un file». Pensate a quanto sia strano che quel piccolo esempio sopra con /dev/console mostri come funziona realmente la console. Nella figura è rappresentata una sessione interattiva di Bash. Inviare una riga alla console (virtual console device) la visualizza sullo schermo virtuale. VFS ha altre proprietà, ancora più strane. Ad esempio, consente di eseguire ricerche su di essi.

Sistemi a noi familiari, come ext4, NFS e /proc, hanno tre funzioni importanti nella struttura dati C, chiamata file_operations. Inoltre, alcuni file system estendono e ridefiniscono le funzionalità del VFS in modo familiare e orientato agli oggetti. Come osserva Robert Love, l'astrazione VFS consente agli utenti Linux di copiare senza preoccupazioni file da o verso sistemi operativi esterni o entità astratte, come pipes, senza preoccuparsi del loro formato interno. Dal lato utente (userspace) tramite una chiamata di sistema, il processo può copiare da un file in strutture dati del kernel utilizzando il metodo read() di un file system, e poi usare il metodo write () di un altro file system per l'uscita dei dati.

Le definizioni delle funzioni che appartengono ai tipi di base del VFS si trovano nei file fs/*.c del codice sorgente del kernel, mentre le sottocartelle fs/ contengono file system specifici. Nel kernel si trovano anche entità, come cgroups, /dev e tmpfs, necessari durante il processo di avvio e quindi definiti nella sottocartella del kernel init/. Nota che cgroups, /dev e tmpfs non invocano le 'grandi tre' funzioni file_operations, ma leggono e scrivono direttamente in memoria.
Nella diagramma sottostante è mostrato come gli spazi utente accedono ai vari tipi di file system normalmente montati nei sistemi Linux. Non si mostrano strutture come pipes, dmesg e orologi POSIX, che implementano anche la struttura file_operations, l'accesso ai quali avviene attraverso lo strato VFS.

Sistemi di file virtuali in Linux: a cosa servono e come funzionano? Parte 1

VFS è uno "strato di interfaccia" tra le chiamate di sistema e le implementazioni di specifici file_operations, come ext4 e procfs. Le funzioni file_operations possono interagire sia con i driver delle periferiche che con i dispositivi di accesso alla memoria. tmpfs, devtmpfs e cgroups non utilizza file_operations, accedendo direttamente alla memoria.
L'esistenza di VFS consente il riutilizzo del codice, poiché i metodi di base relativi ai file system non devono essere nuovamente implementati da ogni tipo di file system. Il riutilizzo del codice è una pratica comune tra gli ingegneri del software! Tuttavia, se il codice riutilizzato contiene gravi errori, tutte le implementazioni che ereditano metodi comuni ne risentiranno.

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

Un modo semplice per rilevare che VFS è presente nel sistema è digitare mount | grep -v sd | grep -v :/, che mostrerà tutti i montaggi (mounted) file system che non sono residenti su disco e non NFS, il che è vero per la maggior parte dei computer. Uno dei mount elencatimount) VFS, sarà certamente /tmp, giusto?

Sistemi di file virtuali in Linux: a cosa servono e come funzionano? Parte 1

Tutti sanno che memorizzare / tmp su un supporto fisico è folle! Fonte.

Perché è sconsigliato memorizzare /tmp su un supporto fisico? Perché i file in /tmp sono temporanei e i dispositivi di archiviazione sono più lenti della memoria dove viene creato tmpfs. Inoltre, i supporti fisici sono più soggetti a usura durante la scrittura rispetto alla memoria. Infine, i file in /tmp possono contenere informazioni riservate, quindi la loro scomparsa ad ogni riavvio è una funzione essenziale.

Sfortunatamente, alcuni script di installazione delle distribuzioni Linux creano /tmp su un dispositivo di archiviazione per impostazione predefinita. Non disperate se ciò è accaduto anche al vostro sistema. Seguite alcune semplici istruzioni con Arch Wiki, per correggere questo, e ricordate che la memoria allocata per tmpfs diventa non accessibile per altri scopi. In altre parole, un sistema con una gigantesca tmpfs e file di grandi dimensioni al suo interno può esaurire tutta la memoria e andare in crash. Un altro suggerimento: durante la modifica del file /etc/fstab, ricorda che deve terminare con una nuova riga, altrimenti il tuo sistema non si avvierà.

/proc и /sys

Oltre a /tmp, VFS (sistemi di file virtuali), che sono più familiari agli utenti Linux, sono /proc e /sys. (/dev si trova nella memoria condivisa e non ha file_operations). Perché proprio questi due componenti? Analizziamo questa questione.

procfs crea un'istantanea dello stato del kernel e dei processi che controlla per userspace. In /proc il kernel fornisce informazioni su quali risorse ha a disposizione, ad esempio, interruzioni, memoria virtuale e scheduler. Inoltre, /proc/sys – è il posto dove i parametri configurabili tramite il comando sysctl, sono disponibili per userspace. Lo stato e le statistiche dei singoli processi sono riportati nelle directory /proc/.

Sistemi di file virtuali in Linux: a cosa servono e come funzionano? Parte 1

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

Comportamento /proc i file mostrano quanto possano differire i sistemi di file VFS. Da un lato, /proc/meminfo contengono informazioni che possono essere visualizzate con il comando free. Dall'altra parte, però, è vuoto! Come può essere? La situazione ricorda il famoso articolo intitolato «Esiste la luna quando nessuno la guarda? Realtà e teoria quantistica», scritto dal professore di fisica dell'Università di Cornell David Mermin nel 1985. Il punto è che il kernel raccoglie statistiche della memoria quando viene effettuata una richiesta a /proc, e in realtà nei file /proc non c'è nulla quando nessuno guarda lì. Come ha detto Mermin, «La dottrina quantistica fondamentale afferma che la misurazione, di norma, non rivela un valore preesistente della proprietà misurata.» (E pensate alla domanda sulla luna come compito a casa!)
L'apparente vuoto procfs ha senso, poiché le informazioni lì presenti sono dinamiche. Una situazione leggermente diversa si presenta con sysfs. Confrontiamo quanti file di dimensione almeno un byte ci sono in /proc e nel /sys.

Sistemi di file virtuali in Linux: a cosa servono e come funzionano? Parte 1

Procfs ha un file, cioè la configurazione del kernel esportata, che è un'eccezione, poiché deve essere generata solo una volta ad ogni avvio. D'altra parte, in /sys ci sono molti file più grandi, molti dei quali occupano un'intera pagina di memoria. Di solito, i file sysfs contengono esattamente un numero o una stringa, a differenza delle tabelle di informazioni ottenute leggendo file come /proc/meminfo.

Obiettivo sysfs – fornire le proprietà disponibili per la lettura e la scrittura di ciò che il kernel chiama «kobjects» nello spazio utente. L'unico scopo di kobjects è il conteggio dei riferimenti: quando l'ultimo riferimento a kobject viene rimosso, il sistema recupera le risorse ad esso associate. Tuttavia, /sys costituisce gran parte del famoso «stable ABI per lo spazio utente» del kernel, che nessuno può mai, in nessuna circostanza «rompere». Ciò non significa che i file in sysfs siano statici, il che contraddirebbe il conteggio dei riferimenti agli oggetti instabili.
L'interfaccia binaria dell'applicazione stabile del kernel (kernel’s stable ABI) limita ciò che può apparire in /sys, e non ciò che è realmente presente in questo momento specifico. L'elenco delle autorizzazioni dei file in sysfs fornisce una comprensione di come i parametri configurabili di dispositivi, moduli, file system, ecc. possano essere impostati o letti. Facciamo la deduzione logica che procfs sia anche parte dello stable ABI del kernel, anche se non è specificamente indicato in documentazione.

Sistemi di file virtuali in Linux: a cosa servono e come funzionano? Parte 1

I file in sysfs descrivono una specifica proprietà per ciascuna entità e possono essere leggibili, scrivibili o entrambi contemporaneamente. Un '0' nel file indica che l'SSD non può essere rimosso.

Iniziamo la seconda parte della traduzione da come osservare il VFS con strumenti eBPF e bcc, e ora ci aspettiamo i vostri commenti e vi invitiamo tradizionalmente a un webinar aperto, che si terrà il 9 aprile a cura del nostro docente — Vladimir Drozdetsky.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster