Btrfs
|
Versioni Compatibili Tutte le versioni supportate di Debian |
Introduzione
Dall'omonima pagina di wikipedia:
Btrfs (pronounced as "better F S", "butter F S", "b-tree F S", or B.T.R.F.S.) is a computer storage format that combines a file system based on the copy-on-write (COW) principle with a logical volume manager (distinct from Linux's LVM), developed together.
[...]
Btrfs is intended to address the lack of pooling, snapshots, checksums, and integral multi-device spanning in Linux file systems.
In poche parole questo filesystem incorpora alcune funzionalità avanzate come:
- controllo dell'integrità dei dati per rilevare ed eventualmente correggere automaticamente alterazioni dei dati dovuti per esempio al semplice scorrere del tempo (Data degradation);
- possibilità di creare volumi dati in modo simile ad LVM e quindi possibilità di variare facilmente le dimensioni di una "partizione";
- possibilità di avere ridondanza dei dati in modo simile al RAID 1.
Btrfs è funzionalmente simile al ben più famoso ZFS, ma a differenza di quest'ultimo beneficia di un'integrazione nel kernel di linux.
ATTENZIONE Per quanto btrfs sia stato inserito nel kernel di linux da più di 15 anni esistono ancora configurazioni/funzionalità che sono da considerarsi sperimentali o addirittura problematiche, per tanto si consiglia caldamente di leggere questa pagina del wiki di debian per maggiori informazioni sull'argomento. |
Suggerimento Alcune operazioni (come la copia dei dati dai vecchi dischi/partizioni) possono richiedere molto tempo, pertanto si consiglia di eseguire dette operazioni all'interno di una sessione di GNU/Screen (o altro applicativo che permetta di "scollegarsi" dalla sessione di terminale senza terminarla). |
Installazione
Tutti gli strumenti necessari a creare e manipolare un filesystem btrfs sono contenuti in un solo pacchetto:
# apt install btrfs-progs
Si consiglia di installare anche un pacchetto per l'automazione della manutenzione dei volumi btrfs, che per la loro complessità sono soggetti nel tempo a degradazione delle prestazioni se non manutenuti:
# apt install btrfsmaintenance
Utilizzo
ATTENZIONE LASCIARE SEMPRE almeno 10GB di spazio libero su ogni volume btrfs per permettere le operazioni di manutenzione. |
Per formattare una nuova partizione il comando generale è:
# mkfs.btrfs -L mia_etichetta /dev/sdX1
dove
/dev/sdX1
è la partizione da formattare;-L
è l'opzione che permette di assegnare l'etichetta alla partizione da formattare.
Altre opzioni utili sono:
-f
per forzare il sistema a formattare una partizione che non sia vuota, cioè che abbia già un suo filesystem.-d
per specificare il profilo dati da usare. Il valore predefinito èsingle
.-m
per specificare il profilo metadati da usare. Il valore predefinito èdup
nel caso di disco singolo oppureraid1
nel caso di due o più.
Profili (meta)dati
Per definire se si vuole ridondanza sia di dati che metadati si usano i profili, selezionabili come già scritto sopra con le opzioni rispettivamente -d
e -m
. La scelta dei profili e il loro significato è il medesimo sia per i dati che per i metadati, ovvero non esistono profili dedicati per i soli dati o metadati.
Suggerimento Nel caso di disco singolo non c'è alcuna ragione di scegliere un profilo metadati diverso da quello predefinito. |
single
: implica nessuna ridondanza dei (meta)dati e quindi permette di sfruttare il 100% dello spazio disponibile di un volume. Nel caso di più dischi/partizioni lo spazio totale disponibile sarà semplicemente la somma dei dischi/partizioni che lo compongono.dup
: da usare nel solo caso di volume composto da disco/partizione singolo, implica appunto la duplicazione dei (meta)dati. Nel caso dei dati lo spazio totale disponibile sarà quindi la metà di quello teorico (la duplicazione dei metadati invece comporta un consumo di spazio molto meno rilevante). Questo profilo protegge contro il degrado del tempo, ma non contro eventuali guasti hardware.
raid1
: da usare solo nel caso di volume composto da due o più dischi/partizioni. Funziona in modo simile al raid1 di mdadm, ma con due differenze importanti
- lo spazio totale disponibile è sempre
(somma dei dischi/partizioni che compongono il volume)/2
, e non(somma dei dischi/partizioni che compongono il volume)/N
(con N = n. totale dischi/partizioni); - i dischi/partizioni che compongono il volume non devono necessariamente avere la stesse dimensioni, ma la capacità di nessuno di essi può essere superiore alla somma delle capacità di tutti gli altri, ad esempio nel caso di tre dischi sarebbe accettabile avere 4TB, 3TB e 1TB, ma non 6TB e 2x1TB. È comunque consigliato avere dischi/partizioni di pari dimensioni.
- lo spazio totale disponibile è sempre
- Quando il volume è composto da due dischi/partizioni di dimensioni identiche allora si ha in pratica coincidenza con un volume raid 1 classico composto da due dischi.
raid1c3, raid1c4
: ancora poco testati e quindi sconsigliati, sono inclusi al solo scopo di chiarire meglio le differenze tra il raid di btrfs e quello classico. Entrambi i profili richiedono che il volume sia composto da almeno tre e quattro dischi/partizioni rispettivamente. Il primo crea tre copie dei (meta)dati e il secondo quattro, ergo lo spazio totale disponibile sarà rispettivamente 1/3 ed 1/4 della somma teorica totale. Questi due profili funzionano esattamente come quello diraid1
, eccetto appunto il numero di copie, inoltre quando i volumi sono composti rispettivamente da 3 e 4 dischi/partizioni di dimensioni identiche coincidono a livello pratico con un volume raid 1 classico composto dallo stesso numero di dischi.
Spazio libero/occupato
Per sapere quant'è lo spazio libero e/o occupato si consiglia l'uso di
btrfs filesystem usage -T /punto/di/mount/desiderato/
invece del solito df
poiché querst'ultimo quando utilizzato su volumi btrfs potrebbe potenzialmente restituire valori significativamente diversi dal vero.
Altri comandi utili in tal senso sono btrfs filesystem show
e btrfs device usage
.
Manutenzione volumi
Suggerimento Leggere attentamente sia il manuale di btrfsmaintenance che il documento /usr/share/doc/btrfsmaintenance/README.Debian .
|
Al momento l'unico script raccomandato è quello per l'esecuzione delle operazioni di scrub, lasciare quindi disattivati gli altri.
La configurazione base di questo strumento considera come volume predefinito da controllare la radice, cioè /
, se però questo non è il vostro caso allora è necessario
- editare il file
/etc/default/btrfsmaintenance
- cercare la riga contenente il parametro
BTRFS_SCRUB_MOUNTPOINTS
e modificare il valore predefinito col punto di mount del proprio volume (è possibile specificare più percorsi separandoli con il carattere:
).
Fatto ciò è necessario attivare due servizi, ovvero btrfsmaintenance-refresh
e btrfs-scrub
. Se si usa systemd:
# systemctl enable btrfsmaintenance-refresh.service # systemctl enable btrfs-scrub.timer
Se si preferisse usare CRON fare riferimento al manuale di btrfsmaintenance.
Esempi
Raid1 dati e metadati, sei dischi
Ipotesi
- si hanno a disposizione sei dischi a due a due di identiche dimensioni e precisamente pari rispettivamente a 3TB, 2TB ed 1,5TB;
- i dischi siano identificati come
/dev/sdU
(3TB),/dev/sdV
(2TB),/dev/sdW
(1,5TB),/dev/sdX
(3TB),/dev/sdY
(2TB),/dev/sdZ
(1,5TB); - i dischi non sono nuovi e contengono dati;
- ciascun disco contiene gli stessi dati dell'altro avente pari dimensioni, ad es. il i due dischi da 3TB contengono ciascuno una copia degli stessi dati;
Obiettivo
Creare un volume btrfs raid1 da 6,5TB di spazio totale composto da tutti e sei i dischi, ma senza dover necessariamente copiare prima i dati già presenti altrove.
ATTENZIONE Si consiglia caldamente di fare una copia di backup dei dati presenti sui dischi che andranno a comporre il volume btrfs prima di iniziare le operazioni. |
Passo 1
Selezionare tre dischi tutti di differente capacità e pulirli
ATTENZIONE Quest'operazione implica la cancellazione permanente di tutti i dati dai dischi puliti. |
# wipefs -a /dev/sdU /dev/sdV /dev/sdW
Passo 2
Ripartizionare i tre dischi
# parted /dev/sdU mklabel gpt mkpart nome_desiderato1 btrfs 0% 100% # parted /dev/sdV mklabel gpt mkpart nome_desiderato2 btrfs 0% 100% # parted /dev/sdW mklabel gpt mkpart nome_desiderato3 btrfs 0% 100%
Passo 3
Formattare i 3 dischi e contestualmente creare il volume btrfs
mkfs.btrfs -f -L nome_etichetta -d single -m raid1 /dev/sdU1 /dev/sdV1 /dev/sdW1
A questo punto digitando il comando # lsblk -f
si vedrà che l'UUID di tutte e tre le partizioni è il medesimo.
Passo 4
Montare il volume btrfs appena creato o specificando il primo disco dei tre o l'UUID (visibile tramite lsblk -f
per esempio) del volume btrfs:
# mount /dev/sdU1 /punto/di/mount/desiderato/
Passo 5
Copiare tutti i dati dai dischi /dev/sdX /dev/sdY /dev/sdZ
sul nuovo volume btrfs.
Avvertimento Se i dati da copiare sono molti, ad esempio qualche TB, l'operazione potrebbe richiedere anche uno o più giorni. |
Passo 6
Pulire anche i tre dischi rimanenti.
ATTENZIONE Quest'operazione implica la cancellazione permanente di tutti i dati dai dischi puliti. |
# wipefs -a /dev/sdX /dev/sdY /dev/sdZ
Passo 7
Ripartizionare anche i tre dischi rimanenti
# parted /dev/sdX mklabel gpt mkpart nome_desiderato4 btrfs 0% 100% # parted /dev/sdY mklabel gpt mkpart nome_desiderato5 btrfs 0% 100% # parted /dev/sdZ mklabel gpt mkpart nome_desiderato6 btrfs 0% 100%
Passo 8
Aggiungere i tre dischi appena puliti al nostro volume btfrs (che DEVE essere montato)
# btrfs device add -f /dev/sdX1 /dev/sdY1 /dev/sdZ1 /punto/di/mount/desiderato/
Passo 9
Convertire i dati del volume btrfs da single
a raid1
.
Avvertimento Se i dati da copiare sono molti, ad esempio qualche TB, l'operazione potrebbe richiedere anche uno o più giorni. |
# btrfs balance start -v -dconvert=raid1 /punto/di/mount/desiderato/
Qualora inizialmente non si fosse scelto il profilo raid1
per i metadati sarebbe possibile convertire al volo anche gli stessi semplicemente aggiungendo l'opzione -mconvert=raid1
al precedente comando.
Passo 10
Al termine dell'operazione di bilanciamento verrà stampato a video
Done, had to relocate ABC out of DEF chunks
e il prompt del terminale sarà di nuovo usabile.
Il volume è ora pronto e il suo stato può essere indagato con tre comandi di cui il primo è:
# btrfs filesystem show /punto/di/mount/desiderato/
che restituirà una sintesi simile a
Label: 'nome_etichetta' uuid: ABCDEFGH-... Total devices 6 FS bytes used 4.05TiB devid 1 size 1.82TiB used 1.23TiB path /dev/sdV1 devid 2 size 2.73TiB used 1.96TiB path /dev/sdU1 devid 3 size 1.36TiB used 793.01GiB path /dev/sdW1 devid 4 size 1.82TiB used 1.23TiB path /dev/sdY1 devid 5 size 2.73TiB used 2.14TiB path /dev/sdX1 devid 6 size 1.36TiB used 793.00GiB path /dev/sdZ1
Il secondo comando è invece
# btrfs filesystem usage -T /punto/di/mount/desiderato/
e stamperà a video qualcosa di simile a:
Overall: Device size: 11.83TiB Device allocated: 8.10TiB Device unallocated: 3.72TiB Device missing: 0.00B Device slack: 0.00B Used: 8.09TiB Free (estimated): 1.87TiB (min: 1.87TiB) Free (statfs, df): 1.77TiB Data ratio: 2.00 Metadata ratio: 2.00 Global reserve: 512.00MiB (used: 0.00B) Multiple profiles: no Data Metadata System Id Path RAID1 RAID1 RAID1 Unallocated Total Slack -- --------- --------- -------- --------- ----------- -------- ----- 1 /dev/sdV1 1.22TiB 5.00GiB - 605.02GiB 1.82TiB - 2 /dev/sdU1 1.95TiB 6.00GiB 8.00MiB 790.51GiB 2.73TiB - 3 /dev/sdW1 792.00GiB 1.00GiB 8.00MiB 604.26GiB 1.36TiB - 4 /dev/sdY1 1.23TiB - - 605.02GiB 1.82TiB - 5 /dev/sdX1 2.14TiB - - 604.52GiB 2.73TiB - 6 /dev/sdZ1 793.00GiB - - 604.26GiB 1.36TiB - -- --------- --------- -------- --------- ----------- -------- ----- Total 4.04TiB 6.00GiB 8.00MiB 3.72TiB 11.83TiB 0.00B Used 4.04TiB 4.36GiB 608.00KiB
Infine il terzo è
# btrfs device usage /punto/di/mount/desiderato/
che resituirà qualcosa di simile a:
/dev/sdV1, ID: 1 Device size: 1.82TiB Device slack: 0.00B Data,RAID1: 1.22TiB Metadata,RAID1: 5.00GiB Unallocated: 605.02GiB /dev/sdU1, ID: 2 Device size: 2.73TiB Device slack: 0.00B Data,RAID1: 1.95TiB Metadata,RAID1: 6.00GiB System,RAID1: 8.00MiB Unallocated: 790.51GiB /dev/sdW1, ID: 3 Device size: 1.36TiB Device slack: 0.00B Data,RAID1: 792.00GiB Metadata,RAID1: 1.00GiB System,RAID1: 8.00MiB Unallocated: 604.26GiB /dev/sdY1, ID: 4 Device size: 1.82TiB Device slack: 0.00B Data,RAID1: 1.23TiB Unallocated: 605.02GiB /dev/sdX1, ID: 5 Device size: 2.73TiB Device slack: 0.00B Data,RAID1: 2.14TiB Unallocated: 604.52GiB /dev/sdZ1, ID: 6 Device size: 1.36TiB Device slack: 0.00B Data,RAID1: 793.00GiB Unallocated: 604.26GiB
Passo 11
Editare il file /etc/default/btrfsmaintenance
sostituendo al valore predefinito di BTRFS_SCRUB_MOUNTPOINTS
quello scelto (/punto/di/mount/desiderato/
in questo esempio) e infine attivare i servizi btrfsmaintenance-refresh.service
e btrfs-scrub.timer
come descritto nell'apposita sezione di questa guida.
Approfondimenti
Manpages
Sitografia
- Documentazione ufficiale
- Pagina wiki Debian
- Forza's ramblings btrfs wiki
- Btrfs, pagina inglese di wikipedia
Guida scritta da: Wtf (discussioni) 17:58, 25 dic 2024 (UTC) | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |