Dimensione: 24019
Commento:
|
Dimensione: 24230
Commento:
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 420: | Linea 420: |
<<Anchor(output-atteso)>><<Immagine(./findmnt-25.png,750,)>> | in questo esempio, l'output atteso è: <<Anchor(output-atteso)>>{{{ TARGET SOURCE FSTYPE OPTIONS / /dev/nvme0n1p5[/@/.snapshots/50/snapshot] btrfs rw,relatime,ssd,space_cache=v2,subvolid=329,subvol=/@/.snapshots/50/snapshot }}} |
Attenzione! Questa è una Pagina di prova. Le informazioni riportate potrebbero essere incomplete, errate e potenzialmente pericolose. Per contribuire alla realizzazione di questa pagina consultare la discussione di riferimento. |
Guida verificata con Ubuntu: 24.04
Problemi in questa pagina? Segnalali in questa discussione
Introduzione
In questa guida sono descritte le istruzioni per installare Ubuntu 24.04 su filesystem btrfs, gestendo le funzionalità di quest'ultimo con snapper e Btrfs Assistant, in modo tale da ottenere un layout btrfs "OpenSuse-like".
La procedura prevede che il device di installazione sia preparato manualmente prima dell'installazione. I diversi passaggi sono sintetizzati nella tabella seguente, in relazione all'ambiente di esecuzione e allo stato dell'installazione:
Passaggio |
Ambiente |
Installazione in corso |
Preparazione del disco |
Live |
No |
Preparazione del volume btrfs |
Live |
No |
Installazione di Ubuntu |
Live |
Si, in corso |
Attività successive l'installazione |
Live |
No, terminata |
Primo avvio |
Ubuntu |
N/A |
Installazione di btrfsassistant |
Ubuntu |
N/A |
Preparativi
Preparazione del disco
Il device può essere formattato in sessione live con GParted (o altro programma in grado di creare partizioni btrfs). In caso di dual boot con Windows, consultare questa guida per ridurre la relativa partizione.
I requisiti minimi per l'installazione, in termini di storage, sono:
- partizione EFI/ESP (almeno 100Mb; in caso di dual boot con Windows è possibile utilizzare quella già presente)
- partizione btrfs (consigliati minimo 50 GB)
Di seguito un esempio di installazione in single boot:
Di seguito un esempio di installazione in dual boot:
Preparazione del volume btrfs
Identificare la variabile BTRFSDEV (relativa al device da utilizzare) digitando nel terminale il seguente comando:
BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1) echo $BTRFSDEV
L'output sarà simile al seguente:
/dev/nvme01n1p5
Nei passaggi successivi la variabile BTRFSDEV sarà /dev/nvme01n1p5. Modificare eventualmente la stringa $BTRFSDEV con quella del proprio device btrfs.
Creazione del subvolume @
Di seguito i passaggi per la creazione del subvolume.
Montare la partizione btrfs creata in precedenza digitando nel terminale:
BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1) sudo mount $BTRFSDEV /mnt
Creare il subvolume @:
sudo btrfs subvolume create /mnt/@
First root filesystem
Creare la directory /mnt/@/etc/snapper/configs con il comando:
sudo mkdir /mnt/@/etc/snapper/configs -p
Modificare il default subvolume,:
BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1) sudo btrfs subvolume set-default /mnt/@
Rimontare il volume con il comando
sudo umount /mnt && sudo mount $BTRFSDEV /mnt
Installare il pacchetto snapper.
Configurare e utilizzare snapper per creare il first root filesystem, interrompendo in questa fase il relativo servizio (per evitare snapshot di tipo timeline prima dell'installazione). Digitare in sequenza i seguenti comandi:
sudo systemctl stop snapper-timeline.timer sudo snapper create-config /mnt sudo cp /etc/snapper/configs/root /mnt/etc/snapper/configs/ sudo sed -i s@\"/mnt\"@\"/\"@ /mnt/etc/snapper/configs/root sudo snapper create -t single -d "first root filesystem" --read-write --from 0
Creare i subvolumi di proprio interesse, per poi modificare il default subvolume con il first root filesystem. Digitare in sequenza i seguenti comandi:
sudo btrfs subvolume create /mnt/home sudo btrfs subvolume create /mnt/var/cache -p sudo btrfs subvolume create /mnt/var/log sudo btrfs subvolume create /mnt/var/tmp sudo chmod 1777 /mnt/var/tmp sudo btrfs subvolume create /mnt/var/lib/flatpack -p sudo btrfs subvolume set-default /mnt/.snapshots/1/snapshot sudo umount /mnt
Installazione di Ubuntu
Eseguire quindi la normale installazione di Ubuntu, avendo cura di:
Selezionare Altro nella parte Tipo di installazione.
Nella fase di partizionamento manuale, assegnare alla partizione ESP/EFI il punto di mount /boot/efi e alla partizione btrfs il punto di mount /.
Sempre nella fase di partizionamento manuale, non porre la spunta nella casella per la formattazione (ultima colonna).
Non riavviare il sistema appena conclusa l'installazione.
Attività successive l'installazione
Una volta terminata l'installazione, eseguire i seguenti comandi in un terminale sempre all'interno della sessione live.
Montare i subvolumi
Verificare che tutti i subvolumi vengano montati correttamente:
BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1) sudo mount $BTRFSDEV /mnt sudo mount -o subvol=@/home $BTRFSDEV /mnt/home sudo mount -o subvol=@/var/cache $BTRFSDEV /mnt/var/cache sudo mkdir /mnt/var/lib/flatpack -p sudo mount -o subvol=@/var/log $BTRFSDEV /mnt/var/log sudo mount -o subvol=@/var/tmp $BTRFSDEV /mnt/var/tmp sudo mount -o subvol=@/var/lib/flatpack $BTRFSDEV /mnt/var/lib/flatpack sudo mount -o subvol=@/.snapshots $BTRFSDEV /mnt/.snapshots
Aggiornare fstab
Aggiornare il file /mnt/etc/fstab affinché monti i subvolumi nella maniera aspettata.
Qualora si volessero personalizzare le opzioni di mount, l'operazione è possibile in questo contesto. Per maggiori informazioni sule opzioni di mount consultare questa guida (in calce alla sezione, c'è un esempio con le opzioni 'noatime,compression=lzo').
Procedere come descritto di seguito:
BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1) DISP=$(grep btrfs /mnt/etc/fstab | awk '{print $1}') line=$(grep -n btrfs /mnt/etc/fstab | cut -d":" -f1) echo "sudo sed -i '"$line"s/.$/0/' /mnt/etc/fstab" | sh echo -n -e "\n# btrfs\n" | sudo tee -a /mnt/etc/fstab grep btrfs /etc/mtab | \ grep -v target | \ grep -v "1/snapshot" | \ sed s@rw.*,subvolid=.*,@defaults,@ | \ sed s@/mnt@@ | \ sed s@$BTRFSDEV@$DISP@ | \ sudo tee -a /mnt/etc/fstab
Di seguito un esempio di personalizzazione delle opzioni di mount:
BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1) DISP=$(grep btrfs /mnt/etc/fstab | awk '{print $1}') line=$(grep -n btrfs /mnt/etc/fstab | cut -d":" -f1) echo "sudo sed -i '"$line"s/.$/0/' /mnt/etc/fstab" | sh echo "sudo sed -i '"$line"s/defaults/noatime,compress=lzo/' /mnt/etc/fstab" | sh echo -n -e "\n# btrfs\n" | sudo tee -a /mnt/etc/fstab grep btrfs /etc/mtab | \ grep -v target | \ grep -v "1/snapshot" | \ sed s@rw.*,subvolid=.*,@noatime,compress=lzo,@ | \ sed s@/mnt@@ | \ sed s@$BTRFSDEV@$DISP@ | \ sudo tee -a /mnt/etc/fstab
In questo esempio è stata utilizzata l'opzione 'compress=lzo'.
In questo caso è consigliato eseguire una operazione di defrag: btrfs filesystem defrag -c<algoritmo di compressione> -r <path>
Dato l'esempio sopra, il comando da eseguire è:
sudo btrfs filesystem defrag -clzo -r /mnt
L'operazione potrebbe durare diversi minuti.
Riavvio
Dopo aver smontato tutti i subvolumi montati in /mnt, riavviare il computer. A tal fine digitare i seguenti comandi:
sudo umount /mnt/.snapshots sudo umount /mnt/var/tmp sudo umount /mnt/var/cache sudo umount /mnt/var/log sudo umount /mnt/var/lib/flatpack sudo umount /mnt/home sudo umount /mnt sudo shutdown -r now
Primo avvio
Configurare snapper sul sistema appena avviato
Questi comandi, vanno eseguiti in un un terminale, nell'ambiente appena avviato.
Si installa e configura snapper.
sudo apt install snapper -y
Il file di configurazione /etc/snapper/configs/root, è stato ereditato dal subvolume @, nella fase first root filesystem.
Abilitiamo la configurazione root nel file /etc/default/snapper.
sudo sed -i s/SNAPPER_CONFIGS=\"\"/SNAPPER_CONFIGS=\"root\"/g /etc/default/snapper
Si riavvia snapper per attivare la configurazione.
sudo systemctl restart snapperd
Si abilita la quota, in questo modo l'algoritmo di pulizia e raccolta delle snapshots, potrà onorare le direttive SPACE_LIMIT e FREE_LIMIT. Inoltre, l'output del comando snapper list fornirà informazioni riguardo lo spazio utilizzato.
sudo btrfs quota enable / sudo snapper setup-quota sudo snapper list
Creare la configurazione per la /home
Si crea la configurazione home, in modo da usufruire delle snapshots anche per il subvolume /home.
sudo snapper -c home create-config /home sudo snapper -c home setup-quota
Swap
Qualora si avesse necessità di configurare dello spazio per lo swap,
è possibile seguire la procedura Swap file su btrfs.
La pagina non è però aggiornata con le ultime funzionalità di kernel e btrfs-progs.
In attesa che venga aggiornata, si riportano i comandi necessari di seguito:
Montare il filesystem radice
BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1) sudo mount -o subvolid=5 $BTRFSDEV /mnt
Creare un subvolume per lo swap
sudo btrfs subvolume create /mnt/@/swap
Creare il file di swap
L'opzione '--size 2G' indica la dimensione che avrà il file di swap.
Valorizzare l'opzione, con una dimensione consona al proprio carico di lavoro.sudo btrfs filesystem mkswapfile --size 2G /mnt/@/swap/swapfile
Aggiornare fstab
printf "\n# swap su btrfs \n" | sudo tee -a /etc/fstab grep "/home" /etc/fstab | sed s@/home@/swap@g | sudo tee -a /etc/fstab printf "/swap/swapfile swap swap defaults,noatime 0 0 \n" | sudo tee -a /etc/fstab
Attivare lo swap
if [ -d /swap ]; then echo "Directory exists"; else sudo mkdir /swap; fi sudo mount /swap sudo swapon /swap/swapfile
Installare Btrfs Assistant
Un tool grafico, potente e intuitivo, che si può utilizzare per gestire snapper, è certamente Btrfs Assistant.
Sfortunatamente, questo software, non è disponibile nei repository ufficiali. Non esiste neanche un repository PPA.
Attualmente, l'unico riferimento ad un pacchetto Ubuntu è: btrfs assistant su launchpad (la versione 1.8, è vecchia di un anno. La versione corrente è 2.1)
Le istruzioni per l'installazione sono disponibili nella documentazione ufficiale.
- Prerequisiti per l'installazione
sudo apt install git cmake fonts-noto qt6-base-dev qt6-base-dev-tools \ g++ libbtrfs-dev libbtrfsutil-dev pkexec qt6-svg-dev qt6-tools-dev
- Scaricare i sorgenti
Per questo punto, si hanno a disposizione due opzioni: la versione main, o ultima versione. Se si vuole installare la versione main:
git clone https://gitlab.com/btrfs-assistant/btrfs-assistant.git cd btrfs-assistant
Per l'ultima versione:
wget https://gitlab.com/btrfs-assistant/btrfs-assistant/-/archive/2.1/btrfs-assistant-2.1.tar.gz tar xvf btrfs-assistant-2.1.tar.gz cd btrfs-assistant-2.1
- Compilarere il software
cmake -B build -S . -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE='Release' make -C build
- Installare il software
sudo make -C build install
- Disinstallazione (eventuale)
Perchè il software possa essere disinstallato, è necessario conservare la directory in cui è stato costruito. La lista dei files installati, è presente nella sottodirectory build. Il comando di disinstallazione è:
cd build sudo xargs rm < install_manifest.txt
Contenuto del file install_manifest.txt dopo l'installazione:
/etc/btrfs-assistant.conf /usr/share/applications/btrfs-assistant.desktop /usr/share/metainfo/btrfs-assistant.metainfo.xml /usr/share/polkit-1/actions/org.btrfs-assistant.pkexec.policy /usr/bin/btrfs-assistant /usr/bin/btrfs-assistant-launcher /usr/bin/btrfs-assistant-bin
Nel caso si installasse il pacchetto btrfsmaintenance, il software Btrfs Assistant, potrà essere utilizzato anche per gestire le operazioni di manutenzione del filesystem.
Installare grub-btrfs (opzionale)
grub-btrfs è una collezione di scripts che permette di eseguire il boot da una snapshot. La collezione di script è ben testata su distribuzioni come Arch e OpenSuse, per cui su Ubuntu, potrebbero esserci errori e/o limitazioni. L'avvio del sistema, utilizzando una snapshot read-only come filesystem radice, potrebbe non terminare con successo. Esistono diverse strategie per avviare una snapshot read-only con successo, la migliore è avviare con il supporto a overlayfs. Questa feature è documentata per Arch e per le distruzioni che utilizzano dracut: Booting on a snapshot in read-only mode can be tricky
Per le istruzioni di installazione e per la verifica dei prerequisiti:
manuale di installazione
(video di esempio)
In breve:
git clone https://github.com/Antynea/grub-btrfs.git cd grub-btrfs sudo make install
Al termine dell'installazione, se venisse riportato il warning:
WARNING: 'grub-mkconfig' needs to run at least once to generate the snapshots (sub)menu entry in grub the main menu. After that this script can run alone to generate the snapshot entries.
sarà necessario eseguire un l'aggiornamento del file /boot/grub/grub.cfg.
sudo update-grub
Per automatizzare la rigenerazione del menù di grub è necessario abilitare il servizio grub-btrfsd.
sudo apt install inotify-tools sudo systemctl start grub-btrfsd sudo systemctl enable grub-btrfsd
Si volesse utilizzare il solo snapper per la restore, grub-btrfs è mandatorio. Se si volesse utilizzare Btrfs Assistant, grub-btrfs è opzionale.
Operazione di restore
Si immagini di corrompere un sistema durante un upgrade. Il primo passaggio da eseguire è identificare il # della snapshot che si vuole utilizzare come "root" filesystem. Si seleziona la snapshot 25, perchè creata durante l'avvio precedente l'upgrade.
Restore con snapper
La restore con snapper, riassunta per punti, prevede:
- Eseguire il rollback di 25
- Riavviare il sistema, utilizzando una snapshot "copia r/w di 25"
- Rigenerare i file di configurazione di grub
- Riavviare il sistema
Eseguire il roolback
sudo snapper rollback 25
Questo comando modifica il subvolume default, dall'attuale, a "copia r/w di 25".
Riavviare il sistema, utilizzando una snapshot "copia r/w di 25"
Nel menù di grub, selezionare "Ubuntu snapshots".
Nel sottomenù, selezionare la voce "copia r/w di 25"
Una volta terminato il reboot si verifica che il filesystem radice sia quello atteso.
findmnt /
in questo esempio, l'output atteso è:
TARGET SOURCE FSTYPE OPTIONS / /dev/nvme0n1p5[/@/.snapshots/50/snapshot] btrfs rw,relatime,ssd,space_cache=v2,subvolid=329,subvol=/@/.snapshots/50/snapshot
- Rigenerare i files di configurazione di grub
Si riconfigura grub per avviare il subvolume selezionato di default.
sudo update-grub sudo grub-install
E' possibile trovare maggiori informazioni riguardo i comandi eseguiti nel Portale Grub
- Riavviare il sistema
Selezionare la sessione di "Ubuntu" nel menù di grub. AL termine del riavvio verificare che il filesystem radice, sia quello atteso.
findmnt /
è atteso lo stesso output ottenuto nella verifica precedente
Restore con Btrfs Assistant
L'intera procedura, si gestisce con l'interfaccia grafica.
1. Aprire Btrfs Assistant.
2. Selezionare il tab "Snapper".
3. Selezionare il tab "Browse / Restore".
4. Selezionare la snapshot che si vuole restorare dalla lista.
5. Premere il push button "Restore".
6. Confermare la scelta.
7. Riavviare.
Verificare che nel box "Select target" sia selezionato il subvolume da sostituire!
Ad esempio con:
findmnt /
Dopo il riavvio
Il subvolume che è stato sostituito, non è più gestito da snapper. Il subvolume si dovrà cancellare manualmente.
Identificare il subvolume
BACKUP=$(sudo btrfs subvolume list / | grep backup | cut -d "@" -f 2) echo $BACKUP
Verificare che il subolume non sia il default
sudo btrfs subvolume get-default /
Nel caso il check 2. sia positivo
sudo btrfs subvolume set-default 5 /
Cancellare il subvolume
echo "sudo btrfs subvolume delete $BACKUP" | sh
Caso di esempio, in cui il subvolume da eliminare era anche il default.
Restore da Live
Dopo l'upgrade l'avvio del sistema fallisce.
Uno dei modi più semplici per ripristinare una snapshot su un sistema che non si avvia, è utilizzando la Live da un supporto usb.
Aprire un terminale e montare il filesystem.
Montare il subvolume 'ID 5 (FS_TREE)' e il subvolume '/@/.snapshots'.
BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1) sudo mount -o subvolid=5,subvol=/ $BTRFSDEV /mnt sudo mount -o subvol=/@/.snapshots $BTRFSDEV /mnt/@/.snapshots
Identificare i subvolumi
Prima di procedere alla restore è necessario identificare con certezza due subvolumi:
- - subvolume che monta il 'root filesystem'
Su Ubuntu, si può identificare tale subvolume, utilizzando il file grub.cfg della partitione ESP.
Sapendo che il filesystem utilizzato è fat32, e il tipo di partizione è "EFI System", identifichiamo il device con blkid
blkid | grep vfat | cut -d ":" -f1
oppure con fdisk
sudo fdisk -l | grep EFI | awk '{ print $1 }'
Una volta identificato il dispositivo, montare lo stesso, per valutare la stringa di interesse:
device=$(blkid | grep vfat | cut -d ":" -f1) sudo mkdir /mnt2 sudo mount $device /mnt2 grep "\$root" /mnt2/EFI/ubuntu/grub.cfg sudo umount /mnt2
Qualora si fosse in difficoltà con la selezione del subvolume da sostituire, è possibile limitare la scelta a pochi (o uno) candidati, sfruttando il fatto che snapper prende le snapshots in modalità read-only.
for sub in $(sudo btrfs subvolume list /mnt | cut -d "@" -f2); \ do RO=$(sudo btrfs property get /mnt/@$sub ro| cut -d "=" -f2); \ if [ "$RO" = "false" ]; \ then sudo test -f /mnt/@$sub/boot/grub/grub.cfg && echo "/mnt/@$sub candidato per la sostituzione" || continue; \ fi; \ done
- - subvolume da restorare
Avendo identificato il subvolume per il root filesystem al punto precedente, si potrebbe aprire il sistema con il chroot e utilizzare
sudo snapper list
oppure si potrebbero sfruttare le informazioni salvate da snapper nei vari info.xml.
n=$(sudo btrfs subvolume list /mnt | awk '{ print $9 }' | grep "@/.snapshots/" | cut -d "/" -f3| tail -1) for i in $(seq 1 $n); do printf "\n /mnt/@/.snapshots/$i/snapshot \n"; sudo egrep 'date|cleanup|apt' /mnt/@/.snapshots/$i/info.xml; printf " - - - - - - - - - - - - - - \n"; done
- Restore
Rinominare il subvolume da sostituire.
sudo mv /mnt/@/.snapshots/1/snapshot /mnt/@/.snapshots/1/snapshot_backup
Restore del subvolume selezionato.
sudo btrfs subvolume snapshot /mnt/@/.snapshots/25/snapshot /mnt/@/.snapshots/1/snapshot
E' possibile modificare la descrizione first root filesystem.
Aprire con i privilegi di amministrazione e con un editor di testo il file /mnt/@/.snapshots/1/info.xml Modificare il campo <description> come da esempio:
- Riavviare
sudo umount /mnt/@/.snapshots sudo umount /mnt sudo shutdown -r now
Dopo il riavvio, eliminare il subvolume sostituito
Note sui metodi di Restore
snapper + grub-btrfs
La procedura proposta è una variante della procedura documentata per OpenSuse.
Non è la procedura raccomandata perchè Ubuntu non supporta grub-btrfs, e non è scontato che il sistema si avvii selezionando una snapshot ro.
La procedura documentata nel presente "evita" di avviare il sistema con una snapshot ro.
Perchè la procedura proposta funzioni come atteso, la scelta del default subvolume deve essere gestita da snapper.snapper + Btrfs Assistant
Questa è la procedura raccomandata; non solo è la più semplice, è anche la più veloce. La rimozione del vecchio subvolume è l'unica attività manuale richiesta.
Il default subvolume può essere qualunque, si consiglia quindi di settarlo sul subvolid=5.Live
La procedura proposta è per i casi di emergenza, si consiglia di utilizzarla solo per i casi in cui il sistema non si riavvia in seguito a un upgrade (o altro evento).
Ulteriori risorse
- Guida originale
- Approfondimento su btrfs
- Videotutorial