表示上のサイズと日付が一致していても、実際の更新時刻、比較ルール、または転送オプションが異なると、Rsyncはファイルを再コピーすることがあります。
ファイルブラウザーではサブ秒単位のタイムスタンプが隠され、丸められた現地の日付だけが表示されることがよくあります。一方、Rsyncは各エンドポイントで公開されているメタデータを比較し、時刻の一致を無視する、チェックサムを比較する、またはメタデータを更新するよう指示することもできます。そのため、人間が読めるサイズと日付が同じでも、ナノ秒単位の値が異なる、片方のファイルシステムが時刻を丸める、SMBクライアントがタイムスタンプを書き換える、またはコマンドが通常のクイックチェックを明示的に無効にしている、といった理由でファイルが選択される場合があります。
Rsyncがファイルをデータ転送対象として選択していることを確認する
ドライランを変更内容の項目別表示付きで実行し、正確なコマンド、送信元パス、送信先パス、Rsyncのバージョン、代表的なファイル名を1つ記録します。
公式のRsyncマニュアルでは、デフォルトのクイックチェックがファイルサイズと更新時刻を比較し、項目別出力によって更新の原因となった属性を特定できると説明されています。
項目別コードにパーミッション、所有者、グループ、ACL、または拡張属性の変更だけが示されている場合、ファイルは再確認されても、全データが再送信されているとは限りません。
表示された日付ではなく、更新時刻の実値を比較する
送信元と送信先の更新時刻をナノ秒精度で読み取り、送信側と受信側を実行しているシステムから数値のエポック値を比較します。
Linuxのstat構造体はナノ秒単位のタイムスタンプに対応しています。そのため、同じ秒として表示される2つのファイルでも、実際の値が異なる場合があります。
分や秒までしか表示しないブラウザーでは、基盤となる更新時刻が一致しているとは証明できません。ファイルを再度操作する前に、実値を記録してください。
タイムスタンプの精度と変更許容幅を確認する
FAT、exFAT、NTFS、SMB、NFS、アーカイブの展開先、リムーバブルなステージングボリュームなど、経路上にあるすべてのファイルシステムを特定します。
DebianのRsyncマニュアルでは、modify-windowの動作について、同一のタイムスタンプ精度を保存できないファイルシステムに対する許容値を含めて説明しています。
ゼロ以外の許容幅は、差異を測定した後にのみ使用してください。広すぎる許容幅は、サイズが同じでも実際に変更されたファイルを見逃すおそれがあります。
通常のクイックチェックを上書きするフラグを監査する
スケジュールされたコマンド全体と、オプションを追加するラッパースクリプト、NASインターフェース、環境変数、インクルードファイル、プリセットを確認します。
UbuntuのRsyncリファレンスでは、ignore-timesは更新を強制すること、チェックサムモードでは時刻のテストが置き換えられること、size-onlyでは更新時刻が無視されることが説明されています。
原因だと確認できたフラグだけを削除します。チェックサムモードでは、ネットワーク経由で転送されるデータが少なくても、大量の読み取りが発生する場合があります。
SMBまたはWindowsが送信先の時刻を書き換えていないか確認する
転送直後、SMBセッションを閉じた後、別のクライアントから再接続した後に、送信先のハッシュ値とタイムスタンプを取得します。
Microsoftの説明によると、アプリケーションはファイルのタイムスタンプを設定および取得できます。また、ファイルシステムやアプリケーションによって、各フィールドが異なるタイミングで更新されることがあります。
インデクサー、メディアアプリ、クラウドクライアント、またはSMBの処理がファイルに触れた後にだけ送信先の時刻が変わる場合は、Rsyncではなく、その書き込み元を修正してください。
更新時刻とその他のメタデータを分けて考える
更新時刻、ステータス変更時刻、パーミッション、所有権、ACL、拡張属性、ハードリンク、シンボリックリンクを比較します。
NetBSDのstatユーティリティはファイルの実際のステータスフィールドを表示します。これにより、内容の更新時刻とその他のメタデータの変更を区別できます。
アーカイブ、ACL、xattr、所有者、グループに関するオプションによって、メタデータ処理が実行されることがあります。表示されたすべてのパスをデータ全体の転送とみなすのではなく、項目別コードを確認してください。
1ファイルでテストし、確認できた最小限の差異を修正する
閉じた状態のテストファイルを1つコピーし、意図したメタデータを保持したうえで、同じコマンドを再実行します。その後、項目別出力、転送バイト数、実際のタイムスタンプを比較します。
ZimaSpaceの予想外に大きな増分バックアップに関する記事では、バックアップチェーンに関するより広い原因を扱っています。この記事では、Rsyncのファイル選択ルールに焦点を当てています。
変更のない状態で再実行した際にテストファイルがスキップされるか、意図して設定したメタデータ更新だけが実行されれば、問題は解決しています。
よくある質問
ファイルブラウザーでは日付が同じに見えるのはなぜですか?
ブラウザーが秒または分単位に丸め、現地時刻で表示している一方で、Rsyncはより精度の高い更新タイムスタンプを受け取っている可能性があります。
チェックサムモードで不要なコピーを止められますか?
時刻が異なっていても内容が一致していれば、転送を回避できる場合があります。ただし、両側でサイズが同じファイルを読み取り、ハッシュ化する必要があります。
タイムゾーンが原因でRsyncの転送が繰り返されることはありますか?
タイムゾーンによる表示だけで数値のタイムスタンプが変わることはありません。ただし、タイムスタンプを変換または丸めるアプリケーションやファイルシステムが原因になる可能性はあります。
サポートとヒント
もっと読む

Plexは別のDockerコンテナとGPUを共有できますか?
Plexと別のコンテナは同じGPUにアクセスできることが多いですが、ドライバーのサポート、デバイスマッピング、ビデオエンジンの負荷、メモリ、復旧動作をテストする必要があります。

Plexのエラーがクライアント側とサーバー側のどちらに起因するかを見分ける方法
別のクライアントで同じ項目を再現し、セッションパスを比較してから、スコープによって障害の実際の所在が特定された後にのみサーバーの証拠を収集してください。

Plexのキャッシュとトランスコード用一時ストレージを設定する方法
永続的な Plex の状態を保護しつつ、トランスコードの一時ファイルを適切なローカルストレージに配置し、クリーンアップ、空き容量、再起動時の動作を確認します。

