Dimensione: 16687
Commento:
|
← Versione 97 del 20/06/2024 19.32.24 ⇥
Dimensione: 25359
Commento:
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 6: | Linea 6: |
= 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 procedura il risultato sarà 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, cataloga 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 || = Preparazione del disco = 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 || <<Immagine(./DUAL_BOOT.PNG,750,)>> || || single boot || <<Immagine(./SINGLE_BOOT.PNG,750,)>> || {{{#!wiki note Questa guida è pensata per essere eseguita in modalità copia e incolla. Prima di effettuare il copia e incolla verificare che la variabile BTRFSDEV della guida, risolva correttamente il device da utilizzare (in alternativa, modificare la stringa $BTRFSDEV, con la stringa del proprio device btrfs). }}} {{{ BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1) |
<<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 24.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 = == Preparazione del disco == 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:{{{ |
Linea 51: | Linea 56: |
{{attachment:VARIABILE.PNG}} == Preparazione del volume btrfs == Prima di avviare l'installazione, sarà necessario preparare il volume btrfs. <<BR>> E' possibile utilizzare un terminale dalla Live. <<BR>> |
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.). }}} |
Linea 59: | Linea 65: |
Si monta il filesystem btrfs creato nel passaggio "Preparazione del disco", e si crea il subvolume @ . {{{#!wiki tip Se il termine subvolume non suona familiare, si consiglia di approfondire, [[Hardware/DispositiviPartizioni/Btrfs/Introduzione#Gestione_subvolume | Gestione subvolume]] }}} {{{ BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1) sudo mount $BTRFSDEV /mnt |
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 @:{{{ |
Linea 71: | Linea 75: |
=== Il "first root filesystem" === Si crea la directory: {{{ |
=== First root filesystem === 0. Creare la directory `/mnt/@/etc/snapper/configs` con il comando:{{{ |
Linea 77: | Linea 80: |
Si modifica il default subvolume, e si rimonta il volume: {{{ |
0. Modificare il default subvolume,:{{{ |
Linea 83: | Linea 83: |
sudo umount /mnt && sudo mount $BTRFSDEV /mnt }}} Si installa, configura e utilizza snapper per creare il "first root filesystem" (sulla Live) {{{ sudo apt install snapper -y systemctl stop snapper-timeline.timer # prima dell'installazione non vogliamo le snapshot di tipo timeline |
}}} 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 |
Linea 96: | Linea 94: |
Si creano i [[Hardware/DispositiviPartizioni/Btrfs/Introduzione#Ottimizzazione_subvolume_su_Ubuntu|subvolumi di interesse]], infine si modifica il default subvolume con il "first root filesystem". {{{ |
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: {{{ |
Linea 110: | Linea 105: |
Inizia l'installazione. |
|
Linea 113: | Linea 106: |
Eseguire l'installazione seguendo le [[Installazione/InstallareUbuntu/NuovoInstaller|istruzioni]] a video, fino al punto [[Installazione/InstallareUbuntu/NuovoInstaller#Tipo_di_installazione|"Tipo di installazione"]]. <<BR>> Personalizzare la configurazione del device di installazione, come da tabella sotto, continuare quindi con le istruzioni ripartendo da [[Installazione/InstallareUbuntu/NuovoInstaller#Informazioni_personali|Informazioni personali]]. || '''Schermata di installazione''' ||'''Operazione da effettuare''' || || <<Immagine(./MANUALE.PNG,550,)>> || Selezionare "Altro" || || <<Immagine(./PARTIZIONI.PNG,620,)>> || Configurare le partizioni: <<BR>> {{{ 1. ESP/EFI da montare in /boot/efi }}} <<BR>> {{{ 2. btrfs da montare in / }}} || {{{#!wiki important Attenzione, le partizioni non vanno formattate, il dispositivo è stato configurato per l'installazione, durante i passaggi Preparazione del disco, e Preparazione del volume btrfs. }}} {{{#!wiki important Non riavviare dopo l'installazione. Si renderà necessario effettuare delle attività, successive l'installazione e precedenti il primo avvio. }}} |
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. |
Linea 131: | Linea 115: |
Questi comandi vanno eseguiti nell'ambiente Live di installazione. | Una volta terminata l'installazione, eseguire i seguenti comandi in un [[AmministrazioneSistema/Terminale|terminale]] sempre all'interno della sessione live. |
Linea 134: | Linea 119: |
Si verifica che tutti i subvolumi si montino correttamente dove atteso e come atteso {{{ |
Verificare che tutti i subvolumi vengano montati correttamente:{{{ |
Linea 149: | Linea 133: |
Si aggiorna il file `/mnt/etc/fstab` perchè monti i subvolumi attesi dove atteso. {{{ |
##Sistemare il paragrafo: "tradurre" l'immagine in testo, semplificare e sintetizzare se possibile. Aggiornare il file `/mnt/etc/fstab` affinché i subvolumi vengano montati 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:{{{ |
Linea 155: | Linea 144: |
echo "sudo sed -i '"$line"s/.$/0/' /mnt/etc/fstab" | sh # vedi Nota | echo "sudo sed -i '"$line"s/.$/0/' /mnt/etc/fstab" | sh |
Linea 168: | Linea 157: |
{{{#!wiki tip Qualora si volessero personalizzare le opzioni di mount, l'operazione è possibile in questo contesto. Eseguire i comandi modificati con le opzioni, al posto del valore "defaults". Maggiori dettagli riguardo le opzioni di mount: [[Hardware/DispositiviPartizioni/Btrfs/Introduzione#Opzioni_di_montaggio|Opzioni di mount]] }}} {{{ |
Di seguito un esempio di personalizzazione delle opzioni di mount: {{{ |
Linea 179: | Linea 162: |
echo "sudo sed -i '"$line"s/defaults/<opzione 1>,<opzione 2>/' /mnt/etc/fstab" | sh | echo "sudo sed -i '"$line"s/defaults/noatime,compress=lzo/' /mnt/etc/fstab" | sh |
Linea 184: | Linea 167: |
sed s@rw.*,subvolid=.*,@<opzione 1>,<opzione 2>,@ | \ | sed s@rw.*,subvolid=.*,@noatime,compress=lzo,@ | \ |
Linea 190: | Linea 173: |
{{{{{{#!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. }}}}}} |
|
Linea 191: | Linea 184: |
Si smontano tutti i subvolumi montati in `/mnt`, e si riavvia. {{{ |
Dopo aver smontato tutti i subvolumi montati in `/mnt`, riavviare il computer. A tal fine digitare i seguenti comandi: {{{ |
Linea 205: | Linea 197: |
Linea 206: | Linea 199: |
Si installa e configura snapper. {{{ sudo apt install snapper -y }}} Il file di configurazione `/etc/snapper/configs/root`, è stato ereditato dal subvolume `@`. Abilitiamo la configurazione root nel file `/etc/default/snapper`. {{{ |
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:{{{ |
Linea 219: | Linea 204: |
Si riavvia snapper per attivare la configurazione. {{{ |
0. Riavviare '''snapper''' per attivare la configurazione. {{{ |
Linea 225: | Linea 207: |
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. {{{ |
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`:{{{ |
Linea 234: | Linea 212: |
0. Sarà quindi possibile visualizzare le informazioni relative allo spazio utilizzato:{{{ sudo snapper list }}} |
|
Linea 236: | Linea 217: |
Si crea la configurazione home, in modo da usufruire delle snapshots anche per il subvolume /home. {{{ |
Per creare la configurazione home, in modo da usufruire delle snapshots anche per il subvolume `/home`, digitare i seguenti comandi: {{{ |
Linea 240: | Linea 220: |
}}} = 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 è: [[https://launchpad.net/ubuntu/+source/btrfs-assistant|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. [[https://gitlab.com/btrfs-assistant/btrfs-assistant| Repository - README]] * Prerequisiti per l'installazione {{{ |
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: {{{ |
Linea 260: | Linea 261: |
* 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: {{{ |
0. Scaricare i sorgenti desiderati: * Per la versione '''main''' digitare: {{{ |
Linea 269: | Linea 266: |
Per l'ultima versione: {{{ |
* Per la versione più recente digitare: {{{ |
Linea 275: | Linea 271: |
* Compilarere il software {{{ |
0. Compilarere il software con il comando: {{{ |
Linea 281: | Linea 275: |
* Installare il software {{{ |
0. Installare il software: {{{ |
Linea 287: | Linea 279: |
* 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 è: {{{ |
<<BR>> Se si desiderasse in seguito disinstallare il programma, sarà necessario conservare la directory in cui è stato costruito. La lista dei file installati, è presente nella sottodirectory build.<<BR>> Per disinstallare digitare i comandi:{{{ |
Linea 296: | Linea 286: |
Contenuto del file `install_manifest.txt` dopo l'installazione: {{{ |
Il contenuto del file `install_manifest.txt` dopo l'installazione sarà il seguente:{{{ |
Linea 309: | Linea 296: |
{{{#!wiki note Nel caso si installasse il pacchetto [[https://wiki.ubuntu-it.org/Hardware/DispositiviPartizioni/Btrfs/Introduzione#Manutenzione|btrfsmaintenance]], il software '''Btrfs Assistant''', potrà essere utilizzato anche per gestire le operazioni di manutenzione del filesystem. }}} |
{{{#!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 |
Linea 315: | Linea 304: |
'''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 si può consultare: [[https://github.com/Antynea/grub-btrfs/tree/master?tab=readme-ov-file#manual-installation| manuale di installazione]] In breve: {{{ |
'''grub-btrfs''' è una collezione di script che permette di eseguire il boot da uno snapshot. La collezione di script è ben testata su distribuzioni come Arch e !OpenSuse, tutttavia su Ubuntu potrebbero esserci errori e/o limitazioni.<<BR>> Utilizzando uno snapshot read-only come filesystem radice, l'avvio del sistema potrebbe non terminare con successo. Esistono diverse strategie per avviare uno snapshot read-only con successo. La migliore è avviare con il supporto a overlayfs.<<BR>> Questa feature è documentata per Arch e per le distruzioni che utilizzano '''[[https://github.com/Antynea/grub-btrfs/blob/master/initramfs/readme.md|dracut]]'''. {{{#!wiki tip Per le istruzioni di installazione e per la verifica dei prerequisiti è consigliabile consultare il [[https://github.com/Antynea/grub-btrfs/tree/master?tab=readme-ov-file#manual-installation|manuale di installazione]] e questo [[https://youtu.be/mHWcH1WFMJ8|video di esempio]]. }}} 0. Per installare '''grub-btrfs''' digitare i seguenti comandi:{{{ |
Linea 332: | Linea 318: |
Al termine dell'installazione, se venisse riportato il warning: {{{#!wiki important |
0. Qualora al termine dell'installazione, se venisse riportato il seguente avviso:{{{ |
Linea 337: | Linea 321: |
sarà necessario eseguire un l'aggiornamento del file `/boot/grub/grub.cfg`. {{{ |
sarà necessario eseguire l'aggiornamento del file `/boot/grub/grub.cfg`. Digitare quindi:{{{ |
Linea 342: | Linea 324: |
Per automatizzare la rigenerazione del menù di '''grub''' è necessario abilitare il servizio ``grub-btrfsd``. {{{ |
0. Per automatizzare la rigenerazione del menù di '''grub''' è necessario abilitare il servizio '''grub-btrfsd''':{{{ |
Linea 352: | Linea 331: |
Si volesse utilizzare il solo '''snapper''' per la restore, grub-btrfs è mandatorio. Se si volesse utilizzare '''Btrfs Assistant''', grub-btrfs è opzionale. |
Qualora si volesse utilizzare il solo '''snapper''' per il restore, è obbligatorio l'uso di grub-btrfs. Se invece si volesse utilizzare '''Btrfs Assistant''', grub-btrfs è opzionale. |
Linea 358: | Linea 337: |
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. |
In caso di corruzione del sistema durante un aggiornamento, il primo passaggio da eseguire è identificare il `#` dello snapshot che si intende utilizzare come filesystem '''root'''. Nell'esempio riportato nella seguente immagine, viene selezionato lo snapshot `25` perchè creato durante l'avvio precedente all'upgrade: |
Linea 365: | Linea 342: |
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>> * Eseguire il `roolback` {{{ |
Il ripristino con '''snapper''' riassunto per punti prevede: * esecuzione del rollback di `25`; * riavvio del sistema utilizzando una snapshot "copia r/w di `25`"; * rigenerazione dei file di configurazione di grub; * riavvio del sistema; * verifica del filesystem radice. 0. Eseguire il '''roolback''':{{{ |
Linea 375: | Linea 352: |
}}} 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. {{{ |
}}}Questo comando modifica il subvolume default, dall'attuale a "copia r/w di `25`". 0. Riavviare il sistema, utilizzando una snapshot "copia r/w di `25`" 0. Nel menù di grub, selezionare '''Ubuntu snapshots'''. 0. Nel sottomenù, selezionare la voce "copia r/w di `25`", come nell'immagine seguente: <<Immagine(./boot-grub-50.png,650,)>> 0. Una volta terminato il reboot verificare che il filesystem radice sia quello atteso:{{{ |
Linea 392: | Linea 359: |
}}} <<Anchor(output-atteso)>><<Immagine(./findmnt-25.png,750,)>> * Rigenerare i files di configurazione di grub Si riconfigura '''grub''' per avviare il subvolume selezionato di default. {{{ |
}}}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 }}} 0. Rigenerare i file di configurazione di '''grub''' per avviare il subvolume selezionato di default:{{{ |
Linea 404: | Linea 367: |
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. {{{ |
{{{#!wiki tip Per maggiori informazioni riguardo i comandi eseguiti, consultare la [[AmministrazioneSistema/Grub|guida a Grub]]. }}} 0. Riavviare il sistema 0. Selezionare la sessione di Ubuntu nel menù di '''grub''' e quindi verificare che il filesystem radice sia quello atteso:{{{ |
Linea 414: | Linea 373: |
}}} è atteso lo stesso output ottenuto nella [[#output-atteso|verifica precedente]] |
}}} È atteso lo stesso output ottenuto nella [[#output-atteso|verifica precedente]]. |
Linea 420: | Linea 377: |
L'intera procedura, si gestisce con l'interfaccia grafica. <<BR>> 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.png,650,,)>> <<Immagine(./6.png,400,,)>> <<Immagine(./7.png,400,,)>> Il subvolume che è stato sostituito, non è più gestito da snapper. Il subvolume si dovrà cancellare manualmente. 1. Identificare il subvolume {{{ |
L'intera procedura è gestibile tramite l'interfaccia grafica. 0. [[AmbienteGrafico/AvviareProgrammi|Avviare]] Btrfs Assistant. 0. Selezionare la tab '''Snapper'''. 0. Selezionare la tab '''Browse/Restore'''. 0. Verificare che nel box '''Select target''' sia selezionato il subvolume da sostituire, come nell'immagine seguente:<<BR>> <<Immagine(./select_target.png,200,,)>><<BR>> Verificare inoltre che sia presente nell'output del comando: {{{ findmnt / }}} come nella seguente immagine: <<Immagine(./findmnt-restore.png,750,)>> 0. Selezionare dalla lista lo snapshot da ripristinare: <<Immagine(./snapshot_25_ritaglio.png,350,)>> 0. Premere il pulsante '''Restore'''. 0. Confermare la scelta facendo clic su '''Yes'''. 0. Al termine verrà chiesto di riavviare il sistema. Fare clic su '''OK'''. ## <<Immagine(./1-5-2.png,650,,)>> ## <<Immagine(./6.png,400,,)>> ## <<Immagine(./7.png,400,,)>> <<Anchor(cancellare-sub-backup)>> === Dopo il riavvio === Il subvolume che è stato sostituito non sarà più gestito da snapper. Dovrà quindi essere cancellato manualmente. 0. Identificare il subvolume:{{{ |
Linea 444: | Linea 408: |
2. Verificare che il subolume non sia il default {{{ | 0. Verificare che il subolume non sia quello di default:{{{ |
Linea 448: | Linea 411: |
2. Nel caso il check 2. sia positivo {{{ | 0. Nel caso il precedente passaggio sia positivo:{{{ |
Linea 452: | Linea 414: |
3. Cancellare il subvolume {{{ |
0. Cancellare il subvolume:{{{ |
Linea 458: | Linea 418: |
Caso di esempio, in cui il subvolume da eliminare era anche il default. | Qui un caso di esempio in cui il subvolume da eliminare era anche il default: |
Linea 462: | Linea 422: |
== Restore da Live == Dopo l'upgrade l'avvio del sistema fallirà. Uno modo semplice per ripristinare uno snapshot su un sistema che non si avvia, è tramite '''[[/Installazione#Creazione_e_avvio_del_supporto_di_installazione|live]]''' USB. 0. Aprire il [[AmministrazioneSistema/Terminale|terminale]] e [[Hardware/DispositiviPartizioni/MontarePartizioni|montare]] il filesystem. 0. 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 }}} 0. Identificare il subvolume che monta il '''root filesystem'''. Su Ubuntu è identificabile utilizzando il file `grub.cfg` della partitione ESP. Essendo in formato '''fat32''' e di tipo '''EFI System''': 0. Digitare il comando:{{{ blkid | grep vfat | cut -d ":" -f1 }}} oppure:{{{ sudo fdisk -l | grep EFI | awk '{ print $1 }' }}} 0. Montare il dispositivo per valutare la stringa di interesse tramite i seguenti comandi::{{{ 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 candidati (o uno solo), sfruttando il fatto che '''snapper''' prende gli 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 }}} 0. Identificare il subvolume da '''ripristinare'''. 0. Avendo identificato il subvolume per il root filesystem al punto precedente, è possibile aprire il sistema tramite [[AmministrazioneSistema/Chroot|chroot]] e utilizzare il comando:{{{ sudo snapper list }}}oppure 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,,)>> 0. Ripristinare il subvolume. 0. Rinominare il subvolume da sostituire:{{{ sudo mv /mnt/@/.snapshots/1/snapshot /mnt/@/.snapshots/1/snapshot_backup }}} 0. Ripristinare il subvolume selezionato:{{{ sudo btrfs subvolume snapshot /mnt/@/.snapshots/25/snapshot /mnt/@/.snapshots/1/snapshot }}} 0. É possibile modificare la descrizione `first root filesystem`. Aprire con i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/mnt/@/.snapshots/1/info.xml` e quindi modificare il campo `<description>` come da esempio: <<Immagine(./new-description.png,750,)>> 0. Per riavviare il sistema digitare i seguenti comandi:{{{ sudo umount /mnt/@/.snapshots sudo umount /mnt sudo shutdown -r now }}} 0. Dopo il riavvio, [[#cancellare-sub-backup|eliminare il subvolume sostituito]]. == Note sui metodi di Restore == === snapper + grub-btrfs === 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 uno snapshot ro.<<BR>> La procedura qui documentata "evita" di avviare il sistema con una snapshot ro. <<BR>> Affinchè la procedura proposta funzioni come atteso, la scelta del subvolume di default deve essere gestita da '''snapper'''. === snapper + Btrfs Assistant === Questa è la procedura raccomandata. Infatti non solo è la più semplice, ma è anche la più veloce. La rimozione del vecchio subvolume è l'unica azione manuale richiesta. Il subvolume di default può essere uno qualunque, è quindi consigliabile di impostarlo sul subvolid=5. === Live === La procedura proposta è per i casi di emergenza. È consigliabile solo in casi gravi (es: in caso di sistema che non si riavvia in seguito ad un problema con un aggiornamento). = Ulteriori risorse = * [[https://gitlab.com/btrfs-assistant/btrfs-assistant|Btrfs Assistant]] * [[https://www.youtube.com/watch?v=hPFF-f8UCPA| Videotutorial per creare partizione btrfs con GParted]] * [[https://www.youtube.com/watch?v=_1ikKTeAXr4| Videotutorial per preparazione del volume btrfs]] * [[https://www.youtube.com/watch?v=uo9SDzN9YbI| Videotutorial per attività successive l'installazione]] * [[https://youtu.be/pVD3PJgyC10|Videotutorial restore snapper]] * [[https://www.youtube.com/watch?v=Gj3xxkTuIrI| Videotutorial per il restore con btrfs assistant]] * [[https://www.youtube.com/watch?v=dutMJKjiX2o| Videotutorial per il restore da live]] |
|
Linea 469: | Linea 514: |
##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:
Digitare nel terminale il seguente comando:
BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1)
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.
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é i subvolumi vengano montati 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
Installare il pacchetto snapper.
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
Riavviare snapper per attivare la configurazione.
sudo systemctl restart snapperd
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
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.
Montare il filesystem root con il comando:
BTRFSDEV=$(sudo blkid | grep btrfs | cut -d ":" -f1) sudo mount -o subvolid=5 $BTRFSDEV /mnt
Creare un subvolume per la swap:
sudo btrfs subvolume create /mnt/@/swap
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).
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
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.
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
- Scaricare i sorgenti desiderati:
Per la versione main digitare:
git clone https://gitlab.com/btrfs-assistant/btrfs-assistant.git cd btrfs-assistant
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
Compilarere il software con il comando:
cmake -B build -S . -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE='Release' make -C build
Installare il software:
sudo make -C build install
Se si desiderasse in seguito disinstallare il programma, sarà 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 script che permette di eseguire il boot da uno snapshot. La collezione di script è ben testata su distribuzioni come Arch e OpenSuse, tutttavia su Ubuntu potrebbero esserci errori e/o limitazioni.
Utilizzando uno snapshot read-only come filesystem radice, l'avvio del sistema potrebbe non terminare con successo. Esistono diverse strategie per avviare uno 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.
Per le istruzioni di installazione e per la verifica dei prerequisiti è consigliabile consultare il manuale di installazione e questo video di esempio.
Per installare grub-btrfs digitare i seguenti comandi:
git clone https://github.com/Antynea/grub-btrfs.git cd grub-btrfs sudo make install
Qualora al termine dell'installazione, se venisse riportato il seguente avviso:
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. Digitare quindi:
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
Qualora si volesse utilizzare il solo snapper per il restore, è obbligatorio l'uso di grub-btrfs. Se invece si volesse utilizzare Btrfs Assistant, grub-btrfs è opzionale.
Operazione di restore
In caso di corruzione del sistema durante un aggiornamento, il primo passaggio da eseguire è identificare il # dello snapshot che si intende utilizzare come filesystem root. Nell'esempio riportato nella seguente immagine, viene selezionato lo snapshot 25 perchè creato durante l'avvio precedente all'upgrade:
Restore con snapper
Il ripristino con snapper riassunto per punti prevede:
esecuzione del rollback di 25;
riavvio del sistema utilizzando una snapshot "copia r/w di 25";
- rigenerazione dei file di configurazione di grub;
- riavvio del sistema;
- verifica del filesystem radice.
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", come nell'immagine seguente:
Una volta terminato il reboot verificare 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 file di configurazione di grub per avviare il subvolume selezionato di default:
sudo update-grub sudo grub-install
Per maggiori informazioni riguardo i comandi eseguiti, consultare la guida a Grub.
- Riavviare il sistema
Selezionare la sessione di Ubuntu nel menù di grub e quindi verificare che il filesystem radice sia quello atteso:
findmnt /
È atteso lo stesso output ottenuto nella verifica precedente.
Restore con Btrfs Assistant
L'intera procedura è gestibile tramite l'interfaccia grafica.
Avviare Btrfs Assistant.
Selezionare la tab Snapper.
Selezionare la tab Browse/Restore.
Verificare che nel box Select target sia selezionato il subvolume da sostituire, come nell'immagine seguente:
Verificare inoltre che sia presente nell'output del comando:findmnt /
come nella seguente immagine:- Selezionare dalla lista lo snapshot da ripristinare:
Premere il pulsante Restore.
Confermare la scelta facendo clic su Yes.
Al termine verrà chiesto di riavviare il sistema. Fare clic su OK.
Dopo il riavvio
Il subvolume che è stato sostituito non sarà più gestito da snapper. Dovrà quindi essere cancellato manualmente.
Identificare il subvolume:
BACKUP=$(sudo btrfs subvolume list / | grep backup | cut -d "@" -f 2) echo $BACKUP
Verificare che il subolume non sia quello di default:
sudo btrfs subvolume get-default /
Nel caso il precedente passaggio sia positivo:
sudo btrfs subvolume set-default 5 /
Cancellare il subvolume:
echo "sudo btrfs subvolume delete $BACKUP" | sh
Qui un caso di esempio in cui il subvolume da eliminare era anche il default:
Restore da Live
Dopo l'upgrade l'avvio del sistema fallirà. Uno modo semplice per ripristinare uno snapshot su un sistema che non si avvia, è tramite live USB.
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 il subvolume che monta il root filesystem. Su Ubuntu è identificabile utilizzando il file grub.cfg della partitione ESP. Essendo in formato fat32 e di tipo EFI System:
Digitare il comando:
blkid | grep vfat | cut -d ":" -f1
oppure:
sudo fdisk -l | grep EFI | awk '{ print $1 }'
Montare il dispositivo per valutare la stringa di interesse tramite i seguenti comandi::
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 candidati (o uno solo), sfruttando il fatto che snapper prende gli 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
Identificare il subvolume da ripristinare.
Avendo identificato il subvolume per il root filesystem al punto precedente, è possibile aprire il sistema tramite chroot e utilizzare il comando:
sudo snapper list
oppure 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
- Ripristinare il subvolume.
Rinominare il subvolume da sostituire:
sudo mv /mnt/@/.snapshots/1/snapshot /mnt/@/.snapshots/1/snapshot_backup
Ripristinare il subvolume selezionato:
sudo btrfs subvolume snapshot /mnt/@/.snapshots/25/snapshot /mnt/@/.snapshots/1/snapshot
É 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 e quindi modificare il campo <description> come da esempio:
Per riavviare il sistema digitare i seguenti comandi:
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 uno snapshot ro.
La procedura qui documentata "evita" di avviare il sistema con una snapshot ro.
Affinchè la procedura proposta funzioni come atteso, la scelta del subvolume di default deve essere gestita da snapper.
snapper + Btrfs Assistant
Questa è la procedura raccomandata. Infatti non solo è la più semplice, ma è anche la più veloce. La rimozione del vecchio subvolume è l'unica azione manuale richiesta. Il subvolume di default può essere uno qualunque, è quindi consigliabile di impostarlo sul subvolid=5.
Live
La procedura proposta è per i casi di emergenza. È consigliabile solo in casi gravi (es: in caso di sistema che non si riavvia in seguito ad un problema con un aggiornamento).