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
I file system virtuali servono come una sorta di astrazione magica che consente alla filosofia di Linux di affermare che "tutto è un file".
Che cos'è un file system? Basato sulle parole di uno dei primi contributori e autori di Linux
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
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 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/
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.
VFS è un "livello wrapper" tra le chiamate di sistema e le implementazioni di determinati file_operations
Come 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
/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?
Tutti conoscono quel deposito / tmp
su un supporto fisico - follia!
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 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/
.
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 /proc
, e in realtà nei file /proc
non c'è niente quando nessuno sta guardando. Come detto
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
.
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
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
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
Fonte: habr.com