Solution Discord

Syncthing sur CasaOS ne peut pas créer de dossier de synchronisation sur un autre disque physique

A CasaOS user found that Syncthing could work with direct paths but continued to fail when a symbolic link redirected the sync folder to another physical drive, even after permission and ownership changes.

Conclusion essentielle : il ne s’agit probablement pas d’un problème où il faudrait « continuer à modifier chmod jusqu’à ce que Syncthing fonctionne ». Le signal le plus probant est que le dossier fonctionne lorsqu’il se trouve sur un chemin que Syncthing peut voir directement, mais échoue lorsqu’un lien symbolique traverse vers un autre disque physique. Dans CasaOS, cela oriente d’abord vers les chemins montés dans le conteneur, puis vers les permissions UID/GID.

« J’ai déjà configuré les permissions jusqu’au bout… cela fonctionne quand je cible /DATA/AppData/, mais pas quand le lien pointe vers un autre disque physique. » Ce résultat de test est plus utile que l’erreur de permission initiale, car il localise l’échec au chemin de stockage.

Pourquoi le lien symbolique est le premier élément à remettre en question

Syncthing ne considère pas un lien symbolique comme une invitation à « aller jusqu’à la cible et à synchroniser tout ce qui s’y trouve ». Selon le informations documentées sur le comportement des liens symboliques de Syncthing, les liens symboliques peuvent être synchronisés, mais ne sont jamais suivis. La configuration de ses dossiers attend également un chemin réel propre à l’appareil : le chemin du dossier Syncthing correspond au chemin physique du dossier sur le disque dur.

Cela rend suspect un chemin comme celui-ci :

/DATA/Documents/Syncthing/SyncFiles → lien symbolique → /some/other/physical/drive

Si Syncthing s’exécute dans Docker, l’hôte peut résoudre ce lien alors que le conteneur peut ne pas voir du tout la destination.

L’application Syncthing de CasaOS explique pourquoi un deuxième disque peut disparaître

La définition officielle de Syncthing dans l’App Store de CasaOS est particulièrement utile ici. Son fichier compose monte deux chemins de l’hôte dans le conteneur :

/DATA/AppData/$AppID/config → /config
/DATA                      → /DATA

Vous pouvez vérifier le mappage réel des volumes dans le fichier compose Syncthing de CasaOS.

Cela signifie qu’une cible physiquement disponible sous l’arborescence /DATA de l’hôte devrait également être visible sous /DATA dans le conteneur Syncthing. Mais si le lien symbolique pointe finalement vers un point de montage de l’hôte situé en dehors de cette arborescence, le conteneur a besoin d’un montage bind distinct pour accéder à la destination réelle. Avec les montages bind Docker, les répertoires de l’hôte doivent être explicitement montés dans le conteneur.

Utilisez ce test pour distinguer un problème de chemin d’un problème d’autorisations

Effectuez les vérifications dans cet ordre. Ne commencez pas par un autre chmod récursif.

1. Résolvez le chemin réel sur l’hôte CasaOS

readlink -f "/DATA/Documents/Syncthing/SyncFiles"

Si la commande renvoie un chemin situé en dehors de /DATA, vous avez découvert un indice important.

2. Demandez au conteneur Syncthing s’il peut voir la même destination

docker exec syncthing ls -ld "/DATA/Documents/Syncthing/SyncFiles"

Testez ensuite la destination résolue si elle est censée exister dans le conteneur. Si l’hôte peut la parcourir mais pas le conteneur, les autorisations ne sont pas encore le problème principal ; le chemin est absent de l’espace de noms du conteneur.

3. Inspectez les montages réels du conteneur

docker inspect syncthing

Consultez la Montages section. Vous devriez pouvoir identifier la source sur l’hôte et la destination dans le conteneur pour le lecteur que vous souhaitez synchroniser.

La solution la plus propre : liez le véritable lecteur, puis utilisez ce chemin dans le conteneur

Si le lecteur externe se trouve en dehors de /DATA, exposez-le directement à Syncthing au lieu de le dissimuler derrière un lien symbolique. Conceptuellement, l’entrée Compose ressemble à ceci :

volumes:
  - type: bind
    source: /real/host/path/to/external-drive
    target: /sync-drive

