diff --git a/docs/infra/ssd-migration.md b/docs/infra/ssd-migration.md new file mode 100644 index 0000000..2fc859e --- /dev/null +++ b/docs/infra/ssd-migration.md @@ -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 | diff --git a/mkdocs.yml b/mkdocs.yml index 26dce2e..5ca14c4 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -21,6 +21,7 @@ nav: - Réseau & Accès: infra/network.md - Problèmes 2025-12-31: infra/issues-2025-12-31.md - Recommandations: infra/recommendations.md + - Migration SSD: infra/ssd-migration.md - Services: - Overview: services/overview.md - Changelog: