Btrfs è un file system open source per uso generico per Linux. Il nome deriva dall'uso di B-tree per memorizzare le strutture interne del file system. Per il file system vengono utilizzati nomi diversi, inclusi "Butter F S" e "B-tree F S". Lo sviluppo di Btrfs è iniziato in Oracle nel 2007 e ora numerose aziende (tra cui Red Hat, Fujitsu, Intel, SUSE e molte altre) stanno contribuendo allo sforzo di sviluppo. Btrfs è incluso nel kernel Linux principale.
Istantanee Btrfs
I sottovolumi Btrfs possono essere sottoposti a snapshot e clonati, il che crea B-tree aggiuntivi. Uno snapshot inizia come una copia di un sottovolume acquisito in un determinato momento. Puoi rendere scrivibile un'istantanea e usarla come un clone in evoluzione del sottovolume originale. Oppure puoi utilizzare lo snapshot come immagine stabile di un sottovolume per scopi di backup o per la migrazione ad altri sistemi. Le istantanee possono essere create rapidamente e inizialmente occupano pochissimo spazio su disco.
Utilizzare il comando btrfs subvolume snapshot per creare un'istantanea scrivibile/leggibile di un sottovolume. L'esempio seguente crea uno snapshot del sottovolume SV1:
# btrfs subvolume snapshot /btrfs/SV1 /btrfs/SV1/SV1-snap Create a snapshot of '/btrfs/SV1' in '/btrfs/SV1/SV1-snap'
Usa l'istantanea del sottovolume btrfs -r opzione per creare uno snapshot di sola lettura:
# btrfs subvolume snapshot -r /btrfs/SV1 /btrfs/SV1-rosnap Create a readonly snapshot of '/btrfs/SV1' in '/btrfs/SV1-rosnap'
Gli snapshot vengono visualizzati come una directory normale quando viene utilizzato il comando ls. Le istantanee vengono visualizzate anche nell'output del comando btrfs subvolume list.
# btrfs subvolume list /btrfs ID 257 gen 10 top level 5 path SV1 ID 258 gen 9 top level 257 path SV1/SV1-snap ID 259 gen 10 top level 5 path SV1-rosnap
Scatto di un'istantanea di un file
Puoi utilizzare il "cp –reflink ” comando per acquisire un'istantanea di un file. Con questa opzione, il file system non crea un nuovo collegamento che punta a un inode esistente, ma crea invece un nuovo inode che condivide gli stessi blocchi del disco della copia originale. Il nuovo file sembra essere una copia del file originale ma i blocchi di dati non sono duplicati. Ciò consente alla copia di essere quasi istantanea e di risparmiare spazio su disco. Poiché il contenuto del file diverge nel tempo, la quantità di spazio di archiviazione richiesta aumenta. Una restrizione è che questa operazione può funzionare solo entro i limiti dello stesso file system e all'interno dello stesso sottovolume.
L'esempio seguente copia un file utilizzando il comando cp –reflink. Lo spazio utilizzato viene assegnato sia prima che dopo l'operazione di copia. Nota che lo spazio utilizzato non aumenta.
# df -hP /btrfs Filesystem Size Used Avail Use% Mounted on /dev/sda 10G 23M 8.0G 1% /btrfs
# cp --reflink /btrfs/SV1/vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1/copy_of_vmlinuz
# df -h /btrfs Filesystem Size Used Avail Use% Mounted on /dev/sda 10G 23M 8.0G 1% /btrfs
Montaggio di un sottovolume o di un'istantanea
Per impostazione predefinita, Linux monta il volume Btrfs padre, che ha un ID 0. In questo esempio, il seguente comando mount è stato immesso prima di creare qualsiasi sottovolume e snapshot:
# mount /dev/sdb /btrfs
Il sottovolume SV1 è stato creato in /btrfs. Il comando ls mostra il sottovolume:
# ls -l /btrfs total 0 drwxr-xr-x. 1 root root 84 Mar 29 11:01 SV1
L'esempio seguente copia i file in SV1, crea uno snapshot di SV1 e verifica che sia il sottovolume che lo snapshot contengano gli stessi file:
# cp -p /boot/vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1
# btrfs sub snapshot /btrfs/SV1 /btrfs/SV1-snap Create a snapshot of '/btrfs/SV1' in '/btrfs/SV1-snap'
# ls /btrfs/SV1* /btrfs/SV1: vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1-snap: vmlinuz-3.10.0-693.17.1.el7.x86_64
Se si smonta /btrfs e lo si rimonta, il volume padre Btrfs viene montato per impostazione predefinita:
# ls /btrfs/ SV1 SV1-snap # umount /btrfs # mount /dev/sda /btrfs/ # ls /btrfs/ SV1 SV1-snap
Tuttavia, puoi montare un sottovolume o uno snapshot btrfs come se fosse un dispositivo disco. Se si monta uno snapshot invece del suo sottovolume padre, si ripristina in modo efficace lo stato del file system al momento in cui è stato acquisito lo snapshot. L'esempio seguente copia un file in SV1 in modo che il contenuto sia diverso da SV1-snap:
# cp testfile /btrfs/SV1
# ls -l /btrfs/SV1* /btrfs/SV1: total 5760 -rw-r--r--. 1 root root 19 Mar 29 11:44 testfile -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1-snap: total 5756 -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64
Per montare un sottovolume o uno snapshot, devi prima determinare il numero ID del sottovolume che vuoi montare. Utilizzare il comando btrfs subvolume list per visualizzare i numeri ID. Nell'esempio seguente, l'ID del sottovolume principale è 257:
# btrfs sub list /btrfs ID 257 gen 12 top level 5 path SV1 ID 258 gen 9 top level 5 path SV1-snap
Usa btrfs “sottovolume set-default ” comando per impostare il sottovolume predefinito di un file system. Ad esempio, per montare il sottovolume SV1 Btrfs, che ha un ID di 257:
# btrfs subvolume set-default 257 /btrfs
È quindi necessario smontare e rimontare il file system Btrfs. Il livello principale contiene quindi il contenuto del sottovolume SV1 e il sottovolume principale non è più visibile:
# ls -l /btrfs total 5760 -rw-r--r--. 1 root root 19 Mar 29 11:44 testfile -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64
Puoi anche utilizzare il "-o subvolid ” opzione al comando mount per montare il sottovolume radice o un sottovolume o snapshot. Ad esempio, per montare il sottovolume radice:
# umount /btrfs # mount -o subvolid=5 /dev/sda /btrfs
# ls -l /btrfs total 0 drwxr-xr-x. 1 root root 84 Mar 29 11:44 SV1 drwxr-xr-x. 1 root root 68 Mar 29 11:17 SV1-snapCome creare e montare il file system Btrfs (spiegato con esempi)
Come ridimensionare/ espandere un volume/file system Btrfs