Questa è una configurazione avanzata con crittografia completa, btrfs, snapshot e supporto per ibernazione.

Panoramica dell’Architettura

  • Crittografia: LUKS2 con tutto il disco criptato
  • Filesystem: Btrfs con subvolume layout compatibile snapper
  • Settori: 4Kn (4096 byte) se supportati dall’SSD
  • Bootloader: GRUB con supporto snapshot (grub-btrfs)
  • Snapshot: Configurati con Snapper

Fase 1: Preparazione e Boot

1.1 Boot da USB Arch Linux

Scarica l’ultima ISO di Arch e crea una USB bootable.

1.2 Verifica UEFI e Connessione

# Verifica boot UEFI
ls /sys/firmware/efi/efivars

# Connessione rete (se WiFi)
iwctl
# [iwd]# station wlan0 connect NOME_RETE

# Test connessione
ping -c 3 archlinux.org

# Sincronizza l'orologio
timedatectl set-ntp true

Fase 2: Partizionamento e Settori 4Kn

2.1 Verifica supporto 4Kn1

# Identifica il disco
lsblk

# Verifica settori fisici/logici
nvme id-ns /dev/nvme0n1 -H | grep "LBA Format"
# Se vedi "LBA Format 1" o simile con Data Size: 4096, procedi.
cat /sys/block/nvme0n1/queue/physical_block_size
cat /sys/block/nvme0n1/queue/logical_block_size
# ATTENZIONE: QUESTO CANCELLA TUTTO IL DISCO ISTANTANEAMENTE
nvme format --lbaf=1 /dev/nvme0n1

2.2 Partizionamento

# Usa gdisk per GPT
gdisk /dev/nvme0n1

# Comandi:
# o (crea nuova GPT)
# n (nuova partizione)
#   Partition 1: +2048M, type EF00 (EFI System)
#   Partition 2: resto del disco, type 8309 (Linux LUKS)
# w (scrivi e esci)

Risultato:

  • /dev/nvme0n1p1 → EFI (2048MB)2
  • /dev/nvme0n1p2 → LUKS (resto)

Fase 3: Crittografia LUKS2

# Crea container LUKS2 con settori 4096
cryptsetup luksFormat --type luks2 \
    --sector-size 4096 \
    --cipher aes-xts-plain64 \
    --key-size 512 \
    --iter-time 5000 \
    --pbkdf argon2id \
    /dev/nvme0n1p2

# Apri il container
cryptsetup open /dev/nvme0n1p2 cryptroot

Fase 4: Filesystem Btrfs con Subvolume

4.1 Crea filesystem btrfs

# Formatta con settori 4096
mkfs.btrfs -L ArchLinux -s 4096 /dev/mapper/cryptroot

# Monta temporaneamente
mount /dev/mapper/cryptroot /mnt

4.2 Crea subvolume

cd /mnt

# Subvolume principali (compatibili snapper)
btrfs subvolume create @
btrfs subvolume create @home
btrfs subvolume create @snapshots

# Subvolume da escludere dagli snapshot
btrfs subvolume create @var_log
btrfs subvolume create @var_tmp
btrfs subvolume create @var_pkg # Cache pacman

# (Facoltativo) Immagini macchine virtuali/Docker/ISO
btrfs subvolume create @var_lib_libvirt
btrfs subvolume create @var_lib_containers
#btrfs subvolume create @home_containers

cd
umount /mnt

4.3 Monta con opzioni ottimizzate

# Opzioni btrfs per SSD
BTRFS_OPTS="noatime,compress=zstd:1,space_cache=v2,ssd,discard=async"

# Monta subvolume root
mount -o $BTRFS_OPTS,subvol=@ /dev/mapper/cryptroot /mnt

# Crea directory
mkdir -p /mnt/{boot,home,.snapshots,var/log,var/tmp,var/cache/pacman/pkg,var/lib/libvirt,var/lib/containers}

# Monta altri subvolume
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_tmp /dev/mapper/cryptroot /mnt/var/tmp
mount -o $BTRFS_OPTS,subvol=@var_pkg /dev/mapper/cryptroot /mnt/var/cache/pacman/pkg

mount -o $BTRFS_OPTS,subvol=@var_lib_libvirt /dev/mapper/cryptroot /mnt/var/lib/libvirt
mount -o $BTRFS_OPTS,subvol=@var_lib_containers /dev/mapper/cryptroot /mnt/var/lib/containers

# Disabilitiamo CoW
chattr +C /mnt/var/lib/libvirt
chattr +C /mnt/var/lib/containers

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

Fase 5: Installazione Base

# Installazione minimale
pacstrap -K /mnt base linux linux-firmware \
    btrfs-progs cryptsetup device-mapper \
    intel-ucode \  # processore intel
    amd-ucode \
    neovim \
    fish

