- 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
3.8 KiB
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 :
- Le Pi essaie de booter sur NVMe → échec
- Le Pi boot automatiquement sur SD → succès
- 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 |