Préparation et partitionnement

# Dans le BIOS/UEFI , désactiver Secure Boot (incompatibilité avec hibernation)
# Démarrer sur le média live Ubuntu 24.04 LTS et sélectionner "Try Ubuntu"
# Ouvrir GParted pour configurer les partitions sur /dev/nvme0n1
# Créer une table de partition GPT si nécessaire
# Créer les partitions :
# /dev/nvme0n1p1 : 512 Mo, FAT32, drapeaux boot, esp
# /dev/nvme0n1p2 : 2 Go, ext4, pour /boot
# /dev/nvme0n1p3 : reste de l'espace - 10 Go, ext4 (pour LUKS/LVM)
# /dev/nvme0n1p4 : 10 Go, ext4, pour / temporaire (en fin de disque)

Installation initiale

# Lancer l'installateur Ubuntu depuis le bureau live
# Choisir "Something else" pour le partitionnement manuel
# Configurer les points de montage :
# /dev/nvme0n1p1 : /boot/efi, FAT32 (ne pas reformater)
# /dev/nvme0n1p2 : /boot, ext4
# /dev/nvme0n1p4 : /, ext4
# Ne pas configurer /dev/nvme0n1p3
# Poursuivre l'installation (utilisateur, mot de passe, etc.)
# À la fin, sélectionner "Continue testing" pour rester en mode live

Configuration du chiffrement LUKS et LVM

sudo apt update
sudo apt install cryptsetup lvm2 rsync

# Configuration LUKS
sudo cryptsetup -v -c aes-xts-plain64 --key-size 512 luksFormat /dev/nvme0n1p3
sudo cryptsetup luksOpen /dev/nvme0n1p3 nvme0n1p3_crypt

# Configuration LVM
sudo pvcreate /dev/mapper/nvme0n1p3_crypt
sudo vgcreate volume0 /dev/mapper/nvme0n1p3_crypt

# Création des volumes logiques
RAM_SIZE=$(free -g | awk '/^Mem:/{print $2}')
sudo lvcreate -L 150G -n root volume0
sudo lvcreate -L ${RAM_SIZE}G -n swap volume0
sudo lvcreate -l 100%FREE -n home volume0

# Activation et formatage
sudo vgchange -a y volume0
sudo mkfs.ext4 /dev/volume0/root
sudo mkfs.ext4 /dev/volume0/home
sudo mkswap /dev/volume0/swap

Migration du système (OPTIMISÉE)

# Montage hiérarchique du système source
sudo mkdir -p /mnt/old
sudo mount /dev/nvme0n1p4 /mnt/old
sudo mount /dev/nvme0n1p2 /mnt/old/boot
sudo mount /dev/nvme0n1p1 /mnt/old/boot/efi

# Montage hiérarchique du système cible
sudo mkdir -p /mnt/new
sudo mount /dev/volume0/root /mnt/new
sudo mkdir -p /mnt/new/{boot/efi,home}
sudo mount /dev/nvme0n1p2 /mnt/new/boot
sudo mount /dev/nvme0n1p1 /mnt/new/boot/efi
sudo mount /dev/volume0/home /mnt/new/home

# Migration complète en une seule commande rsync
# Les exclusions pour /dev, /proc, /sys, /tmp, /run, /mnt, /media, /lost+found
# sont nécessaires pour éviter les boucles et fichiers système temporaires
sudo rsync -aAXHv --delete \
    --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found} \
    /mnt/old/ /mnt/new/

Configuration dans le chroot

# Montage des systèmes de fichiers pour le chroot
for i in dev dev/pts proc sys; do sudo mount --bind /$i /mnt/new/$i; done
sudo chroot /mnt/new

# Récupération des UUID nécessaires
LUKS_UUID=$(blkid -s UUID -o value /dev/nvme0n1p3)
ROOT_UUID=$(blkid -s UUID -o value /dev/volume0/root)
HOME_UUID=$(blkid -s UUID -o value /dev/volume0/home)
SWAP_UUID=$(blkid -s UUID -o value /dev/volume0/swap)

# Configuration de /etc/crypttab
echo "nvme0n1p3_crypt UUID=$LUKS_UUID none luks" > /etc/crypttab

# Configuration de /etc/fstab (remplacer les anciennes entrées)
cat > /etc/fstab << EOF
#      
UUID=$ROOT_UUID / ext4 errors=remount-ro 0 1
UUID=$HOME_UUID /home ext4 defaults 0 2
UUID=$SWAP_UUID none swap sw 0 0
$(grep /boot /etc/fstab)
EOF

# Installation des paquets nécessaires
apt update
apt install -y lvm2 cryptsetup

# Modification de GRUB pour l'hibernation
sed -i "s/GRUB_CMDLINE_LINUX_DEFAULT=\"\(.*\)\"/GRUB_CMDLINE_LINUX_DEFAULT=\"\1 resume=UUID=$SWAP_UUID\"/" /etc/default/grub

# Montage des variables EFI (si nécessaire)
modprobe efivarfs
mount -t efivarfs efivarfs /sys/firmware/efi/efivars 2>/dev/null || true

# Mise à jour du système de démarrage
update-initramfs -u -k all && update-grub
grub-install /dev/nvme0n1

exit

Finalisation et vérification

# Démontage propre (ordre inverse des montages)
for i in dev/pts dev proc sys boot/efi boot home; do sudo umount /mnt/new/$i; done
sudo umount /mnt/new
for i in boot/efi boot; do sudo umount /mnt/old/$i; done
sudo umount /mnt/old

# Fermeture de la partition LUKS
sudo vgchange -an volume0
sudo cryptsetup luksClose nvme0n1p3_crypt

# Redémarrage
sudo reboot

# Après redémarrage :
# 1. Vérifier le démarrage avec le mot de passe LUKS
# 2. Supprimer la partition temporaire /dev/nvme0n1p4 avec GParted (overhead SSD)
# 3. Tester l'hibernation :
systemctl hibernate

Notes Importantes

  • Principe : Installation initiale sur une partition temporaire de 10 Go en fin de disque (qui sera supprimée pour servir d'overhead SSD), puis migration vers LVM chiffrée.
  • La partition temporaire /dev/nvme0n1p4 peut être supprimée après validation du système pour servir d'overhead SSD
  • Les montages hiérarchiques permettent à rsync de gérer automatiquement /boot, /boot/efi, et /home
  • L'option -H de rsync préserve les hardlinks, important pour certains fichiers système
  • L'option --delete assure une copie exacte sans fichiers résiduels
  • Toujours vérifier les UUID avec blkid avant de configurer /etc/fstab et /etc/crypttab