Skip to content

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'espace
  • moveonenospc=true : Déplace fichier si disque plein
  • minfreespace=10G : Garde 10GB libre minimum
  • cache.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) :

# /etc/pve/lxc/100.conf
mp0: /mnt/storage/media,mp=/media
mp1: /mnt/storage/downloads,mp=/downloads

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 :

mount | grep disk
mount -a
journalctl -xe | grep mergerfs

SnapRAID erreurs :

snapraid status
snapraid diff
snapraid fix -e  # Dry-run

Disque plein :

du -sh /mnt/disk*/*  # Trouver gros dossiers
ncdu /mnt/storage    # Analyse interactive

Documentation Détaillée


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)

lsblk | grep sde
# sde1  286KB  part  /mnt/parity  ext4  ❌

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

# Après correction partition parity
snapraid sync

# Durée : 2-3h pour ~1TB données

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