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:
-
La Wiki di Forza: https://wiki.tnonline.net/w/Category:Btrfs
-
La documentazione ufficiale: https://btrfs.readthedocs.io/en/latest/
-
Domande e problemi: su irc.libera.chat, canale #btrfs
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
ormkfs.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