Differenze tra le versioni di "Appunti Arch Linux"

Da GolemWiki.
Jump to navigation Jump to search
Riga 1: Riga 1:
 
[https://archlinux.org/ Arch Linux] è una distribuzione Linux leggera ed improntata alla riga di comando.  
 
[https://archlinux.org/ Arch Linux] è una distribuzione Linux leggera ed improntata alla riga di comando.  
Non è dotata di un installer grafico e perciò non è considerata adatta ai principianti, l'installazione di default consiste in un sistema base sul quale l'utente potrà manualmente aggiungere e configurare tutto quello di cui necessita.
+
Ufficialmente non è dotata di un installer grafico e perciò non è considerata adatta ai principianti, l'installazione di default consiste in un sistema base sul quale l'utente potrà manualmente aggiungere e configurare tutto quello di cui necessita.
  
 
Fornisce l'ultima versione stabile della maggior parte del software opensource disponibile per Linux e lo fa seguendo un modello di distribuzione detto "rolling-release", il suo aggiornamento è quindi continuo e non richiede periodici passaggi da una versione stabile alla successiva.
 
Fornisce l'ultima versione stabile della maggior parte del software opensource disponibile per Linux e lo fa seguendo un modello di distribuzione detto "rolling-release", il suo aggiornamento è quindi continuo e non richiede periodici passaggi da una versione stabile alla successiva.
Riga 53: Riga 53:
 
  --new=1:2048:133120 --typecode=1:EF02 --change-name=1:"GRUB" \
 
  --new=1:2048:133120 --typecode=1:EF02 --change-name=1:"GRUB" \
 
  --largest-new=2 --typecode=2:8300 --change-name=2:"ROOT" /dev/sda
 
  --largest-new=2 --typecode=2:8300 --change-name=2:"ROOT" /dev/sda
 +
 +
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)
 +
# mkfs.btrfs /dev/sda2
  
  
Riga 70: Riga 73:
 
La partizione '''EFI''' dovrà poi essere formattata in FAT32
 
La partizione '''EFI''' dovrà poi essere formattata in FAT32
 
  # mkfs.vfat -T32 /dev/sda1
 
  # mkfs.vfat -T32 /dev/sda1
 +
 +
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)
 +
# mkfs.btrfs /dev/sda2
 +
  
  
 
== Filesystem ==
 
== Filesystem ==
 +
Su Linux, a seconda di ciò di cui abbiamo bisogno, è possibile scegliere tra numerosi filesystem. Le principali opzioni sono le seguenti:
  
- EXT4: simply, stable, integrated encryption
 
- BTRFS: raid01, snapshots, subvolumes, included in kernel
 
- ZFS: raidz, support for encryption, snapshots, subvolumes, NOT included in the standard kernel
 
- XFS + LVM: RedHat way to manage snapshots/subvolumes/raid
 
  
 +
- EXT4: il FS storico di Linux, evoluzione di ext3. Supporta nativamente la crittografia dei dati, ma non gestisce autonomamente né RAID, né snapshots.
 +
 +
- BTRFS: supporta nativamente sottovolumi, snapshot ed il raid 0, 1 e 5; ma non la crittografia.
 +
 +
