意図的にddrescueの速度を下げる


1

(初回ポスター)ddrescueがデータをコピーする速度を遅くしたい。LinuxラップトップからWindowsデスクトップまでハードドライブをイメージングしています。ddrescueは、私のコンピューターが提供するものをダウンロードするよりも速く実行できるため、コンピューターのインターネットが詰まってしまいます。私は時折このようなものをイメージし、WindowsデスクトップまたはLinuxラップトップのいずれかから、ちょっとした問題を解決する方法があるかどうかを知りたいです。(Windows 10、Parted Magic)

ご協力いただきありがとうございます?


おそらくこれに答えて、プロセスごとのI / Oを最大限に抑える方法は?使用できるものです。
MolbOrg

回答:


0

の簡単な解決策はありませんddrescue
編集:私は今ではそれほど単純ではない解決策を持っています。

対象ファイルの準備

ソースハードドライブのサイズを512バイト単位で知る必要があります。変数に保存します。

SIZE=$(sudo blockdev --getsz /dev/sdX)

ターゲットファイルは、事前に適切なサイズにする必要があります。

fallocate -l $((512*$SIZE)) /mnt/samba/share/target.dd

遅延デバイスの準備

まず、ループデバイスが必要です。

sudo losetup -f /mnt/samba/share/target.dd
sudo losetup -a

2番目のコマンドは、どのループデバイスが関連付けられているかを示しますtarget.dd。ここではそうです/dev/loop0

次に、デバイスマッパーでデバイスを作成します。

echo "0 $SIZE delay /dev/loop0 0 0 /dev/loop0 0 500" | sudo dmsetup create delayed_target

500この例の数値は、すべての書き込み操作/dev/mapper/delayed_targetが500ミリ秒遅れることを示しています。(詳細についてはman dmsetup、およびこのドキュメントを参照してください。)

実際の読書

sudo ddrescue --force -D -c 2048 /dev/sdX /dev/mapper/delayed_target logfile.log

スイッチ-c 2048ddrescue、一度に2048 * 512バイト、つまり1メガバイトを処理するように指示します。-Dプログラムがキャッシュなどを省略しているため、多くの書き込み操作が1つにまとめられます。では-D、すべてのメガバイトフォームは500ミリ秒の遅延を打つ書き込み操作を分離します。

微調整

1つの微調整は-c 2048ddrescue呼び出しを変更することです。もう1つ–遅延を変更するdmsetupクリーニングセクションを参照)。

で停止ddrescueCtrl+C、必要に応じて遅延を微調整ddrescueし、同じログファイルと別の-cパラメータで再実行することができます。それは継続します。ニーズに合った値を見つけるために実験してください。

クリーニング

sudo dmsetup remove delayed_target

(遅延を調整するには、dmsetup create今に戻ります。)

sudo losetup -d /dev/loop0

注意

ターゲットファイルへの書き込みを遅らせる代わりに、ソースデバイスからの読み取りを遅らせることができます。ループデバイスは必要ないので、より良い方法のようです。ただし、私のテストでは、新しく作成されたマッパーデバイスからの即時読み取りがあることが示されました。これらの読み取りは何度も遅延にヒットし、dmsetupそれ自体をブロックします。私の解釈はすべて間違っているかもしれませんが、それでもかなりの遅れがありdmsetup createます。調整(すべての手順ではないにしても)を事実上不可能にします。


私の元の答え:

私の経験からは、読み取りエラーが発生した場合ddrescueよりもはるかに優れていddます。あなたのディスクは、一般的に良い形であり、あなたはまれであることを読み取りエラーを期待する場合は、使用することddpv

例:

dd if=/dev/sdb conv=sync,noerror bs=32M 2>dd.log | pv -L 4M > /mnt/samba/desktop/my-image.dd

noerrorパラメーターddは、読み取りエラーが発生した場合、それを続行します。sync原因ddその場合の出力ゼロにするので、良好なデータは、その後、適切な画像ファイル内のオフセットで配置されています。私bsはhddのパフォーマンスのために大規模なものを好みます。このように大きなbs1つの読み取りエラーがあると、画像に32MiBの誤ったゼロが発生する可能性があることに注意してください。

  • 手動電卓とと遊ぶddbsskipseekそしてconv=notrunc何をするために、オプションddrescue(これらの数字は、ディスクに共通のセクタサイズです)読んで、うまくいけば512Bまたは読み取りエラーあたり4096Bに誤ったゼロを減らし、できるだけ多くを保存します。自動ありません。
  • または、ポケット電卓で手動で再生し、のログファイルを作成してddrescueから、実行ddrescueしてソースの問題のあるフラグメントのみを再読み取りします。info ddrescueログファイル構造を参照してください。

どちらの場合でも、保存されたstderrdd、問題のあるセクター、つまり2>dd.logリダイレクトを見つけるのに役立ちます。

良いことは、pv(実際にPIDを置き換え、その場で制限速度を変更する能力であるPID元のpvと一緒に使用しますdd):

pv -L 6M -R PID

これにより、最初からやり直すことなく制限を調整できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.