B-Tree Filesystem (Btrfs) è un filesystem copy on write (CoW) per i sistemi operativi Linux. Gli utenti di Fedora sono stati presentati a Btrfs quando il team del progetto Fedora lo ha reso il filesystem predefinito per Fedora Workstation 33. Non avevo pensato troppo a Btrfs nonostante fosse disponibile per Linux per diversi anni. Questo articolo ti consentirà di essere al passo con il filesystem Btrfs e le sue funzionalità come istantanee, sottovolumi e quote.
B-Tree Filesystem (Btrfs) è sia un filesystem che un gestore di volumi. È in fase di sviluppo dal 2007 e da allora fa parte del kernel Linux. I suoi sviluppatori mirano a creare un filesystem moderno in grado di risolvere le sfide associate al ridimensionamento a sottosistemi di archiviazione di grandi dimensioni. Dalla Manpage di Btrfs, le sue caratteristiche principali si concentrano su tolleranza agli errori, facile amministrazione e riparazione.
Filesystem Btrfs in Fedora Linux
Le sue caratteristiche principali sono:
- Istantanee:istantanee scrivibili e di sola lettura.
- RAID.
- Auto-guarigione:checksum per dati e metadati.
- Rilevamento automatico del danneggiamento dei dati.
- Sottovolumi.
- Consapevolezza SSD.
- Backup incrementali efficienti
Puoi saperne di più sulle sue funzionalità avanzate e sui vantaggi nella pagina man ufficiale di Btrfs.
Prerequisito
Se stai già eseguendo Fedora Workstation 33, sei pronto per i passaggi successivi. In caso contrario, puoi scaricare l'ISO ufficiale di Fedora Workstation e installarlo o eseguirlo in una nuova macchina virtuale da qualsiasi distribuzione Linux che stai utilizzando.
Quando scrivo questo articolo, non mi sono imbattuto in uno strumento grafico per lavorare con Btrfs (i suggerimenti sono i benvenuti!). Pertanto, lavoreremo con la riga di comando per la maggior parte delle dimostrazioni in questo articolo. Devi lavorare con Btrfs come superutente per i passaggi successivi.
~]$ sudo su # change into super user mode
Puoi esaminare il formato Btrfs eseguendo il comando seguente.
Osservando più da vicino il filesystem Btrfs
Mostra il filesystem Fedora Btrfs:
[root@fosslinux tuts]# btrfs filesystem show Label: 'fedora_localhost-live' uuid: 688a6af2-77e1-4da4-bc63-878c5b0f063b Total devices 1 FS bytes used 18.94GiB devid 1 size 148.05GiB used 21.02GiB path /dev/sda2
Puoi notare che l'etichetta del filesystem è "fedora_localhost-live". Puoi cambiare l'etichetta per rappresentare una rappresentazione più accurata del tuo sistema poiché non stiamo eseguendo la versione USB live di Fedora.
Cambiare le etichette Btrfs:
Puoi cambiare l'etichetta usando il comando btrfs filesystem label.
[root@fosslinux tuts]# btrfs filesystem label / fedora_localhost-live [root@fosslinux tuts]# btrfs filesystem label / fedoraworkstation33 [root@fosslinux tuts]# btrfs filesystem label / fedoraworkstation33 [root@fosslinux tuts]# Btrfs Fedora filesystem label Btrfs subvolumes
I sottovolumi non sono gli stessi delle partizioni, ma possono essere paragonati alle partizioni e vengono utilizzati in modo simile a come vengono utilizzate le partizioni. Un sottovolume è la directory standard che Btrfs può gestire.
Puoi utilizzare un sottovolume per acquisire istantanee, impostare una quota e replicarlo in altre posizioni e altri sistemi operativi host purché siano in esecuzione nel filesystem Btrfs.
Elenca i sottovolumi di Btrfs:
[root@fosslinux tuts]# btrfs subvolume list / ID 256 gen 24421 top level 5 path home ID 258 gen 24407 top level 5 path root ID 265 gen 22402 top level 258 path var/lib/machines
Crea sottovolume:
Puoi creare un nuovo sottovolume eseguendo il comando btrfs subvolume create.
[root@fosslinux tuts]# btrfs subvolume create /opt/foo Create subvolume '/opt/foo' [root@fosslinux tuts]# btrfs subvolume list / ID 256 gen 24469 top level 5 path home ID 258 gen 24469 top level 5 path root ID 265 gen 22402 top level 258 path var/lib/machines ID 279 gen 24469 top level 258 path opt/foo
Elimina sottovolume:
Puoi eliminare un sottovolume eseguendo il comando btrfs subvolume delete.
[root@fosslinux tuts]# btrfs subvolume delete /opt/foo Delete subvolume (no-commit): '/opt/foo' [root@fosslinux tuts]# btrfs subvolume list / ID 256 gen 24495 top level 5 path home ID 258 gen 24493 top level 5 path root ID 265 gen 22402 top level 258 path var/lib/machines
I sottovolumi possono tornare utili per gli amministratori di sistema, specialmente quando si aggiungono utenti.
Aggiunta di un utente
Prima di Fedora Linux 33, la creazione di un nuovo account utente creava una home directory per l'account. In sostanza, la directory utente creata è una sottodirectory di /home. Significava che la proprietà ei privilegi erano adattati al proprietario della directory /home. Significava anche che non c'erano funzioni speciali per la gestione della sottodirectory. Con Btrfs, hai più controllo per gestire e applicare i vincoli alle directory utente create.
Il modo tradizionale per aggiungere un nuovo utente.
Aggiungi un nuovo utente, 'fedoran1', usando il comando useradd:
[root@fosslinux tuts]# useradd fedoran1 [root@fosslinux tuts]# getent passwd fedoran1 fedoran1:x:1001:1001::/home/fedoran1:/bin/bash [root@fosslinux tuts]# ls -l /home total 0 drwx------. 1 fedoran1 fedoran1 80 Apr 7 19:00 fedoran1 drwx------. 1 tuts tuts 308 Apr 6 08:33 tuts
Utilizzo dei sottovolumi Btrfs come case degli utenti
È possibile adattare i sottovolumi Btrfs come case utente aggiungendo –btrfs-subvolume-home al comando useradd. Il comando creerà un nuovo sottovolume Btrfs per l'utente.
[root@fosslinux tuts]# useradd --btrfs-subvolume-home fedoran2 Create subvolume '/home/fedoran2' [root@fosslinux tuts]# getent passwd fedoran2 fedoran2:x:1002:1002::/home/fedoran2:/bin/bash
Se esegui btrfs subvolume list / comando, noterai un nuovo sottovolume per la directory home del nuovo utente.
[root@fosslinux tuts]# btrfs subvolume list / ID 256 gen 24732 top level 5 path home ID 258 gen 24731 top level 5 path root ID 265 gen 22402 top level 258 path var/lib/machines ID 280 gen 24728 top level 256 path home/fedoran2
Elimina un utente:
A volte si desidera eliminare un utente con tutti i file dell'utente e la sua home directory contemporaneamente. Puoi usare il comando userdel con l'opzione -r, che cancellerà anche il sottovolume Btrfs dell'utente.
[root@fosslinux tuts]# userdel -r fedoran2 Delete subvolume (commit): '/home/fedoran2'
Quote Btrfs
Hai mai avuto un programma che è andato fuori controllo e ha scritto sul tuo disco fino a quando l'intera directory /home non è stata riempita? Questi problemi sorgono, in particolare con applicazioni o server che archiviano contenuti e file di registro. Puoi impedire che il tuo sistema o server si fermi perché il disco è pieno impostando e implementando le quote Btrfs.
Il primo passo è abilitare le quote sul tuo filesystem Btrfs:
[root@fosslinux tuts]# btrfs quota enable /
Quindi, annota il numero ID del gruppo di quote (qgroup) di ciascun sottovolume utilizzando il comando btrfs subvolume list. Sarebbe meglio associare ogni sottovolume a un qgroup in base al suo numero ID usando il comando btrfs qgroup create. Puoi farlo su base individuale, ma puoi anche usare il seguente comando per accelerare la creazione di qgroup per i sottovolumi.
>btrfs subvolume list \<path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup destroy 0/{} \<path>
Nel tuo Fedora 33, sostituisci \
# btrfs subvolume list / | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} /
Esegui il comando btrfs quota rescan per visualizzare i qgroup che hai creato.
[root@fosslinux tuts]# btrfs qgroup show / WARNING: rescan is running, qgroup data may be incorrect qgroupid rfer excl -------- ---- ---- 0/5 16.00KiB 16.00KiB 0/256 23.70MiB 23.70MiB 0/258 449.61MiB 449.61MiB 0/265 16.00KiB 16.00KiB 0/279 16.00KiB 16.00KiB
Ora puoi assegnare una quota a un qgroup che applicherà le modifiche al sottovolume associato.
Ora possiamo usare il comando btrfs qgroup limit per limitare l'utilizzo della home directory dell'utente fedoran2 a 2 GB.
[root@fosslinux tuts]# btrfs qgroup limit 2G /home/fedoran2
Conferma le modifiche al limite di quota per l'utente fedoran2.
[root@fosslinux tuts]# btrfs qgroup show -reF /home/fedoran2 qgroupid rfer excl max_rfer max_excl -------- ---- ---- -------- -------- 0/279 16.00KiB 16.00KiB 2.00GiB none
Mostra tutti i qgroup e i limiti di quota assegnati, se presenti, utilizzando btrfs qgroup show -re /
[root@fosslinux tuts]# btrfs qgroup show -reF /home/fedoran2 qgroupid rfer excl max_rfer max_excl -------- ---- ---- -------- -------- 0/279 16.00KiB 16.00KiB 2.00GiB none
Istantanee Btrfs
Un'istantanea nel filesystem Btrfs è semplicemente una copia di un sottovolume. Pertanto, uno snapshot è un sottovolume che può condividere i propri dati e metadati con altri sottovolumi utilizzando le funzionalità di copia in scrittura (CoW). Scattare uno snapshot è immediato, ma non occupa uno spazio non appena viene creato.
Quando si scatta un'istantanea, lo spazio dell'istantanea aumenterà con le modifiche nel sottovolume originale o nell'istantanea se è scrivibile. Inoltre, tutti i file aggiunti, modificati o eliminati nel sottovolume risiedono ancora nello snapshot. Queste funzionalità offrono un modo per creare backup nel tuo sistema comodamente.
Crea backup utilizzando gli snapshot
Per impostazione predefinita, un'istantanea risiederà sullo stesso disco del sottovolume e puoi sfogliare o persino recuperare una copia di un file nel suo stato originale come quando è stata scattata l'istantanea. Una caratteristica interessante delle istantanee è che puoi inviarle a un disco rigido esterno o a un sistema remoto utilizzando SSH. Il problema è che la destinazione dovrebbe avere un file system Btrfs. Per sfruttare questa funzione nelle istantanee, utilizzerai i comandi btrfs send e btrfs receive.
Nota:l'archiviazione di uno snapshot sullo stesso disco del sottovolume non è una strategia di backup ideale. Se il tuo disco viene danneggiato, perderai sia il sottovolume che le istantanee.
Segui questi passaggi per creare un backup di un sottovolume.
1:crea un sottovolume per il tuo progetto
A scopo dimostrativo, creeremo un sottovolume Btrfs (myproject) all'interno di $HOME/Desktop/myproject. Il sottovolume Btrfs apparirà e funzionerà come una directory standard.
Crea un sottovolume usando il seguente comando:
[tuts@fosslinux ~]$ btrfs subvolume create $HOME/Desktop/myproject Create subvolume '/home/tuts/Desktop/myproject'
Crea una directory nascosta per archiviare le tue istantanee:
[tuts@fosslinux ~]$ mkdir $HOME/.myprojectsnapshots
Crea un file di testo all'interno del sottovolume $HOME/Desktop/myproject:
[tuts@fosslinux ~]$ cd /home/tuts/Desktop/myproject [tuts@fosslinux myproject]$ ls [tuts@fosslinux myproject]$ vi day0.txt [tuts@fosslinux myproject]$ ls day0.txt
2:Scatta una foto
Per impostazione predefinita, gli snapshot sono scrivibili, ma dovrai creare uno snapshot di sola lettura per utilizzare i comandi btrfs send e btrfs receive. '
È possibile scattare istantanee ogni giorno, ogni ora o anche ogni minuto.
Scatta un'istantanea di sola lettura del sottovolume $HOME/Desktop/myproject e disponile in $HOME/.myprojectsnapshots usando il comando seguente.
[tuts@fosslinux ~]$ btrfs subvolume snapshot -r $HOME/Desktop/myproject $HOME/.myprojectsnapshots/myproject-day0 Create a readonly snapshot of '/home/tuts/Desktop/myproject' in '/home/tuts/.myprojectsnapshots/myproject-day0'
Nota:
- Usa -r flag per creare uno snapshot di sola lettura. Il flag -r offrirà maggiore coerenza e sicurezza e ti consentirà di inviare e ricevere su un disco rigido esterno.
- Le istantanee non scatteranno istantanee ricorsive di se stesse. Uno snapshot del sottovolume /home non eseguirà lo snapshot del sottovolume $HOME/Desktop/myproject.
Utilizzo di btrfs send e btrfs receive per eseguire il backup degli snapshot.
Nella dimostrazione seguente, l'istantanea del volume Btrfs (/.myprojectsnapshots/myproject-day0) verrà inviata a un'unità USB montata come /run/media/tuts/bk.
[tuts@fosslinux ~]$ sudo btrfs send $HOME/.myprojectsnapshots/myproject-day0 | sudo btrfs receive /run/media/tuts/bk At subvol /home/tuts/.myprojectsnapshots/myproject-day0 ERROR: /run/media/tuts/bk doesn't belong to btrfs mount point
A seconda di come hai formattato l'unità USB, potresti ricevere il seguente messaggio di errore:
ERROR: /run/media/tuts/bk doesn't belong to btrfs mount point.’
L'errore indica che l'unità USB non è nel formato del filesystem btrfs. Il comando btrfs send non può funzionare su un filesystem diverso da btrfs.
Se ricevi questo messaggio di errore, formatta la tua chiavetta USB in btrfs usando il comando seguente.
Formatta unità USB in formato filesystem btrfs:
[tuts@fosslinux ~]$ sudo mkfs.btrfs /dev/sdb -L 'bk' -f
Ora esegui il comando btrfs send e btrfs receive:
[tuts@fosslinux ~]$ sudo btrfs send $HOME/.myprojectsnapshots/myproject-day0 | sudo btrfs receive /run/media/tuts/bk [sudo] password for tuts: At subvol /home/tuts/.myprojectsnapshots/myproject-day0 At subvol myproject-day0
Il comando btrfs send è stato completato con successo e puoi visualizzare e sfogliare la tua istantanea "myproject-day0" sulla tua unità USB.
Il comando potrebbe richiedere del tempo a seconda delle dimensioni del sottovolume ($HOME/.myprojectsnapshots/myproject-day0). I successivi invii btrfs incrementali richiederanno un tempo più breve.
Backup incrementali tramite btrfs send
Per utilizzare btrfs send in modo incrementale, dovrai acquisire un'altra istantanea del tuo sottovolume.
Crea istantanee:
[tuts@fosslinux ~]$ btrfs subvolume snapshot -r $HOME/Desktop/myproject $HOME/.myprojectsnapshots/myproject-day1 Create a readonly snapshot of '/home/tuts/Desktop/myproject' in '/home/tuts/.myprojectsnapshots/myproject-day1'
Invio btrfs incrementale:
[tuts@fosslinux ~]$ sudo btrfs send -p $HOME/.myprojectsnapshots/myproject-day0 $HOME/.myprojectsnapshots/myproject-day1 | sudo btrfs receive /run/media/tuts/bk At subvol /home/tuts/.myprojectsnapshots/myproject-day1 At snapshot myproject-day1
Il prossimo backup incrementale (il giorno dopo).
Crea uno snapshot:
[tuts@fosslinux ~]$ btrfs subvolume snapshot -r $HOME/Desktop/myproject $HOME/.myprojectsnapshots/myproject-day2 Create a readonly snapshot of '/home/tuts/Desktop/myproject' in '/home/tuts/.myprojectsnapshots/myproject-day2'
Invio btrfs incrementale (il giorno dopo):
[tuts@fosslinux ~]$ sudo btrfs send -p $HOME/.myprojectsnapshots/myproject-day1 $HOME/.myprojectsnapshots/myproject-day2 | sudo btrfs receive /run/media/tuts/bk At subvol /home/tuts/.myprojectsnapshots/myproject-day2 At snapshot myproject-day2
Pulizia
Nota:per eseguire l'invio btrfs incrementale è necessario almeno l'ultimo snapshot. Assicurati che l'istantanea sia presente nell'origine e nella destinazione.
Elimina gli snapshot nella posizione di origine
Puoi eliminare le istantanee non necessarie utilizzando il seguente comando:
[tuts@fosslinux ~]$ sudo btrfs subvolume delete $HOME/.myprojectsnapshots/myproject-day0 [sudo] password for tuts: Delete subvolume (no-commit): '/home/tuts/.myprojectsnapshots/myproject-day0'
[tuts@fosslinux ~]$ sudo btrfs subvolume delete $HOME/.myprojectsnapshots/myproject-day1 [sudo] password for tuts: Delete subvolume (no-commit): '/home/tuts/.myprojectsnapshots/myproject-day1'
Elimina le istantanee nella posizione di destinazione:
[tuts@fosslinux ~]$ sudo btrfs subvolume delete /run/media/tuts/bk/myproject-day0 Delete subvolume (no-commit): '/run/media/tuts/bk/myproject-day0'
[tuts@fosslinux ~]$ sudo btrfs subvolume delete /run/media/tuts/bk/myproject-day1 Delete subvolume (no-commit): '/run/media/tuts/bk/myproject-day1'
Nota:sarebbe meglio se conservassi l'ultima istantanea nelle posizioni di origine e di destinazione in modo da poter eseguire un nuovo invio btrfs incrementale.
Recupera un file o una directory da uno snapshot btrfs
Errori come l'eliminazione di una directory o di un file per errore sono inevitabili. Quando si verificano tali errori, è possibile recuperare file o directory dallo snapshot recente. Puoi anche recuperare una versione precedente della directory o del file da uno snapshot precedente.
Poiché gli snapshot funzionano come directory, puoi utilizzare il comando cp per ripristinare un file utilizzando il comando seguente.
Utilizzo del comando cp
Ripristina un file eliminato usando il comando cp:
[tuts@fosslinux ~]$ cp $HOME/.myprojectsnapshots/myproject-day1/day0.txt $HOME/Desktop/myproject
Ripristina una directory eliminata usando il comando cp:
[tuts@fosslinux ~]$ cp -r $HOME/.myprojectsnapshots/myproject-day1/directory $HOME/Desktop/myproject
Se elimini l'intera directory $HOME/Desktop/myproject (sottovolume), puoi ricreare il sottovolume e utilizzare il comando cp per ripristinare l'intero contenuto da uno snapshot.
Ripristina un sottovolume eliminato:
[tuts@fosslinux ~]$ btrfs subvolume create $HOME/Desktop/myproject Create subvolume '/home/tuts/Desktop/myproject'
[tuts@fosslinux ~]$ cp -rT $HOME/.myprojectsnapshots/myproject-day1 $HOME/Desktop/myproject
Utilizzo del comando snapshot btrfs
Puoi ripristinare un sottovolume eliminato acquisendo un'istantanea delle istantanee.
Ripristina un sottovolume usando il comando btrfs snapshot:
[tuts@fosslinux ~]$ btrfs subvolume snapshot $HOME/.myprojectsnapshots/myproject-day1 $HOME/Desktop/myproject Create a snapshot of '/home/tuts/.myprojectsnapshots/myproject-day1' in '/home/tuts/Desktop/myproject'
Recupera le istantanee btrfs da un'unità esterna
Puoi utilizzare il comando cp per ripristinare un'istantanea da un'unità USB o da un'unità esterna.
Recupera un file:
[tuts@fosslinux ~]$ cp /run/media/tuts/bk/myproject-day1/day0.txt $HOME/Desktop/myproject
È possibile utilizzare i comandi btrfs send e btrfs receive per recuperare un'intera istantanea. Devi impostare l'opzione di sola lettura su false per ripristinare un sottovolume scrivibile.
Recupera un'intera istantanea:
[tuts@fosslinux ~]$ sudo btrfs send /run/media/tuts/bk/myproject-day1 | sudo btrfs receive $HOME/Desktop/ [sudo] password for tuts: At subvol /run/media/tuts/bk/myproject-day1 At subvol myproject-day1
Riepilogo
L'articolo ha evidenziato alcune funzionalità di Btrfs che vale la pena imparare. Btrfs è stato creato come alternativa al filesystem ZFS e offre molte funzionalità avanzate del filesystem per i sistemi operativi Fedora e Linux.
Puoi saperne di più su Btrfs usando il comando btrfs – – help o la documentazione in linea, a cui puoi accedere usando man btrfs-subvolume, man btrfs-send o man btrfs-receive. Trovo anche utile il Wiki ufficiale di Btrfs.
Potremmo fare tutti con uno strumento grafico per interagire con Btrfs! A te, team di progetto Fedora.