- [https://docs.oracle.com/cd/E53394_01/html/E54801/zfsover-1.html ZFS]: non è supportato direttamente da Linux, ha bisogno di un driver esterno per funzionare e ciò, per gli utenti meno smaliziati, potrebbe complicare le operazioni di ripristino di sistema in caso di problemi. Supporta il raid 0, 1 e z (una variante del raid5 che permette, grazie ad un meccanismo di scrittura dei dati detta "write-atomicity" di evitare la perdita di dati anche in caso di improvviso spegnimento improvviso del computer), gli snapshot, i sottovolumi e la cifratura dei dati. Non è però possibile modificare la composizione di un raid una volta creato.
 +
 +
- [https://access.redhat.com/documentation/it-it/red_hat_enterprise_linux/9/html-single/configuring_and_managing_logical_volumes/index XFS + LVM]: accoppiare il filesystem xfs al gestore di volumi di LVM è il modo con cui RedHat (IBM) ha scelto di implementare le funzionalità di raid e snapshots nella propria distribuzione.
  
  
 
=== Snapshots ===
 
=== Snapshots ===
 +
Data la natura instabile delle distribuzioni '''rolling-release''' come Arch Linux ritengo praticamente obbligatorio per la partizione di '''/''' l'utilizzo di un filesystem che supporti gli snapshot.
 +
 
==== BTRFS ====
 
==== BTRFS ====
https://wiki.golem.linux.it/Btrfs
+
Per me si tratta del compromesso migliore tra facilità di utilizzo e caratteristiche supportate.
 +
 
 +
=====Creazione del filesystem=====
 +
 
 +
# mkfs.btrfs ''/dev/partizione''
 +
 
 +
===== Montaggio del filesystem =====
 +
# mount -o compress=lzo ''/dev/partizione'' ''/mnt/punto_mount''
 +
 
 +
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)
 +
 
 +
 
 +
=====Creazione di un subvolume=====
 +
# btrfs subvolume create ''subvolume''
 +
 
 +
===== Montaggio di un subvolume =====
 +
# mount -o subvol=''subvolume'' ''/dev/partizione'' ''/mnt/punto_mount''
 +
 
 +
 
 +
=====Conversione da Ext3/4 a Btrfs=====
 +
# btrfs-convert /dev/partizione
 +
 
 +
Automaticamente è creata una snapshot contenente il vecchio filesystem (''/ext2_saved'')
 +
 
 +
In caso di problemi può essere montata col comando
 +
# mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved
 +
# mount -t ext3 -o loop,ro /ext2_saved/image /ext3
 +
 
 +
Se tutto è andato a buon fine può invece essere eliminata
 +
# btrfs subvolume delete /ext2_saved
 +
 
 +
=====Riparazione di un filesystem danneggiato=====
 +
Ci sono due modalità:
 +
 
 +
=====Riparazione online=====
 +
Si può tentare di riparare il filesystem a caldo (mentre questo è montato)
 +
# btrfs scrub start -B /dev/partizione
 +
o anche direttamente sulla root
 +
# btrfs scrub start -B /
 +
 
 +
=====Riparazione offline=====
 +
Precedentemente conosciuta come btrfsck, nel caso in cui l'operazione di ripristino precedente fallisca, si deve smontare il disco e, da live, dare:
 +
# btrfs check --repair /dev/partizione
 +
 
 +
=====Tips and tricks=====
 +
Se si preferisce non utilizzare una partizione /boot in formato tradizionale (ext2/3/4, reiser, etc...), al fine di evitare possibili problemi di avvio con GRUB, specialmente abilitando opzioni come la compressione del filesystem di root, si consiglia di partizionare il disco nel formato [[UEFI_e_GPT | GPT]] ed utilizzare la Bios Grub Partition o l'EFI System nel caso si possieda un moderno PC dotato di UEFI.
 +
 
 +
=====Gestione avanzata=====
 +
Normalmente la root di sistema viene collocata in un subvolume (es.: ''@''), per poter effettuare opzioni di snapshot etc e consigliabile montare il filesystem con l'opzione ''subvolid=0''. Nella directory di mount saranno visibili tutti i subvolumi e le snapshot della partizione e sarà quindi possibile effettuare tutte le operazioni indicate nei passaggi successivi.
 +
 
 +
Ecco un '''/etc/fstab''' di esempio
 +
LABEL=ROOT      /            btrfs    defaults,compress=lzo,subvol=@            0 0
 +
LABEL=ROOT      /home        btrfs    defaults,compress=lzo,subvol=@home        0 0
 +
LABEL=ROOT      /mnt/btrfs    btrfs    defaults,noauto,subvolid=0,compress=lzo  0 0
 +
 
 +
Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.
 +
 
 +
=====Creazione e gestione delle snapshot=====
 +
======Controllare i subvolumi presenti sul sistema======
 +
# btrfs subvolume list /
 +
 
 +
In una tipica installazione Ubuntu avremo un output di questo tipo
 +
ID 257 gen 9755 top level 5 path @
 +
ID 292 gen 7624 top level 5 path @home
 +
 
 +
''@'' è il nome del subvolume contenente la root '''/''' del filesystem
 +
''@home'' è il nome del subvolume della /home
 +
 
 +
======Effettuare una snapshot======
 +
# btrfs subvolume snapshot @ rootsnap
 +
 
 +
Nell'esempio abbiamo effettuato il ''backup'' del filesystem di root e l'abbiamo chiamato ''rootsnap''
 +
 
 +
====== Montare un subvolume/snapshot======
 +
# mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot
 +
 
 +
======Cancellare un subvolume/snapshot======
 +
# btrfs subvolume delete rootsnap
 +
 
 +
======Aggiungere a GRUB l'opzione per avviare una snapshot======
 +
Editare ''/etc/grub.d/40_custom'' (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot ''rootsnap''
 +
 
 +
menuentry 'Linux snapshot' {
 +
        insmod gzio
 +
        insmod part_gpt
 +
        insmod btrfs
 +
        set root='hd1,gpt3'
 +
        linux  /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap  quiet
 +
        initrd  /rootsnap/boot/initramfs-linux.img
 +
}
 +
 
 +
dopodichè aggiornare la configurazione di GRUB con
 +
# grub-mkconfig -o /boot/grub/grub.cfg
 +
su Debian/Ubuntu si può anche dare
 +
# update-grub
 +
 
 +
 
 +
 
 +
 
 +
== Quote ==
 +
Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle '''quote'''.
 +
 
 +
Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi
 +
# btrfs quota enable volume
 +
 
 +
Se invece le quote non sono state abilitate subito su tutto il filesystem è necessario creare un qgroup (quota group) per ogni subvolume utilizzando il rispettivo ID e successivamente fare una scansione delle quote.
 +
# btrfs subvolume list <path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} <path>
 +
# btrfs quota rescan <path>
 +
 
 +
Assegnare una quota limite ad un subvolume
 +
# btrfs qgroup limit size /volume/subvolume
 +
 
 +
Es.:
 +
# btrfs qgroup limit 20g /mnt/@
 +
# btrfs qgroup limit 100g /mnt/@home
 +
 
 +
Scoprire la quantità di spazio utilizzata da un subvolume
 +
# btrfs qgroup show <path>
 +
 
 +
== Backup ==
 +
Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs.
 +
L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura.
 +
Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext
 +
 
 +
* Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta
 +
btrfs subvolume snapshot -r @root @root-yymmdd-ro
 +
btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true
 +
* Trasferire la snapshot sul disco esterno.
 +
btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext
 +
* Quando necessario, ripristinare la snapshot
 +
btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/
 +
* Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura
 +
mv /mnt/ext/{@root-yymmdd-ro,@root}
 +
btrfs property set /mnt/btrfs/@root ro false
 +
 
  
 
==== ZFS ====
 
==== ZFS ====
Riga 98: Riga 245:
  
 
=== RAID ===
 
=== RAID ===
 +
 
==== EXT4 + mdadm ====
 
==== EXT4 + mdadm ====
 +
 
==== BTRFS ====
 
==== BTRFS ====
 +
=====RAID 0=====
 +
# mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1
 +
 +
=== Montare il raid ===
 +
# mount /dev/sda1 /mnt
 +
 +
(È equivalente a ''mount /dev/sdb1 /mnt'', il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)
 +
 +
Verifica del montaggio
 +
# btrfs filesystem show /mnt
 +
 +
Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e
 +
Total devices 2 FS bytes used 27.75GiB
 +
devid    1 size 136.72GiB used 17.03GiB path /dev/sda1
 +
devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1
 +
 +
===Aggiungere una partizione===
 +
# btrfs device add /dev/sdc1 /mnt
 +
 +
# btrfs filesystem show /mnt
 +
Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e
 +
Total devices 3 FS bytes used 27.75GiB
 +
devid    1 size 136.72GiB used 17.03GiB path /dev/sda1
 +
devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1
 +
devid    3 size 136.72GiB used 0.00 path /dev/sdc1
 +
 +
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi
 +
 +
# btrfs balance start -d -m /mnt
 +
 +
# btrfs filesystem show /mnt
 +
Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e
 +
Total devices 3 FS bytes used 27.78GiB
 +
devid    1 size 136.72GiB used 10.03GiB path /dev/sda1
 +
devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1
 +
devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1
 +
 +
===Rimuovere un device===
 +
# btrfs device delete /dev/sdb1 /mnt
 +
 +
L'operazione può impiegare parecchio tempo e per andare a buon fine sui dischi rimanenti deve essere rimasto sufficiente spazio libero da ospitare i dati contenuti nel device che vogliamo togliere dal raid.
 +
 +
==RAID 1==
 +
# mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1
 +
 +
== RAID 5 ==
 +
=== Conversione a RAID5===
 +
# btrfs balance start -dconvert=raid5 -mconvert=raid5 ''/punto_di_mount''
 +
 +
===Sostituzione device danneggiato===
 +
# btrfs replace start /dev/sdb1 /dev/sdc1 ''/punto_di_mount''
 +
 +
In alcuni casi potrebbe essere necessario montare il filesystem in modalità '''degraded''' (con l'opzione ''-o degraded'') e lanciare il successivo comando per eliminare definitivamente il device dal raid.
 +
# btrfs device delete missing /mnt
 +
 
==== ZFS ====
 
==== ZFS ====
 
==== XFS + LVM ====
 
==== XFS + LVM ====

Versione delle 18:06, 28 feb 2023

Arch Linux è una distribuzione Linux leggera ed improntata alla riga di comando. Ufficialmente non è dotata di un installer grafico e perciò non è considerata adatta ai principianti, l'installazione di default consiste in un sistema base sul quale l'utente potrà manualmente aggiungere e configurare tutto quello di cui necessita.

Fornisce l'ultima versione stabile della maggior parte del software opensource disponibile per Linux e lo fa seguendo un modello di distribuzione detto "rolling-release", il suo aggiornamento è quindi continuo e non richiede periodici passaggi da una versione stabile alla successiva.

Il prezzo da pagare è che talvolta gli aggiornamenti (soprattutto: kernel, driver video e librerie) possono determinare problemi talmente gravi al sistema da renderlo inutilizzabile. Per fortuna accorgimenti come lo snapshot del filesystem che, se utilizzati correttamente dall'utente, sono capaci di ovviare a tali problematiche.

Supporti d'installazione

  • ISO con installer grafico Calamares ALCI

Preparazione del disco

Su Linux si può scegliere (salvo casi estremamente particolari) tra due tipi di tabella delle partizioni

  • msdos (Master Boot Record o più semplicemente MBR)
  • GPT (GUID Partition Table)

In linea generale è consigliabile di scegliere il GPT perché è un formato più moderno ed ha meno limitazioni rispetto all'MBR risalente ai tempi dell'MS-DOS.

I casi in cui è preferibile utilizzare la tabella msdos sono:

  • dual-boot con Windows (32-bit o 64-bit) con la scheda madre in modalità Legacy BIOS
  • in schede madri molto datate il BIOS potrebbe non supportare lo schema GPT (esiste comunque un trucco per aggirare l'ostacolo)

Vantaggi di GPT su MBR:

  • offre un sistema di denominazione delle partizioni indipendente dal filesystem (PARTLABEL, PARTUUID)
  • supera il concetto di partizione primaria ed estesa (su MBR il numero massimo di partizioni primarie, quelle su cui si può installare un sistema operativo è limitato a 4). Su GPT, nella configurazione standard, si possono definire fino a 128 partizioni.
  • la grandezza massima di un disco è di 2 ZiB, mentre su MBR 2 TiB
  • permette di fare a meno della tradizionale partizione di /boot con i filesystem BTRFS e ZFS in modo da semplificare la gestione degli snapshot.


Schede madri BIOS

Creare due partizioni.

  1. BIOS GRUB Partition: concettualmente l'equivalente dell'MBR dei sistemi GPT. A differenza di quest'ultimo, la cui dimensione è di soli 512 byte, la BIOS GRUB Partition può però essere sufficientemente grande da contenere i driver per il supporto di un filesystem come ZFS o BTRFS. Il contenuto di questa partizione cambia esclusivamente nei rari casi di upgrade del GRUB perché non vi risiedono né kernel né ramdisk.
  2. Linux filesystem: successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.

Partizionamento

Col seguente comando verrà creata la partizione BIOS GRUB (EF02) a partire dal 1MB, della grandezza di 64MB; il resto del disco resterà disponibile per il filesystem di Linux.

Se avete più dischi da utilizzare in raid, questa operazione andrà ripetuta per ciascun disco.

# sgdisk \
--new=1:2048:133120 --typecode=1:EF02 --change-name=1:"GRUB" \
--largest-new=2 --typecode=2:8300 --change-name=2:"ROOT" /dev/sda

La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)

# mkfs.btrfs /dev/sda2


Schede madri UEFI

Creare due partizioni.

  1. EFI: è una partizione in formato FAT32 necessaria per l'avvio dei sistemi operativi nei PC con schede madri UEFI.
  2. Linux filesystem: successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.

Partizionamento

Col seguente comando verrà creata la partizione EFI (EF00) a partire dal 1MB, della grandezza di 512MB; il resto del disco resterà disponibile il filesystem di Linux.

# sgdisk \
--new=1:2048:1064960 --typecode=1:EF00 --change-name=1:"efi" \
--largest-new=2 --typecode=2:8300 --change-name=2:"ROOT" /dev/sda

La partizione EFI dovrà poi essere formattata in FAT32

# mkfs.vfat -T32 /dev/sda1

La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)

# mkfs.btrfs /dev/sda2


Filesystem

Su Linux, a seconda di ciò di cui abbiamo bisogno, è possibile scegliere tra numerosi filesystem. Le principali opzioni sono le seguenti:


- EXT4: il FS storico di Linux, evoluzione di ext3. Supporta nativamente la crittografia dei dati, ma non gestisce autonomamente né RAID, né snapshots.

- BTRFS: supporta nativamente sottovolumi, snapshot ed il raid 0, 1 e 5; ma non la crittografia.

- ZFS: non è supportato direttamente da Linux, ha bisogno di un driver esterno per funzionare e ciò, per gli utenti meno smaliziati, potrebbe complicare le operazioni di ripristino di sistema in caso di problemi. Supporta il raid 0, 1 e z (una variante del raid5 che permette, grazie ad un meccanismo di scrittura dei dati detta "write-atomicity" di evitare la perdita di dati anche in caso di improvviso spegnimento improvviso del computer), gli snapshot, i sottovolumi e la cifratura dei dati. Non è però possibile modificare la composizione di un raid una volta creato.

- XFS + LVM: accoppiare il filesystem xfs al gestore di volumi di LVM è il modo con cui RedHat (IBM) ha scelto di implementare le funzionalità di raid e snapshots nella propria distribuzione.


Snapshots

Data la natura instabile delle distribuzioni rolling-release come Arch Linux ritengo praticamente obbligatorio per la partizione di / l'utilizzo di un filesystem che supporti gli snapshot.

BTRFS

Per me si tratta del compromesso migliore tra facilità di utilizzo e caratteristiche supportate.

Creazione del filesystem
# mkfs.btrfs /dev/partizione
Montaggio del filesystem
# mount -o compress=lzo /dev/partizione /mnt/punto_mount

(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)


Creazione di un subvolume
# btrfs subvolume create subvolume
Montaggio di un subvolume
# mount -o subvol=subvolume /dev/partizione /mnt/punto_mount


Conversione da Ext3/4 a Btrfs
# btrfs-convert /dev/partizione

Automaticamente è creata una snapshot contenente il vecchio filesystem (/ext2_saved)

In caso di problemi può essere montata col comando

# mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved
# mount -t ext3 -o loop,ro /ext2_saved/image /ext3

Se tutto è andato a buon fine può invece essere eliminata

# btrfs subvolume delete /ext2_saved
Riparazione di un filesystem danneggiato

Ci sono due modalità:

Riparazione online

Si può tentare di riparare il filesystem a caldo (mentre questo è montato)

# btrfs scrub start -B /dev/partizione

o anche direttamente sulla root

# btrfs scrub start -B /
Riparazione offline

Precedentemente conosciuta come btrfsck, nel caso in cui l'operazione di ripristino precedente fallisca, si deve smontare il disco e, da live, dare:

# btrfs check --repair /dev/partizione
Tips and tricks

Se si preferisce non utilizzare una partizione /boot in formato tradizionale (ext2/3/4, reiser, etc...), al fine di evitare possibili problemi di avvio con GRUB, specialmente abilitando opzioni come la compressione del filesystem di root, si consiglia di partizionare il disco nel formato GPT ed utilizzare la Bios Grub Partition o l'EFI System nel caso si possieda un moderno PC dotato di UEFI.

Gestione avanzata

Normalmente la root di sistema viene collocata in un subvolume (es.: @), per poter effettuare opzioni di snapshot etc e consigliabile montare il filesystem con l'opzione subvolid=0. Nella directory di mount saranno visibili tutti i subvolumi e le snapshot della partizione e sarà quindi possibile effettuare tutte le operazioni indicate nei passaggi successivi.

Ecco un /etc/fstab di esempio

LABEL=ROOT       /             btrfs     defaults,compress=lzo,subvol=@            0 0
LABEL=ROOT       /home         btrfs     defaults,compress=lzo,subvol=@home        0 0
LABEL=ROOT       /mnt/btrfs    btrfs     defaults,noauto,subvolid=0,compress=lzo   0 0

Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.

Creazione e gestione delle snapshot
Controllare i subvolumi presenti sul sistema
# btrfs subvolume list /

In una tipica installazione Ubuntu avremo un output di questo tipo

ID 257 gen 9755 top level 5 path @
ID 292 gen 7624 top level 5 path @home

@ è il nome del subvolume contenente la root / del filesystem @home è il nome del subvolume della /home

Effettuare una snapshot
# btrfs subvolume snapshot @ rootsnap

Nell'esempio abbiamo effettuato il backup del filesystem di root e l'abbiamo chiamato rootsnap

Montare un subvolume/snapshot
# mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot
Cancellare un subvolume/snapshot
# btrfs subvolume delete rootsnap
Aggiungere a GRUB l'opzione per avviare una snapshot

Editare /etc/grub.d/40_custom (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot rootsnap

menuentry 'Linux snapshot' {
       insmod gzio
       insmod part_gpt
       insmod btrfs
       set root='hd1,gpt3'
       linux   /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap  quiet
       initrd  /rootsnap/boot/initramfs-linux.img
}

dopodichè aggiornare la configurazione di GRUB con

# grub-mkconfig -o /boot/grub/grub.cfg

su Debian/Ubuntu si può anche dare

# update-grub



Quote

Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle quote.

Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi

# btrfs quota enable volume

Se invece le quote non sono state abilitate subito su tutto il filesystem è necessario creare un qgroup (quota group) per ogni subvolume utilizzando il rispettivo ID e successivamente fare una scansione delle quote.

# btrfs subvolume list <path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} <path>
# btrfs quota rescan <path>

Assegnare una quota limite ad un subvolume

# btrfs qgroup limit size /volume/subvolume

Es.:

# btrfs qgroup limit 20g /mnt/@
# btrfs qgroup limit 100g /mnt/@home

Scoprire la quantità di spazio utilizzata da un subvolume

# btrfs qgroup show <path>

Backup

Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs. L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura. Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext

  • Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta
btrfs subvolume snapshot -r @root @root-yymmdd-ro
btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true
  • Trasferire la snapshot sul disco esterno.
btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext
  • Quando necessario, ripristinare la snapshot
btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/
  • Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura
mv /mnt/ext/{@root-yymmdd-ro,@root}
btrfs property set /mnt/btrfs/@root ro false


ZFS

XFS + LVM

Encryption

https://wiki.golem.linux.it/Installare_Arch_Linux_in_una_partizione_cifrata

EXT4

BTRFS + ENCFS

ZFS

RAID

EXT4 + mdadm

BTRFS

RAID 0
# mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1

Montare il raid

# mount /dev/sda1 /mnt

(È equivalente a mount /dev/sdb1 /mnt, il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)

Verifica del montaggio

# btrfs filesystem show /mnt
Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e
Total devices 2 FS bytes used 27.75GiB
devid    1 size 136.72GiB used 17.03GiB path /dev/sda1
devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1

Aggiungere una partizione

# btrfs device add /dev/sdc1 /mnt
# btrfs filesystem show /mnt
Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e
Total devices 3 FS bytes used 27.75GiB
devid    1 size 136.72GiB used 17.03GiB path /dev/sda1
devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1
devid    3 size 136.72GiB used 0.00 path /dev/sdc1

Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi

# btrfs balance start -d -m /mnt
# btrfs filesystem show /mnt
Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e
Total devices 3 FS bytes used 27.78GiB
devid    1 size 136.72GiB used 10.03GiB path /dev/sda1
devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1
devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1

Rimuovere un device

# btrfs device delete /dev/sdb1 /mnt

L'operazione può impiegare parecchio tempo e per andare a buon fine sui dischi rimanenti deve essere rimasto sufficiente spazio libero da ospitare i dati contenuti nel device che vogliamo togliere dal raid.

RAID 1

# mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1

RAID 5

Conversione a RAID5

# btrfs balance start -dconvert=raid5 -mconvert=raid5 /punto_di_mount

Sostituzione device danneggiato

# btrfs replace start /dev/sdb1 /dev/sdc1 /punto_di_mount

In alcuni casi potrebbe essere necessario montare il filesystem in modalità degraded (con l'opzione -o degraded) e lanciare il successivo comando per eliminare definitivamente il device dal raid.

# btrfs device delete missing /mnt

ZFS

XFS + LVM

Installazione Grub

Sistema con BIOS

# pacman -S grub
# grub-mkconfig -o /boot/grub/grub.cfg
# grub-install /dev/sda

Sistema UEFI

NB: NON avendo un computer con scheda madre UEFI non ho potuto verificare questa procedura e non ne ho potuto testare il funzionamento

# pacman -S grub
# mkdir /boot/EFI
# mount /dev/sda1 /boot/EFI
# grub-install --target=x86_64-efi --efi-directory=$esp --bootloader-id=grub --recheck --debug
# grub-mkconfig -o /boot/grub/grub.cfg

Modifiche a Grub

Per permettere il caricamento del sistema è necessario aggiungere zfs_force=1 zfs=bootfs alla riga di caricamento del kernel nel file /boot/grub/grub.cfg.

Esempio di configurazione

set timeout=2
set default=0
menuentry 'Arch Linux'{
       insmod gzio
       insmod part_gpt
       insmod zfs
       set root='hd0,gpt2'
       linux   /ROOT@/boot/vmlinuz-linux zfs_force=1 zfs=bootfs root=ZFS=rpool/ROOT rw  quiet
       initrd  /ROOT@/boot/initramfs-linux.img
}

Stuff

Installer - manual (Linux From Scratch) - script (Arch, NixOS, Gentoo) - text (Arch, Slackware, Debian) - Calamares (Debian, NixOS, Arch spinoff)

Network - manual (net-tools, iproute2, wpa_supplicant) - iwd/iwgtk - ConnMan - systemd-networkd - NetworkManager (nmcli/nmtui/applet)

Boot Loader - GRUB: UEFI, BIOS, multiboot, internal shell - systemd-boot: UEFI only, integrated in systemd - LILO: only BIOS, multiboot, discontinued (but still default on Slackware)

Filesystem - EXT4: simply, stable, integrated encryption - BTRFS: raid01, snapshots, subvolumes, included in kernel - ZFS: raidz, support for encryption, snapshots, subvolumes, NOT included in the standard kernel - XFS (SGI Irix) + LVM: RedHat way to manage snapshots/subvolumes/raid - misc: ReiserFS, JFS (IBM AIX) - historic: minix, ext2, ext3 - cryptofs

RAID - hardware - standard: dmraid (mdadm) - LVM (logical volume manager): snapshots, cache, all raid type supported - ZFS: can't remove a storage from a pool - BTRFS: stable only raid 0 and 1, can add/remove storage from array


CONFIG - Systemd - Desktop Enviroment applications - Distro tool (drakconf, Yast, etc...) - configuration.nix - rc.conf - webmin/RHEL WEB CONSOLE

Package manager - pkgtools (Slackware) - dnf (rpm) - apt-get/dpkg (deb) - pacman - nix - zypper (Suse) - pkgsrc/pkgin (Netbsd) - snap - Flatpak - appimage - docker

Systemd

   systemd-udevd - successor of devfsd, hwdetect and hotplug, manages device in /dev by adding, symlinking and renaming them
   systemd-boot — simple UEFI boot manager;
   systemd-cryptenroll — Enroll PKCS#11, FIDO2, TPM2 token/devices to LUKS2 encrypted volumes;
   systemd-firstboot — basic system setting initialization before first boot;
   systemd-homed — portable human-user accounts;
   systemd-logind — session management;
   systemd-networkd — network configuration management;
   systemd-nspawn — light-weight namespace container; https://wiki.archlinux.org/title/systemd-nspawn
   systemd-resolved — network name resolution;
       systemd-timesyncd — system time synchronization across the network;
   systemd/Journal — system logging
   systemd/Timers — alternative to cron

Installazione Arch - Partizionamento: -- gpt vs msdos -- btrfs + snapshots -- zfs - Grub2 - configurazione della rete da riga di comando (LAN) - wifi da riga di comando - systemd - gestori alternativi di pacchetti: nix, snap, flatpak, appimage - container: lxc, systemd-nspawn, toolbox/podman https://github.com/toolbx-images/images


Bibliografia

https://wiki.archlinux.org/title/Installation_guide

https://wiki.golem.linux.it/Howto

https://wwwcdf.pd.infn.it/AppuntiLinux/a21.htm

https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.2-NOCHUNKS.html