Configurez ensuite le chemin du dossier Syncthing de manière explicite, par exemple :

/sync-drive/Dev Files

Il ne s’agit pas d’un chemin magique ; choisissez une destination correspondant à votre configuration Compose. L’essentiel est que le conteneur reçoive le véritable répertoire de l’hôte en tant que volume monté.

L’image Syncthing LinuxServer en amont utilise le même modèle et documente des mappages distincts hôte-conteneur pour les données, tels que /path/to/data1:/data1 et /path/to/data2:/data2. Son mappage PUID/PGID de Syncthing explique également comment l’identité du conteneur doit correspondre à la propriété du volume sur l’hôte.

Ce n’est qu’une fois le montage correct que vous devez corriger la propriété et les autorisations

Le dépannage initial comprenait une suggestion du type :

sudo chmod -R 770 /path/to/folder

770 peuvent convenir dans certaines configurations, mais cela n’est utile que si Syncthing s’exécute réellement avec un utilisateur ou un groupe qui possède ce répertoire ou appartient au groupe qui le possède. L’application CasaOS transmet PUID et PGID dans l’image LinuxServer. La documentation officielle de LinuxServer indique que le propriétaire du volume sur l’hôte doit correspondre au PUID/PGID configuré.

Vérifiez les identifiants plutôt que de supposer le nom d’utilisateur casaos suffit :

docker exec syncthing id
stat -c '%u:%g %a %n' /real/host/path/to/external-drive

Si l’UID/GID numérique ne correspond pas, modifiez intentionnellement la propriété ou l’appartenance au groupe. Évitez chmod -R 777; il masque le véritable problème et affaiblit le contrôle des accès.

Ce que l’erreur « le fichier existe » indique réellement

Le message :

mkdir /DATA/Documents/Syncthing/SyncFiles : le fichier existe

ne prouve pas que le chemin final Fichiers de développement le répertoire est le problème. Syncthing échoue lors de la préparation de la racine du dossier. Lorsqu’un chemin parent est un lien symbolique ou est résolu différemment à l’intérieur du conteneur, l’application peut rencontrer un objet du système de fichiers là où elle attendait un chemin de répertoire normal.

Le diagnostic le plus rapide ne consiste donc pas à supprimer et recréer le même répertoire. Il faut comparer :

  • le chemin résolu sur l’hôte ;
  • le chemin visible à l’intérieur du conteneur ;
  • les montages bind du conteneur ;
  • les valeurs numériques du PUID/PGID avec la propriété de destination.

Pour partir sur une base propre, la configuration de Syncthing avec CasaOS présente un flux normal de synchronisation avec le même chemin avant la personnalisation pour plusieurs disques. La plateforme d’applications ZimaOS est utile pour comparer d’autres outils de sauvegarde ou de synchronisation de fichiers. Si l’objectif final est de regrouper plusieurs disques physiques plutôt que de les relier par des liens symboliques, le ZimaCube 2 est l’option matérielle axée sur le stockage.

FAQ

Dois-je résoudre ce problème en remplaçant le propriétaire root par casaos ?

Pas à lui seul. La propriété n’a d’importance qu’une fois que le conteneur peut accéder au véritable chemin de destination. Vérifiez d’abord le montage bind et les valeurs numériques du PUID/PGID.

Pourquoi un chemin direct fonctionne-t-il alors que le lien symbolique vers un autre disque échoue ?

Un chemin direct sous un répertoire monté dans le conteneur existe dans les deux systèmes de fichiers. Un lien symbolique peut pointer vers un emplacement de l’hôte qui n’a jamais été monté dans le conteneur, laissant Syncthing avec un chemin qu’il ne peut pas parcourir.

Syncthing suit-il les liens symboliques pour synchroniser le répertoire cible ?

Non. La documentation de Syncthing indique que les liens symboliques ne sont jamais suivis. Utilisez un véritable chemin de dossier visible par le processus Syncthing.

Que dois-je modifier en premier ?

Résolvez le lien symbolique, inspectez les montages du conteneur Syncthing et montez le véritable répertoire du disque externe. Vérifiez ensuite le PUID/PGID et les permissions.