
最近、ボリュームの一部のファイルが奇妙に切り取られていることがわかりました。より正確には、長さ0のファイルに置き換えられました。
幸いなことに、これらのファイルはさまざまな場所でハードリンクされており、リンクの約半分だけが見かけ上同じ属性の長さゼロのファイルで実際に上書きされます。
ところで、バックアップを見てみると、以前のバックアップの前に問題が発生したことがわかりました。そのボリュームの場合、ファイルを削除してはいけません。ほとんどの場合、単に追加されるため、単純なミラーバックアップで十分です。しかし、ファイルが実際に削除されたわけではないので、単にrsync
削除しないように言うことはできません。
rsync
ローカル側では長さが0ですが、リモート側では長さが0以外のファイルを同期しないように指示する方法はありますか?
もちろん、長さゼロのファイルを見つけて除外するいくつかのコードを書くこともできますが、これは時間がかかります(現在のファイルシステムを2回完全に検索している間)、合法的に再同期する必要があるファイルを除外することもできます。予想される長さがゼロのファイルがある場合)。
答え1
rsync
オプションがあります--min-size
:
--min-size=SIZE don't transfer any file smaller than SIZE
したがって、--min-size=1
空のファイルを無視するだけで十分です。
転送する必要があるファイルがない場合(ターゲット側に0バイトのサイズのファイルがない場合)、この方法が役立ちます。
AFAIKには、ソースとターゲットのサイズに応じて特別なアクションをとるようにrsyncに指示する方法はありません。
答え2
--min-size=1
注:長さ0のファイルでファイルを上書きしたくない場合は、「サイズが0未満のファイルは許可されていません」を設定する必要があります。マニュアルページが間違っており、「SIZE以下のファイルを転送しないでください」と明記されていない限り