
次のコマンドを使用して、大量の大きなビデオ ファイルを外付けドライブにコピーしています。
rsync -Ph --inplace /Volumes/Production/Prefix* Prefix
停電があり、コピーが突然中断されました。rsync では再起動するだけで問題ありませんが、元の状態に戻るまでにかなり時間がかかります。すべてのファイルを調べ、ファイル全体を読み取るようです。コピーを再開するまでの速度は、通常の 3 ~ 5 倍ほど速いと言われています。
この間、具体的に何が行われていますか? ファイル全体を読み取り、ソースと比較していますか? それとも、何か他の高度な処理を行っていますか? rsync で完了したファイルをより速くスキップする方法はありますか? たとえば、ファイル サイズが異なるファイルのみをチェックするように指示するなど?
答え1
問題の原因は-t
、(または-a
、埋め込み-t
やその他のオプション)を追加していないことです。前のrsync を実行します。
-t
コピー時にファイルの変更時刻を保存するために必要です。これにより、コピーされると、コピー先のファイルの最終変更時刻がソース ファイルの最終変更時刻と同じになります。これがないと、rsync の以降の実行では、コピー先のファイルがソースと一致するとは見なされず、常に更新されます。
Rsyncの比較動作
デフォルトでは、rsync は、最終変更時刻とファイル サイズがソース ファイルと一致する場合、既存の宛先ファイルをスキップします。
これから回復する
その間に他のソフトウェアが宛先ファイルを変更していないことが確実で、再開したいだけの--size-only
場合は、 このオプションを使用できます。これにより比較動作が変更され、rsync は、ファイル サイズが一致する既存の宛先ファイルを、最終変更時間をチェックせずにスキップするようになります。
将来的に問題となるのは、ディレクトリを再度同期したい場合、ファイルの変更時刻が一致している必要があるか、変更時刻を無視して、ファイルが他のソフトウェアによって変更されていないこと (サイズが変更されない方法で) を信頼する必要があることです。
オプションの説明
デフォルトの rsync 比較: ファイル サイズと最終変更時刻の両方が一致する場合はスキップします。
--size-only
: ファイルサイズが一致する場合はスキップします。--ignore-times
: スキップしない。ファイル時間およびサイズ無視されます。--checksum
: ファイル サイズが一致する場合は、両方のファイルのチェックサムを計算し、一致する場合はスキップします。
オプション--size-only
を使用するとファイルがスキップされる可能性が高くなりますが、 オプション--ignore-times
と--checksum
オプションを使用するとファイルがスキップされる可能性が低くなります。
答え2
rsync
オプションがあります:--size-only
これはあなたが望むことを行います。
答え3
rsync は、デフォルトでファイルの変更時間とサイズをチェックします。--checksum を追加すると、ファイル全体と比較します (つまり、変更時間とサイズの一致に関係なく)。
答え4
アーカイブに -a を実行しなかったため、時間がコピーされず、タイムスタンプの不一致により異なるファイルであると認識され、ファイル全体のチェックサムが計算されます。
タイムスタンプが一致する可能性がある/一致する必要があるコピーを作成する場合は、常に を含めます-a
。
今のところ(かなり前の話ですが)追加してみるといいでしょう--ignore-times