hddからhddへのフルDDコピー


34

元の質問:

次の特性を持つ2つの同一のハードドライブがある場合:

  • SATA 6.0 Gb / s
  • 5400 rpm
  • 3TB

完全なddコピーが完了するまでどのくらいかかりますか?

これまでのところ、5時間稼働し続けています...

Linux Ubuntu 12.04 64ビットを使用していますが、使用しているコマンドは次のとおりです。

dd if=/dev/sdb of=/dev/sdc

更新:1

進捗を確認できるようになり、コピー430GBで6時間以上かかりました。HDDは3TBです...

これを行うより速い方法はありませんか?


更新:2

これは以前よりもはるかに優れているようです(提案についてはGroxxdaに感謝します)。

sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128K

ETAは3TBで約9時間ですが、6時間後に430GBに達する前なので、前のコマンドを使用すると約36時間かかっていたと思います。


プロセスの統計を取得してください。実行中の「dd」プロセスにUSR1シグナルを送信すると、I / O統計が標準エラーに出力され、コピーが再開されます。$ dd if = / dev / zero of = / dev / null&pid = $!$ kill -USR1 $ pid ddの実装ごとに異なるため、実際のシグナルについてはmanページを確認してください。
groxxda 14

@Groxxda、私はそれを行う方法がわかりません。
oshirowanen 14

1
GNUは、用途をddはSIGUSR1、およびBSDは用途ddはSIGINFO
groxxda

また、「同じSATAケーブルに接続」とはどういう意味ですか?ある種のポートマルチプライヤを使用していますか?(転送速度が150MB / sに達した場合、5〜6時間かかりますが、その半分はより現実的だと思います。)
groxxda 14

1
別の(より大きな)ブロックサイズ(のbs=引数)を指定することで、プロセスを高速化できる場合がありますdd。また、各HDDを独自のSATAポートに接続することを検討してください。
groxxda 14

回答:


58

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、ルートとしてリダイレクトを実行する必要があります。

sudo sh -c 'cat /dev/sdb >/dev/sdc'

Linuxを使用しているため、進行状況レポートが必要な場合は、catプロセスのPID (たとえば1234)を記録し、その入力(または出力)ファイル記述子の位置を調べることで簡単に取得できます。

# cat /proc/1234/fdinfo/0
pos:    64155648 
flags:  0100000

進捗レポートが必要で、UNIXバリアントがファイル記述子の位置に到達する簡単な方法を提供しない場合、のpv代わりにインストールして使用できますcat


どのような大きなブロックで奇妙では何が作るので、ボトルネックは、ディスクであることでcatより速いですかddcatキャッシュを使用しているのでしょうか?
エマニュエル14

1
@Gilles、答えてくれてありがとう。クローンを作成するために別の5つの3TBドライブがあり、次にcatオプションを試します。私の知る限り、新しいddコマンドが完了するまでにさらに3時間かかり、合計で約11​​時間かかります。2番目の3TB HDDで猫のアプローチが11時間より速い場合、残りのドライブにその方法を使用します。
oshirowanen 14

2
@Gilles、進行状況レポートを取得するsudo sh -c 'pv /dev/sdb >/dev/sdc'には、代わりに使用しsudo sh -c 'cat /dev/sdb >/dev/sdc'ますか?
oshirowanen 14

1
@oshirowanenはい、使用するpv場所で使用しますcat
ジル 'SO-悪であるのをやめる' 14

1
@unhammerいいえ!たとえば、各デバイスを1つずつコピーしますcat /dev/sdc1 >/dev/sdb1 && cat /dev/sdd1 >/dev/sde1。2つの部分を連結しても意味がありません。btrfsボリュームの構造を変更する場合、2つのサブボリュームを1つに変更するには、btrfsツールを使用して構造を変更するか、必要な構造で新しいファイルシステムを作成してファイルをコピーする必要があります。
ジル 'SO-悪であるのをやめる'

7

ddデフォルトで非常に小さなブロックサイズ(512バイト)を使用します。(一方のオーバーヘッドの多くのその結果read()write()すべての512バイトのためのシステムコール)。

より大きなブロックサイズを使用すると、はるかに高速になります。最適な速度はbs=64kそこから始まります。ほとんどの人はさらに大きいサイズを使用しているbs=1Mため、人間が読めるようになります(ddコピーしたと言うと1234 blocks1234 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、既にコピーされた一部を再コピーしますが、通常は何の害もありません。したがって、疑わしい場合は、すでにコピーされていると思われる値よりもわずかに小さい値を選択する必要があります。


5

進行中のddプロセスに関する統計の取得

killコマンドを適切な信号とともに使用して、dd統計を標準エラーに出力できます。
GNU dd manページから:

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の実装によって異なる可能性があるため、最初に正しいシグナルのmanページを確認してください(BSD ddはSIGINFOを使用します)。

プロセスの高速化

  1. 各HDDを専用のSATAポートに接続して、データを1つのデバイスから読み取り、同時に他のデバイスに書き込むことができます。
  2. bs=引数を使用して適切なブロックサイズを使用します。スーパーユーザーこのスレッドを見て、自分でいくつかの値を試してください。
  3. dd読み取りと書き込みに別々の呼び出しを使用し、パイプを使用してそれらを接続します(dd if=/dev/sda bs=1M | dd of=/dev/sdb bs=1M)。
    これを実行してブロックサイズを指定する場合は、呼び出しごとに必ず同じブロックサイズを使用してください。
  4. direct引数のような他の最適化を試すことができます。
  5. ハードディスクがマウントされていないことを確認してください。マウントされていない場合、コピーが破損する可能性があります。

0

「gparted」を試しましたか?パーティションをあるドライブから別のドライブに文字通りコピー&ペーストし、必要に応じてサイズを変更できます。転送速度と残り時間を取得します。Linuxパーティションでは、下の「e2image」を使用します。


0

HDCloneと呼ばれる商用ソフトウェアがあります。フリーウェアと商用の両方としてライセンスされています。どちらのバージョンでも、ディスクのコピーと同様に、起動可能なペンドライブまたはDVDを作成できます。ソースHDとデスティネーションHDを接続し、GUIベースの指示に従います。

無料版は約80MB /秒の速度で転送されますが、有料版はさらに高速になります。NTFSおよびFATファイルシステムの場合、HDの占有ビットのみをクローンするように有料版を構成できます。これにより、各クローンの速度が大幅に向上します。


(1)この製品と提携していますか?(2)どこで入手できますか?
スコット

1
それとも、ただ"猫は/ dev / SDX>は/ dev / SDY"自由のための...使用することができます
HörmannHH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.