Btrfs

Da GolemWiki.
Jump to navigation Jump to search

Introduzione

Btrfs è un filesystem di nuova generazione designato per rimpiazzare Ext3 e Ext4 sui sistemi Linux.

Integra a livello di filesystem la gestione di volumi, snapshot e RAID rendendo non più necessario il ricorso a LVM

Utilizzo di base

Creazione del filesystem

# mkfs.btrfs /dev/partizione

Montaggio del filesystem

# mount -o compress=lzo /dev/partizione /mnt/punto_mount

(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)

Conversione da Ext3/4 a Btrfs

# btrfs-convert /dev/partizione

Automaticamente è creata una snapshot contenente il vecchio filesystem (/ext2_saved)

In caso di problemi può essere montata col comando

# mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved
# mount -t ext3 -o loop,ro /ext2_saved/image /ext3

Se tutto è andato a buon fine può invece essere eliminata

# btrfs subvolume delete /ext2_saved


Gestione avanzata

Normalmente la root di sistema viene collocata in un subvolume (es.: @), per poter effettuare opzioni di snapshot etc e consigliabile montare il filesystem con l'opzione subvolid=0. Nella directory di mount saranno visibili tutti i subvolumi e le snapshot della partizione e sarà quindi possibile effettuare tutte le operazioni indicate nei passaggi successivi.

Ecco un esempio di file /etc/fstab

LABEL=ROOT       /             btrfs     defaults,compress=lzo,subvol=@            0 0
LABEL=ROOT       /             btrfs     defaults,compress=lzo,subvol=@home        0 0
LABEL=ROOT      /mnt/btrfs     btrfs     defaults,noauto,subvolid=0,compress=lzo   0 0

Mountando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.

Creazione e gestione delle snapshot

Controllare i subvolumi presenti sul sistema

# btrfs subvolume list /

In una tipica installazione Ubuntu avremo un output di questo tipo

ID 257 gen 9755 top level 5 path @
ID 292 gen 7624 top level 5 path @home

@ è il nome del subvolume contenente la root / del filesystem @home è il nome del subvolume della /home

Effettuare una snapshot

# btrfs subvolume snapshot @ rootsnap

Nell'esempio abbiamo effettuato il backup del filesystem di root e l'abbiamo chiamato rootsnap

Montare un subvolume/snapshot

# mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot

Cancellare un subvolume/snapshot

# btrfs subvolume delete rootsnap

Aggiungere a GRUB l'opzione per avviare una snapshot

Editare /boot/grub/grub.cfg aggiungere quanto segue per permettere l'avvio della snapshot rootsnap

menuentry 'Linux snapshot' {
       insmod gzio
       insmod part_gpt
       insmod btrfs
       set root='hd1,gpt3'
       linux   /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap  quiet
       initrd  /rootsnap/boot/initramfs-linux.img
}


RAID 0

# mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1

Montare il raid

# mount /dev/sda1 /mnt

(È equivalente a mount /dev/sdb1 /mnt, il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)

Verifica del montaggio

# btrfs filesystem show /mnt
   Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e

Total devices 2 FS bytes used 27.75GiB devid 1 size 136.72GiB used 17.03GiB path /dev/sda1 devid 2 size 136.72GiB used 17.01GiB path /dev/sdb1

Aggiungere una partizione

# btrfs device add /dev/sdc1 /mnt
# btrfs filesystem show /mnt
   Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e

Total devices 3 FS bytes used 27.75GiB devid 1 size 136.72GiB used 17.03GiB path /dev/sda1 devid 2 size 136.72GiB used 17.01GiB path /dev/sdb1 devid 3 size 136.72GiB used 0.00 path /dev/sdc1

Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi

# btrfs balance start -d -m /mnt
# btrfs filesystem show /mnt
   Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e

Total devices 3 FS bytes used 27.78GiB devid 1 size 136.72GiB used 10.03GiB path /dev/sda1 devid 2 size 136.72GiB used 10.03GiB path /dev/sdb1 devid 3 size 136.72GiB used 11.00GiB path /dev/sdc1

Rimuovere un device

# btrfs device delete /dev/sdb1 /mnt

L'operazione può impiegare parecchio tempo e per andare a buon fine sui dischi rimanenti deve essere rimasto sufficiente spazio libero da ospitare i dati contenuti nel device che vogliamo togliere dal raid.


RAID 1

# mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1


RAID 5

Conversione a RAID5

# btrfs balance start -dconvert=raid5 -mconvert=raid5 directory di mount

Sostituzione device danneggiato

# btrfs replace start /dev/sdb1 /dev/sdc1 directory di mount

In alcuni casi potrebbe essere necessario montare il filesystem in modalità degraded (con l'opzione -o degraded) e lanciare il successivo comando per eliminare definitivamente il device dal raid.

# btrfs device delete missing /mnt

Bibliografia

http://lwn.net/Articles/577961/ https://btrfs.wiki.kernel.org/index.php/Main_Page