Differenze tra le versioni di "Btrfs"

Da GolemWiki.
Jump to navigation Jump to search
(→‎Gestione avanzata: aggiunto backup con send receive)
 
(15 versioni intermedie di 2 utenti non mostrate)
Riga 13: Riga 13:
  
 
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)
 
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)
 +
 +
 +
==Creazione di un subvolume==
 +
# btrfs subvolume create ''subvolume''
 +
 +
== Montaggio di un subvolume ==
 +
# mount -o subvol=''subvolume'' ''/dev/partizione'' ''/mnt/punto_mount''
 +
  
 
==Conversione da Ext3/4 a Btrfs==
 
==Conversione da Ext3/4 a Btrfs==
Riga 26: Riga 34:
 
  # btrfs subvolume delete /ext2_saved
 
  # btrfs subvolume delete /ext2_saved
  
 +
=Riparazione di un filesystem danneggiato=
 +
Ci sono due modalità:
 +
 +
==Riparazione online==
 +
Si può tentare di riparare il filesystem a caldo (mentre questo è montato)
 +
# btrfs scrub start -B /dev/partizione
 +
o anche direttamente sulla root
 +
# btrfs scrub start -B /
 +
 +
==Riparazione offline==
 +
Precedentemente conosciuta come btrfsck, nel caso in cui l'operazione di ripristino precedente fallisca, si deve smontare il disco e, da live, dare:
 +
# btrfs check --repair /dev/partizione
 +
 +
=Tips and tricks=
 +
Se si preferisce non utilizzare una partizione /boot in formato tradizionale (ext2/3/4, reiser, etc...), al fine di evitare possibili problemi di avvio con GRUB, specialmente abilitando opzioni come la compressione del filesystem di root, si consiglia di partizionare il disco nel formato [[UEFI_e_GPT | GPT]] ed utilizzare la Bios Grub Partition o l'EFI System nel caso si possieda un moderno PC dotato di UEFI.
  
 
=Gestione avanzata=
 
