最近外のサーバのffmpegで生成したファイルをrsyncコマンドで家にコピーしています.しかし,先日rsyncでコピーが正常終了したファイルなのに再生が出来ないファイルが現れました.
恐らくffmpegの処理が最後まで終わっていない状態でrsyncを開始して,ffmpegの -movflags faststart
が最後のあたりでrsyncで転送が終わった領域を書き換えたのではないかと思います.
rsyncはチェックサムを確認していたのでは?と確認するとどうも明示的にチェックサムのオプションを付与しないと簡易的なチェックしかしていないようです.
少し確認してみました.
内容が違うけれどファイルサイズとタイムスタンプの同じファイルを用意する.
$ mkdir from to $ echo '0123456789' > from/01 $ echo '0123456780' > to/01 $ touch -d0 from/01 $ touch -d0 to/01 $ ls -l from/01 to/01 -rw-r--r-- 1 matoken matoken 11 11月 2 00:00 from/01 -rw-r--r-- 1 matoken matoken 11 11月 2 00:00 to/01
rsync の --archive
option でコピーすると同じファイルと認識されて同期されない.内容も異なったまま.
$ rsync -av from/ to/ sending incremental file list sent 73 bytes received 12 bytes 170.00 bytes/sec total size is 11 speedup is 0.13 $ diff from/01 to/01 1c1 < 0123456789 --- > 0123456780
rsync の --checksum
optionを付与すると別のファイルと認識されて同期されて内容も同一になる.
$ rsync -av --checksum from/ to/ sending incremental file list 01 sent 147 bytes received 35 bytes 364.00 bytes/sec total size is 11 speedup is 0.06 $ diff from/01 to/01
ということでこんな感じに変更した.
$ rsync -avAHXce ssh --partial --append user@server:from/ to/
#実際はよく回線切れるのでwhile loop に入れてある.
EDIT: 転送済み部分のチェックはこれではNGで --append
(既存のファイルに追記)を削る必要があった.--append-verify
で行けそうな気がしたがこれもNGだった.
環境
$ dpkg-query -W rsync rsync 3.1.2-2.2 $ lsb_release -d Description: Ubuntu 18.10 $ uname -m x86_64