元の質問:
私が持っているなら同じハードドライブ2台次の特徴があります。
- SATA 6.0Gb/秒
- 5400rpm
- 3TB
完全なddコピーを完了するにはどのくらいかかりますか?
これまで5時間目ずっと回しているのに…
私はLinux Ubuntu 12.04 64ビットを使用しており、使用するコマンドは次のとおりです。
dd if=/dev/sdb of=/dev/sdc
アップデート:1
今進行状況を見ると430GBコピーするのに6時間以上かかりましたね。ハード容量は3TB..
より速い方法はありませんか?
アップデート:2
前よりずっと良くなったようです(ありがとうございます。グロックスタッド~のため提案):
sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128K
3TBのETAは、以前の430GBの6時間に比べて約9時間なので、前のコマンドを使用すると約36時間程度になると推測されます。
答え1
dd
過去は、人々がテープで作業しているとき(ブロックサイズが重要な場合)、より簡単なツール(cat
バイナリ安全ではないかもしれない)を使用することができたときに便利でした。
今日はdd if=/dev/sdb of=/dev/sdc
複雑でエラーが発生しやすい問題です。遅い書き込み方法cat /dev/sdb >/dev/sdc
。しかし、dd
比較的まれな操作にはまだ便利です。、それはあなたが信じるチュートリアルの数ほど有用ではありません。そこには魔法はありませんdd
。魔法がその中にあります/dev/sdb
。
新しいコマンドsudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128K
も不必要に遅く複雑です。データは一度に128kBずつ読み出されます。これはdd
デフォルトの512Bよりも優れていますが、大きい値ほど良くはありません。その後、記録される前に2つのパイプを通過します。
より簡単で迅速なcat
コマンドを使用してください。 (一部では基準私は数年前にLinuxでこれを作成し、cat
他のディスク間でコピーするよりも速く、どのブロックサイズよりも高速です。同じディスクにコピーする場合、ブロックサイズが大きいほど少し速くなります。 )cp
cp
dd
dd
cat /dev/sdb >/dev/sdc
でこのコマンドを実行するには、sudo
rootにリダイレクトする必要があります。
sudo sh -c 'cat /dev/sdb >/dev/sdc'
進行状況レポートが必要な場合はLinuxを使用しているため、プロセスのPID cat
(例:1234)を確認し、対応する入力(または出力)ファイル記述子の場所を確認して簡単に進行状況レポートを取得できます。
# cat /proc/1234/fdinfo/0
pos: 64155648
flags: 0100000
進行状況を報告したいがUNIXバリアントがファイル記述子の場所を取得する簡単な方法を提供していない場合は、インストールして使用できます。pv
変えるcat
。
答え2
dd
デフォルトでは、非常に小さいブロックサイズ(512バイト)が使用されます。これによりかなりのオーバーヘッドが発生します(512バイトごとにシステムコールを1回)read()
。write()
より大きなブロックサイズを使用すると、はるかに高速です。最適な速度は約ですbs=64k
。ほとんどの人はより大きなものを使用してbs=1M
人が読めるようにします(dd
コピーすると言うと計算を実行しないことが1234 blocks
わかります)。1234 MiB
より大きなチャンクを使用すると、速度が向上せず、メモリ消費のみが増加します。
したがって、コマンドは次のようにする必要があります。
dd bs=1M if=/dev/sdb of=/dev/sdc
実行が既に遅い場合は、実行を中断してdd
より高速なインスタンスでdd
再起動できます。このため、コピーがどれだけ進行しているかを知ることが重要です。通常、キャンセル時に進行状況を印刷したり、実行中にシグナルを送信して進行状況を印刷したりdd
できます。USR1
kill -USR1 $(pidof dd)
たとえば、レプリケーションが超過した場合は、次のコマンドを使用して場所を復元1234MiB
できます。1234MiB
dd bs=1M seek=1234 skip=1234 if=/dev/sdb of=/dev/sdc
それより少なくコピーすると、1234MiB
コピーが不完全になります。コピー量を超えると、すでに1234MiB
コピーされている部分の一部が再コピーされるため、通常は何の害もありません。したがって、疑わしい場合は、コピーしたと思われる値より少し小さい値を選択する必要があります。
答え3
進行中のddプロセスに関する統計を取得します。
kill
適切な信号とともにコマンドを使用して、dd
統計を標準エラーとして出力できます。
GNU ddのマニュアルページから:
Sending a USR1 signal to a running 'dd' process makes it print I/O statistics to standard error and then resume copying.
$ dd if=/dev/zero of=/dev/null& pid=$!
$ kill -USR1 $pid
18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s
dd の実装が異なる場合があるため、まずマニュアルページで正しい信号を確認してください。(BSD ddはSIGINFOを使用します)。
プロセスを高速化
- 各 HDD を独自の SATA ポートに接続すると、あるデバイスからデータを読み込み、同時に別のデバイスに書き込むことができます。
- パラメータを使用して適切なブロックサイズを使用してください
bs=
。見るスーパーユーザーのこのスレッドそして、自分でいくつかの価値を試してみてください。 - 読み取りと書き込みに別々の呼び出しを使用し、
dd
パイプ(dd if=/dev/sda bs=1M | dd of=/dev/sdb bs=1M
)を使用して接続します。
これでブロックサイズを指定する場合は、各呼び出しで同じブロックサイズを使用する必要があります。 - パラメータなどの他の最適化を試すことができます
direct
。 - コピーが破損する可能性があるため、ハードドライブがマウントされていないことを確認してください。
答え4
という商用ソフトウェアがあります。HDクローン。フリーウェアおよび商用ソフトウェアとしてライセンスされます。どちらのバージョンでも、ブータブルペンドライブ、DVD、コピーディスクを作成できます。ソースとターゲットのハードドライブを接続し、GUIベースのガイドラインに従ってください。
無料版の転送速度は約80MB /秒ですが、有料版ははるかに高速です。 NTFSおよびFATファイルシステムでは、有料バージョンを設定してハードドライブの占有ビットのみを複製できるため、各複製速度が大幅に向上します。