=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.
 
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'''
+
Ecco un '''/etc/fstab''' di esempio
 
  LABEL=ROOT      /            btrfs    defaults,compress=lzo,subvol=@            0 0
 
  LABEL=ROOT      /            btrfs    defaults,compress=lzo,subvol=@            0 0
  LABEL=ROOT      /             btrfs    defaults,compress=lzo,subvol=@home        0 0
+
  LABEL=ROOT      /home        btrfs    defaults,compress=lzo,subvol=@home        0 0
  LABEL=ROOT     /mnt/btrfs     btrfs    defaults,noauto,subvolid=0,compress=lzo  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.
+
Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.
  
 
==Creazione e gestione delle snapshot==
 
==Creazione e gestione delle snapshot==
Riga 60: Riga 83:
  
 
===Aggiungere a GRUB l'opzione per avviare una snapshot===
 
===Aggiungere a GRUB l'opzione per avviare una snapshot===
Editare ''/boot/grub/grub.cfg''
+
Editare ''/etc/grub.d/40_custom'' (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot ''rootsnap''
aggiungere quanto segue per permettere l'avvio della snapshot ''rootsnap''
 
  
 
  menuentry 'Linux snapshot' {
 
  menuentry 'Linux snapshot' {
Riga 72: Riga 94:
 
  }
 
  }
  
 +
dopodichè aggiornare la configurazione di GRUB con
 +
# grub-mkconfig -o /boot/grub/grub.cfg
 +
su Debian/Ubuntu si può anche dare
 +
# update-grub
  
 
==RAID 0==
 
==RAID 0==
Riga 84: Riga 110:
 
  # btrfs filesystem show /mnt
 
  # btrfs filesystem show /mnt
  
    Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e
+
Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e
    Total devices 2 FS bytes used 27.75GiB
+
Total devices 2 FS bytes used 27.75GiB
    devid    1 size 136.72GiB used 17.03GiB path /dev/sda1
+
devid    1 size 136.72GiB used 17.03GiB path /dev/sda1
    devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1
+
devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1
  
 
===Aggiungere una partizione===
 
===Aggiungere una partizione===
Riga 93: Riga 119:
  
 
  # btrfs filesystem show /mnt
 
  # btrfs filesystem show /mnt
    Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e
+
Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e
    Total devices 3 FS bytes used 27.75GiB
+
Total devices 3 FS bytes used 27.75GiB
    devid    1 size 136.72GiB used 17.03GiB path /dev/sda1
+
devid    1 size 136.72GiB used 17.03GiB path /dev/sda1
    devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1
+
devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1
    devid    3 size 136.72GiB used 0.00 path /dev/sdc1
+
devid    3 size 136.72GiB used 0.00 path /dev/sdc1
  
 
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi
 
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi
Riga 104: Riga 130:
  
 
  # btrfs filesystem show /mnt
 
  # btrfs filesystem show /mnt
    Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e
+
Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e
    Total devices 3 FS bytes used 27.78GiB
+
Total devices 3 FS bytes used 27.78GiB
    devid    1 size 136.72GiB used 10.03GiB path /dev/sda1
+
devid    1 size 136.72GiB used 10.03GiB path /dev/sda1
    devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1
+
devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1
    devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1
+
devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1
  
 
===Rimuovere un device===
 
===Rimuovere un device===
Riga 114: Riga 140:
  
 
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.
 
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==
 
==RAID 1==
 
  # mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1
 
  # mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1
 
  
 
== RAID 5 ==
 
== RAID 5 ==
 
=== Conversione a RAID5===
 
=== Conversione a RAID5===
  # btrfs balance start -dconvert=raid5 -mconvert=raid5 ''directory di mount''
+
  # btrfs balance start -dconvert=raid5 -mconvert=raid5 ''/punto_di_mount''
  
 
===Sostituzione device danneggiato===
 
===Sostituzione device danneggiato===
  # btrfs replace start /dev/sdb1 /dev/sdc1 ''directory di mount''
+
  # btrfs replace start /dev/sdb1 /dev/sdc1 ''/punto_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.
 
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
 
  # btrfs device delete missing /mnt
 +
 +
 +
== Quote ==
 +
Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle '''quote'''.
 +
 +
Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi
 +
# btrfs quota enable volume
 +
 +
Se invece le quote non sono state abilitate subito su tutto il filesystem è necessario creare un qgroup (quota group) per ogni subvolume utilizzando il rispettivo ID e successivamente fare una scansione delle quote.
 +
# btrfs subvolume list <path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} <path>
 +
# btrfs quota rescan <path>
 +
 +
Assegnare una quota limite ad un subvolume
 +
# btrfs qgroup limit size /volume/subvolume
 +
 +
Es.:
 +
# btrfs qgroup limit 20g /mnt/@
 +
# btrfs qgroup limit 100g /mnt/@home
 +
 +
Scoprire la quantità di spazio utilizzata da un subvolume
 +
# btrfs qgroup show <path>
 +
 +
== Backup ==
 +
Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs.
 +
L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura.
 +
Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext
 +
 +
* Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta
 +
btrfs subvolume snapshot -r @root @root-yymmdd-ro
 +
btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true
 +
* Trasferire la snapshot sul disco esterno.
 +
btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext
 +
* Quando necessario, ripristinare la snapshot
 +
btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/
 +
* Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura
 +
mv /mnt/ext/{@root-yymmdd-ro,@root}
 +
btrfs property set /mnt/btrfs/@root ro false
  
 
= Bibliografia =
 
= Bibliografia =
 
http://lwn.net/Articles/577961/
 
http://lwn.net/Articles/577961/
https://btrfs.wiki.kernel.org/index.php/Main_Page
+
 
 +
https://btrfs.wiki.kernel.org/index.php/UseCases
 +
 
 +
[[Category:Howto]]

Versione attuale delle 11:47, 2 gen 2021

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)


Creazione di un subvolume

# btrfs subvolume create subvolume

Montaggio di un subvolume

# mount -o subvol=subvolume /dev/partizione /mnt/punto_mount


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

Riparazione di un filesystem danneggiato

Ci sono due modalità:

Riparazione online

Si può tentare di riparare il filesystem a caldo (mentre questo è montato)

# btrfs scrub start -B /dev/partizione

o anche direttamente sulla root

# btrfs scrub start -B /

Riparazione offline

Precedentemente conosciuta come btrfsck, nel caso in cui l'operazione di ripristino precedente fallisca, si deve smontare il disco e, da live, dare:

# btrfs check --repair /dev/partizione

Tips and tricks

Se si preferisce non utilizzare una partizione /boot in formato tradizionale (ext2/3/4, reiser, etc...), al fine di evitare possibili problemi di avvio con GRUB, specialmente abilitando opzioni come la compressione del filesystem di root, si consiglia di partizionare il disco nel formato GPT ed utilizzare la Bios Grub Partition o l'EFI System nel caso si possieda un moderno PC dotato di UEFI.

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 /etc/fstab di esempio

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

Montando 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 /etc/grub.d/40_custom (o crearlo) e 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
}

dopodichè aggiornare la configurazione di GRUB con

# grub-mkconfig -o /boot/grub/grub.cfg

su Debian/Ubuntu si può anche dare

# update-grub

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 /punto_di_mount

Sostituzione device danneggiato

# btrfs replace start /dev/sdb1 /dev/sdc1 /punto_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


Quote

Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle quote.

Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi

# btrfs quota enable volume

Se invece le quote non sono state abilitate subito su tutto il filesystem è necessario creare un qgroup (quota group) per ogni subvolume utilizzando il rispettivo ID e successivamente fare una scansione delle quote.

# btrfs subvolume list <path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} <path>
# btrfs quota rescan <path>

Assegnare una quota limite ad un subvolume

# btrfs qgroup limit size /volume/subvolume

Es.:

# btrfs qgroup limit 20g /mnt/@
# btrfs qgroup limit 100g /mnt/@home

Scoprire la quantità di spazio utilizzata da un subvolume

# btrfs qgroup show <path>

Backup

Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs. L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura. Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext

  • Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta
btrfs subvolume snapshot -r @root @root-yymmdd-ro
btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true
  • Trasferire la snapshot sul disco esterno.
btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext
  • Quando necessario, ripristinare la snapshot
btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/
  • Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura
mv /mnt/ext/{@root-yymmdd-ro,@root}
btrfs property set /mnt/btrfs/@root ro false

Bibliografia

http://lwn.net/Articles/577961/

https://btrfs.wiki.kernel.org/index.php/UseCases