Slint con BTRFS

In questo articolo delineiamo le caratteristiche uniche del file di sistema BTRFS e come un sistema di Slint è configurato all’installazione, per usufruirne.

Per non sovraccaricare questo documento con le definizioni, facciamo riferimento al glossario, incluso nel Manuale di Slint e più specificamente per il "gergo" di btrfs, al glossario incluso in questa documentazione.

Un file di sistema BTRFS consiste in un volume logico che può estendersi per più dispositivi di blocco (partizioni o dischi). Inizialmente, Slint è installato su una partizione singola.

Un volume secondario è un albero secondario di file nel volume, la radice del quale può essere montat come se fosse un file di sistema indipendente. Tuttavia, lo spazio allocato a un volume è anch’esso allocato a ognuno dei suoi volumi secondari: dunque, è necessario distribuirlo tra i volumi secondari, come se fossero in partizioni distinte.

I volumi secondari possono essere creati in contemporanea al volume (dal comando mkfs.btrfs), nonché aggiunti o eliminati in seguito utilizzando gli strumenti di btrfs.

Come un esempio per i seguenti comandi, crea il volume di "sistema" di Slint e i suoi volumi secondari, nel caso in cui è utilizzato BTRFS. Nel seguente $ROOTNAME è indicato il nome della partizione in cui Slint sarà installato ee in $SLINT il punto di montaggio del volume di sistema, durante l’installazione.

mkdir /SLINT
SLINT="/SLINT"
mkfs.btrfs -L root $ROOTNAME
mount -o compress=zstd:3,noatime $ROOTNAME $SLINT
btrfs subvolume create $SLINT/@
btrfs subvolume create $SLINT/@home
btrfs subvolume create $SLINT/@swap
umount $SLINT
mount -o subvol=/@,compress=zstd:3,noatime $ROOTNAME $SLINT
mkdir $SLINT/home
mkdir $SLINT/swap

La partizione $ROOTNAME (denotata dal suo ID, che chiameremo <uuid>), sarà quindi montata tre volte (una per volume secondario), a ogni avvio di Slint, come indicato nel file /etc/fstab:

UUID=<uuid> / btrfs subvol=/@,compress=zstd:3,noatime 0 0
UUID=<uuid> /home btrfs subvol=/@home,compress=zstd:3,noatime 0 0
UUID=<uuid> /swap btrfs subvol=/@swap,compress=zstd:3,noatime 0 0

Che restituisce, ad esempio (tratto dall’output di Isblk /dev/sda5):

File di Sistema Dimensioni Utilizzati Disponibili Utilizzo% Montato su
/dev/sda5        50G   22G   28G  44% /
/dev/sda5        50G   22G   28G  44% /home
/dev/sda5        50G   22G   28G  44% /swap

Vediamo che lo spazio disponibile per il volume (28G) è anche disponibile per ognuno dei volumi secondri. D’altra parte, l’opzione di montaggio "compress_zstd:3" significa che tutti i file che saranno memorizzati, saranno compressi dall’utilità di zstd con livello di compressione 3. Dunque, le dimensioni del sistema sono approssimativamente dimezzate, con il file di sistema ext4.

Se montiamo il dispositivo alla radice del volume (senza menzione di un volume secondario), come segue:

mount /dev/sda5 /mnt

vediamo che i volumi secondari appaiono come sottocartelle di /mnt:

ls /mnt
@ @home @swap
ls /mnt/@home/didier
Desktop Documenti GNUstep Immagini Template Musica Pubblico Download Video

Un’altra funzionalità notevole di BTRFS è la "copia alla scrittura". Modificando un file, le parti modificate sono scritte a un’altra posizione, i metadati (che registrano la posizione di tutte le parti del file), sono aggiornati. Finché i dati precedenti sono ancora indicati, resteranno intoccati.

