📄 Optimisation Nextcloud — Séparation HOT / COLD STORAGE
🎯 Objectif
Optimiser les performances de Nextcloud en déplaçant les répertoires les plus sollicités vers un volume NVMe rapide, tout en conservant le reste des données sur du Ceph HDD plus économique.
Cette technique améliore significativement :
-
la vitesse d’affichage des galeries,
-
la génération des previews,
-
les performances de Memories,
-
la fluidité de l’expérience utilisateur,
-
tout en maintenant un espace de stockage massif et abordable.
1. 📁 Architecture de stockage
Nextcloud repose sur deux catégories de données :
1.1 Données FROIDES (/mnt/nextcloud)
Stockées sur Ceph HDD + DB/WAL sur NVMe
Contient :
-
les fichiers des utilisateurs
-
les répertoires
avatar,calendar,theming,drawio, etc. -
la majorité de
appdata_*(CSS, JS, facereco, theming…)
Ces données sont rarement modifiées, et tolèrent parfaitement la latence HDD grâce à Ceph + DB/WAL 100 Go.
1.2 Données CHAUDES (nouveau volume NVMe — /mnt/hot)
Volumes créés dans le pool CephNVMe haute performance.
Ces répertoires sont les plus sollicités en lecture/écriture, notamment par :
-
Memories
-
FullTextSearch
-
Photos
-
RichDocuments
-
Editor
-
Web previews
-
l’uploader WebDAV (transactions temporaires)
Ces répertoires saturent les disques HDD lors des opérations lourdes (prévisualisation massive, importations, photos, vidéos).
2. 📦 Répertoires déplacés vers stockage CHAUD
Le contenu de appdata_XXXX/ a été analysé, et seuls les répertoires contenant beaucoup de fichiers dynamiques, regenerables ou non-critiques ont été déplacés.
✔️ Répertoires déplacés vers /mnt/hot
| Répertoire | Rôle | Justification |
|---|---|---|
preview/
|
Prévisualisations | Très haut volume de fichiers générés par l’app Photos/Memories |
photos/
|
Cache interne Photos | Accès intensif |
dav-photocache/
|
Cache DAV pour Memories | Critique pour performance |
richdocuments/
|
Office/WebODF | Beaucoup d’I/O |
text/
|
Éditeur collaboratif | Sessions & autosaves |
unsplash/
|
Cache d’images | Lecture intensive |
🔹 Ces éléments ne doivent PAS être sauvegardés.
Ils se régénèrent automatiquement.
3. 🔗 Connexion entre les deux volumes : mount --bind
Au lieu de symlinks (problématiques dans Nextcloud), on utilise mount --bind, ce que Nextcloud accepte 100% du temps.
Exemple (réel) après configuration :
/dev/sdc on /mnt/hot type ext4 (rw,relatime)
/dev/sdc on /mnt/nextcloud/data/appdata_xxx/preview type ext4 (rw,relatime)
/dev/sdc on /mnt/nextcloud/data/appdata_xxx/photos type ext4 (rw,relatime)
...
Cette approche permet :
-
Nextcloud voit un répertoire normal
-
Le volume chaud bénéficie d’I/O NVMe
-
Le volume froid reste intact et cohérent
-
Aucune modification dans config.php
4. ⚙️ Étapes complètes (sans script)
4.1 Créer le volume chaud
Dans Proxmox → pool CephNVMe → nouveau disque virtuel → 48 Go.
Dans la VM :
mkfs.ext4 /dev/sdc
mkdir /mnt/hot
echo '/dev/sdc /mnt/hot ext4 defaults 0 0' >> /etc/fstab
mount -a
4.2 Déplacement des répertoires
IMPORTANT : Nextcloud désactivé.
occ maintenance:mode --on
Copier vers volume chaud :
rsync -avH /mnt/nextcloud/data/appdata_xxx/preview/ /mnt/hot/preview/
rsync -avH /mnt/nextcloud/data/appdata_xxx/photos/ /mnt/hot/photos/
...
4.3 Supprimer les dossiers d’origine (pas les recréer!)
rm -rf /mnt/nextcloud/data/appdata_xxx/preview
rm -rf /mnt/nextcloud/data/appdata_xxx/photos
...
4.4 Créer les bind-mounts
mkdir -p /mnt/nextcloud/data/appdata_xxx/preview
mount --bind /mnt/hot/preview /mnt/nextcloud/data/appdata_xxx/preview
Idem pour :
-
photos
-
dav-photocache
-
richdocuments
-
text
-
unsplash
4.5 Ajouter dans /etc/fstab
⛔ L’ordre est crucial : monter /mnt/hot avant les bind-mounts.
/dev/sdc /mnt/hot ext4 defaults 0 0
/mnt/hot/preview /mnt/nextcloud/data/appdata_xxx/preview none bind 0 0
/mnt/hot/photos /mnt/nextcloud/data/appdata_xxx/photos none bind 0 0
/mnt/hot/dav-photocache /mnt/nextcloud/data/appdata_xxx/dav-photocache none bind 0 0
...
Vérifier :
mount -a
mount | grep hot
4.6 Réactiver Nextcloud
occ maintenance:mode --off
5. ✔️ Pourquoi cette optimisation est sûre
🔒 Pas de corruption possible :
-
les données déplacées sont recréables
-
les opérations se font Nextcloud OFF
-
les bind-mounts présentent à NC une arborescence standard
♻️ Sans impact sur les sauvegardes :
-
seul
/mnt/nextclouddoit être sauvegardé -
/mnt/hotNE DOIT PAS l’être -
en cas de perte : les caches seront régénérés automatiquement
6. 🚀 Résultat : un Nextcloud soutenable et scalable
Après optimisation :
-
GUI plus fluide
-
Memories accéléré
-
indexation plus rapide
-
réduction des IOPS sur pool froid
-
plateau de performance beaucoup plus haut
La technique utilisée dans les installations Nextcloud à 50 000+ utilisateurs.