Discordソリューション

CasaOS上のSyncthingはファイルを同期できますが、削除や変更はできません

A CasaOS Syncthing user could sync data into Documents, Downloads, Gallery and Media, but remote edits and deletions repeatedly pushed the folders out of sync.

重要な結論: Syncthingがフォルダーを読み取れるものの、削除や変更を反映できない場合は、Syncthingコンテナ内から書き込み権限をテストしてください。読み取り可能なバインドマウントが自動的に書き込み可能であるとは限りません。

まずフォルダーモードを確認する

双方向フォルダーでは、変更の受信に適したSyncthingのフォルダーモードを使用する必要があります。「送信のみ」は「送受信」のようには動作しません。

コンテナが書き込めることを確認する

docker exec -it syncthing sh
touch /DATA/Gallery/.write-test
rm /DATA/Gallery/.write-test

いずれかのコマンドが失敗する場合は、Syncthingの設定を変更する前にストレージの権限を修正します。

隣接するフォルダーは動作する一方で、1つのフォルダーが失敗していることを示すCasaOS Syncthingフォルダーエラーのスクリーンショット
1つのフォルダーだけが失敗し、隣接するフォルダーが動作する場合は、正確なパスと所有権を比較します。
Syncthingのフォルダーマッピングを比較するために使用するCasaOSストレージパスのスクリーンショット
マウントパスを比較する際は、正常に動作するフォルダーを基準にします。

PUIDとPGIDを一致させる

公式のCasaOS Syncthing composeはPUID/PGIDを渡し、/DATAをコンテナにバインドします。LinuxServerは、ホストボリュームのPUID/PGIDの所有権について説明しています。

docker exec syncthing id
stat -c '%u:%g %a %n' /DATA/Gallery

数値IDを比較します。コンテナが別のUID/GIDで実行されている場合、所有者をユーザー名に変更するだけでは不十分です。

削除には親ディレクトリの権限が必要

ファイルの削除または名前変更には、親ディレクトリに対する書き込み権限と実行権限が必要です。これにより、読み取りと同期は一部機能しているように見える一方で、リモートからの削除に失敗する理由が説明できます。

Syncthingのトラブルシューティングで確認するCasaOSアプリケーションのログ保存場所
ログとファイルシステムへの直接テストを組み合わせて使用します。
CasaOSホスト上でリモートデバイスがファイルを変更した後のSyncthingの同期ずれ状態
リモートでの編集後に同期ずれが発生する場合は、受信側の書き込み経路に問題があります。

正常に動作するフォルダーを比較する

比較 docker inspect syncthing マウントを確認し、 stat モード/UID/GID、ACLを確認するのではなく、 getfacl、ファイルシステムの読み取り専用状態、無視パターンを確認します。いきなり chmod 777.

CasaOS Syncthingのセットアップは、適切な基準構成になります。ZimaOSアプリプラットフォームでは代替手段を比較でき、ZimaCube 2は複数ドライブのストレージ用途に適しています。

Unixのモードビットが正しく見える場合はACLを確認する

従来の chmod 出力が問題ないように見えても、ACLによって実効権限が変更されている場合があります。正常なディレクトリと失敗するディレクトリを比較してください。

getfacl /DATA/Gallery
getfacl /DATA/Documents

一方のパスに追加のACLエントリがある場合は、すべての場所で再帰的に権限を開放するのではなく、意図を確認したうえで修正してください。

ファイルシステムが読み取り専用かどうかを確認する

findmnt -no TARGET,SOURCE,FSTYPE,OPTIONS /DATA/Gallery

ディスクがマウントされています ro、ファイルシステムエラーや外付けドライブの劣化によっても、「読み取れるが変更できない」という同じ症状が発生することがあります。マウント自体が読み取り専用の場合、Syncthingの設定を変更しても解決できません。

「同期外れ」の背後にあるSyncthingエラーを読む

SyncthingのWeb UIを開いてフォルダーエラーを確認し、コンテナログと比較してください。

docker logs --tail 200 syncthing

確認する項目 権限が拒否されました, 操作が許可されていません、パスが見つからないエラー、または名前変更・削除操作の失敗が発生します。「同期外れ」は状態を示すものであり、ログには通常、より低レベルのファイルシステムの原因が記録されています。

「権限を無視」を万能な解決策として使わないでください

権限メタデータを無視すると、2つのファイルシステムでUnixのモードビットの表現が異なる場合に役立ちますが、プロセスに書き込み権限を与えるものではありません。コンテナがテストファイルを削除できない場合、Syncthingの権限メタデータの動作を変更しても、ホストのディレクトリは書き込み可能になりません。

制御された書き込みテストを行う

小さな使い捨てディレクトリを作成してSyncthingに割り当て、両方のデバイスから作成 → 編集 → 名前変更 → 削除を確認します。動作したら、同じ所有権とマウント方法を実際のフォルダーに適用してください。これにより、複雑な既存のディレクトリツリーから同期動作を切り分けられます。

よくある質問

Syncthingでは追加できるのに削除できないのはなぜですか?

親ディレクトリの権限によって、読み取りは許可されても、名前変更や削除操作がブロックされることがあります。

chmod 777を使うべきですか?

いいえ。まず失敗する経路とコンテナの実行ユーザーを確認してください。