Debian SID con btrfs e snapper per una maggiore stabilità

2024-11-10

Premessa: snapshot vs backup

Un backup è una copia completa dei dati archiviata separatamente dalla fonte originale, riducendo il rischio di perdita dovuta a guasti hardware, errori software o altri eventi catastrofici.

Gli snapshot non sono dei backup. Quando viene creato uno snapshot, viene registrato lo stato attuale dei metadati e dei blocchi di dati. Questo processo è rapido e occupa poco spazio, poiché non viene effettuata una copia completa dei dati, ma solo una registrazione dei vari metadati associati.

Quando un blocco di dati viene modificato dopo la creazione dello snapshot, la modifica non sovrascrive il blocco originale. Invece, il nuovo dato viene scritto in un’area designata, e i metadati vengono aggiornati per riflettere questa modifica. Questo consente di mantenere l’integrità dei dati originali.

Quando si ripristina un sistema a uno snapshot precedente, i blocchi di dati che sono stati modificati o aggiunti dopo la creazione dello snapshot vengono rimossi o ripristinati allo stato originale. Questo processo consente di annullare modifiche indesiderate, recuperare file eliminati o ripristinare interi volumi a uno stato precedente.

Nella configurazione successiva, i backup della /home saranno gestiti tramite Borg e salvati su due dischi in RAID 1. Per maggiori informazioni: RAID

Debian netinstall

grub snapshot

Scaricare Debian netinstall versione stabile o testing, in base alle esigenze.

Installazione

Avviare il dispositivo di installazione, andare alle impostazioni avanzate e scegliere l’opzione Expert Install .

expert installation

Procedere con l’installazione scegliendo le opzioni che meglio si adattano alle esigenze; si tratta di un’installazione piuttosto standard fino a quando non arriveremo alla fase di partizionamento del disco.

Quando viene chiesto di Impostare utenti e password, non consentire il login come utente root. In questo modo, il nostro utente sarà automaticamente inserito nel gruppo sudo. È infatti una prassi consigliata non utilizzare l’account root per le operazioni quotidiane, permettendo una gestione più sicura del sistema.

Partizionamento

Scegliere l’opzione per il partizionamento manuale.

Selezionare il disco desiderato e creare una nuova tabella delle partizioni. Se il tuo sistema è UEFI, come tutti i sistemi moderni, scegli di creare una nuova tabella delle partizioni gpt; altrimenti, se si tratta di un sistema di avvio legacy, dovresti utilizzare mbr.

manual partition

EFI

Crea una nuova partizione con una dimensione di 512 MB; questo è più che sufficiente per la partizione EFI.

EFI partition

boot

Crea una nuova partizione da 1 GB, formattala come ext4 e seleziona come punto di montaggio /boot.

boot partition

main

Infine, crea una nuova partizione utilizzando tutto lo spazio rimanente e seleziona di utilizzarla come physical volume for encryption.

encrypted volume

Configure encrypted volumes

Ora seleziona Configure encrypted volumes. Verrà chiesto di scrivere le modifiche su disco; selezionare yes e procedere.

  • Selezionare Crea volumi crittografati
  • Selezionare il dispositivo da crittografare, che dovrebbe essere quello che hai creato come physical volume for encryption.

Ora l’installatore cancellerà e sovrascriverà il volume crittografato.

Quando il processo è terminato, verrà chiesto di impostare una nuova password per la crittografia del volume; assicurarsi di impostare una password forte.

configure encrypted volumes

LVM

Ora che abbiamo impostato il volume crittografato, dobbiamo configurare LVM. Selezionare Configure the Logical Volume Manager.

  • Scrivere le modifiche su disco.
  • Selezionare Create Volume Group.
  • Assegnare un nome al Volume Group; per semplicità, VG0.
  • Selezionare il dispositivo crittografato per il nuovo Volume Group.
  • Scrivere le modifiche su disco.

lvm

  • Ora creare un singolo Logical Volume, chiamato LV0, utilizzando tutto lo spazio disponibile.
  • Premere Fine.

logical volume

Btrfs

Selezionare il solo Logical Volume e impostare la nuova partizione Btrfs:

  • Usa come: file system Btrfs con journaling
  • Punto di montaggio: /

btrfs options

Ora possiamo completare il partizionamento.

final partition table example

Quando viene chiesto se si desidera tornare indietro e creare una partizione SWAP, dobbiamo selezionare NO; non abbiamo bisogno di una partizione SWAP poiché utilizzeremo ZRAM.

