Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "saxtro/prova01"
Differenze tra le versioni 1 e 84 (in 83 versioni)
Versione 1 del 13/05/2024 15.35.27
Dimensione: 2107
Autore: saxtro
Commento:
Versione 84 del 14/06/2024 16.39.42
Dimensione: 24624
Autore: jeremie2
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 5: Linea 5:
<<Indice(depth=2)>>

= HowTo: Noble su btrfs con layout snapper =

In questo HowTo, verrà descritto come installare Ubuntu 24.04 con un layout del filesystem btrfs "OpenSuse-like".
Al termine della procedurà di avrà una installazione Ubuntu Noble su filesystem btrfs.
Le funzionalità del filesystem verranno gestite con '''snapper''' + '''Btrfs Assistant'''.
La procedura prevede che il device di installazione, sia preparato in anticipo rispetto l'installazione, e sarà un'attività manuale.
L'obiettivo è fornire una procedura di tipo "copia e incolla" alla portata di tutti.

== Tabella spazio temporale ==

L'installazione è stata divisa in diversi passaggi.
La tabella di seguito pubblicata, inquadra i vari passaggi 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 ||
<<Indice(depth=3)>>
<<Informazioni(forum="https://forum.ubuntu-it.org/viewtopic.php?f=46&t=655644"; rilasci="24.04" )>>

##Essendo la guida verificata con la 24.04, non è necessario specificare ogni volta "ubuntu 20.04"

= Introduzione =

In questa guida sono descritte le istruzioni per installare Ubuntu su filesystem [[Hardware/DispositiviPartizioni/Btrfs/Introduzione|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.<<BR>>
I diversi passaggi sono sintetizzati nella tabella seguente, in relazione all'ambiente di esecuzione e allo stato dell'installazione:

||<:>'''Passaggio''' ||<:>'''Sessione''' ||<:>'''Fase''' ||
|| Preparazione del disco ||<:>Live ||<:>Prima dell'installazione ||
|| Preparazione del volume btrfs ||<:>Live ||<:> Prima dell'installazione ||
|| Installazione di Ubuntu ||<:>Live ||<:> - ||
|| Mount subvolumi e set fstab ||<:>Live ||<:>Dopo l'installazione ||
|| Configurazione snapper, home e swap ||<:>Ubuntu ||<:> Primo avvio ||
|| Installazione di btrfsassistant ||<:>Ubuntu ||<:> Primo avvio ||

= Preparativi =
Linea 31: Linea 29:
L'installazione proposta prevede che il dispositivo di installazione sia già pronto, e non necessiti di formattazione.
I requisiti minimi per l'installazione, in termini di storage sono:

 * partizione EFI/ESP (almeno 100Mb, in caso di dual boot si condivide quella di windows)
 * partizione btrfs (consigliati un minimo di 50Gb)
Il dispositivo di installazione si può preparare anche con gparted nella Live. Se si sta installando in dual boot, e sia necessario ridurre una (o più) partizione(i) in uso, si consiglia di utilizzare gli strumenti di windows.

||'''caso di esempio''' ||'''device su gparted''' ||
|| dual boot || attachment:DUAL_BOOT.PNG ||
|| single boot || attachment:SINGLE_BOOT.PNG ||
Il device può essere formattato in sessione [[Installazione#Creazione_e_avvio_del_supporto_di_installazione|live]] con '''[[Hardware/DispositiviPartizioni/PartizionamentoManuale|GParted]]''' (o altro programma in grado di creare partizioni btrfs). In caso di dual boot con Windows, consultare [[Hardware/DispositiviPartizioni/RidimensionarePartizioneWindows|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:

<<Immagine(./SINGLE_BOOT.PNG,700,)>>

Di seguito un esempio di installazione in dual boot:

<<Immagine(./DUAL_BOOT.PNG,700,)>>

== Preparazione del volume btrfs ==

=== Variabile BTRFSDEV ===

È necessario impostare la variabile `BTRFSDEV` relativa al device da utilizzare. A tale scopo:

 0. Digitare nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{
BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1)
}}}
 0. Per verificare digitare il comando:{{{
echo $BTRFSDEV
}}}
 L'output sarà simile al seguente (ovvero indicherà la partizione btrfs):{{{
/dev/nvme01n1p5
}}}

