Questa guida descrive una configurazione professionale per Arch Linux, focalizzata sulla sicurezza dei dati e sulla resilienza del sistema. Implementeremo una crittografia completa del disco, un layout di subvolume Btrfs ottimizzato per gli snapshot automatici e un sistema di ripristino istantaneo.

Panoramica dell’Architettura

  • Crittografia: LUKS2 con algoritmo Argon2id (Full Disk Encryption).

  • Filesystem: Btrfs con layout ottimizzato per Snapper.

  • Storage: Ottimizzazione per settori 4Kn (SSD NVMe moderni).

  • Bootloader: GRUB con integrazione grub-btrfs per il boot dagli snapshot.

  • Memoria: Swap dinamica compressa tramite zram-generator.


Fase 1: Preparazione e Boot

Assicurarsi di aver effettuato il boot in modalità UEFI e di avere una connessione internet attiva.

# Verifica modalità UEFI
ls /sys/firmware/efi/efivars

# Sincronizzazione orario di sistema
timedatectl set-ntp true

Fase 2: Ottimizzazione Storage (4Kn)

Molti SSD NVMe moderni supportano i settori nativi a 4096 byte (4Kn), che offrono performance e affidabilità superiori.

[!CAUTION] Il comando nvme format è estremamente distruttivo e cancella istantaneamente ogni dato sul drive.

# Identifica il disco con il seguente comando
lsblk

# Verifica supporto 4Kn
nvme id-ns /dev/nvme0n1 -H | grep "LBA Format"

# Se supportato (es. LBA Format 1 con Data Size 4096), formatta il drive:
nvme format --lbaf=1 /dev/nvme0n1

Fase 3: Partizionamento GPT

Utilizziamo gdisk per creare uno schema pulito:

  1. EFI System Partition: 2048MB (Tipo EF00).
  2. LUKS Container: Resto del disco (Tipo 8309).

Fase 4: Crittografia LUKS2

Configuriamo il container con Argon2id per la massima protezione contro attacchi brute-force.

# Creazione container criptato
cryptsetup luksFormat --type luks2 \
    --sector-size 4096 \
    --pbkdf argon2id \
    /dev/nvme0n1p2

# Apertura del volume
cryptsetup open /dev/nvme0n1p2 cryptroot

Fase 5: Layout Subvolumi Btrfs

Creiamo una struttura che separi il sistema operativo (@) dai dati utente (@home) e dai log, permettendo rollback atomici.

mkfs.btrfs -L ArchLinux -s 4096 /dev/mapper/cryptroot
mount /dev/mapper/cryptroot /mnt


# Creazione subvolumi
btrfs subvolume create /mnt/@

btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@snapshots
btrfs subvolume create /mnt/@var_log
btrfs subvolume create /mnt/@var_pkg
umount /mnt

Fase 6: Montaggio e Installazione Base

Montiamo i volumi con opzioni specifiche per SSD (discard=async) e compressione zstd.

BTRFS_OPTS="noatime,compress=zstd:1,space_cache=v2,ssd,discard=async"


# Mount della gerarchia
mount -o $BTRFS_OPTS,subvol=@ /dev/mapper/cryptroot /mnt

mkdir -p /mnt/{boot,home,.snapshots,var/log,var/cache/pacman/pkg}

mount -o $BTRFS_OPTS,subvol=@home /dev/mapper/cryptroot /mnt/home
mount -o $BTRFS_OPTS,subvol=@snapshots /dev/mapper/cryptroot /mnt/.snapshots
mount -o $BTRFS_OPTS,subvol=@var_log /dev/mapper/cryptroot /mnt/var/log
mount -o $BTRFS_OPTS,subvol=@var_pkg /dev/mapper/cryptroot /mnt/var/cache/pacman/pkg

# Formatta e monta la partizione EFI
mkfs.fat -F32 /dev/nvme0n1p1
mount /dev/nvme0n1p1 /mnt/boot

# Installazione (selezionare microcode corretto: intel-ucode o amd-ucode)
pacstrap -K /mnt base linux linux-firmware btrfs-progs cryptsetup device-mapper intel-ucode nvim fish
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt

Fase 7: Configurazione Initramfs

Utilizziamo gli hook basati su systemd per la gestione di LUKS2.

Modifica /etc/mkinitcpio.conf:

HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt filesystems fsck)

Esegui la rigenerazione:

mkinitcpio -P

Fase 8: Bootloader GRUB

Configuriamo GRUB per decriptare il disco all’avvio.

pacman -S grub efibootmgr grub-btrfs inotify-tools

Ottieni l’UUID di /dev/nvme0n1p2 con blkid.

LUKS_UUID=$(blkid -s UUID -o value /dev/nvme0n1p2)
echo "LUKS UUID: $LUKS_UUID"

Modifica /etc/default/grub:

GRUB_CMDLINE_LINUX="rd.luks.name=[UUID_DEL_DISCO]=cryptroot root=/dev/mapper/cryptroot rootflags=subvol=@"
GRUB_ENABLE_CRYPTODISK=y
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
systemctl enable grub-btrfsd

Fase 9: Gestione Snapshot con Snapper

umount /.snapshots
rm -r /.snapshots
snapper -c root create-config /
btrfs subvolume delete /.snapshots
mkdir /.snapshots

mount -a
chmod 750 /.snapshots

# Abilita i timer di manutenzione
systemctl enable snapper-timeline.timer snapper-cleanup.timer

Fase 10: Ottimizzazioni (zram e Rete)

Zram

pacman -S zram-generator
# Configura in /etc/systemd/zram-generator.conf:
# [zram0]
# zram-size = min(ram, 8192)
# compression-algorithm = zstd

Network e Utente

pacman -S networkmanager
systemctl enable NetworkManager

useradd -m -G wheel -s /usr/bin/fish tuo_utente

passwd tuo_utente


# Configurazione Sudo
pacman -S sudo
EDITOR=nvim visudo # Decommenta la riga %wheel

Fase 11: Conclusione

exit
umount -R /mnt
cryptsetup close cryptroot
reboot