Scrivere le modifiche su disco e procedere al passaggio successivo, ma NON INSTALLARE ANCORA IL SISTEMA!

before installation

Prima dell’installazione: configurazione del sistema

Dobbiamo ancora configurare meglio il nostro sistema btrfs e creare i subvolume che utilizzeremo.

Premere Alt+CTRL+F2 per accedere alla shell.

Utilizzare il comando df per vedere il file system attualmente montato. Dovremo smontare il target file system con i seguenti comandi:

umount /target/boot/efi/
umount /target/boot/
umount /target/

/target è una directory utilizzata per rappresentare il file system di destinazione in cui il sistema operativo verrà installato

Montare la nostra partizione crittografata con il seguente comando:

mount /dev/mapper/$VOLUME_GROUP_NAME /mnt

Bisogna sostituire $VOLUME_GROUP_NAME con il nome del volume group creato in precedenza (es: VG0-LV0).

Successivamente, spostiamoci nel sistema appena montato:

cd /mnt

Vediamo cosa abbiamo all’interno della partizione montata:

ls
@rootfs

Dovresti vedere solo @rootfs. Dobbiamo rinominare questo subvolume in @ per renderlo compatibile con Timeshift, nel caso volessimo successivamente utilizzarlo:

mv @rootfs/ @

Ora possiamo creare ulteriori subvolume btrfs:

btrfs su cr @snapshots
btrfs su cr @home
btrfs su cr @cache
btrfs su cr @crash
# GNOME related subvolumes
btrfs su cr @AccountsService
btrfs su cr @gdm    # @sddm for KDE
btrfs su cr @log
btrfs su cr @tmp

L’idea di separare il sistema principale in diversi sottovolumi è quella di gestire e risparmiare spazio su disco. Ci sono molti file che vogliamo escludere dagli snapshot del file system root. Il layout che sto utilizzando è solo uno dei tanti suggeriti; puoi utilizzare più o meno subvolume a seconda delle tue esigenze.

Altri subvolume che potresti considerare di creare includono volumi relativi a Gnome, come gdm3 e AccountsService, montati in /var/lib/. Gnome ha bisogno di questi subvolume che contengono informazioni di accesso degli utenti e devono essere sempre scrivibili. Se provi ad avviare uno snapshot di Gnome in sola lettura senza questi subvolume, il sistema si bloccherà prima della schermata di accesso.

NAME             MOUNTPOINT                 TYPE
[main]           /                          mainvolume
snapshots        /.snapshots                subvolume
home             /home                      subvolume
cache            /var/cache                 subvolume
crash            /var/crash                 subvolume
AccountsService  /var/lib/AccountsService   subvolume
gdm              /var/lib/gdm               subvolume
log              /var/log                   subvolume
tmp              /var/tmp                   subvolume

Directory escluse dagli snapshot

  • /var/cache, /var/crash, /var/tmp: queste directory contengono file temporanei e cache. Sono escluse dagli snapshot, poiché i loro contenuti non sono necessari per il ripristino del sistema.

  • /var/lib/AccountsService, /var/lib/gdm: queste directory contengono dati relativi a Gnome. Devono essere sempre scrivibili. Se si prova ad avviare uno snapshot dal menu GRUB, questo viene avviato in sola lettura, il che causa il blocco del sistema poco prima che appaia la schermata di accesso di Gnome.

  • /var/log: contiene i file di log. Sarà creata per prevenire la perdita di dati di log durante i rollback.

Ora montiamo il subvolume root per poter creare le directory aggiuntive per i vari subvolume definiti in precedenza:

mount -o noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@ /dev/mapper/$VOLUME_GROUP /target

$VOLUME_GROUP nel nostro esempio VG0-LV0

Punti di mount

Ora creiamo i punti di montaggio per ciascun subvolume. I punti di montaggio sono le directory in cui i subvolume verranno montati nel file system:

cd /target
mkdir -p .snapshots
mkdir -p home
mkdir -p var/cache
mkdir -p var/crash
mkdir -p var/lib/AccountsService
mkdir -p var/lib/gdm3
mkdir -p var/log
mkdir -p var/tmp

montaggio dei subvolume

Ora montiamo ciascun subvolume nei rispettivi punti di mount:

cd /target

