web-dev-qa-db-ja.com

時間の経過とともにrsyncの速度が低下するのはなぜですか?

Rsyncを使用して、PCから外付けハードドライブにいくつかのファイルをバックアップしようとしています。コピーは正常に機能しますが、標準のUSB 2.0であっても多くの時間がかかります。 USB 2.0の場合、実際の転送速度は約30MB /秒である必要があります。私のテストでは、速度が2MB /秒に達する場合があります。私が使用しているペンドライブは、FAT32 fsを備えた優れた32GB USB3.0です。

注:各テストの前に、ペンドライブの内容全体を消去し、別のUSBポートでも試しました。

私が使用しているスクリプトの一部は次のとおりです。

mkdir /media/eusbd0
mount -t vfat -o shortname=mixed,iocharset=utf8 /dev/sdb1 /media/eusbd0 

# copy only data between date1 to date2
for dir in $(find /home/records -type d -newermt "2016-08-04" ! -newermt "2016-08-18" 2>&1); do
    if [ "/home/records" != "$dir" ]; then # skip parent dir
        rsync -ravP --inplace --modify-window=2 --log-file=/var/log/download_records "$dir" /media/eusbd0 > /var/log/rsync_report.txt
    fi     
done
#sync   
umount -l /media/eusbd0

Rsyncの出力の一部を次に示します。

    sending incremental file list 2016-08-11/ 2016-08-11/gps_00000

     44,179 100%   10.88MB/s    0:00:00 (xfr#1, to-chk=34/36) 2016-08-11/log

    106,792 100%  101.84MB/s    0:00:00 (xfr#2, to-chk=33/36) 2016-08-11/log_cam0

      5,532 100%    5.28MB/s    0:00:00 (xfr#3, to-chk=32/36) 2016-08-11/rec_2016-08-11.13_57_22.mov

  3,513,782 100%  108.10MB/s    0:00:00 (xfr#4, to-chk=31/36) 2016-08-11/rec_2016-08-11.13_59_00.mov

  4,281,177 100%   63.79MB/s    0:00:00 (xfr#5, to-chk=30/36) 2016-08-11/rec_2016-08-11.14_02_09.mov

  3,359,207 100%   36.82MB/s    0:00:00 (xfr#6, to-chk=29/36) 2016-08-11/rec_2016-08-11.14_04_16.mov

  1,877,863 100%   17.91MB/s    0:00:00 (xfr#7, to-chk=28/36) 2016-08-11/rec_2016-08-11.14_05_42.mov


........

 50,482,791 100%  114.90MB/s    0:00:00 (xfr#20, to-chk=15/36) 2016-08-11/rec_2016-08-11.15_14_53.mov

 19,291,527 100%   34.52MB/s    0:00:00 (xfr#21, to-chk=14/36) 2016-08-11/rec_2016-08-11.15_18_42.mov

 50,700,461 100%   58.68MB/s    0:00:00 (xfr#22, to-chk=13/36) 2016-08-11/rec_2016-08-11.15_20_20.mov

.......

sent 802,030,914 bytes  received 685 bytes  94,356,658.71 bytes/sec

total size is 801,832,718  speedup is 1.00 tail:

/var/log/rsync_report.txt: file truncated sending incremental file

list 2016-08-16/ 2016-08-16/log

     41,966 100%    8.77MB/s    0:00:00 (xfr#1, to-chk=16/18) 2016-08-16/obd_00000

     46,798 100%   44.63MB/s    0:00:00 (xfr#2, to-chk=15/18) 2016-08-16/rec_2016-08-16.16_24_12.mov

 50,649,317 100%   18.64MB/s    0:00:02 (xfr#3, to-chk=14/18) 2016-08-16/rec_2016-08-16.16_25_50.mov

 25,602,242 100%    7.78MB/s    0:00:03 (xfr#4, to-chk=13/18) 2016-08-16/rec_2016-08-16.16_57_42.mov

 50,496,580 100%   15.18MB/s    0:00:03 (xfr#5, to-chk=12/18) 2016-08-16/rec_2016-08-16.16_59_20.mov

 50,617,906 100%   13.29MB/s    0:00:03 (xfr#6, to-chk=11/18) 2016-08-16/rec_2016-08-16.17_00_58.mov

 50,759,115 100%   10.16MB/s    0:00:04 (xfr#7, to-chk=10/18) 2016-08-16/rec_2016-08-16.17_02_36.mov

 50,883,325 100%    6.81MB/s    0:00:07 (xfr#8, to-chk=9/18) 2016-08-16/rec_2016-08-16.17_04_14.mov

 47,995,074 100%    4.41MB/s    0:00:10 (xfr#9, to-chk=8/18) 2016-08-16/rec_2016-08-16.17_09_44.mov

 50,813,636 100%    2.35MB/s    0:00:20 (xfr#10, to-chk=7/18) 2016-08-16/rec_2016-08-16.17_11_22.mov

 50,953,015 100%    2.52MB/s    0:00:19 (xfr#11, to-chk=6/18) 2016-08-16/rec_2016-08-16.17_13_00.mov

 50,221,069 100%    2.93MB/s    0:00:16 (xfr#12, to-chk=5/18) 2016-08-16/rec_2016-08-16.17_14_38.mov

 50,445,757 100%    2.87MB/s    0:00:16 (xfr#13, to-chk=4/18) 2016-08-16/rec_2016-08-16.17_16_16.mov

 51,036,959 100%    3.16MB/s    0:00:15 (xfr#14, to-chk=3/18) 2016-08-16/rec_2016-08-16.17_17_54.mov

 51,056,196 100%    3.19MB/s    0:00:15 (xfr#15, to-chk=2/18) 2016-08-16/rec_2016-08-16.17_19_32.mov

 50,434,922 100%    3.12MB/s    0:00:15 (xfr#16, to-chk=1/18) 2016-08-16/rec_2016-08-16.17_21_10.mov

 19,456,000 100%    2.71MB/s    0:00:06 (xfr#17, to-chk=0/18)

sent 701,682,372 bytes  received 343 bytes  4,512,429.04 bytes/sec

total size is 701,509,877  speedup is 1.00

出力で注目できるのは、最初は速度が静かな高速度であるのに対し、最後には速度が徐々に遅くなることです。なぜこうなった?

私がコピーしているファイルはほとんど同じ(サイズが少し異なる場合があることを除いて)であり、それらの量は100ファイル未満の静かな低さです。他のペンドライブも試しましたが、同じ結果が得られました。

ありがとう!

新しい実験:

同じファイルをコピーするために、rsyncの代わりにcpioを試しました。変更されたスクリプト:

mkdir /media/eusbd0
mount -t vfat -o shortname=mixed,iocharset=utf8 /dev/sdb1 /media/eusbd0 

# copy only data between date1 to date2
for dir in $(find /home/records -type d -newermt "2016-08-04" ! -newermt "2016-08-18" 2>&1); do
    if [ "/home/records" != "$dir" ]; then # skip parent dir
        find "$dir" -print | cpio -pdm /media/eusbd0 > /var/log/rsync_report.txt
    fi     
done
#sync   
umount -l /media/eusbd0

コピーするデータの量は約3GBで、cpioに必要な時間は900秒であり、これは3〜4 MB /秒の平均転送速度に相当します。 rsyncの速度もその値に近いため、問題はハードウェアまたはドライブに関係しているようです。

[〜#〜] update [〜#〜] FAT32でフォーマットされた他の3つのペンドライブを試しましたが、同じ動作が得られました。次に、NTFS fsを試しましたが、> 30MB/sという良好な結果が得られましたが、残念ながら、私の持っている4つのUSBスティックの1つだけでした。外付けHDDとSSDを使った他の実験でも、20MB /秒以上のかなり良い結果がいくつか示されています。

要約すると、私のマザーボード(またはドライバー)はおそらくUSBスティックもFAT32 fsも好きではありません。外付けハードドライブ(電源付きまたは電源なし)は、少なくともNTFSでは期待どおりに機能します。そして、私はこれがなぜ起こるのか手がかりがありません。

4
lcit

rsyncはコピーに最適なソリューションではありません。ファイルを同期するのに最適なソリューションです。ほとんどのデータ書き込み/読み取りの速度は、バッファーに依存します。ファイルを書き込む場合、バッファがいっぱいになり、速度が向上します。バッファがデバイスに書き込まれるとすぐに(バッファフラッシュ)、速度が低下します。デバイスへの書き込み速度は、仕様(USB 2.0または3.0 ...)だけでなく、プロトコル(実装)、ドライバー、ブロックサイズにも依存します。同期プログラムが最初に変更をスキャンするのではなく、ファイル全体をコピーする方が良い場合があります。これによりオーバーヘッドが発生し、ローカルに接続されたデバイスの場合は速度が低下します。ネットワーク経由でこれを行う場合、ストーリーは異なる場合があります。

3
0x0C4