Files
202601docs/docs/infra/ssd-migration.md
Lionel 9046dbf6ae docs: Add SSD NVMe migration documentation
- Document migration from SD card to NVMe SSD (512GB)
- Include benchmark results (1108x improvement on 4K random writes)
- Add fallback configuration with SD card as backup
- Update mkdocs navigation

Migration completed: 2026-01-01
2026-01-01 16:41:19 +01:00

3.8 KiB

Migration SD → SSD NVMe

!!! success "Migration réussie le 1er janvier 2026" Talloires boot désormais sur un SSD NVMe de 512GB, avec la carte SD comme fallback automatique.

Contexte

Le Raspberry Pi 5 fonctionnait sur une carte SD de 64GB, ce qui posait plusieurs problèmes :

  • Performance I/O limitée : Les écritures aléatoires 4K plafonnaient à ~300 IOPS
  • Espace disque contraint : Seulement 17GB libres pour les services Docker
  • Usure de la SD : Les écritures fréquentes (logs, métriques) usent prématurément les cartes SD

Matériel

Composant Modèle Capacité
SSD NVMe Acer MA200 512 GB
HAT NVMe (intégré Pi 5) PCIe 2.0 x1
Carte SD (backup) SanDisk 64 GB

Procédure de migration

1. Backup préalable

# Backup complet vers Annecy (NAS)
~/backup-to-annecy.sh

Le script sauvegarde ~/talloires-v2/ (3.7GB, 19,427 fichiers) vers /mnt/annecy/talloires/.

2. Préparation du SSD

Le SSD était déjà partitionné avec une installation précédente :

/dev/nvme0n1p1  511M  boot (FAT32)
/dev/nvme0n1p2  468G  root (ext4)

3. Synchronisation avec rsync

# Sync root filesystem
sudo rsync -axHAWXS --numeric-ids --info=progress2 --delete \
  --exclude="/boot/firmware/*" \
  --exclude="/dev/*" \
  --exclude="/proc/*" \
  --exclude="/sys/*" \
  --exclude="/tmp/*" \
  --exclude="/run/*" \
  --exclude="/mnt/*" \
  --exclude="/media/*" \
  --exclude="/lost+found" \
  / /mnt/ssd-root/

# Sync boot partition
sudo rsync -avx /boot/firmware/ /mnt/ssd-boot/

4. Configuration des PARTUUIDs

Mise à jour de /etc/fstab sur le SSD :

PARTUUID=e4c047f7-01  /boot/firmware  vfat  defaults  0  2
PARTUUID=e4c047f7-02  /               ext4  defaults,noatime  0  1

Mise à jour de /boot/firmware/cmdline.txt :

root=PARTUUID=e4c047f7-02

5. Configuration EEPROM boot order

# Avant: 0xf461 (SD → NVMe → USB)
# Après: 0xf416 (NVMe → SD → USB)
sudo rpi-eeprom-config --edit
# Modifier BOOT_ORDER=0xf416
Code Signification
6 NVMe (prioritaire)
1 SD card (fallback)
4 USB
f Restart loop

Résultats benchmark

Écriture séquentielle (128MB)

Device Vitesse Ratio
SD Card 8.9 MB/s 1x
SSD NVMe 2,100 MB/s 236x

I/O aléatoires 4K (le plus important)

Device Read IOPS Write IOPS
SD Card 3,288 302
SSD NVMe 315,076 334,367
Gain 96x 1,108x 🔥

!!! info "Pourquoi les IOPS 4K comptent" Les écritures aléatoires 4K sont critiques pour :

- Démarrage des containers Docker
- Journaux système et logs applicatifs
- Bases de données (Gitea, Home Assistant)
- Métriques Prometheus/Grafana

État actuel

# Vérifier le device de boot
findmnt -n -o SOURCE /
# /dev/nvme0n1p2

# Espace disponible
df -h /
# 468G total, 406G libres (87%)

# Boot order
sudo rpi-eeprom-config | grep BOOT_ORDER
# BOOT_ORDER=0xf416

Fallback automatique

La carte SD reste branchée et contient un système fonctionnel. Si le SSD a un problème :

  1. Le Pi essaie de booter sur NVMe → échec
  2. Le Pi boot automatiquement sur SD → succès
  3. On peut diagnostiquer/réparer le SSD

Pour forcer le boot SD (debug) :

# Temporairement changer le boot order
sudo rpi-eeprom-config --edit
# BOOT_ORDER=0xf461  (SD first)
sudo reboot

Scripts associés

  • ~/backup-to-annecy.sh : Backup quotidien vers NAS (cron 3h)
  • Healthchecks.io : Monitoring du backup

Historique

Date Action
2026-01-01 Migration SD → SSD NVMe
2026-01-01 Correction script backup (source: talloires-v2)
2026-01-01 Benchmark et documentation