mount -o noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@snapshots /dev/mapper/$VOLUME_GROUP /target/.snapshots
mount -o noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@home /dev/mapper/$VOLUME_GROUP /target/home
mount -o noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@cache /dev/mapper/$VOLUME_GROUP /target/var/cache
mount -o noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@crash /dev/mapper/$VOLUME_GROUP /target/var/crash
mount -o noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@AccountsService /dev/mapper/$VOLUME_GROUP /target/var/lib/AccountsService
mount -o noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@gdm /dev/mapper/$VOLUME_GROUP /target/var/lib/gdm3
mount -o noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@log /dev/mapper/$VOLUME_GROUP /target/var/log
mount -o noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@tmp /dev/mapper/$VOLUME_GROUP /target/var/tmp

# Non dimenticare di montare anche le partizioni "boot" e "efi". Nel caso di dischi NVME
mount /dev/nvme0n1p2 /target/boot
mount /dev/nvme0n1p1 /target/boot/efi

# Nel caso di normali SSD
# mount /dev/sdX2 boot
# mount /dev/sdX1 boot/efi

Parametri di Montaggio

  • noatime: questo parametro disabilita l’aggiornamento del timestamp di accesso ai file. Di default, ogni volta che un file viene letto, il sistema aggiorna il suo timestamp di accesso. Disabilitare questa funzionalità può migliorare le prestazioni.

  • space_cache=v2: questo parametro abilita la space cache per il file system Btrfs. La cache aiuta a migliorare le prestazioni di scrittura e a ridurre la frammentazione.

  • compress=zstd:1: questo parametro abilita la compressione dei dati utilizzando l’algoritmo zstd. Il valore 1 indica il livello di compressione, dove 1 è un livello di compressione più veloce e meno intensivo in termini di CPU, mentre valori più alti (fino a 19) offrono una compressione migliore, ma richiedendo più risorse.

  • discard=async: questo parametro abilita la funzionalità di discard, che consente al file system di informare l’unità SSD di quali blocchi non sono più in uso e possono essere liberati. Con questa configurazione le operazioni di discard verranno eseguite in modo asincrono, migliorando le prestazioni rispetto all’esecuzione sincrona, poiché non verranno bloccate le operazioni di scrittura.

fstab

Ora dobbiamo modificare la nostra file system table per rendere queste modifiche permanenti.

Procediamo quindi a modificare il file /target/etc/fstab, che contiene informazioni descrittive sui file system che il sistema può montare. fstab viene solo letto dai programmi e non viene scritto.

Il risultato finale dovrebbe essere qualcosa del tipo:

# <file system>           <mount point>            <type>  <options>                                                                       <dump> <pass>
# Assicurarsi che la voce seguente sia commentata
# /dev/mapper/VG0-LV0     /                        btrfs  defaults,subvol=@rootfs                                                             0     0
/dev/nvme0n1p2            /boot                    ext4   defautls                                                                            0     2
/dev/nvme0n1p1            /boot/efi                vfat   umask=0077                                                                          0     1

/dev/mapper/$VOLUME_GROUP /                        btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@                   0     0
/dev/mapper/$VOLUME_GROUP /.snapshots              btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@snapshots          0     0
/dev/mapper/$VOLUME_GROUP /home                    btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@home               0     0
/dev/mapper/$VOLUME_GROUP /var/cache               btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@cache              0     0
/dev/mapper/$VOLUME_GROUP /var/crash               btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@crash              0     0
/dev/mapper/$VOLUME_GROUP /var/lib/AccountsService btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@AccountsService    0     0
/dev/mapper/$VOLUME_GROUP /var/lib/gdm3            btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@gdm                0     0
/dev/mapper/$VOLUME_GROUP /var/log                 btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@log                0     0
/dev/mapper/$VOLUME_GROUP /var/tmp                 btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@tmp                0     0

dump: campo utilizzato dal comando dump, che è uno strumento per il backup dei file system. Indica se il file system deve essere incluso nei backup. Nella maggior parte dei casi, questo campo è impostato su 0, poiché dump non è comunemente utilizzato nei sistemi moderni.

pass: determina l’ordine in cui i file system devono essere controllati da fsck (file system check) durante l’avvio del sistema. Valori:

0: Il file system non verrà controllato da fsck all’avvio.

1: Il file system verrà controllato per primo.

2: Il file system verrà controllato dopo quelli con valore 1.

Infine:

cd /
unmount /mnt
exit

