- 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
163 lines
3.8 KiB
Markdown
163 lines
3.8 KiB
Markdown
# 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 |
|