rsync が変更のないファイルのみをハードリンクするのはなぜですか?

rsync が変更のないファイルのみをハードリンクするのはなぜですか?

私はrsync増分バックアップに使用しており、--link-dest変更されていないファイルがそこにハードリンクされるように、以前のバックアップを指すオプションを使用しています。

これは機能していますが、すべてのファイルに当てはまるわけではありません。たとえば、バックアップに 3 年以上変更されていないファイルを含むディレクトリがあります。しかし、奇妙な理由で、ハード リンクになっているのはそのうちの一部だけです。

不便なことに、大きなファイルはすべてコピーです (つまり、 でチェックされたファイルへのリンクは 1 つだけですls -l)。しかし、これは一部の小さなファイルにも当てはまり、実際、ハードリンクされたファイルの中には、コピーされたファイルよりも大きいものもあります。

どれがコピーでどれがハードリンクかを予測できるようなパターンはないようです。ファイル名の長さやファイルサイズは関係ないようですし、変更日も関係ありません。コピーされたリストとハードリンクされたリストの両方にこれらすべてが混在しています。とはいえ、ファイルは思われる複数のバックアップ間で一貫性を保つため、1 つのバックアップで発生した事象は次のバックアップでも発生したように見えます。

ファイルの何らかの属性 (技術的なものなど)、何らかの機能により、rsyncハードリンクではなくコピーが必要になることはありますか?

編集1:ls -l「属性」について言及すると、リストに載っていないが影響を与える可能性のある属性があるのではないかと考えましたが、lsattrソース ディレクトリで実行すると、すべてのファイルに同一の属性があることがわかります。

編集2:以前 (現在は削除済み)、権限はすべて同じであると述べましたが、これは誤りです。宛先 (バックアップ) ディレクトリの権限は同じでした。--perms(権限を保持するため) を使用しているため、権限が保持されない理由がわかりません。以前は非ルート ユーザーとして実行していましたが、違いが出る可能性があるので今はルートとして試していますが、権限はまだ保持されていません。そのため、一部のファイルが変更されたように見える可能性があります。ファイルは変更されていませんが、権限は明らかに変更されています (少なくとも、権限が間違っていた以前のバックアップと比較した場合)。

編集3:今では、これは CIFS サーバーに関係しているのではないかと考えています。mount.cifsマニュアル ページにfile_mode、オプションに関する記述があります。「サーバーが CIFS Unix 拡張機能をサポートしていない場合、このオプションはデフォルトのファイル モードを上書きします。」mountマウントを一覧表示するために引数なしでコマンドを実行すると、一覧表示されるオプションにはfile_mode=0755と が含まれておりdir_mode=0755、これは私が見た内容と一致します。chmodマウントにファイルを配置できないため、元々0755権限がなかったファイルは変更されたとみなされ、再度コピーされます。そして、マウントが原因で、バックアップで再び誤った権限が付与されます。

答え1

これは解決策というよりは回避策ですが、私は現在、--perms/-pやそれを暗示するものの使用を避けています。明らかに、権限はコピーされませんが、少なくとも権限が異なるという理由だけで、変更されていないファイルが変更されているとは考えられません。

関連情報