Ora possiamo tornare all’installazione standard. Premere Ctrl+Alt+F1 e proseguire con l’installazione del sistema di base.

Installazione del sistema

Procedere con l’installazione predefinita, scegliendo le opzioni che meglio si adattano alle esigenze, oppure utilizzare semplicemente le impostazioni predefinite.

Ecco le opzioni utilizzate comunemente:

  • Kernel da installare: linux-image-amd64
  • Driver da includere nell’initrd: generic
  • Mirror di rete: Sì, http
  • Usare firmware non libero: Sì
  • Usare software non libero: Sì
  • Servizi da utilizzare: security updates / releases updates / backported software
  • Nessun aggiornamento automatico
  • spuntare solo standart system utilities: successivamente installeremo un DE o WM minimale

taskel

  • Forzare l’installazione di GRUB su EFI removable…: No
  • Aggiornare NVRAM: Sì
  • Impostare l’orologio di sistema su UTC: No

Dopo aver completato questi passaggi, il sistema dovrebbe essere installato correttamente. Una volta riavviato, si dovrebbe essere in grado di accedere a Debian.

The first boot

Finora abbiamo completato la nostra installazione minimale, Debian senza GUI. Il primo snapshot sarà il nostro punto di default, così potremo sempre tornare a un’installazione pulita.

ZRAM

ZRAM utilizza la RAM stessa per memorizzare i dati compressi.

I dati vengono compressi, il che significa che occupano meno spazio rispetto a quanto occuperebbero normalmente in RAM. Questo consente di aumentare la quantità di dati che possono essere memorizzati in memoria senza dover ricorrere a uno swap su disco. ZRAM offre quindi prestazioni migliori rispetto allo swap tradizionale, poiché l’accesso alla RAM è molto più veloce rispetto all’accesso al disco.

Per maggiori informazioni: How to Install ZRAM to Boost Ubuntu Performance

Poiché non abbiamo creato una partizione swap dedicata, configuriamo ZRAM, installando il pacchetto:

sudo apt update && sudo apt upgrade
sudo apt install zram-tools

Ecco la configurazione utilizata:

sudo nano /etc/default/zramswap

# Compression algorithm selection
# speed: lz4 > zstd > lzo
# compression: zstd > lzo > lz4
ALGO=lz4

# Specifies the amount of RAM that should be used for zram
# based on a percentage the total amount of available memory
# This takes precedence and overrides SIZE below
PERCENT=20  # In questo caso, il 20% della RAM totale sarà dedicato a ZRAM

# Specifies a static amount of RAM that should be used for
# the ZRAM devices, this is in MiB
#SIZE=256

# Specifies the priority for the swap devices, see swapon(2)
# for more details. Higher number = higher priority
# This should probably be higher than hdd/ssd swaps.
#PRIORITY=100

Snapper

Installare Snapper e i pacchetti necessari per impostare GRUB-BTRFS:

sudo apt install snapper inotify-tools git make

Dobbiamo fare alcuni preparativi per impostare Snapper in modo che salvi i nostri snapshot nel subvolume @snapshots che abbiamo creato in precedenza.

Il modo predefinito in cui Snapper funziona è quello di creare automaticamente un nuovo subvolume chiamato .snapshots nel path del subvolume in cui viene configurato. Poiché vogliamo mantenere i nostri snapshot in un sottovolume separato, dobbiamo rimuovere il subvolume .snapshots creato da Snapper e poi rimontare il sottovolume creato in precedenza nel medesimo path.

Possiamo fare questo spostandoci nella directory /, smontando la directory .snapshots e poi rimuovendola:

cd /
sudo umount .snapshots
sudo rm -r .snapshots/

Ora possiamo creare una nuova configurazione per Snapper col comando:

sudo snapper -c root create-config /

Questa nuova configurazione dovrebbe aver creato una nuova directory .snapshots e anche un nuovo subvolume btrfs con lo stesso nome. Rimuoveremo questo nuovo subvolume e collegheremo il nostro subvolume @snapshots a questo percorso.

Rimuovere il subvolume creato automaticamente:

sudo btrfs subvolume delete /.snapshots

Creare di nuovo la directory:

sudo mkdir /.snapshots

Ora possiamo rimontare il nostro subvolume @snapshots su /.snapshots:

sudo mount -av

L’opzione -a monta tutti i file system elencati in /etc/fstab, mentre -v fornisce un output verboso per vedere cosa viene montato.

