Come sbloccare un filesystem BTRFS

Come sbloccare un filesystem BTRFS

BTRFS è un filesystem Copy-on-Write (Cow) basato su estensione. I file di grandi dimensioni sono archiviati in più estensioni di dati; e quando questi file di grandi dimensioni vengono modificati, le estensioni da modificare vengono copiate in estensioni nuove e vuote in un'altra posizione del dispositivo di archiviazione e vengono modificate nella nuova posizione. Quindi, l'entità dei file di grandi dimensioni viene riorientata per indicare l'estensione aggiornata. Le vecchie emissioni non vengono mai rimosse all'istante.

Questo è il modo in cui la funzione Copy-on-Write (Cow) del filesystem BTRFS provoca frammentazione. Frammentazione significa che le estensioni dei dati di file di grandi dimensioni sono sparse sull'intero dispositivo di archiviazione. Non sono istantanei. Quindi, le prestazioni (velocità di lettura/scrittura) del filesystem possono essere ridotte.

Per risolvere questo problema, è necessario deframmentare il filesystem BTRFS ogni tanto. Questo articolo mostra come sbalordire il filesystem BTRFS.

Abbreviazioni

Le abbreviazioni (forme brevi) utilizzate in questo articolo sono le seguenti:

  • Mucca - Copia-su-write
  • Btrfs - System B-Tree
  • HDD - Disco rigido
  • SSD - Disco a stato solido
  • GB - Gigabyte
  • VM - Macchina virtuale

Prerequisiti

Per provare gli esempi inclusi in questo articolo:

  • È necessario installare il filesystem BTRFS sul tuo computer.
  • È necessario disporre di un HDD/SSD di ricambio (di qualsiasi dimensione) o almeno 1 partizione HDD/SSD gratuita (di qualsiasi dimensione).

Ho un HDD da 20 GB sdb Sulla mia macchina Ubuntu. Creerò un filesystem BTRFS sull'HDD sdb.

$ sudo lsblk -e7

Nota: Il tuo HDD/SSD avrà probabilmente un nome diverso dal mio, e così le partizioni. Quindi, assicurati di sostituirli con i tuoi d'ora in poi.

Puoi creare un filesystem BTRFS sul tuo HDD/SSD (senza partizionamento) se si dispone di un HDD/SSD di riserva. Puoi anche creare una partizione sul tuo HDD/SSD e creare un filesystem BTRFS lì.

Per assistenza nell'installazione del filesystem BTRFS in Ubuntu, controlla l'installazione dell'articolo e utilizza BTRFS su Ubuntu 20.04 LTS.

Per assistenza nell'installazione del filesystem BTRFS in Fedora, controlla l'installazione dell'articolo e utilizza BTRFS su Fedora 33.

Creazione di un filesystem BTRFS

È possibile creare un filesystem BTRFS sul tuo HDD/SSD (non partizionato) o sulla partizione HDD/SSD.

Per creare un filesystem BTRFS su sdb HDD (intero HDD, nessuna partizione) e dargli l'etichetta del filesystem dati, Esegui il seguente comando:

$ sudo mkfs.BTRFS -l Data /Dev /SDB

Un filesystem BTRFS dovrebbe ora essere creato su sdb HDD.

Crea la directory /dati Per montare il filesystem BTRFS hai appena creato con il seguente comando:

$ sudo mkdir -v /dati

Per montare il filesystem BTRFS creato su sdb HDD sul /dati Directory, eseguire il seguente comando:

$ sudo Mount /Dev /SDB /Data

Il filesystem BTRFS dovrebbe ora essere montato, come puoi vedere nello screenshot qui sotto:

$ df -h /dati

Deframmendo manualmente un filesystem BTRFS

Come puoi vedere nello screenshot qui sotto, ho copiato due file sul filesystem BTRFS montato sul /dati Directory per dimostrare il processo di deframmentazione del filesystem BTRFS:

$ ls -lh /dati

È possibile deframmentare un singolo file o un intero sottovolume/directory in modo ricorsivo.

Per sbloccare il singolo file /Data/Ubuntu-20.04.1-Live-Server-AMD64.iso, Eseguimo il seguente comando:

$ sudo BTRFS FILSYSTEM Dragment -VF /Data /Ubuntu -20.04.1-Live-Server-AMD64.iso

Il file /Data/Ubuntu-20.04.1-Live-Server-AMD64.iso dovrebbe essere deframmentato.

Per deframmentare ogni file o directory del /dati Directory in modo ricorsivo, eseguire il seguente comando:

$ sudo BTRFS FILESYSTEM Dragment -RVF /Data

Come puoi vedere, tutti i file del /dati La directory è deframmentata.

Allo stesso modo, se avessi il subolume /Data/Osimages, Quindi potresti sbloccare tutti i file del /Data/Osimages Subvolume in modo ricorsivo con il seguente comando:

$ sudo BTRFS FILESYSTEM Dragment -RVF /Data /OsImages

Comprimendo un filesystem BTRFS durante la defraggment

Il filesystem BTRFS ti consente di comprimere i file.

Per deframmentare tutti i file in /dati directory e comprimerli con il Zlib Algoritmo di compressione allo stesso tempo, eseguire il comando di deframmento con il -czlib Opzione, come segue:

$ sudo BTRFS FILEMSYSTEM DRAGMENT -RVF -CZLIB /DATA

Per deframmentare tutti i file in /dati directory e comprimerli con il Zstd Algoritmo di compressione allo stesso tempo, eseguire il comando di deframmento con il -czstd Opzione, come segue:

