Infrastructure Stockage
Architecture stockage serveur : MergerFS pool + SnapRAID protection.
Vue d'Ensemble
Configuration actuelle :
- Pool MergerFS : 4.5TB utilisable (3 disques)
- SnapRAID parity : Protection 1 disque
- Usage actuel : ~4TB (89%)
- Données : Media (films/séries), backups
Architecture Disques
Disques Données (MergerFS Pool)
| Montage | Device | Capacité | Usage | Type | Label |
|---|---|---|---|---|---|
| /mnt/disk1 | /dev/sdc1 | 2TB | 1.8TB | WD Green | disk1 |
| /mnt/disk2 | /dev/sdd1 | 2TB | 1.6TB | Hitachi | disk2 |
| /mnt/disk3 | /dev/sde1 | 500GB | 450GB | WD Blue | disk3 |
| Pool | mergerfs | 4.5TB | ~4TB | - | - |
Disque Parity (SnapRAID)
| Montage | Device | Capacité | Fonction |
|---|---|---|---|
| /mnt/parity1 | /dev/sdb1 | 2TB | SnapRAID parity |
MergerFS Configuration
Montage fstab
# /etc/fstab
/mnt/disk1:/mnt/disk2:/mnt/disk3 /mnt/storage fuse.mergerfs defaults,allow_other,use_ino,cache.files=auto-full,moveonenospc=true,category.create=mfs,minfreespace=10G 0 0
Options actives :
category.create=mfs: Nouveau fichier → disque plus d'espacemoveonenospc=true: Déplace fichier si disque pleinminfreespace=10G: Garde 10GB libre minimumcache.files=auto-full: Cache métadonnées
Commandes Courantes
# Vérifier pool
df -h /mnt/storage
# Policy actuelle
getfattr -n user.mergerfs.create /mnt/storage
# Disques sources
getfattr -n user.mergerfs.srcmounts /mnt/storage
# Stats par disque
du -sh /mnt/disk*
SnapRAID Configuration
Fichier Config
# /etc/snapraid.conf
parity /mnt/parity1/snapraid.parity
content /var/snapraid/snapraid.content
content /mnt/disk1/snapraid.content
content /mnt/disk2/snapraid.content
data d1 /mnt/disk1
data d2 /mnt/disk2
data d3 /mnt/disk3
exclude *.unrecoverable
exclude /tmp/
exclude /lost+found/
exclude *.!sync
Opérations Quotidiennes
# Sync (après modifications fichiers)
snapraid sync
# Status
snapraid status
# Diff (avant sync)
snapraid diff
# Scrub mensuel (10% données, max 30 jours)
snapraid scrub -p 10 -o 30
Recovery Disque
# Si disk1 fail
snapraid fix -d d1
# Logs détaillés
snapraid fix -d d1 -l /var/log/snapraid-fix.log
# Dry-run test
snapraid fix -d d1 -e
Organisation Données
Structure Répertoires
/mnt/storage/
├── media/
│ ├── movies/ # Films (Radarr)
│ ├── tv/ # Séries (Sonarr)
│ └── music/ # Audio
├── downloads/
│ ├── complete/ # SABnzbd completed
│ └── incomplete/ # SABnzbd WIP
├── backups/
│ ├── configs/ # Configs Docker/LXC
│ └── databases/ # Dumps DB
└── archives/ # Données rarement accédées
Bind Mounts LXC
LXC 100 (docker-media) :
Jellyfin voit :
- /media/movies/
- /media/tv/
Sonarr/Radarr voient :
- /media/ (destination finale)
- /downloads/ (source imports)
Monitoring
Scripts Automatiques
# Cron quotidien
0 3 * * * /usr/local/bin/snapraid-sync.sh
0 4 * * 0 /usr/local/bin/snapraid-scrub.sh
# SMART check
0 5 * * * /usr/local/bin/smart-check.sh
Health Check Manuel
# Disques SMART
for disk in sdb sdc sdd sde; do
smartctl -H /dev/$disk
done
# Espace pool
df -h /mnt/storage /mnt/disk*
# Status SnapRAID
snapraid status | grep -E "error|warning"
Performances
Benchmarks Actuels
Lecture séquentielle : ~120 MB/s
Écriture séquentielle : ~100 MB/s
Streaming Jellyfin : 2-3 streams 1080p simultanés OK
Import Sonarr/Radarr : ~80 MB/s (move atomique MergerFS)
Limitations Connues
- Pas de RAID temps réel : SnapRAID nécessite sync manuel
- Parity 1 disque : Perte 2 disques = données perdues
- Performance écriture : Limitée par disque le plus lent
Troubleshooting Rapide
Pool ne monte pas :
SnapRAID erreurs :
Disque plein :
Documentation Détaillée
- MergerFS - Configuration complète
- MergerFS Advanced - Options avancées
- MergerFS Maintenance - Ajout/retrait disques
- SnapRAID - Configuration complète
- SnapRAID Automation - Scripts cron
- SnapRAID Recovery - Procédures récupération
- Hardware Storage - Détails physiques disques
Dernière mise à jour : 27 janvier 2026
État Réel Architecture (Audit Jan 2026)
Configuration Actuelle
Disques physiques :
| Device | Partition | Taille | Montage | Usage Actuel | État |
|---|---|---|---|---|---|
| sdc1 | /dev/sdc1 | 916GB | /mnt/disk1 | 16KB | ⚠️ Quasi-vide |
| sdc2 | /dev/sdc2 | 2.7TB | /mnt/media-bulk | 1.2TB | ✅ Médias (non protégés) |
| sdd1 | /dev/sdd1 | 916GB | /mnt/disk2 | 52KB | ⚠️ Quasi-vide |
| sde1 | /dev/sde1 | 286KB | /mnt/parity | 0B | ❌ PARTITION INVALIDE |
MergerFS Pool (/mnt/storage) :
- Sources : disk1 (916GB) + disk2 (916GB)
- Capacité totale : 1.8TB
- Utilisation : 18GB (1%)
- État : ✅ Fonctionnel mais vide
SnapRAID : - Configuration : ✅ Valide (/etc/snapraid.conf) - Sync : ❌ Jamais exécuté - Parity : ❌ 0 bytes (partition invalide) - Protection : ❌ Aucune
Problèmes Critiques Identifiés
1. Partition Parity Invalide (/dev/sde1)
Cause : Ancien partitionnement macOS (HFS+, VFAT) sur disque WD Green
Impact : SnapRAID ne peut pas fonctionner
Solution :
umount /mnt/parity
parted /dev/sde mklabel gpt
parted /dev/sde mkpart primary ext4 0% 100%
mkfs.ext4 -L snapraid-parity /dev/sde1
mount /dev/sde1 /mnt/parity
# Mettre à jour fstab
2. Disques Data Vides (disk1/disk2)
État actuel :
du -sh /mnt/disk1 /mnt/disk2
# disk1: 16K (seulement lost+found)
# disk2: 52K (structure dossiers Phase 3 créée)
Raison : Architecture prévue pour Phase 3 (migration archives)
Structure préparée sur disk2 :
/mnt/storage/ (via mergerfs)
├── archives/ (VIDE - attend migration ~1TB)
├── google-drive-backup/ (VIDE - sync Drive → local prévu)
├── google-photos-backup/ (VIDE - sync Photos → local prévu)
├── docker-configs/ (VIDE - backups configs)
├── backups/ (VIDE)
└── pbs-datastore/ (4KB - mount point PBS configuré)
3. Médias Non Protégés
1.2TB films sur /mnt/media-bulk (sdc2)
- Partition séparée de MergerFS
- Pas dans SnapRAID
- Choix assumé : Médias re-téléchargeables
Phase 3 : Migration Archives (En Attente)
Objectif
Migrer ~1TB archives personnelles du disque externe HGST Touro 1TB vers pool protégé MergerFS + SnapRAID.
Données à Migrer
Source : Disque externe HGST Touro Mobile 1TB (USB 3.0)
Contenu estimé : - Archives personnelles (~1TB) - Photos/documents importants - Données critiques à protéger
Destination : /mnt/storage/archives/ (disk1+disk2 MergerFS)
Procédure Migration
1. Connecter Disque Externe
# Brancher HGST Touro 1TB
lsblk | grep sd
mount /dev/sdX1 /mnt/backup-external
# Vérifier contenu
du -sh /mnt/backup-external/*
2. Copier Archives
# Rsync avec progression
rsync -av --progress /mnt/backup-external/ /mnt/storage/archives/
# Durée estimée : 2-4h (USB 3.0 → 30-50 MB/s)
3. Vérifier Intégrité
# Comparer tailles
du -sh /mnt/backup-external
du -sh /mnt/storage/archives
# Checksums (optionnel, long)
rsync -avc --dry-run /mnt/backup-external/ /mnt/storage/archives/
4. Activer SnapRAID Protection
Backup Bidirectionnel Google Drive
Phase 3 inclut aussi :
Google Drive → Local (À implémenter)
- Backup sécurité Google Drive vers /mnt/storage/google-drive-backup/
- Google Photos vers /mnt/storage/google-photos-backup/
- Fréquence : Hebdomadaire (dimanche 05:00)
Local → Google Drive (✅ Déjà implémenté)
- PBS backups vers gdrive:backup/homeserver/pbs
- Quotidien 04:00 depuis LXC 102
- 4GB backups cloud actifs
État Phase 3
- Disque externe connecté et monté
- Archives migrées vers /mnt/storage/archives/
- Partition parity corrigée (sde)
- Premier sync SnapRAID complété
- Backup Drive → Local configuré
- Backup Photos → Local configuré
- Tests vérification intégrité
Bloqueurs actuels : 1. Partition parity invalide (reformatage requis) 2. Disque externe non connecté 3. Scripts backup Drive→Local non créés
État infrastructure : Phase 2 (Médias) complète | Phase 3 (Archives) en attente