Sistemi di file virtuali in Linux: perché sono necessari e come funzionano? Parte 1

Ciao a tutti! Continuiamo a lanciare nuovi corsi sui corsi che già amate e ora siamo lieti di informarvi che sta per partire un nuovo gruppo per il corso «Amministratore Linux», che inizierà a fine aprile. Una nuova pubblicazione sarà dedicata a questo evento. È possibile consultare l'originale qui.

I sistemi di file virtuali svolgono il ruolo di un'astrazione magica che permette alla filosofia di Linux di affermare che «tutto è un file».

Sistemi di file virtuali in Linux: perché sono necessari e come funzionano? Parte 1

Che cos'è un sistema di file? Facendo riferimento alle parole di uno dei primi contributori e autori di Linux Roberto Lava, «Un sistema di file è un'archiviazione gerarchica di dati organizzata secondo una certa struttura». In ogni caso, questa definizione si adatta altrettanto bene a VFAT (Virtual File Allocation Table), Git e Cassandra (database NoSQL). Cosa definisce quindi il concetto di «sistema di file»?

Fondamenti del sistema di file

Il kernel di Linux ha requisiti specifici riguardo l'entità che può essere considerata un sistema di file. Deve implementare i metodi open(), read() e write() per oggetti permanenti che hanno nomi. Dal punto di vista della programmazione orientata agli oggetti , il kernel definisce un sistema di file generico (generic filesystem) come un'interfaccia astratta, e queste tre grandi funzioni sono considerati «virtuali» e non hanno una definizione concreta. Pertanto, l'implementazione predefinita del sistema di file è chiamata sistema di file virtuale (VFS).Se possiamo aprire, leggere e scrivere in un'entità, allora quest'entità è considerata un file, come vediamo nell'esempio sopra nella console.

Sistemi di file virtuali in Linux: perché sono necessari e come funzionano? Parte 1

Il fenomeno del VFS sottolinea solo un'osservazione tipica 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 in realtà funziona la console. Nell'immagine è mostrata una sessione interattiva di Bash. Inviare una stringa alla console (dispositivo console virtuale) la visualizza sullo schermo virtuale. Il VFS ha altre proprietà ancora più strane. Ad esempio, consente di effettuare ricerche
su di essi Sistemi a noi familiari come ext4, NFS e /proc hanno tre importanti funzioni nella struttura dati C chiamata.

file_operations operazioni_file. Inoltre, alcuni file system estendono e ridefiniscono le funzioni del VFS in un modo convenzionale orientato agli oggetti. Come osserva Robert Love, l'astrazione del VFS consente agli utenti Linux di copiare file dentro e fuori sistemi operativi esterni o entità astratte, come pipes, senza preoccuparsi del loro formato interno. Dal punto di vista dell'utente (userspace), tramite una chiamata di sistema, un processo può copiare da un file a strutture dati del kernel utilizzando il metodo read() di un file system, e poi usare il metodo write () di un altro file system per scrivere dati.

