📄 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/nextcloud doit ĂȘtre sauvegardĂ©

  • /mnt/hot NE 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.