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:
Prerequisiti
Per provare gli esempi inclusi in questo articolo:
Ho un HDD da 20 GB sdb Sulla mia macchina Ubuntu. Creerò un filesystem BTRFS sull'HDD sdb.
$ sudo lsblk -e7Nota: 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 /SDBUn 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 /datiPer montare il filesystem BTRFS creato su sdb HDD sul /dati Directory, eseguire il seguente comando:
$ sudo Mount /Dev /SDB /DataIl filesystem BTRFS dovrebbe ora essere montato, come puoi vedere nello screenshot qui sotto:
$ df -h /datiDeframmendo 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.isoIl 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 /DataCome 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 /OsImagesComprimendo 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 /DATAPer 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 /DataPer 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 /DataI 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 /sdbCome 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 /fstabAggiungi 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 riavviaCome 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.
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.