I file system vengono utilizzati per controllare come i dati vengono scritti su disco, per controllare l’accesso a questi dati e per archiviare informazioni e metadati sui file. I file system vengono continuamente revisionati per fornire maggior funzionalità e diventano sempre più efficienti ad ogni revisione.
Contenuti
- Cos'è il file system XFS?
- Struttura del file system XFS
- Superblocco
- Informazioni sui blocchi liberi
- Informazioni sui nodi di informazione liberi e allocati
- Alberi B+
- Caratteristiche dell'architettura
- File system a 64 bit
- Allocamento ritardato.
- Cambiamento di dimensione "al volo" (solo espansione).
- La deframmentazione on-the-fly viene effettuata con questi strumenti:
- Creare e ridimensionare in XFS
- Montaggio di XFS
- Ridimensionare XFS
- Vantaggi di XFS
- Verifica del grado di frammentazione in XFS
- Journaling XFS
- Confronto delle prestazioni di XFS con altri file system.
- Svantaggi del file system XFS
- Accesso alle partizioni XFS da Windows
- Installazione di XFS su un'unità SSD
- I vantaggi dell'utilizzo di XFS su SSD
- Svantaggi dell'utilizzo di XFS su SSD
Cos’è il file system XFS?
XFS è un file system di journaling altamente scalabile e ad alte prestazioni con tutti i vantaggi dei moderni file system, come il logging dei metadati per un rapido ripristino. Inoltre, supporta la raggruppamento di flussi di I/O, il che migliora significativamente le prestazioni di lettura e scrittura, ma funziona solo per file di grandi dimensioni. È possibile aumentare la dimensione del file system o eseguire la deframmentazione anche se è montato.
XFS è considerato un file system esteso. È un file system ad alte prestazioni con registri a 64 bit. Il supporto per XFS è stato incluso nel kernel Linux intorno al 2002. XFS supporta una dimensione massima del file system di 8 exabyte per il file system a 64 bit.
Tuttavia, XFS ha alcune limitazioni. Ad esempio, la partizione di questo file system non può essere ridotta e ci sono prestazioni ridotte quando si lavora con un grande numero di file. RHEL 7.0 utilizza XFS come file system predefinito.
Struttura del file system XFS
L’intero file system XFS è diviso in cosiddetti Gruppi di Allocazione, l’analogia dei Gruppi di Blocchi in Ext2FS.
La dimensione/quantità e altre descrizioni dei Gruppi di Allocazione si trovano nel superblocco, e il superblocco si trova all’inizio di ciascuno dei Gruppi di Selezione (cioè è lo stesso di Ext2FS), quindi andiamo direttamente alla descrizione della sua struttura.
Almeno i primi 0x800 byte (2048 byte, 2 Kb) di ciascun Gruppo di Allocazione hanno lo stesso formato. E il Gruppo di Allocazione zero (e con esso il superblocco zero) si trova proprio all’inizio del dispositivo. Qui c’è una differenza importante rispetto al numero assoluto di altri File System: quando il file system XFS è stato progettato per la piattaforma IRIX, gli sviluppatori non hanno nemmeno pensato a bootloader all’inizio del disco, quindi non ha senso provare a installare il loader su una partizione XFS.
Il Gruppo di Allocazione è diviso in altre quattro strutture:
- Superblocco
- Informazioni sui blocchi liberi
- Informazioni sui nodi di informazione dedicati e liberi
- Blocchi dedicati all’estensione B-tree
Superblocco
Il Superblocco si trova all’inizio del Gruppo di Allocazione. È possibile trovare la definizione della struttura struct xfs_sb che lo descrive nel file /usr/include/xfs/xfs_sb.h.
È possibile citare questo file come si farebbe normalmente in questi casi, ma non è conveniente descrivere la struttura in questo caso perché i nomi dei tipi come xfs_drfsbno_t non dicono nulla sulla loro dimensione.
Pertanto, è meglio registrare le strutture in un formato che sia più conveniente per te.
Utilizzeremo 5 campi per descrivere la struttura:
- Offset dall’inizio della struttura (in sistema numerico esadecimale)
- Dimensione del campo in bit
- Nome dell’elemento nella struttura
- Un valore tipico (che viene preso dopo la formattazione di un’immagine di test)
- Commento
Informazioni sui blocchi liberi
Le informazioni sui blocchi liberi del Gruppo di Allocazione sono localizzate al suo interno ad un offset di 0x0200.
La definizione della struttura xfs_agf si trova nel file /usr/include/xfs/xfs_ag.h.
È stato deciso di memorizzare l’elenco dei blocchi liberi non in una bitmap, ma in un B-tree con elementi “Blocco iniziale del frammento di blocchi liberi”/”Dimensione del frammento”, e non in un solo B-tree, ma in due duplicati: un elemento è ordinato per il numero del blocco iniziale del frammento, e il secondo – per la dimensione di questi frammenti di spazio libero.
Ciò consente di trovare rapidamente un gruppo di blocchi liberi della dimensione più adatta.
Informazioni sui nodi di informazione liberi e allocati
Come i blocchi liberi, i nodi di informazione liberi e dedicati dei Gruppi di Allocazione sono descritti nella struttura xfs_agi (vedi anche /usr/include/xfs/xfs_ag.h per la definizione) ad un offset di 0x400.
I nodi di informazione sono allocati in gruppi di 64 pezzi. Le informazioni sull’occupazione/deallocazione dei nodi di informazione di questo gruppo sono memorizzate nella stessa bitmap (numero a 64 bit).
Tuttavia, poiché ogni gruppo successivo di nodi di informazione non è necessariamente situato dietro quello precedente, queste informazioni devono ancora essere memorizzate nell’albero B.
Questo schema consente di rimuovere la limitazione sul numero di nodi di informazione tipica di molti altri file system. Su XFS il messaggio “Spazio insufficiente” è univoco, non può significare “overflow della tabella dei nodi di informazione” durante la creazione di un file.
Alberi B+
XFS utilizza gli alberi B+ ovunque. Sono utilizzati per indicizzare i pacchetti di inode, le liste di estensioni libere, gli elementi della directory e i record delle schede dei file.
Gli alberi B+ di XFS hanno una struttura abbastanza tradizionale: nei nodi interni vengono memorizzate solo le chiavi e i puntatori ai discendenti, mentre le foglie contengono le chiavi e i dati.
Dato che ci sono diversi tipi di alberi in XFS, il codice generale gestisce solo gli header dei blocchi standard (xfs_btree.h).
Dopo l’header, ci sono gli array di dati. Per i nodi interni, questi sono:
- Due liste – chiavi e puntatori ai discendenti che crescono al centro. Per le foglie c’è un array di record, ordinati in ordine crescente.
- Il formato delle chiavi e dei record è determinato dal tipo di albero.
Caratteristiche dell’architettura
Come già accennato, XFS è composto da sezioni di dati (contiene metadati e può contenere registri), un registro e una sezione in tempo reale.
La sezione dei dati è divisa in gruppi di blocchi uguali (gruppi di allocazione), il cui numero determina il livello di parallelismo nell’allocazione dello spazio; ogni gruppo contiene un superblocco, la gestione dello spazio libero del gruppo, la tabella inode (creata su richiesta).
La dimensione del blocco in Linux è di 4 KB. L’allocazione dello spazio viene effettuata tramite estensioni (fino a 8 GB).
In passato, XFS non era adatto per archiviare un gran numero di piccoli file (come un server di posta) in quanto era lento nell’elaborazione dei metadati, ma sta gradualmente migliorando. Ad esempio:
- i file aperti durante un improvviso arresto del computer verranno riempiti con zeri (risolto);
- creazione istantanea del file system e espansione a costo zero (ext4 ha il 1,5%, ovvero 269 GB per 16 TB) e approssimativamente lo stesso overhead di ext4 per lo storage dei file (lo 0,07% in meno per un insieme di 10 TB su 10 milioni di file);
- numeri inode a 64 bit per un file system di dimensioni pari o superiori a 2T, non tutti i programmi a 32 bit lo supportano (risolto);
File system a 64 bit
La gestione dello spazio avviene tramite estensioni (Extent – puntatore all’inizio e numero di blocchi consecutivi). In estensioni viene allocato lo spazio per la memorizzazione di file e blocchi liberi. Gli indici B-tree sono ampiamente utilizzati per la memorizzazione di vari dati del file system: per l’elenco dei blocchi con serie di inode, l’elenco delle estensioni con contenuti di file, le directory dei file, gli elenchi di estensioni di blocchi liberi (i blocchi liberi sono indicizzati sia per dimensione che per posizione). Tuttavia, l’utilizzo degli indici B-tree non è un dogma: un file o una directory piccoli possono essere posizionati direttamente all’interno dell’inode.
Allocamento ritardato.
Quando un file viene scritto, viene allocato spazio in memoria, mentre il disco alloca spazio solo quando il file viene scritto su disco. In questo modo, si alloca in modo ottimale lo spazio su disco per il file, riducendo la frammentazione.
Cambiamento di dimensione “al volo” (solo espansione).
Posizionamento in diverse aree lineari (4 di default) dei cosiddetti “gruppi di allocazione” (aumenta le prestazioni allineando l’attività delle richieste su diversi dischi su array RAID come “stripe”, così come nell’accesso asincrono al file system su un disco regolare).
La deframmentazione on-the-fly viene effettuata con questi strumenti:
- API di I/O in tempo reale (per applicazioni hard o soft real-time come lo streaming video).
- Interfaccia (DMAPI) per supportare la gestione dei media gerarchica (HSM).
- Strumenti di backup e ripristino (xfsdump e xfsrestore).
- Gli inode “blocchi di indice” sono allocati dinamicamente (quando necessario), e gli inode inutilizzati possono essere liberati (liberando spazio di archiviazione).
- Piccoli “overhead” – la dimensione delle strutture dati di servizio. Nel nuovo file system XFS, circa il 0,54% viene speso per le esigenze di servizio. Ciò è ottenuto da un numero ridotto di intestazioni per i gruppi (gruppi di allocazione) e dall’allocazione dinamica di inode.
Creare e ridimensionare in XFS
Supponiamo che tu abbia già una partizione pronta per creare un file system. In caso contrario, puoi crearla utilizzando l’utilità Gparted o fdisk. Supponiamo che la partizione su cui vuoi creare il file system XFS sia /dev/sda11, puoi farlo con l’utilità standard mkfs. Il comando è:
$ sudo mkfs.xfs /dev/sda11
Se un file system esiste già sulla partizione specificata, dovresti utilizzare l’opzione -f per sovrascriverlo:
$ sudo mkfs.xfs -f /dev/sda11
Durante la creazione, l’utilità mostrerà le informazioni correnti sul file system e sulla tabella dei metadati.
Montaggio di XFS
Adesso dobbiamo montare la partizione che abbiamo appena creato. Puoi creare una cartella separata per il montaggio o montare la partizione in /mnt. Ad esempio, potremmo creare la cartella /mnt/db. Quindi puoi montare la partizione, proprio come tutte le altre file system, con il comando mount:
$ sudo mkdir /mnt/da11
$ sudo mount /dev/sda11 /mnt/db
$ sudo mount | grep sda11
Adesso puoi scrivere file in questa sezione. La maggior parte delle opzioni del file system sono installate utilizzando mount. Vediamo le opzioni di montaggio di base specifiche per XFS:
- inode64 – se hai un dispositivo più grande di 2Tb, devi utilizzare questa opzione di montaggio per migliorare il file system;
- nobarrier – XFS ha una barriera di scrittura dei dati in modo che i dati importanti non vengano persi durante un riavvio imprevisto. Se sei sicuro che l’hardware sia completamente affidabile, la barriera dovrebbe essere disabilitata per migliorare le prestazioni;
- logdev – consente di registrare il file system su un file esterno;
- sunit – imposta la dimensione di un blocco dati per gli array RAID. La dimensione predefinita è di 512 byte;
- norecovery – di default, ogni volta che il file system viene montato, viene controllato e corretto se non è stato montato correttamente. Questa opzione disabilita questa procedura;
- quota – abilita il supporto per le quote disco per gli utenti.
Puoi utilizzare una qualsiasi di queste opzioni per configurare il tuo file system
Una volta montato, puoi visualizzare le informazioni sui metadati del file system:
$ sudo xfs_info /dev/sda11
Se vuoi che questa partizione venga montata automaticamente, devi configurare xfs fstab per il montaggio. Tutto ciò che devi fare è aggiungere una riga:
$ sudo vi /etc/fstab/dev/sda11 /mnt/db xfs defaults 0 0
Ridimensionare XFS
È possibile ridimensionare il file system XFS mentre è in uso, ovvero quando è montato. In primo luogo, verifichiamo la dimensione attuale della partizione:
$ df -h
Successivamente, la dimensione di XFS viene aumentata in due fasi. C’è una cosa da tenere a mente quando si espande la dimensione online: è necessario aumentare la dimensione della partizione nella tabella delle partizioni e l’unico modo per farlo senza smontare è utilizzando LVM. In altre configurazioni, sarà comunque necessario smontare. In primo luogo, ridimensionare la partizione utilizzando Gparted, ad esempio, e quindi è necessario aumentare la dimensione del file system. È possibile farlo anche se il file system è montato. Eseguire il comando:
$ xfs_growfs /mnt/db
Per assicurarsi che tutto funzioni correttamente, verificare nuovamente la dimensione del file system utilizzando il comando:
$ df -h
Prima di espandere la dimensione del file system, è importante ricordare che non è possibile comprimere il file system.
Vantaggi di XFS
XFS è un eccellente sistema di file che mostra prestazioni eccezionali quando si lavora con file di grandi dimensioni. Oltre alla velocità di operazione con file di grandi dimensioni e al ridimensionamento on-the-go, vale la pena notare la presenza di un deframmentatore integrato e del journaling dei metadati per un ripristino rapido.
Per riorganizzare la posizione dei file (deframmentazione) viene utilizzato il comando xfs_fsr. Può essere utilizzato per l’intera partizione o per un singolo file. Per eseguire la deframmentazione, è necessario disporre di spazio libero sufficiente sulla partizione per copiare qualsiasi file. Alla fine dell’operazione, ogni file occuperà un’estensione.
Per deframmentare l’intera partizione, viene utilizzato il comando:
xfs_fsr -v /dev/
La deframmentazione di un singolo file viene eseguita tramite il comando:
xfs_fsr -v
L’opzione -v visualizza informazioni aggiuntive.
Verifica del grado di frammentazione in XFS
È possibile ottenere informazioni sulla frammentazione della partizione con un comando:
xfs_db -r -c frag /dev/
L’opzione -r è necessaria per verificare la partizione attualmente montata e in uso. L’opzione -c frag è necessaria per visualizzare direttamente le informazioni sulla frammentazione della partizione.
Il risultato appare come segue:
Journaling XFS
Come la maggior parte dei moderni file system, XFS supporta il journaling dei metadati per un ripristino veloce in caso di riavvio di emergenza. Come ReiserFS, XFS utilizza il journaling logico. In caso contrario, il journaling non viene effettuato per blocchi di file (come in ext3), ma in un formato di disco efficiente con solo i metadati che vengono modificati. Per XFS, il logging logico è particolarmente raccomandato. Su hardware di fascia alta (che di solito è per XFS) il journaling è la risorsa più controversa. L’utilizzo di un journaling logico efficiente in termini di spazio minimizza il consumo di risorse non produttive. Inoltre, XFS consente di archiviare il journal su un altro dispositivo di blocco (partizione, disco “economico”). Questa funzione consente di risparmiare risorse costose e “funziona” in modo ancora più efficace per aumentare la velocità di XFS.
Come per ReiserFS, XFS registra solo i metadati e non lo fa per i dati stessi. Ciò significa che in XFS (come in ReiserFS), è possibile perdere i dati che sono stati modificati prima di un riavvio di emergenza. Tuttavia, il log di XFS ha due proprietà che riducono le possibilità di perdita di dati rispetto a ReiserFS.
XFS garantisce che tutti i blocchi “non registrati” siano riempiti con zeri. Poiché i blocchi con byte zero nei file di sistema vengono ignorati, viene eliminata una falla di sicurezza.
Il problema della perdita di dati in XFS è minimizzato dal fatto che l’operazione di ripristino delle modifiche ai metadati in attesa di elaborazione su disco in XFS è più frequente che in ReiserFS, ad esempio (soprattutto con operazioni di I/O ad alta intensità). Di conseguenza, ci saranno meno perdite di XFS dopo un arresto anomalo rispetto alle stesse condizioni in ReiserFS. Si noti che la scrittura più frequente dei metadati stessi non elimina il problema, ma provoca solo il ripristino più frequente del disco e dei dati.
Confronto delle prestazioni di XFS con altri file system.
Fino a poco tempo fa, la scelta di un file system per Linux era limitata. Coloro che desideravano elevate prestazioni preferivano ReiserFS, mentre coloro che si preoccupavano dell’integrità dei dati preferivano ext3. Con l’avvento del supporto XFS per Linux, la scelta non era così semplice. La grande domanda che sorgeva era: ReiserFS è sempre il leader delle prestazioni in tutte le condizioni?
Recentemente i nostri esperti hanno confrontato le prestazioni di XFS, ReiserFS ed ext3. Tuttavia, va notato che i risultati mostrano solo la dinamica generale della dipendenza delle prestazioni del file system dal carico del sistema a singolo processore.
I test hanno dimostrato che XFS è un file system molto veloce. XFS è costantemente il leader nei test di manipolazione di grandi file. Questo risultato è del tutto prevedibile poiché è stato progettato per questo scopo. Sono state notate anche operazioni relativamente lente di eliminazione dei file. In questo caso, sia ReiserFS che ext3 hanno superato XFS.
In altri test, le prestazioni di XFS sono state vicine a quelle di ReiserFS e sempre migliori di quelle di ext3. Una caratteristica interessante di XFS è che non genera un’eccessiva attività del disco. XFS cerca di memorizzare nella cache il maggior numero possibile di dati e il “motivo” per il reset sul disco è quello di riempire la memoria, non l’intervallo di tempo. Quando i dati vengono scritti sull’unità, non hanno un impatto significativo su altre operazioni di IO. Al contrario, in ext3 (modalità “data=ordered”) i reset periodici dei dati sul disco causano problemi di interattività e, in caso di elevate operazioni di IO, anche di sovraccarico del disco.
Svantaggi del file system XFS
Purtroppo, XFS ha anche dei svantaggi. Tra i più significativi ci sono i seguenti:
- È impossibile ridurre la dimensione di un file system esistente. Se la partizione sul disco è piena di XFS, non può essere ridimensionata a una dimensione più piccola (è importante considerarlo durante la partizione del disco).
- Recuperare i file eliminati in XFS è un processo molto complicato, quindi attualmente ci sono solo pochi prodotti software per questo scopo, ad esempio, “RS Partition Recovery”.
- Possibile perdita di dati durante la registrazione in caso di interruzione di corrente, poiché un gran numero di buffer di dati sono memorizzati in memoria, mentre i metadati sono registrati (su disco) operativamente. Questo è vero anche per altri file system con journaling dei metadati.
- Creazione e rimozione di directory relativamente lente (uno svantaggio che può essere notevolmente ridotto configurando correttamente il file system).
Accesso alle partizioni XFS da Windows
Purtroppo, il sistema operativo Windows non dispone di un’utilità integrata per aprire file system diversi da NTFS o FAT. Pertanto, ad esempio per aprire una chiavetta USB, sarà necessario utilizzare un software di terze parti o installare Linux su una macchina virtuale. La seconda opzione è meno comoda, quindi considereremo l’applicazione Linux File Systems for Windows di Paragon Software. Con questo programma, è possibile visualizzare, modificare, copiare ed eliminare i file sulla propria partizione XFS. L’applicazione esiste in due versioni: a pagamento e gratuita. La versione gratuita offre all’utente 10 giorni per testare il programma.
È inoltre possibile utilizzare l’applicazione XFS Explorer. Anche in questo caso ci sono versioni gratuite e a pagamento. Nella versione gratuita, è possibile visualizzare file fino a 3 MB di dimensione. Se si ha bisogno di lavorare con file di grandi dimensioni, sarà necessario acquistare la versione a pagamento.
Installazione di XFS su un’unità SSD
XFS può gestire grandi quantità di dati meglio di qualsiasi altro file system, e lo fa in modo affidabile. Ecco perché XFS può essere un’ottima scelta per l’installazione su unità SSD. Con l’avanzamento della tecnologia informatica, i file di dati diventano sempre più esigenti. Ha senso considerare l’installazione di questo file system su un’unità SSD.
XFS, come Ext4, è un file system con journaling. Ma a differenza di Ext4, è impossibile disabilitare il journaling, quindi può mettere un carico pesante sul disco. Tuttavia, XFS supporta le funzioni standard delle unità SSD e persino la deframmentazione.
I vantaggi dell’utilizzo di XFS su SSD
- XFS è ben noto per la sua capacità di gestire facilmente grandi quantità di dati. Utilizzando XFS sul tuo SSD, puoi garantire che i tuoi file siano sicuri.
- I vantaggi prestazionali di XFS su SSD significano che puoi trasferire e accedere ai file e ai dati molto più velocemente rispetto ad altri sistemi di file.
- XFS ha una funzione di deframmentazione SSD molto utile che aiuta a mantenere il tuo drive in funzione per lungo tempo.
Svantaggi dell’utilizzo di XFS su SSD
- XFS è un sistema di file con journaling e questa funzione non può essere disabilitata. L’impossibilità di disabilitare il logging è qualcosa di cui preoccuparsi se si è interessati alle restrizioni di lettura/scrittura SSD.
- Inoltre, l’utilizzo del sistema di file XFS comporta un aumento dell’usura dell’SSD. Quindi, è necessario prendere una decisione qui: lavorare più velocemente con file di grandi dimensioni o prolungare la vita dell’SSD.