クライアントからサーバーにフォルダを同期するスクリプトを実行しています。
スクリプトに適用される構文は次のとおりです。
rsync -avzP --append-verify --delete -e "SSH parameters" source_dir user@host:destination
ただし、ネットワークの問題によってrsyncがクラッシュした場合、rsyncを再起動するとソースファイルが破損します。
例: 転送前のソースファイルです。
root@localhost:~# ls -Alth
total 1.1G
-rw-r--r-- 1 root root 1.0G Nov 12 08:56 testfile1GB
ソースファイルの転送が中断された後に再起動されます。
root@localhost:~# ls -Alth
total 152M
rw------- 1 root root 152M Nov 15 17:46 testfile1GB
私は現在rsyncバージョン3.1.1プロトコルバージョン31を使用しています。
rsyncのバージョンは更新できません。
提案があれば教えてください。
ベストアンサー1
使用--remove-source-files
しない限り、ソースのどれも変更されませんrsync
(そしてそのような場合でも、ターゲットに正しいコピーがあることが確認された場合にのみソースファイルを削除します)。したがって、ターゲットに行った変更は、他の方法でソースに影響を与える必要があります。
user@host:destination:
誤ってソースファイルを上書きしていないことを確認してください。つまり、ホストがクライアントでないこと、ホストがクライアントと同じファイルシステムを共有していないこと(NFSやSambaを使用するなど)を確認してください。これを次のように確認できます。
例と同じディレクトリにあるローカルシステムでsource_dir
必要に応じて交換してください。
touch source_dir/620014.tmp
ls -ld source_dir/620014.tmp
リモートシステムは適切にsource_dir
交換できますdestination
。 (rsync
実際にコマンドがあるsource_dir/
場合、source_dir
コマンドはsource_dir
そのパスに含まれてはいけません。)
ssh -nq user@host ls -ld destination/source_dir/620014.tmp
同じファイルを取得する場合は、両方のシステムが同じファイルシステムを共有し、ファイルシステムは必要rsync
でも適切でもありません。