rsyncを遅くするにはどうすればよいですか?


35

障害のあるUSBサムドライブの内容をコピーしようとしています。データの読み取りが速すぎると、ドライブのコントローラーチップが過熱し、ドライブがシステムから消えます。その場合は、ドライブを取り外し、冷却するまで1分ほど待ってから、再度接続して、コピーを再開する必要があります。

ドライブの内容の古いバックアップがあるので、残りのデータを取得する明白な方法はrsync、バックアップを最新にするために使用することですが、これは「読み取りが速すぎて、ドライブが消えます」 、最初からやり直す必要があります」という問題。rsync1分あたりXメガバイトのデータのみを読み取るように指示する方法はありますか?あるいは、ドライブが消えたときに操作を中断し、再び接続されたときに再開するように指示することは可能ですか?


24
ドライブを冷却することを考えましたか?
AEonAX 16

3
ドライブはどれくらいいっぱいですか?ドライブの空き容量が50%を超える場合は、障害のあるドライブを最初にミラーリングしてから、ミラー上のより複雑なもののみを処理することをお勧めします。
カスペルド16

1
@AEonAX:すぐに使える(単純な)アイデアですが、これはお勧めしません。デバイスに追加の熱ストレスをかけているため、完全に失敗する可能性があります。
Piskvor

回答:


46

DopeGhotiの経験とは異なり--bwlimit、rsync(v3.1.2)を使用すると、フラグはデータ転送を制限します。

テスト:

$ dd if=/dev/urandom bs=1M count=10 of=data
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0871822 s, 120 MB/s

$ du -h data
10M     data

$ time rsync -q data fast
0.065 seconds

$ time rsync -q --bwlimit=1M data slow
10.004 seconds

(注:私のtime出力はほとんどのtime呼び出し(zsh機能)とは異なって見えますが、それらの時間は私によって編集されていません)

それ以外の場合は、おそらくダブル-execインのラインに沿った何かfind。親フォルダを作成およびコピーする必要があると思いますがrsync -R作成しない場合は作成するcp --parents必要があります。

$ find /failing/usb -exec rsync -R {} /somewhere/safe/ \; -exec sleep 1 \;

ddrescueもチェックしてください。探しているものが正しいかもしれません:)


1
うん。DGは「帯域幅」という言葉で混乱している場合がありますが、これはネットワークだけでなく、あらゆるデータ伝送チャネルに適用されます。マニュアルページには、具体的に次--bwlimit=KBPS limit I/O bandwidth; KBytes per secondのように記載されています。何気なくコードを参照すると、宛先に関係なく、読み取り速度が制限されます。さらに、逸話:ローカルからローカルへの書き込み速度を制限するために、このオプションを何年も使用しています。linux.die.net/man/1/rsync
Piskvor 16

1
さて、見直すと、実際に書き込まれたバイト数をカウントし、計算された時間だけスリープします。io.c、行832-3:if (bwlimit_writemax) sleep_for_bwlimit(n);いずれにしても、これはおそらく意図したとおりに機能し、短いバーストで読み取り、その間でスリープします。低い値から始めて慎重に増やしていくか、遅い転送を一晩実行することをお勧めします。
Piskvor

25

少しMacGyverソリューションですが、私は過去に大成功を収めまし
た。古いUSB 1ハブをスティックとコンピューターの間に配置します。地獄では決してそのように速くコピーするつもりはありません:-)

その他の可能性:別のスティックを使用できる場合は、同じルートハブに接続された別のUSBポートに置いてください(問題のあるスティックと帯域幅を共有します)。
次に、両方のスティックが帯域幅を奪い合うように、追加のスティックに対して大きな書き込み操作を開始します。さらに制御するには、ioniceを使用して、問題スティックの優先度をさらに下げることができます。


1
おそらくUSBカーネルモジュールにオプションを与えることにより、ソフトウェアソリューションを介してポートをUSB 1.1として機能させる方法があるはずです。
アンドレボリー

AndréBorie@: -ありbbs.archlinux.org/viewtopic.php?pid=1342593#p1342593が、SWに有効スロットルがあるので、これは、ブルートフォースソリューションのビットです。
Piskvor

@Piskvorは、USB 1ハブを使用するのと同じように、デバイスとの低い転送速度をネゴシエートします。私はそれについて何も「強引」に見えません。
アンドレボリー

さて、単語の選択が悪いと認めます。しかし、IMHOの再構成デバイスには特別な特権(rootまたは少なくとも%adm)が必要ですが、プロセスごとの読み取り速度の制御はより簡単です。( -スペックに違反してPlusは、すべての作業外のUSB 2.0に失敗するデバイスがある)
Piskvor

13

あなたは使用することができrsync --bwlimit=RATE、実際に具体的にあなたが探しているものを正確であるデータの読み出し速度を、絞ることによって動作しているようですが、以下のコメントをもとに、ファイルの転送速度を絞ります。



3
ioniceは優先度を与えます。2つのものが読み込まれている場合、デフォルトでは50/50になります。ioniceはそれを調整できますが、読み取り値が1つしかない場合は、100%になります。
coteyr 16

@coteyrその通りです。だからこそ、同じUSBルートハブで2番目の帯域幅を消費するプロセスと組み合わせる必要があります。私の答えをご覧ください。
トニー

2
幸いなことに、あなたの答えは間違っています。I --bwlimit/ O制限を設定します。必ずしもネットワーク制限ではありません。さまざまなシナリオで何度もテストされています。このオプションは、宛先に関係なく、読み取り時に rsync自体を制限します。(遅いローカルデバイスへの高速書き込みがそれらを失敗作っ同様のシナリオで、このうちを発見)
Piskvor

1
@piskvor-ありがとう!それがこの場所の好きなところです。私は新しいことを学び続けています(:
DopeGhoti

8

に加えて、rsync --bwlimit=100100KiB / sのより多くのソリューション。

  1. フルディスクコピーのオプションddrescueとともに使用し--max-read-rateます。これにより、エラー後に中断したところからディスク全体のコピーを再開することもできます。

    ddrescue --max-read-rate=100K /failing/usb output.img output.logfile
    

ddrescueまた、データ復旧に関連する他の多くのオプションがあります。こちらのマニュアルを参照してください

  1. オプション、またはツールを使用してpv(「パイプビューアー」)パイプを制限します。進行状況も表示できます。パイプを使用するツールまたはパイプを使用できるツールでこの機能を使用できます。--rate-limitthrottlepv

    tar -cf - /failing/usb | throttle -K 100 | tar -C /your/outputfolder/ -xvf -
    

    または

    tar -cf - /failing/usb | pv --rate-limit 100k | tar -C /your/outputfolder/  -xvf -
    

    その他の設定と例については、pvのマンページをご覧ください。についてthrottle-w、速度の計算方法を決定するオプションも試してください。スロットルのマンページを参照してください。


今では便利なツールですが、それを知りませんでした、ありがとう!pvマンページには、さまざまな使用法のさらに多くの例があります。
Piskvor

私はのために達したpv私のテープjockingの日に戻って発見以来、何度も繰り返し、これまで。tarがテープドライブに書き込んだときに戻ります。:)
ダンガースウェイト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.