Guida verificata con Ubuntu: 20.04
Problemi in questa pagina? Segnalali in questa discussione
Introduzione
btrfs-convert è uno strumento che consente di convertire partizioni formattate in ext2, ext3, ext4 o reiserfs nel file system btrfs. L'operazione può richiedere molto tempo, circa 1 minuto per GB.
Questa guida spiega come utilizzare btrfs-convert per convertire in btrfs la partizione di root di Ubuntu, considerando un sistema installato in unica partizione (eccetto l'eventuale partizione EFI per i sistemi UEFI). Vengono inoltre illustrate tutte le operazioni successive necessarie per rendere il sistema avviabile, efficiente e performante.
La partizione da convertire deve avere almeno il 10% di spazio disponibile. Una volta completata la procedura non sarà possibile tornare al file system precedente, a meno di non reinstallare il sistema.
Di norma è preferibile eseguire un backup dei dati e reinstallare Ubuntu scegliendo la voce Altro nella schermata Tipo di installazione e specificando file system btrfs con journaling per la partizione di root. La conversione del file system è una soluzione non esente da rischi da valutare solo se la reinstallazione rappresenta un'opzione troppo difficoltosa o impossibile.
Operare sulle partizioni espone al rischio di perdere i dati, in conseguenza di eventuali errori o malfunzionamenti. Pertanto è fortemente raccomandato effettuare un backup dei propri dati prima di procedere.
Operazioni preliminari
Avviare una sessione live del rilascio più recente di Ubuntu (minimo 20.04).
Se il sistema da convertire è stato installato in modalità UEFI, assicurarsi di avviare la sessione live in tale modalità.
In alternativa è possibile operare da un altro sistema Ubuntu installato in dual boot. In tal caso per operare da Ubuntu 20.04 o successivo sarà necessario installare il pacchetto btrfs-progs presente nei repository. Invece per Ubuntu 18.04 scaricare ed installare manualmente i pacchetti btrfs-progs_5.4.1-2_amd64.deb, libbtrfs0_5.4.1-2_amd64.deb e libbtrfsutil1_5.4.1-2_amd64.deb.
Individuare la partizione da convertire.
In tutte le fasi successive di questa guida, a titolo di esempio, viene convertita nel file system btrfs la partizione /dev/sda3 con file system ext4.
Verificare l'integrità del file system da convertire digitando il seguente comando nel terminale:
sudo fsck.ext4 -f /dev/sda3
Conversione
Convertire il file system:
sudo btrfs-convert /dev/sda3
- Montare la partizione convertita, con uno dei seguenti comandi:
Mount con le opzioni di default, senza compressione:
sudo mount -t btrfs /dev/sda3 /mnt
Mount abilitando la compressione (consigliato):
sudo mount -t btrfs -o compress=zstd:1 /dev/sda3 /mnt
Eliminando lo snapshot ext2_saved, non si potrà più ripristinare la partizione ext4.
Eliminare il volume ext2_saved per liberare spazio
sudo btrfs subvolume delete /mnt/ext2_saved
- Questa procedura ti da la possibilità di dividere i volumi root e home, per sfruttare le funzionalità di Btrfs, ad esempio gli snapshot.
Creare lo snapshot della partizione Btrfs e rinominarlo in @:
sudo btrfs subvolume snapshot /mnt/ /mnt/@
Creare il subvolume della cartella /home:
sudo btrfs subvolume create /mnt/@home
Spostare i dati della vecchia Home nel subvolume @home:
sudo mv /mnt/@/home/* /mnt/@home/
- È fortemente consigliato deframmentare i volumi e bilanciare il file system. Il nuovo file system eredita il posizionamento dei blocchi e la frammentazione dei dati dei file. Per questo motivo si consiglia vivamente di eseguire una deframmentazione completa e un ribilanciamento completo prima dell'uso in "produzione". Non è necessario per il funzionamento generale, ma influirà sulle prestazioni. Questa procedura eliminerà la possibilità di ripristinare il file system precedente.
Prima di procedere al defrag e bilanciamento, controllare che il volume ext2_saved sia del tutto rimosso:
sudo btrfs subvolume list -d /mnt/
Se è in fase di eliminazione, si vedrà a schermo un risultato simile ID 1020 gen 4140456 top level 0 path DELETED, se è stato rimosso non restituirà nessun risultato, quindi si può procedere.
- Procedura per deframmentare senza comprimere i dati:
Deframmentare il subvolume @:
sudo btrfs filesystem defragment -rf /mnt/@
Deframmentare il volume @home:
sudo btrfs filesystem defragment -rf /mnt/@home
Procedura per deframmentare e comprimere i dati con l'algoritmo zstd livello 3:
Deframmentare il volume @:
sudo btrfs filesystem defragment -rf -czstd /mnt/@
Deframmentare il volume @home:
sudo btrfs filesystem defragment -rf -czstd /mnt/@home
Bilanciare il file system:
sudo btrfs balance start /mnt/
Aspettiamo il Timer di 10 secondi con un avviso di un full-balance che potrebbe richiedere molto tempo, in base alla dimensione del file system.
Eliminare dalla radice della partizione tutti i file e le cartelle, eccetto i subvolume @ e @home, digitando nel terminale il seguente comando:
find /mnt -mindepth 1 -maxdepth 1 ! -path '*/@*' -execdir sudo rm -r "{}" +
Terminato il bilanciamento, smontare la partizione:
sudo umount /mnt
Accesso al sistema con Chroot
Montare il subvolume @ in /mnt digitando nel terminale uno dei seguenti comandi:
Abilitando la compressione (consigliato):
sudo mount -t btrfs -o compress=zstd:1,subvol=@ /dev/sda3 /mnt
Oppure senza compressione:
sudo mount -t btrfs -o subvol=@ /dev/sda3 /mnt
Montare le cartelle /dev, /dev/pts, /proc, /sys e /run digitando nel terminale il seguente comando:
for i in dev dev/pts proc sys run; do sudo mount --bind /$i /mnt/$i; done
Solo per sistemi UEFI, montare anche /sys/firmware e la partizione EFI digitando nel terminale i seguenti comandi:
sudo mount --bind /sys/firmware /mnt/sys/firmware sudo mount /dev/sdXN /mnt/boot/efi
Sostituire sdXN con la partizione EFI del proprio sistema.
Effettuare il chroot sul sistema digitando nel terminale il seguente comando:
sudo chroot /mnt
Prendere nota del nuovo UUID della partizione convertita, visualizzabile digitando nel terminale il seguente comando:
lsblk -no UUID /dev/sda3
Aprire con i privilegi di amministrazione e un editor di testo (si consiglia nano) il file /etc/fstab.
Individuare la riga che fa riferimento alla partizione di Root, ovvero quella con punto di montaggio /, e commentarla aggiungendo il carattere «#» all'inizio della riga. Il risultato sarà simile al seguente:
#UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 errors=remount-ro 0 1
Incollare in fondo al file le seguenti righe, sostituendo <NUOVO UUID> con il valore annotato in precedenza:
Abilitando la compressione (consigliato):
UUID=<NUOVO UUID> / btrfs compress=zstd:1,autodefrag,subvol=@ UUID=<NUOVO UUID> /home btrfs compress=zstd:1,autodefrag,subvol=@home
Oppure senza compressione:
UUID=<NUOVO UUID> / btrfs autodefrag,subvol=@ UUID=<NUOVO UUID> /home btrfs autodefrag,subvol=@home
- Salvare il file e chiudere l'editor di testo.
Reinstallare il boot loader Grub digitando nel terminale uno dei seguenti comandi:
Per sistemi legacy BIOS:
grub-install /dev/sda
Per sistemi UEFI:
grub-install
Aggiornare la configurazione di Grub digitando nel terminale il seguente comando:
update-grub
In Ubuntu 20.04 e successive Installare direttamente il pacchetto btrfs-progs, in Ubuntu 18.04 seguire le procedure di questo paragrafo per installare il pacchetto btrfs-progs.
Uscire dal chroot digitando nel terminale il seguente comando:
exit
Smontare tutte le cartelle digitando nel terminale il seguente comando:
for i in dev/pts dev proc sys/firmware sys run; do sudo umount -l /mnt/$i; done
Solo per sistemi UEFI, smontare la partizione EFI digitando nel terminale il seguente comando:
sudo umount /mnt/boot/efi
Smontare il subvolume @ digitando nel terminale il seguente comando:
sudo umount /mnt
- Riavviare il sistema.