BTRFS: Il file system del futuro

Blog

BTRFS: Il file system del futuro

btrfs
Sono sempre stato affascianto dall'archiviazione massiva dei dati. Con BTRFS si possono fare cose pazzesche, è lo ZFS del mondo linux
Btrfs (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