{{{#!wiki important
Questa guida prende in esame il caso di una sola partizione btrfs. In presenza di più partizioni con questo filesystem, il primo comando potrebbe non funzionare come atteso. In tal caso modificarlo indicando manualmente nella variabile la partizione brtfs di proprio interesse, dopo averla [[Hardware/DispositiviPartizioni/IndividuarePartizioni|individuata]], con un comando che rispetti la sintassi `BTRFSDEV=partizione_btrfs` (es.: `BTRFSDEV=/dev/nvme01n1p5`, `BTRFSDEV=/dev/sda2` ecc.).
}}}

=== Creazione del subvolume @ ===

Di seguito i passaggi per la creazione del [[Hardware/DispositiviPartizioni/Btrfs/Introduzione#Gestione_subvolume | subvolume]].

 0. [[Hardware/DispositiviPartizioni/MontarePartizioni|Montare]] la partizione btrfs creata in precedenza digitando nel [[AmministrazioneSistema/Terminale|terminale]]:{{{
BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1)
sudo mount $BTRFSDEV /mnt}}}
 0. Creare il subvolume @:{{{
sudo btrfs subvolume create /mnt/@
}}}

=== First root filesystem ===

 0. Creare la directory `/mnt/@/etc/snapper/configs` con il comando:{{{
sudo mkdir /mnt/@/etc/snapper/configs -p
}}}
 0. Modificare il default subvolume,:{{{
BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1)
sudo btrfs subvolume set-default /mnt/@
}}}
 0. Rimontare il volume con il comando{{{
sudo umount /mnt && sudo mount $BTRFSDEV /mnt}}}
 0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] il pacchetto [[apt://snapper|snapper]].
 0. 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
}}}
 0. Creare i [[Hardware/DispositiviPartizioni/Btrfs/Introduzione#Ottimizzazione_subvolume_su_Ubuntu|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/InstallareUbuntu/NuovoInstaller|installazione]] di Ubuntu, avendo cura di:

 * Selezionare '''Altro''' nella parte '''[[Installazione/InstallareUbuntu/NuovoInstaller#Tipo_di_installazione|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 [[AmministrazioneSistema/Terminale|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 ==
##Sistemare il paragrafo: "tradurre" l'immagine in testo, semplificare e sintetizzare se possibile.

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 [[Hardware/DispositiviPartizioni/Btrfs/Introduzione#Opzioni_di_montaggio|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
}}}

<<Immagine(./FSTAB.PNG,930,)>>

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
}}}

{{{{{{#!wiki note
In questo esempio è stata utilizzata l'opzione {{{'compress=lzo'}}}. <<BR>>
In questo caso è consigliato eseguire una operazione di defrag: {{{btrfs filesystem defrag -c<algoritmo di compressione> -r <path>}}} <<BR>>
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 ==

 0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] il pacchetto [[apt://snapper|snapper]].
 0. Le configurazioni del programma, sono presenti nel file `/etc/snapper/configs/root`, sono state create in precedenza durante la creazione del subvolume `@`. Per abilitare la configurazione `root` nel file `/etc/default/snapper`, digitare nel Digitare nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{
sudo sed -i s/SNAPPER_CONFIGS=\"\"/SNAPPER_CONFIGS=\"root\"/g /etc/default/snapper
}}}
 0. Riavviare '''snapper''' per attivare la configurazione. {{{
sudo systemctl restart snapperd
}}}
 0. Abilitare la quota, in modo tale che l'algoritmo di pulizia e raccolta delle snapshots possa seguire le direttive `SPACE_LIMIT` e `FREE_LIMIT`:{{{
sudo btrfs quota enable /
sudo snapper setup-quota
sudo snapper list
}}}
 0. Sarà quindi possibile visualizzare le informazioni relative allo spazio utilizzato:{{{
sudo snapper list
}}}

== Creare la configurazione per la /home ==

Per creare la configurazione home, in modo da usufruire delle snapshots anche per il subvolume `/home`, digitare i seguenti comandi: {{{
sudo snapper -c home create-config /home
sudo snapper -c home setup-quota
}}}

== Swap ==

##Sostiture paragrafo con link a Hardware/DispositiviPartizioni/Swap/SwapfileSuBtrfs quando questa sarà aggiornata con le ultime funzionalità di kernel e btrfs-progs

Qualora si avesse necessità di configurare dello spazio per la '''[[Hardware/DispositiviPartizioni/SwapDomandeFrequenti|Swap]]''', è possibile procedere come indicato di seguito.

 0. Montare il filesystem root con il comando:{{{
BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1)
sudo mount -o subvolid=5 $BTRFSDEV /mnt
}}}
 0. Creare un subvolume per la swap:{{{
sudo btrfs subvolume create /mnt/@/swap
}}}
 0. Creare il file di swap:{{{
sudo btrfs filesystem mkswapfile --size 2G /mnt/@/swap/swapfile
}}}
 {{{#!wiki note
L'opzione `--size 2G` indica la dimensione che avrà il file di swap. È tuttavia possibile modificare questo valore in base alle proprie esigenze (es: `--size 4G`).
}}}
 0. Aggiornare il file `/etc/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
}}}
 0. Infine, attivare la swap con il seguente comando:{{{
if [ -d /swap ]; then echo "Directory exists"; else sudo mkdir /swap; fi
sudo mount /swap
sudo swapon /swap/swapfile
}}}

= Installazione Btrfs Assistant =

Btrfs Assistant è un tool grafico potente e intuitivo per gestire snapper. Poiché al momento non sono disponibili versioni recenti e stabili del programma in [[Repository|repository]] per Ubuntu, viene di seguito descritto come installarlo [[AmministrazioneSistema/InstallareProgrammi/DaSorgenti|da sorgenti]].

 0. Come prerequisito è necessario [[AmministrazioneSistema/InstallareProgrammi|installare]] alcuni pacchetti necessari. Digitare nel [[AmministrazioneSistema/Terminale|terminale]] il comando: {{{
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
}}}
 0. Scaricare i sorgenti desiderati:
  * Per la versione '''main''' digitare: {{{
git clone https://gitlab.com/btrfs-assistant/btrfs-assistant.git
cd btrfs-assistant
}}}
 0. Per la versione più recente digitare: {{{
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
}}}
 0. Compilarere il software con il comando: {{{
cmake -B build -S . -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE='Release'
make -C build
}}}
 0. Installare il software: {{{
sudo make -C build install
}}}

<<BR>>
Se si desiderasse in seguito disinstallare il software, è necessario conservare la directory in cui è stato costruito.
La lista dei file installati, è presente nella sottodirectory build.<<BR>>
Per disinstallare digitare i comandi:{{{
cd build
sudo xargs rm < install_manifest.txt
}}}
Il contenuto del file `install_manifest.txt` dopo l'installazione sarà il seguente:{{{
/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
}}}

{{{#!wiki tip
Nel caso si installasse '''[[Hardware/DispositiviPartizioni/Btrfs/Introduzione#Manutenzione|Btrfs maintenance]]''', il software '''Btrfs Assistant''', potrà essere utilizzato anche per gestire le operazioni di manutenzione del filesystem.
}}}

######revisionare da qui

= 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''':
[[https://github.com/Antynea/grub-btrfs/blob/master/initramfs/readme.md|Booting on a snapshot in read-only mode can be tricky]]

Per le istruzioni di installazione e per la verifica dei prerequisiti: <<BR>>
[[https://github.com/Antynea/grub-btrfs/tree/master?tab=readme-ov-file#manual-installation| manuale di installazione]] <<BR>>
([[https://youtu.be/mHWcH1WFMJ8|video di esempio]]) <<BR>>

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:
{{{#!wiki important
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 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
}}}

{{{#!wiki note
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.

<<Immagine(./snapshot-25.png,500,)>>

== Restore con snapper ==
La restore con '''snapper''', riassunta per punti, prevede: <<BR>>
- Eseguire il rollback di `25` <<BR>>
- Riavviare il sistema, utilizzando una snapshot "copia r/w di `25`" <<BR>>
- Rigenerare i file di configurazione di grub <<BR>>
- Riavviare il sistema <<BR>>

([[https://youtu.be/pVD3PJgyC10|video di esempio]])

 * 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`"

<<Immagine(./boot-grub-50.png,650,)>>

Una volta terminato il reboot si verifica che il filesystem radice sia quello atteso.

{{{
findmnt /
}}}

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
}}}

 * 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 [[AmministrazioneSistema/Grub|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 [[#output-atteso|verifica precedente]]

== Restore con Btrfs Assistant ==

L'intera procedura, si gestisce con l'interfaccia grafica. <<BR>>

([[https://youtu.be/Gj3xxkTuIrI|video di esempio]])

1. Aprire Btrfs Assistant. <<BR>>
2. Selezionare il tab "Snapper". <<BR>>
3. Selezionare il tab "Browse / Restore". <<BR>>
4. Selezionare la snapshot che si vuole restorare dalla lista. <<BR>>
5. Premere il push button "Restore". <<BR>>
6. Confermare la scelta. <<BR>>
7. Riavviare. <<BR>>

<<Immagine(./1-5-2.png,650,,)>>

{{{{{{#!wiki important
Verificare che nel box "Select target" sia selezionato il subvolume da sostituire! <<BR>>
Ad esempio con:
{{{
findmnt /
}}}
<<Immagine(./findmnt-restore.png,750,)>>
}}}}}}

<<Immagine(./6.png,400,,)>>

<<Immagine(./7.png,400,,)>>

<<Anchor(cancellare-sub-backup)>>
=== Dopo il riavvio ===
Il subvolume che è stato sostituito, non è più gestito da snapper.
Il subvolume si dovrà cancellare manualmente.

 0. Identificare il subvolume{{{
BACKUP=$(sudo btrfs subvolume list / | grep backup | cut -d "@" -f 2)
echo $BACKUP
}}}
 0. Verificare che il subolume non sia il default{{{
sudo btrfs subvolume get-default /
}}}
 0. Nel caso il check 2. sia positivo{{{
sudo btrfs subvolume set-default 5 /
}}}

 0. Cancellare il subvolume{{{
echo "sudo btrfs subvolume delete $BACKUP" | sh
}}}

Caso di esempio, in cui il subvolume da eliminare era anche il default.

<<Immagine(./esempio.png,650,,)>>

== Restore da Live ==

Dopo l'upgrade l'avvio del sistema fallisce. <<BR>>
Uno dei modi più semplici per ripristinare una snapshot su un sistema che non si avvia, è utilizzando la [[Installazione/CreazioneLiveUsb/CreatoreDischiDiAvvio|Live]] da un [[Installazione/AvvioSupportoDiInstallazione|supporto usb]].

([[https://youtu.be/dutMJKjiX2o|video di esempio]])

 * Aprire un [[AmministrazioneSistema/Terminale|terminale]] e montare il filesystem. <<BR>>
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 <<BR>>
Prima di procedere alla restore è necessario identificare con certezza due subvolumi: <<BR>>
  - subvolume che monta il 'root filesystem'
Su Ubuntu, si può identificare tale subvolume, utilizzando il file `grub.cfg` della __partitione ESP__.<<BR>>
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 }'
}}} <<BR>>
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
}}}

<<Immagine(./subvolume-root-rest.png,650,,)>>

{{{{{{#!wiki note
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 [[AmministrazioneSistema/Chroot|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
}}}

<<Immagine(./cmd-rest-selezione-sub.png,650,,)>>

 * 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`. <<BR>>
Aprire con i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/mnt/@/.snapshots/1/info.xml`
Modificare il campo `<description>` come da esempio:

<<Immagine(./new-description.png,750,)>>

 * Riavviare

{{{
sudo umount /mnt/@/.snapshots
sudo umount /mnt
sudo shutdown -r now
}}}

Dopo il riavvio, [[#cancellare-sub-backup|eliminare il subvolume sostituito]]

== Note sui metodi di Restore ==

 0. snapper + grub-btrfs <<BR>>La procedura proposta è una variante della procedura [[https://doc.opensuse.org/documentation/leap/archive/15.0/reference/html/book.opensuse.reference/cha.snapper.html#sec.snapper.snapshot-boot|documentata per OpenSuse]].<<BR>>Non è la procedura raccomandata perchè Ubuntu non supporta '''grub-btrfs''', e non è scontato che il sistema si avvii selezionando una snapshot ro.<<BR>>La procedura documentata nel presente "evita" di avviare il sistema con una snapshot ro.<<BR>>Perchè la procedura proposta funzioni come atteso, la scelta del default subvolume deve essere gestita da '''snapper'''.
 0. snapper + Btrfs Assistant <<BR>>Questa è la procedura raccomandata; non solo è la più semplice, è anche la più veloce. La rimozione del vecchio subvolume è l'unica attività manuale richiesta. <<BR>>Il default subvolume può essere qualunque, si consiglia quindi di settarlo sul subvolid=5.
 0. Live <<BR>>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 =

 * [[https://gitlab.com/btrfs-assistant/btrfs-assistant|Btrfs Assistant]]
Linea 44: Linea 564:


== ==
##CategoryHardware CategoryAmministrazione CategoryInstallazioneSistema


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

Sessione

Fase

Preparazione del disco

Live

Prima dell'installazione

Preparazione del volume btrfs

Live

Prima dell'installazione

Installazione di Ubuntu

Live

-

Mount subvolumi e set fstab

Live

Dopo l'installazione

Configurazione snapper, home e swap

Ubuntu

Primo avvio

Installazione di btrfsassistant

Ubuntu

Primo avvio

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

Variabile BTRFSDEV

È necessario impostare la variabile BTRFSDEV relativa al device da utilizzare. A tale scopo:

  1. Digitare nel terminale il seguente comando:

    BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1)
  2. Per verificare digitare il comando:

    echo $BTRFSDEV

    L'output sarà simile al seguente (ovvero indicherà la partizione btrfs):

    /dev/nvme01n1p5

Questa guida prende in esame il caso di una sola partizione btrfs. In presenza di più partizioni con questo filesystem, il primo comando potrebbe non funzionare come atteso. In tal caso modificarlo indicando manualmente nella variabile la partizione brtfs di proprio interesse, dopo averla individuata, con un comando che rispetti la sintassi BTRFSDEV=partizione_btrfs (es.: BTRFSDEV=/dev/nvme01n1p5, BTRFSDEV=/dev/sda2 ecc.).

Creazione del subvolume @

Di seguito i passaggi per la creazione del subvolume.

  1. Montare la partizione btrfs creata in precedenza digitando nel terminale:

    BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1)
    sudo mount $BTRFSDEV /mnt
  2. Creare il subvolume @:

    sudo btrfs subvolume create /mnt/@

First root filesystem

  1. Creare la directory /mnt/@/etc/snapper/configs con il comando:

    sudo mkdir /mnt/@/etc/snapper/configs -p
  2. Modificare il default subvolume,:

    BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1)
    sudo btrfs subvolume set-default /mnt/@
  3. Rimontare il volume con il comando

    sudo umount /mnt && sudo mount $BTRFSDEV /mnt
  4. Installare il pacchetto snapper.

  5. 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
  6. 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

  1. Installare il pacchetto snapper.

  2. Le configurazioni del programma, sono presenti nel file /etc/snapper/configs/root, sono state create in precedenza durante la creazione del subvolume @. Per abilitare la configurazione root nel file /etc/default/snapper, digitare nel Digitare nel terminale il seguente comando:

    sudo sed -i s/SNAPPER_CONFIGS=\"\"/SNAPPER_CONFIGS=\"root\"/g /etc/default/snapper
  3. Riavviare snapper per attivare la configurazione.

    sudo systemctl restart snapperd
  4. Abilitare la quota, in modo tale che l'algoritmo di pulizia e raccolta delle snapshots possa seguire le direttive SPACE_LIMIT e FREE_LIMIT:

    sudo btrfs quota enable /
    sudo snapper setup-quota
    sudo snapper list
  5. Sarà quindi possibile visualizzare le informazioni relative allo spazio utilizzato:

    sudo snapper list

Creare la configurazione per la /home

Per creare la configurazione home, in modo da usufruire delle snapshots anche per il subvolume /home, digitare i seguenti comandi:

sudo snapper -c home create-config /home
sudo snapper -c home setup-quota

Swap

Qualora si avesse necessità di configurare dello spazio per la Swap, è possibile procedere come indicato di seguito.

  1. Montare il filesystem root con il comando:

    BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1)
    sudo mount -o subvolid=5 $BTRFSDEV /mnt
  2. Creare un subvolume per la swap:

    sudo btrfs subvolume create /mnt/@/swap
  3. Creare il file di swap:

    sudo btrfs filesystem mkswapfile --size 2G /mnt/@/swap/swapfile

    L'opzione --size 2G indica la dimensione che avrà il file di swap. È tuttavia possibile modificare questo valore in base alle proprie esigenze (es: --size 4G).

  4. Aggiornare il file /etc/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
  5. Infine, attivare la swap con il seguente comando:

    if [ -d /swap ]; then echo "Directory exists"; else sudo mkdir /swap; fi
    sudo mount /swap
    sudo swapon /swap/swapfile

Installazione Btrfs Assistant

Btrfs Assistant è un tool grafico potente e intuitivo per gestire snapper. Poiché al momento non sono disponibili versioni recenti e stabili del programma in repository per Ubuntu, viene di seguito descritto come installarlo da sorgenti.

  1. Come prerequisito è necessario installare alcuni pacchetti necessari. Digitare nel terminale il comando:

    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
  2. Scaricare i sorgenti desiderati:
    • Per la versione main digitare:

      git clone https://gitlab.com/btrfs-assistant/btrfs-assistant.git
      cd btrfs-assistant
  3. Per la versione più recente digitare:

    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
  4. Compilarere il software con il comando:

    cmake -B build -S . -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE='Release'
    make -C build
  5. Installare il software:

    sudo make -C build install


Se si desiderasse in seguito disinstallare il software, è necessario conservare la directory in cui è stato costruito. La lista dei file installati, è presente nella sottodirectory build.
Per disinstallare digitare i comandi:

cd build
sudo xargs rm < install_manifest.txt

Il contenuto del file install_manifest.txt dopo l'installazione sarà il seguente:

/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 Btrfs maintenance, 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 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

(video di esempio)

  • 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.

(video di esempio)

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.

  1. Identificare il subvolume

    BACKUP=$(sudo btrfs subvolume list / | grep backup | cut -d "@" -f 2)
    echo $BACKUP
  2. Verificare che il subolume non sia il default

    sudo btrfs subvolume get-default /
  3. Nel caso il check 2. sia positivo

    sudo btrfs subvolume set-default 5 /
  4. 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.

(video di esempio)

  • 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

  1. 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.

  2. 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.

  3. 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


CategoryHomepage CategoryNuoviDocumenti