Questo semplifica molto la creazione di istantanee del volume secondario di BTRFS: scattare una nuova istantanea è "gratuito", dato che utilizza molto poco spazio su disco: soltanto i metadati dell’istantanea sono scritti, memorizzando la posizione fisica di tutte le parti dei file nel volume secondario, e quasi istantaneamente. Lo spazio utilizzato dall’istantanea crescerà soltanto quando il volume secondario originale e l’istantanea differiscono, poiché l’istantanea recupererà i dati rimossi dall’originale. D’altra parte, i dati aggiunti all’originale non saranno inclusi nell’istantanea; in altre parole, una modifica del volume secondario originale non modifica l’istantanea.

Slint include l’utilità absm, che scatta istantanee del volume secondario @, consentendo il ritorno a uno stato precedente del sistema se un aggiornamento va storto, avviando il sistema su tale istantanea, selezionata nel menu d’avvio GRUB. Per conoscerne l’utilizzo, basta digitare absm come radice, o utilizzare sudo.

BTRFS, inoltre, verifica l’integrità di ogni file quando viene aperto utilizzando una checksum, rendendo non necessario controllare il file di sistema all’avvio di sistema. Inoltre, il comando "btrfs scrub" verifica l’integrità di tutti i file, inclusi quelli letti raramente. Di default, l’utilità "btrfsmaintenance" inclusa su Slint, esegue "btrfs scrub" una volta a settimaana.

btrfsmaintenance, inoltre, innesca "btrfs balance" una volta a settimana di default. Questo comando ti consente di distribuire i dati tra i dispositivi, se il file di sistema si estende tra più di essi, nonché di riorgaanizzare lo spazio utilizzato, in prticolare per liberare lo spazio non allocato del file di sistema, migliorando in particolare le prestazioni di BTRFS, nel caso di un disco rigido. Per sapere di più su btrfsmaintenance leggi /usr/doc/btrfsmaintenance*/README.html

Altri strumenti utili, compatibili con BTRFS sono inclusi su Slint, tutti dotati di un’opzione --help e una pagina principale:

  • jdupes rileva i file duplicati e ti consente di agire di conseguenz, indipendentemente dal file di sistema utilizzato

  • btdu consente di conoscere con precisione il posto occupato dai volumi secondari e le cartelle di BTRFS

  • restic è un software di backup molto versatile, utilizzabile per qualsiasi file di sistema.

Consigli.

  • BTRFS necessita di spazio per respirare e riorganizzarsi. Mantieni sempre libero il 10-20% dello spazio.

  • Alcune opzioni dello strumento incluse nel pcchetto btrfs-tools, possono essere pericolose o controproducenti. Utilizza soltanto quelle di cui conosci perfettamente bene gli effetti e, se in dubbio, cerca consigli, sulla mailing list di Slint o via IRC su irc.libera.chat, nel canale #btrfs.

  • In particolare, evita di utilizzare "btrfs filesystem defrag" e, specialmente, non "btrfs check --repair".

  • Prima di utilizzare un comando, leggi attentamente la pagina corrispondente (iniziando da "man btrtfs", che elenca gli altri).

  • Come con qualsiasi file di sistema, effettua backup regolari! Questo è solitamente il solo modo per recuperare i tuoi dati in caso di guasto hardware.

Per ulteriori informazioni:

Personalizzare una disposizione del sistema di Slint

Introduzione

In questo articolo, revisioniamo come l’installatore di Slint organizza le cartelle essenziali del sistema (la loro disposizione) e come personalizzare tale disposizione dopo l’installazione. Il procedimento d’installazione è dettagliato nel Capitolo 2: Installazione del Manuale.

L’installazione posiziona tutte le cartelle elencate di seguito, che costituiscono il nucleo del sistema, nella stessa partizione:

bin boot dev etc home lib lib64 media mnt proc root run sbin srv sys usr

Se altre partizioni già formattate sono accessibili durante l’installazione, questo propone che siano montate all’avvio del sistema, con un nome della cartella scelto dall’utente come punto di montaggio, tranne quelle elencate sopra.