Le definizioni delle funzioni appartenenti ai tipi di base del VFS si trovano nei file fs/*.c del codice sorgente del kernel, mentre le sottodirectory fs/ contengono file system specifici. Nel kernel ci sono anche entità, come cgroups, /dev e tmpfs, necessarie durante il processo di avvio e quindi definite nella sottodirectory del kernel init/. Si noti che cgroups, /dev e tmpfs non invocano le "tre grandi" funzioni operazioni_file, ma leggono e scrivono direttamente in memoria.
Nella seguente diagramma si mostra come lo userspace accede a vari tipi di file system, normalmente montati nei sistemi Linux. Non sono mostrati costrutti come pipes, dmesg e orologi POSIX, che implementano anche la struttura operazioni_file, a cui si accede tramite il livello VFS.

Sistemi di file virtuali in Linux: perché sono necessari e come funzionano? Parte 1

Il VFS funge da "strato di interfaccia" tra le chiamate di sistema e le implementazioni specifiche di operazioni_file, come ad esempio ext4 e procfs. Le funzioni operazioni_file possono interagire con i driver di dispositivo o con le memorie. tmpfs, devtmpfs e cgroups non utilizzano operazioni_file, ma accedono direttamente alla memoria.
L'esistenza del VFS consente di riutilizzare il codice, poiché i metodi fondamentali relativi ai file system non devono essere ridefiniti da ciascun tipo di file system. Il riutilizzo del codice è una prassi comune tra gli ingegneri del software! Tuttavia, se il codice riutilizzabile contiene gravi errori, tutte le implementazioni che ereditano metodi comuni ne soffrono.

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

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

Sistemi di file virtuali in Linux: perché sono necessari e come funzionano? Parte 1

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

Perché è indesiderabile 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 il tmpfs. Inoltre, i supporti fisici sono più soggetti ad usura durante la riscrittura rispetto alla memoria. Infine, i file in /tmp possono contenere informazioni riservate, quindi la loro scomparsa ad ogni riavvio è una funzionalità intrinseca.

Sfortunatamente, alcuni script di installazione delle distribuzioni Linux creano /tmp su un dispositivo di archiviazione per impostazione predefinita. Non disperate se questo è accaduto anche al vostro sistema. Seguite alcune semplici istruzioni con Arch Wiki, per risolvere la questione, e ricordate che la memoria allocata per tmpfs diventa inaccessibile per altri scopi. In altre parole, un sistema con un enorme tmpfs e file grandi in esso può esaurire tutta la memoria e bloccarsi. Un altro suggerimento: quando editate un file /etc/fstab, ricordate che deve finire con una nuova riga, altrimenti il vostro sistema non si avvierà.

/proc и /sys

In aggiunta /tmp, VFS (sistemi di file virtuali), che sono più familiari agli utenti Linux, sono /proc e /sys. (/dev situati nella memoria condivisa e non hanno operazioni_file). Perché proprio questi due componenti? Cerchiamo di capire 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, come interruzioni, memoria virtuale e pianificatore. Inoltre, /proc/sys è il luogo in cui i parametri impostati tramite il comando sysctl, sono disponibili per userspace. Lo stato e le statistiche dei processi individuali sono visualizzate nelle directory /proc/.

Sistemi di file virtuali in Linux: perché sono necessari e come funzionano? Parte 1

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

Comportamento /proc i file mostrano quanto possano essere diverse le filesystem VFS. Da un lato, /proc/meminfo contengono informazioni che possono essere visualizzate con il comando free. Dall'altro, potrebbe essere vuoto! Come è possibile? La situazione ricorda il famoso articolo intitolato «Esiste una luna quando nessuno la guarda? Realtà e teoria quantistica», scritto dal professor di fisica della Cornell University David Mermin nel 1985. Infatti, il kernel raccoglie statistiche di memoria quando viene effettuata una richiesta a /proc, e in realtà nei file /proc non c'è niente quando nessuno guarda lì. Come disse Mermin, «La dottrina quantistica fondamentale afferma che la misura, in genere, non rivela un valore preesistente della proprietà misurata.» (E pensate alla domanda sulla luna come compito per casa!)
Il vuoto apparente procfs ha senso, poiché le informazioni contenute sono dinamiche. Un po' diversa è la situazione con sysfs. Confrontiamo quanti file di almeno un byte ci sono in /proc e in /sys.

Sistemi di file virtuali in Linux: perché sono necessari e come funzionano? Parte 1

Procfs ha un file, ovvero la configurazione del kernel esportata, che è un'eccezione, in quanto deve essere generata solo una volta ad 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 – forniscono le proprietà disponibili per la lettura e la scrittura di ciò che il kernel chiama «kobjects» in userspace. L'unico scopo di kobjects è il conteggio dei riferimenti: quando l'ultimo riferimento a un kobject viene rimosso, il sistema recupera le risorse associate. Tuttavia, /sys costituisce gran parte del famoso «stable ABI per userspace» 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 su oggetti instabili.
L'interfaccia binaria stabile del kernel (stable ABI del kernel) limita ciò che può apparire in /sys, non ciò che è effettivamente presente in quel preciso momento. L'elenco delle autorizzazioni sui file in sysfs fornisce comprensione su come i parametri configurabili di dispositivi, moduli, file system ecc. possano essere configurati o letti. Facciamo una logica deduzione che procfs è anche parte della stable ABI del kernel, sebbene non sia esplicitamente indicato in documentazione.

Sistemi di file virtuali in Linux: perché sono necessari e come funzionano? Parte 1

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

Iniziamo la seconda parte della traduzione con come osservare il VFS utilizzando strumenti eBPF e bcc, e ora aspettiamo i vostri commenti e vi invitiamo tradizionalmente a un webinar aperto, che si svolgerà il 9 aprile e sarà condotto dal nostro docente — Vladimir Drozdetskiy.

Fonte: habr.com

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