Configurazione di Snapper

Snapper può creare automaticamente nuovi snapshot secondo un programma, ad ogni avvio, prima e dopo l’installazione di un nuovo pacchetto. Per ora non utilizzerò alcuno snapshot creato automaticamente, quindi imposteremo tutto su manuale.

  • Disabilitare gli snapshot automatici all’avvio del sistema:
sudo systemctl disable snapper-boot.timer
  • Disabilitare la creazione automatica di snapshot basati su una timeline, il che significa che non verranno creati snapshot a intervalli regolari:
sudo snapper -c root set-config 'TIMELINE_CREATE=no'
  • Aggiungere Snapper al il gruppo sudo, in modo da consentire agli utenti che appartengono a questo gruppo di utilizzare Snapper:
sudo snapper -c root set-config 'ALLOW_GROUPS=sudo'
sudo snapper -c root set-config 'SYNC_ACL=yes'

In questo modo, Snapper non creerà snapshot automaticamente. Tuttavia, Snapper creerà automaticamente una coppia di snapshot pre e post ogni volta che si utilizza il comando apt per installare un nuovo pacchetto, il che è utile per il ripristino in caso di problemi durante l’installazione.

Se si desidera modificare questo comportamento, si deve modificare il file di configurazione di Snapper per apt:

sudo nano /etc/apt/apt.conf.d/80snapper

Possiamo impostare il numero massimo di snapshot che vogliamo mantenere. Una volta superato questo limite, Snapper eliminerà gli snapshot in eccesso:

sudo snapper -c root set-config "NUMBER_LIMIT=10"
sudo snapper -c root set-config "NUMBER_LIMIT_IMPORTANT=10"

Dove NUMBER_LIMIT si riferisce al numero totale di snapshot che Snapper manterrà, mentre NUMBER_LIMIT_IMPORTANT si riferisce al numero di snapshot contrassegnati come importanti.

L’algoritmo di pulizia viene eseguito una volta al giorno; per modificare la frequenza bisogna agire sul file: /lib/systemd/system/snapper-timeline.timer

Per eseguire manualmente l’algoritmo di pulizia:

sudo snapper cleanup number

Anche se non utilizziamo gli snapshot temporali, prima di procedere modifichiamo il file di configurazione per impostare il numero massimo di snapshot da mantenere, nel caso in cui decidessimo di utilizzare la timeline in futuro:

sudo nano /etc/snapper/configs/root

TIMELINE_MIN_AGE="1800"     # Imposta l'età minima (in secondi) di uno snapshot a 1800 secondi (30 minuti). Questo significa che Snapper non creerà un nuovo snapshot se non è passato almeno questo tempo dall'ultimo.
TIMELINE_LIMIT_HOURLY="5"
TIMELINE_LIMIT_DAILY="7"
TIMELINE_LIMIT_WEEKLY="0"   # Non mantiene snapshot settimanali
TIMELINE_LIMIT_MONTHLY="0"
TIMELINE_LIMIT_YEARLY="0"

First snapshot

Infine, creiamo il nostro primo snapshot; questo sarà uno snapshot di tipo single e sarà conservato fino a quando non lo elimineremo manualmente:

sudo snapper -c root create --description "default fresh install"

GRUB-BTRFS

GRUB-BTRFS non è disponibile nei repository di Debian, quindi lo installeremo da sorgente:

cd
git clone https://github.com/Antynea/grub-btrfs.git
cd grub-btrfs
sudo make install

Ora dobbiamo abilitare il servizio responsabile dell’aggiornamento automatico del menu di GRUB ogni volta che vengono creati o eliminati snapshot:

sudo systemctl enable --now grub-btrfsd

Infine:

cd ..
rm -rf grub-btrfs/

From Stable to SID

Debian SID (unstable) offre diversi vantaggi come aggiornamenti continui (rolling-release), permettendo l’accesso alle ultime versioni dei pacchetti. In caso di problemi, possiamo sempre ritornare allo snapshot iniziale default fresh install.

Modificare il file /etc/apt/sources.list nel modo seguente:

# Debian SID
deb http://deb.debian.org/debian/ unstable main contrib non-free non-free-firmware

Aggiornare quindi la lista dei pacchetti e infine aggiornare il sistema per passare a SID:

sudo apt update
sudo apt full-upgrade
sudo shutdown -r now

All’avvio, possiamo verificare la versione coi comandi:

cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux trixie/sid"
NAME="Debian GNU/Linux"
VERSION_CODENAME=trixie
ID=debian

cat /etc/debian_version
trixie/sid

Eseguire quindi uno snapshot: sudo snapper -c root create --description "debian SID"

GRUB config

Modificare il file /etc/default/grub nel modo seguente:

GRUB_DEFAULT=0  # Imposta il primo elemento del menu come predefinito
GRUB_TIMEOUT_STYLE=hidden  # Nasconde il menu di GRUB all'avvio
GRUB_TIMEOUT=0  # Nessun tempo di attesa, avvio immediato del sistema predefinito
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`  # Nome della distribuzione, predefinito a Debian
GRUB_CMDLINE_LINUX_DEFAULT="quiet systemd.show_status=1"  # Opzioni del kernel
GRUB_CMDLINE_LINUX=""  # Opzioni del kernel per tutte le modalità di avvio (vuoto in questo caso)
GRUB_PASSWORD="changeme"  # Password per accedere al menu di GRUB (cambiare con una password sicura)
GRUB_GFXMODE=1920x1080  # Imposta la risoluzione grafica del menu di GRUB
GRUB_GFXPAYLOAD_LINUX=keep  # Mantiene la risoluzione grafica durante il caricamento del kernel

Se si desidera accedere al menu di GRUB quando è nascosto, premere durante il processo di avvio il tasto Shift (su sistemi BIOS) o Esc (su sistemi UEFI) subito dopo che il computer inizia a caricarsi. Questo dovrebbe forzare la visualizzazione del menu di GRUB.

Altrimenti, modificare la configurazione precedente:

GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=5

Dare infine il comando: sudo update-grub. Eseguire infime uno snapshot: sudo snapper -c root create --description "configurato GRUB"

Restore del sistema

Se si desidera ripristinare uno snapshot precedente, ci sono diversi modi per farlo. Eseguire un rollback, che ricreerà completamente il sistema a partire da uno snapshot, oppure utilizzare undochanges, che confronta le differenze tra due snapshot e rimuove le modifiche.

Per vedere gli snapshot disponibili usare il comando:

sudo snapper ls

Per eseguire un rollback:

sudo snapper --ambit classic rollback <snapshot_number>
sudo shutdown -r now

dove --ambit classic specifica il tipo di rollback che si desidera eseguire. classic indica che si sta eseguendo un rollback completo, ripristinando il sistema allo stato esatto dello snapshot selezionato. Tutte le modifiche apportate dopo la creazione di quello snapshot verranno annullate.

Se il rollback è stato eseguito con successo, riavviare il sistema, ma nel menu di GRUB NON AVVIARE ANCORA DALLA VOCE PREDEFINITA.

grub snapshot

Bisogna navigare sulla voce degli snapshot e avviare dall’ultimo snapshot disponibile; questo dovrebbe essere il nuovo sistema predefinito che appena ripristinato. Una volta avviato in questo sistema, dare il seguente comando per rendere le modifiche permanenti:

sudo update-grub

Ora puoi riavviare e selezionare la voce predefinita nel menu di GRUB.

Cancellazione degli snapshot

Per eliminare manualmente uno snapshot, utilizzare il comando:

sudo snapper -c myconfig delete 1

Per eliminare invece gli snapshot da 1 a 3:

sudo snapper -c myconfig delete 1-3

GNOME

Per installare e configurare GNOME, si rimanda a questo articolo, dove si trovano anche i miei dotfiles.

Spiral Linux

SpiralLinux è una versione di Debian che mira a fornire agli utenti desktop un’esperienza immediatamente utilizzabile. Btrfs, Snapper, snapshot, GRUB-Btrfs, Pipewire e ZRAM sono configurati di default, in modo da semplificare la vita agli utenti meno esperti.

Non si tratta di una distribuzione derivata, ma di una versione di Debian ottimizzata con una serie di script e configurazioni, con un focus sulla semplicità e sull’usabilità immediata in tutti i principali ambienti desktop. Quindi, un’installazione di SpiralLinux è in realtà un’installazione legittima di Debian che può essere aggiornata all’infinito dai repository ufficiali, mantenendo al contempo la sua configurazione unica.

SpiralLinux è progettato per essere sostenibile e per sfruttare le risorse e l’infrastruttura di Debian, riducendo il rischio di abbandono del progetto.

Il sito di SpiralLinux

La documentazione ufficiale

Riferimenti