Inoltre, se è stata selezionata la partizione automatica, l’installatore propone di creare una partizione aggiuntiva nello spazio disponibile rimanente sul dispositivo, con un punto di montaggio scelto dall’utente, anch’esso al di fuori di quelli elencati sopra.

In sintesi, l’installatore:

  • posiziona tutte le cartelle che costituiscono il nucleo del sistema nella stessa partizione,

  • consente di configurare altre cartelle in altre partizioni, formattate in precedenza.

Tuttavia, potresti voler installre file o cartelle parte del nucleo del sistema, come /home, in un’altra partizione, specialmente se lo spazio è limitato sul dispositivo. Ad esempio, se il computer è equipaggiato con un dispositivo veloce (SSD o NVMe) e con un disco rigido più lento ma dalla capacità maggiore, potresti voler installare il sistema sul SSD o NVMe e i file più grandi sul disco rigido.

Potresti anche voler condividere i file grandi, solitamente archiviati in /home, con un altro sistema, come immagini, documenti vari, file audio o video.

Guida pratica

Come esempio, mostriamo come spostare /home su un altro dispositivo, con alcune varianti.

Spostare /home interamente a un altro dispositivo

Supponiamo che tu desideri spostare la cartella /home, inizialmente installata su un SSD o NVMe, su un disco rigido. Ciò può esser fatto subito dopo l’installazione, o in seguito. Tutto ciò che segue, è effettuato come root.

Prima di tutto, necessiti di una partizione formattata sul disco rigido, denominata /dev/sdb1 di seguito, per ospitare /home:

  • Sul disco rigido, se non lo hai già fatto, creea la tabella di partizione (tipo GPT) e la partizione che utilizza uno di questi strumenti: parted, gdisk, cgdisck o gparted, tutti inclusi su Slint, abbastanza grandi per l’utilizzo previsto.

  • Formatta questa partizione utilizzando uno dei tipi btrfs, ext4 o xfs (comandi mkfs.btrfs, mkfs.ext4 or mkfs.xfs)

Per poter copiare la cartella /home a questa partizione, devi montarla, ad esempio su /mnt, con uno dei seguenti comandi:

mount /dev/sdb1 /mnt -o compress=zstd:3 # se /dev/sdb1 è stato formattato con btrfs
mount /dev/sdb1 /mnt # se /dev/sdb1 è stato formattato con xfs o ext4

Quindi, copia i file, ad esempio così:

cp -a /home/* /mnt

o così:

rsync -aAXv /home/* /mnt

Quindi, verifica che la copia sia stata effettuata correttamente:

diff -r /home /mnt

Quindi, modifica il file /etc/fstab per montare /home sulla nuova partizione al prossimo avvio.

Se il file di sistema di root è btrfs, /home è montata come volume secondario. In questo caso, commenta la riga nel file utilizzata per montare /home, inserendo un carattere # al suo inizio. Ad esempio, modifica questa riga (sostituisci <uuid1> con il valore UUID specificato in /etc/fstab):

UUID=<uuid1> /home btrfs subvol=/@home,discard=async,compress=zstd:3,noatime 0 0

che diventa:

#UUID=<uuid1> /home btrfs subvol=/@home,discard=async,compress=zstd:3,noatime 0 0

Poi, inserisci nel file una rig per montare /home all’avvio, sulla nuova partizione. Designeremo <uuid2> come il valore del suo UUID, mostrato da questo comando:

lsblk -lno uuid /dev/sdb1

La riga da inserire nel file /etc/fstab dipende dal file di sistema scelto di /dev/sdb1.

Per btrfs:

UUID=<uuid2> /home btrfs compress=zstd:3,discard=async,noatime 0

Per ext4 o xfs:

UUID=<uuid2> /home ext4 noatime 1 2

Poi, riavvia la macchina. In caso di problemi, per tornare indietro:

  • Nel caso in cui si verifichi, annulla il commento della riga commentata in /etc/fstab (rimuovi il carattere # all’inizio della riga)

  • Commenta quella nuova (inserisci un carattere # all’inizio della riga)

  • Quindi riavvia.

Una volta verificata la nuova partizione per l’operazione corretta, quella vecchia è eliminabile. Il modo per farlo dipende dal file di sistema configurato dall’installatore. Una volta riavviata la macchina, assicurati che /home sia montata sulla nuova partizione, ad esempio con il comando

findmnt -o /source

Quindi, elimina la vecchia /home:

  • Nel caso di btrfs digita questi comandi (supponiamo che il sistema sia stato installato in /dev/sda3):

    umount /mnt
    mount /dev/sda3 /mnt -o subvolid=0
    btrfs subvolume delete -c /mnt/@home
    btrfs subvolume sync /mnt # questo comando avvia il recupero dello spazio occupato dalla vecchia /home
    btrfs filesystem sync # questo comando termina il recupero dello spazio occupato dalla vecchia /home
    umount /mnt
  • Nel caso di ext4 o xfs, necessitiamo che la nuova /home non sia in uso, per rimuovere quella precedente. Quindi:

    Prima, riavvia in modalità di testo.
    Accedi come root # Non come utente regolare, altrimenti, non potremmo smontare /home poiché sarebbe impegnata.
    unmount /home # Questo rende nuovamente accessibile la /home precedente.
    rm -r /home/* # Eliminiamo i contenuti della /home precedente, ma manteniamo la cartella.
    mount /home # Ora, /dev/sdb1 è montata come /home

Sposta soltanto i file più grandi da /home al disco rigido

Nell’esempio precedente, la cartella /home è stata trasferita completamente dal SSD al disco rigido.

Potrebbe essere preferibile memorizzare soltanto i grandi file e lasciare le cartelle e i file nascosti sul SSD, essendo soggetti a scritture frequenti, molto più veloci su un SSD.

Per farlo, puoi denominare il punto di montaggio della partizione /data di /dev/sdb1 in /etc/fstab, ad esempio, poi, una volta montata tale partizione, copiare le cartelle da trasferire da /home a /data e, infine, sostituire tali cartelle in /home con collegamenti simbolici alle cartelle in /data. Per esempio, una volta creata e montata la cartella /data su /dev/sdb1:

chown -R didier:users /data
mv /home/didier/Images /data
ln -s /data/Images /home/didier/Images

Questo modo d’agire è da adattare se il sistema è multi-utente, ad esempio, creando una sottocartella per utente in /data.

Sposta /home al disco rigido ma memorizza i file modificati di frequente sul SSD

D’altra parte, è possibile memorizzare selettivamente i file modificati frequentemente sul SSD, come quelli contenuti in ~/.mozilla, ~/.thunderbird o ~/.purple.

Ad esempio, puoi creare una cartella /data e una sottocartella /data/.thunderbird sul SSD, spostarci ~/.thunderbird, e creare un collegamento simboliico /data/.thunderbird ⇒ ~/.thunderbird.

Se è utilizzato btrfs per il sistema principale, si consiglia di creare un volume secondario per /data, con i seguenti comandi, prima di spostarci ~/.mozilla o ~/.thunderbird, come segue:

mount /dev/sda3 /mnt subvolid=0
btrfs subvolume create /mnt/@data
mkdir /data
umount /mnt

Quindi, inserisci una riga in /etc/fstab perr montare /data all’avvio di sistema (<uuid1> è il valore UUID di /dev/sda3):

UUID=<uuid1> /data btrfs subvol=/@data,discard=async,compress=zstd:3,noatime 0 0

Quindi, riavvia e digita i seguenti comandi:

chown -R didier:users /data
mv /home/didier/.thunderbird /data
ln -s /data/.thunderbird ~/.thunderbird