
Sono sempre stato affascianto dall'archiviazione massiva dei dati. Con BTRFS si possono fare cose pazzesche, è lo ZFS del mondo linuxBtrfs (Butter Filesystem) è un nuovo file system ancora sotto sviluppo paragonabile a ZFS che offre funzionalità sorprendenti. La terminologia usata con BTRFS crea un po' di confusione, se si ha dimestichezza con ZFS o LVM si troveranno molte analogie. Il termine "volume" corrisponde al termine "pool" in ZFS o "Volume Group" in LVM. Tra le principale caratteristiche di BTRFS troviamo: - Conversione tra filesystem EXT3, EXT4 e BTRFS; - Deframmentazione a caldo - Resize (diminuzione o ingrandimento dei dischi) a caldo! - Supporto RAID 0, RAID 1 e RAID 10 - Efficiente backup incrementale ed il mirroring FS - Controllo del file system montato on-line ed offline, entrambi in modo molto veloce - Checksum su dati e metadati, questa è una delle garanzie per mantenere l'integrità dei dati memorizzati - L'allocazione dinamica degli inode - Compressione con zlib e LZO - Efficienza di organizzazione dei file e directory - Dimensione massima dei file è di 16 exabyte - Creazione di snapshot del disco montato, ossia un backup in tempo reale dell'intero sistema A questa pagina http://www.rkeene.org/projects/info/wiki.cgi/165 vengono comparati i comandi tra btrfs, ZFS e LVM con ext4. A questa pagina troverete un interessante articolo a riguardo. Giochiamo col BTRFS Ritagliatevi un po' di tempo e armatevi di un po' pazienza (preparatevi una tazza di te e mettete un buon brano di sottofondo) e cominciamo a fare qualche test su questo file system.. Cominciamo a preparare un gruppo di dischi per i nostri test:
dd if=/dev/zero of=/tmp/btrfs-vol0.img bs=512M count=1
dd if=/dev/zero of=/tmp/btrfs-vol1.img bs=512M count=1
dd if=/dev/zero of=/tmp/btrfs-vol2.img bs=512M count=1
dd if=/dev/zero of=/tmp/btrfs-vol3.img bs=512M count=1
dd if=/dev/zero of=/tmp/btrfs-vol4.img bs=512M count=1
Colleghiamoli:
losetup /dev/loop0 /tmp/btrfs-vol0.img
losetup /dev/loop1 /tmp/btrfs-vol1.img
losetup /dev/loop2 /tmp/btrfs-vol2.img
losetup /dev/loop3 /tmp/btrfs-vol3.img
losetup /dev/loop4 /tmp/btrfs-vol4.img
Il comportamento di default (senza specificare opzioni) è il seguente:
- metadata replicati su tutti i device. Se si usa un solo device, un metadata rovinato comporta la morte del volume con nessuna possibilità di recupero del volume.
- dati spalmati su tutti i device (questo significa nessuna ridondanza; qualsiasi dato lasciato su un device difettoso non sarà accessibile)
Creiamo un volume BTRFS composto da più device (i metadata replicati su tutti i dischi):
mkfs.btrfs /dev/loop0 /dev/loop1 /dev/loop2
Creiamo un volume BTRFS composto da un singolo device con una sola copia dei metadata (pericoloso):
mkfs.btrfs -m single /dev/loop0
Creiamo un volume BTRFS composto da più device con metadati spalmati su tutti i device:
mkfs.btrfs -m raid0 /dev/loop0 /dev/loop1 /dev/loop2
Per creare un volume BTRFS completamente ridondato (composto da più device, con dati e metadati mirrorati su tutti i device):
mkfs.btrfs -d raid1 /dev/loop0 /dev/loop1 /dev/loop2
Per verificare da quali device è composto un volume BTRFS usare
btrfs-show device (old style)
oppure
btrfs filesystem show /dev/loop0
btrfs filesystem show (mostra tutti)
risultato:
Label: none uuid: 0a774d9c-b250-420e-9484-b8f982818c09
Total devices 3 FS bytes used 28.00KB
devid 3 size 1.00GB used 263.94MB path /dev/loop2
devid 1 size 1.00GB used 275.94MB path /dev/loop0
devid 2 size 1.00GB used 110.38MB path /dev/loop1
Montare un volume
I volumi BTRFS vengono montati come ogni altro filesystem:
(basta dare uno dei device)
mount /dev/loop0 /mnt
Controllo dello spazio
col comando df -h il risultato per ogni device fisico è il medesimo:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/loop1 3.0G 56K 1.8G 1% /mnt
Maggiori informazioni possono essere ottenute col comando:
# btrfs filesystem df /mnt
Data, RAID0: total=409.50MB, used=0.00
Data: total=8.00MB, used=0.00
System, RAID1: total=8.00MB, used=4.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=204.75MB, used=28.00KB
Metadata: total=8.00MB, used=0.00
Diminuire il volume (shrinking)
btrfs filesystem resize -500m /mnt
Ebbene sì! Ha fatto un ridimensionamento al volo.
Ma attenzione, un ridimensionamento troppo aggressivo non funzionarà, btrfs richiede uno spazio minimo:
btrfs filesystem resize -1g /mnt
Resize '/mnt' of '-1g'
ERROR: unable to resize '/mnt'
Aumentare il volume (growing)
btrfs filesystem resize +150m /mnt
Resize '/mnt' of '+150m'
Si può anche usare l'opzione "max" per usare il massimo spazio disponibile:
btrfs filesystem resize max /mnt
Aggiungere un nuovo device al volume BTRFS
btrfs device add /dev/loop4 /mnt
btrfs filesystem show /dev/loop4
Label: none uuid: 0a774d9c-b250-420e-9484-b8f982818c09
Total devices 4 FS bytes used 28.00KB
devid 3 size 1.00GB used 263.94MB path /dev/loop2
devid 4 size 1.00GB used 0.0 path /dev/loop4
devid 1 size 1.00GB used 275.00MB path /dev/loop0
devid 2 size 1.00GB used 110.00MB path /dev/loop1
Ovviamente non c'è bisogno di smontare nulla, si fa tutto online, ma il device per ora non è usato (used 0.0 MB).
Per metterlo in funzione bisogna dire a BTRFS di preparare il nuovo device (esempio di ribilanciare/mirrorare i metadati e dati su tutti i device).
btrfs filesystem balance /mnt
btrfs filesystem show /dev/loop4
Label: none uuid: 0a774d9c-b250-420e-9484-b8f982818c09
Total devices 4 FS bytes used 28.00KB
devid 3 size 1.00GB used 110.38MB path /dev/loop2
devid 4 size 1.00GB used 366.38MB path /dev/loop4
devid 1 size 1.00GB used 378.38MB path /dev/loop0
devid 2 size 1.00GB used 110.38MB path /dev/loop1
Continua...
Luca