$ sudo BTRFS FILSYSTEM Dragment -Rvf -Czstd /Data

Per deframmentare tutti i file in /dati directory e comprimerli con il Lzo Algoritmo di compressione allo stesso tempo, eseguire il comando di deframmento con il -Clzo Opzione, come segue:

$ sudo BTRFS FILESYSTEM Dragment -Rvf -clzo /Data

I file in /dati La directory dovrebbe essere deframmentata e compressa allo stesso tempo.

Allo stesso modo, puoi anche sbloccare e comprimere i file di un sottovolume BTRFS.

Deframmendo automaticamente un filesystem BTRFS

È possibile abilitare la deframmentazione automatica sul filesystem BTRFS al momento del montaggio. Questa funzionalità del filesystem BTRFS si defrazzerà automaticamente tutti i file del filesystem BTRFS.

Per montare il filesystem BTRFS creato su sdb HDD nel /dati Directory con deframmentazione automatica abilitata al momento dell'avvio, è necessario aggiungere una voce per il filesystem BTRFS nel /etc/fstab file.

Innanzitutto, trova l'UUID del filesstem BTRFS creato sul sdb HDD, come segue:

$ sudo blkid /dev /sdb

Come puoi vedere, l'UUID del filesystem BTRFS creato sul sdb HDD è 60AFC092-E0FA-4B65-81FD-5DFD7DD884DE.

Sarà diverso per te. Quindi, assicurati di sostituirlo con il tuo da ora in poi.

Apri il /etc/fstab file con il nano Editor di testo, come segue:

$ sudo nano /etc /fstab

Aggiungi la riga seguente alla fine del /etc/fstab file:

UUID = 60AFC092-E0FA-4B65-81FD-5DFD7DD884DE /DATA BTRFS AutoDefrag 0 0

Una volta terminato, premere + X seguito da Y E per salvare il /etc/fstab file.

Per avere effetto le modifiche, riavviare il computer con il seguente comando:

$ sudo riavvia

Come puoi vedere, il filesystem BTRFS creato su sdb HDD è montato su /dati Directory con deframmentazione automatica abilitata.

Problemi con la deframmentazione di un filesystem BTRFS

Sebbene possa sembrare che la deframmentazione migliora le prestazioni del filesiste.

Poiché BTRFS è un filesystem Copy-on-Write (Cow), per comprendere i problemi con la deframmentazione del filesystem BTRFS, è necessario comprendere la funzione Copy-on-Write del filesystem BTRFS.

Supponiamo che tu abbia un file di grandi dimensioni (File1) che utilizza 100 estensioni (puoi pensare ad estensioni come blocchi di file) di un filesystem BTRFS. Se crei un'altra copia di quel file di grandi dimensioni (file2) Nello stesso filesystem BTRFS, vedrai che non viene utilizzato uno spazio su disco aggiuntivo. Questo perché i file sono identici e le 100 estensioni di ciascun file sono le stesse. Quindi, il filesystem BTRFS utilizza la stessa misura per entrambi i file.

Figura 1: File1 E file2 sono identici e condividono le stesse estensioni del filesystem BTRFS per salvare lo spazio su disco

Ora, diciamo, hai modificato una delle copie del file di grandi dimensioni (file2). La modifica deve cambiare 10 delle 100 estensioni. Il filesystem BTRFS copierà le 10 estensioni richieste in un'altra posizione inutilizzata (diciamo, E101-E110) del filesystem e modificali lì. Una volta che le modifiche sono state scritte sul disco, il filesystem BTRFS refinterà le estensioni in modo che le modifiche si riflettono nel file di grandi dimensioni. Il processo è illustrato nella figura seguente:

Figura 2: 10 le estensioni vengono modificate in file2. Quindi, le estensioni sono refincate nel filesystem BTRFS.

Dalle figure 1 e 2, puoi capire come funziona Copy-on-Write (Cow) e come il filesystem BTRFS utilizza Copy-on-Write (Cow) per salvare lo spazio su disco.

Ora che sai come funziona la funzionalità Copy-on-Write (Cow) del filesystem BTRFS, comprenderà i problemi con la deframmentazione di un filesystem BTRFS.

  1. I file di deframmentazione spostano i dati BTRFS e tentano di allinearli, uno dopo l'altro. Quindi, i collegamenti di copia su scrittura tra le copie del file si interrompe. Ciò aumenterà le estensioni dei dati ridondanti, nonché l'utilizzo del disco di un filesystem BTRFS che era stato precedentemente salvato dalla condivisione delle estensioni dei dati tra copie identiche (o quasi identiche) del file.
  2. Se un sottovolume BTRFS ha più istantanee, la deframmentazione del sottovolume interromperà i collegamenti di copia-on-write tra il sottovolume e le istantanee. Ciò aumenterà l'utilizzo del disco di un filesystem BTRFS.
  3. Se si utilizza il filesystem BTRFS per database di grandi dimensioni o immagini di macchine virtuali (per la memorizzazione di dati/dischi VM), anche la defraeminazione del filesystem avrà un impatto negativo sulle prestazioni del filesystem.

Conclusione

In questo articolo, hai imparato come sbloccare un singolo file e i file in una directory/sub -volume in modo ricorsivo da un filesystem BTRFS. Hai anche imparato come abilitare la deframmentazione automatica su un filesystem BTRFS al momento del montaggio. Infine, l'articolo ha discusso alcuni dei problemi con la defraggment di un filesystem BTRFS.