# Genera fstab
genfstab -U /mnt >> /mnt/etc/fstab

# Chroot
arch-chroot /mnt

Fase 6: Configurazione Sistema Base

# Timezone
ln -sf /usr/share/zoneinfo/Europe/Rome /etc/localtime
hwclock --systohc

# Locale
nvim /etc/locale.gen
# Decommenta en_US.UTF-8 e it_IT.UTF-8
locale-gen
echo "LANG=it_IT.UTF-8" > /etc/locale.conf

# Tastiera
echo "KEYMAP=it" > /etc/vconsole.conf

# Hostname
echo "archlinux" > /etc/hostname

# /etc/hosts
cat >> /etc/hosts << EOF
127.0.0.1    localhost
::1          localhost
127.0.1.1    archlinux.localdomain archlinux
EOF

# Password root (saltare questo passaggio per una sistema )
# passwd

Fase 7: Initramfs e Crittografia

# Modifica mkinitcpio.conf
nvim /etc/mkinitcpio.conf

# MODULES: aggiungi driver GPU
MODULES=(amdgpu btrfs)

# HOOKS: modifica così
HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt filesystems fsck)

# Rigenera initramfs
mkinitcpio -P

Fase 8: GRUB con Supporto Snapshot

# Installa pacchetti necessari
pacman -S grub efibootmgr grub-btrfs inotify-tools

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

Senza supporto per Ibernazione

# Configura GRUB
nvim /etc/default/grub

# Modifica/aggiungi queste righe:
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet"
GRUB_CMDLINE_LINUX="rd.luks.name=${LUKS_UUID}=cryptroot root=/dev/mapper/cryptroot rootflags=subvol=@"
GRUB_ENABLE_CRYPTODISK=y
# Installa GRUB
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB

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

# Abilita monitoraggio automatico snapshot
systemctl enable grub-btrfsd

Fase 9: Snapper

# Installa snapper
pacman -S snapper snap-pac

# Smonta .snapshots temporaneamente
umount /.snapshots
rm -r /.snapshots

# Crea configurazione snapper per root
snapper -c root create-config /

# Rimuovi subvolume creato da snapper
btrfs subvolume delete /.snapshots

# Ricrea directory e rimonta
mkdir /.snapshots
mount -o $BTRFS_OPTS,subvol=@snapshots /dev/mapper/cryptroot /.snapshots

# Permessi (importante per non far accedere tutti agli snapshot)
chmod 750 /.snapshots

# Aggiorna fstab se necessario
# Configura snapper
nvim /etc/snapper/configs/root

Configurazione snapper:

NUMBER_LIMIT="10"
TIMELINE_LIMIT_HOURLY="5"
TIMELINE_LIMIT_DAILY="7"
TIMELINE_LIMIT_WEEKLY="0"
TIMELINE_LIMIT_MONTHLY="0"
TIMELINE_LIMIT_YEARLY="0"
# Abilita snapshot automatici
systemctl enable snapper-timeline.timer
systemctl enable snapper-cleanup.timer

# Test snapshot
snapper -c root create --description "Prima installazione"
snapper -c root list

Fase 10: Swap (zram)

# Installazione
pacman -S zram-generator

# Configurazione
sudo nvim /etc/systemd/zram-generator.conf

# Contenuto:
[zram0]
zram-size = min(ram, 8192)
compression-algorithm = zstd
swap-priority = 100
fs-type = swap

Fase 11: Network e Utente

# NetworkManager (minimo per rete)
pacman -S networkmanager
systemctl enable NetworkManager

# Crea utente
useradd -m -G wheel -s /usr/bin/fish [UTENTE]
passwd [UTENTE]

# Sudo
pacman -S sudo
EDITOR=nvim visudo
# Decommenta: %wheel ALL=(ALL:ALL) ALL
# Opzionale - non chiedere password per 15 minuti:
# Defaults timestamp_timeout=15
# Opzionale - richiedi password anche per comandi ripetuti (più sicuro):
# Defaults timestamp_timeout=0

Fase 12: Finalizzazione

# Esci dal chroot
exit

# Smonta tutto
umount -R /mnt
cryptsetup close cryptroot

# Riavvia
reboot

Post-Installazione

# Dopo il riboot e login
sudo pacman -S mesa vulkan-radeon libva-mesa-driver git man-db base-devel

# Verifica
lspci -k | grep -A 3 -E "(VGA|3D)"

# Verifica ibernazione
sudo systemctl hibernate

# Se funziona, puoi configurare sospensione ibrida
sudo nvim /etc/systemd/sleep.conf
# Aggiungi: HibernateMode=platform

1

Assicurati che l’hardisk supporti i setto 4Kn.

2

La dimensione della partizione EFI dipende da…