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
This commit is contained in:
Lionel
2026-01-01 16:41:19 +01:00
parent cf5669b1fa
commit 9046dbf6ae
2 changed files with 163 additions and 0 deletions

162
docs/infra/ssd-migration.md Normal file
View File

@@ -0,0 +1,162 @@
# 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
```bash
# 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
```bash
# 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
```bash
# 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
```bash
# 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) :
```bash
# 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 |