フルディスクddを高速化するにはどうすればよいですか?


62

私はddこのコマンドで2つの同一のドライブでやっています:

 dd if=/dev/sda of=/dev/sdb bs=4096

両方のハードドライブはまったく同じモデル番号であり、両方とも1TBのストレージスペースがあります。/dev/sda 4096のブロックサイズを使用します。/dev/sdaローカルドライブで/dev/sdbあり、リモートキャディです。次のプロトコルを使用できる場合があります。

  • USB2.0 HighSpeed(現在の計画)
  • Gigabit Over-The-Networkクローン(実際に試してみたくない)
  • USB3.0(他のドライブキャディを見つけた場合)
  • eSATA(ケーブルを見つけた/購入した場合)
  • SATA(ケーブルを見つけた場合/購入した場合、ラップトップのCDドライブが大好きです)

96時間未満でこのドライブコピーを実行する方法はありますか?私は以外のツールを使用できますdd

次のパーティション(UUIDを含む)のクローンを作成する必要があります

  • Fat32 EFIパーティション(*)
  • NTFS Windowsパーティション(*)
  • HFS + OSXパーティション
  • EXT4 Ubuntuパーティション(*)
  • スワップパーティション(*)

* Clonezillaによるサポート


私はClonezillaを試しました(それは非常に高速でした)が、必要なHFS +スマートコピーをサポートしていません。おそらく最新バージョンがこれをサポートしていますか?

最初のクローンを作成したとき、HFS +以外のすべてのパーティションを作成しましたが、非常に迅速に実行されました。(合計3時間以内)


1
おそらく、clonezillaのようなものを使用したほうが良いでしょう。空き領域を含むすべてをddコピーします。欠点は、完全にいっぱいではない大きなディスクがある場合に非常に明らかになります。
スパイダーボリス

SATAケーブルを購入して、外部ドライブをマザーボードのSATAポートに一時的に接続することは可能ですか?
マークPlotnick 14

おそらく、誰かが以下について詳しく説明できます:パーティションテーブルのクローン作成(clonezillaまたはddのいずれかを使用)、Clonezillaを使用してHFS +以外のすべてのパーティションのクローンを作成し、その1つのパーティションにddを使用しますか?これは実現可能でしょうか?
アレクサンダー14

@Alexanderそれが私が最初のクローンを作った方法です。
カズウルフ

1
@LuisAlvaradoクローンを始めたばかりです!
カズウルフ

回答:


69

私の経験では、コマンドラインにはのような高速なものはないと思いますddbsパラメーターを調整すると速度が上がる場合があります。たとえば、読み取り/書き込み速度が100 MB / sを超えることがわかっているHDDが2台あるため、これを行います。

dd if=/dev/sda of=/dev/sdb bs=100M

またpv、両方のドライブで最速の速度をチェックしてからクローン作成を続行する(最初にインストールする必要があります)。もちろん、これはルートから実行する必要があります。

pv < /dev/sda > /dev/sdb

PVでは156 MB / sになりました

pv速度とは別に素晴らしいことは、進行状況、現在の速度、開始からの時間、ETAを表示することです。私が知らないHFS +に関しては、「スピード」の部分で助けようとしているだけです。とpvまたは非常に最適化されたbsパラメータで、あなたは7時間未満(150 MB /秒の現在の速度で6時間50分)で4 TBドライブを行うことができます。

ここに画像の説明を入力してください

使用している接続タイプと使用可能な他の接続タイプを使用して、いくつかのテストを行いました。Asus Z87 ProとIntel DZ68DPを使用していました。これは私の結果だったが、最初に我々は多くの転送速度(生速度)の理論上の速度だけでは、あることを知っておく必要があり理論。実際のテストを行ったところ、それらはその生の速度の40%から80%の間にあることが明らかになりました。このテストは、使用するデバイス、接続タイプ、マザーボード、接続ケーブルのタイプ、ファイルシステムのタイプなどによって異なります。それを念頭に置いて、これは私が得たものです(デバイスへの書き込み速度をテストしただけで、通常は読み取りが高速です):

Connected Device  -  Connection Type  -  Speed (Write Speed)
  USB 2.0                 USB 2.0              25 MB/s
  USB 3.0                 USB 2.0              35 MB/s
  USB 3.0                 USB 3.0              73 MB/s
  eSata                   eSata                80 MB/s
  Sata 2G HDD             Sata 2G              120 MB/s
  Sata 3G HDD             Sata 2G              140 MB/s
  Sata 3G HDD             Sata 3G              190 MB/s
  Sata 2G SDD             Sata 2G              170 MB/s
  Sata 3G SDD             Sata 2G              210 MB/s
  Sata 3G SDD             Sata 3G              550 MB/s 

3
USR1シグナルを送信して、ddの進行状況を取得します。ddの欠点は、空き領域をコピーすることです。
jfs 14

1
私の経験では、bsパラメーターを調整すると、のdd速度が向上しcatます。catそもそも使用することもできます。
ジル「悪さSO-ストップ」

3
pvそれ自体は非常にうまく機能します。
カズウルフ

11
あなたは仕事をするが、このように転送速度を監視するために、チェーン内のPVを挿入するためにDDを使用することができます:dd if=/dev/sda1 | pv | dd of=/dev/sdb1
thomasrutter

4
私はいつものpv間で使ってきましたdd。スタンドアロンで使用できるとは知らなかった!
コリルプリンス

12

パーティション全体をコピーするcatにはdd、の代わりに使用します。しばらく前に、2つのディスク間でパーティションではなく大きなファイルをコピーしてベンチマークを実行しました(同じディスク上では、相対的なタイミングが異なります)。

dd bs=64M    51.3
dd bs=1M     41.8
dd bs=4k     48.5
dd bs=512    48.9
cat          41.7
cp           45.3

このベンチマークからの結論は、ブロックサイズの選択がdd重要であり(それほどではない)、cat高速コピーを作成する最適な方法を自動的に見つけるというddことです。ブロックサイズddが小さいと、時間を無駄にして小さな読み取りと書き込みを失います。ブロックサイズが大きいと、1つのディスクがアイドル状態のままで、もう1つのディスクが読み取りまたは書き込みを行っています。1つのディスクが読み取り、他のディスクが書き込みを行うと、最適なレートが達成されます。

パーティションをコピーするには、でファイルをコピーする方が速い場合がありますcp -a。これは、ファイルの数と、ファイルシステムの空き容量によって異なります。ファイルのコピーには、ファイルの数にほぼ比例するオーバーヘッドがありますが、一方で空き領域のコピーには時間がかかります。

USB2の最大データレートは50 MB未満で、1 TBを転送するのに6〜7時間かかります。これは、USBバスを飽和させるのに十分な速度のハードディスクを想定しています。高速な7200 rpmドライブでできると思いますが、5900rpmはそれほど高速ではないかもしれません(おそらく、線形書き込み用ですか?)。

どちらかのディスクが並行して使用されている場合、ディスクヘッドを移動する必要があるため、コピーの速度が大幅に低下する可能性があります。


ただし、ディスク全体をコピーしようとしています。
カズウルフ

差は同じオーダーであると予想していますが、より信頼性の高いデータを取得するためにシステムでベンチマークを実行します。
ジル「SO-悪であるのをやめる」14

catに使用できますdd if=ubuntu.iso of=/dev/usbか?ddUSB2またはUSB3のいずれかでこれを行う速度は、イライラするほど遅いです。
Oxwivi

1
@Oxwiviはい、cat ubuntu.iso >/dev/usbまったく同じです。には魔法はありませんがdd、入力を出力にコピーするためのツールにすぎません。
ジル 'SO-悪であるのをやめる' 14

上記のcatコマンドはMacでは機能しませんでした。しようとした私はsudo cat linuxmint-17.3-cinnamon-64bit.iso >/dev/disk1、「アクセス許可が拒否されました:は/ dev / disk1の-bash」返した
いや

12

問題は接続タイプとブロックサイズです。最速の結果を得るには、ブロックサイズを通常受け取る最低書き込み速度の半分にする必要があります。これにより、安全なマージンが得られますが、それでも大きな数を使用できます。もちろん、データを保持するのに十分なRAMが必要です。

Usb 2.0は12メガビット/秒(Mbps)、Usb 2.0 High Speedは480 Mbpsです。これはもちろん生の速度です。1バイトに8ビット、フレーミングのオーバーヘッドがある場合、使用可能な速度はMB / sで通常小数点以下です。したがって、たとえば480 rawは48MB使用可能になります。これは数学的に最適であり、現実の世界では少し低くなることに注意してください。usb 2.0高速接続の場合、実際のストレージデバイスが接続速度と同等またはそれを上回ることができる場合、最大書き込み速度は30〜35 MB程度になるはずです。


6
ユニットの選択:USB2.0 High Speedは480 Mbit / s = 60 MByte / s、生の速度です。使用可能な速度は小数点以下ではなく、生の速度の約80%です。経験則「MByte / sでの実際の速度は、Mbit / sでの生の速度の1/10です」は有効です。
JPA

5

よく調整されたdd(「pv」)または「cat」コマンドの生の速度は打ちにくいですが、コピーに問題がある場合(不良セクタ、停電、ユーザーエラーなど)、開始する必要があります以上。

ddrescue -ddのすべての速度を備えたFOSSツールをお勧めしますが、ディスクエラーを回避し、障害が発生した場合は後で再開します。


2

私はWindows 7をHDDからSSDに移動しましたが、これと他の回答が見つかりました...他の人を助けるかもしれないことを学びました。私の場合、ソースドライブはより大きく、それ以外の場合は/ dev / sda-​​> / dev / sdbデバイスレベルで作業していました。

Win7とその3つのパーティション... USBでXbuntu 14.04ライブcdを使用しました。勝利コンピューターのDVDを取り出し、SSDをその場所に置きました。パートクローンをインストールして、これを試しました:

partclone.ntfs -b -N -s /dev/sda3 -o /dev/sdb3

PartcloneはWindowsでchkdiskを実行する必要があるntfsで公開されていたので、簡単な修正でpartcloneが幸せになりました。

ntfsfix -b /dev/sda3
ntfsfix -d /dev/sda3

すべてのコマンドはルートとして実行されます。Partcloneのncurses UI(-Nオプション)は、転送が7GB / minであり、5GB / minになったと言いました。これは83MB / secに相当します。すばらしいのは、partcloneは未使用のスペースをコピーしないため、これによりクローンが非常に高速になったことです。

追加の潜在的なゴッチャ:

  • 転送先のドライブが以前に使用されていた場合、GPTの残りがある可能性があります。Windows 7の工場出荷時インストールは通常、msdos / mbrパーティションテーブルです。宛先ドライブからGPTフラグメントを削除する必要があります。このUnixとLinuxのQAはこれを助けてくれました。gdiskデバイスで使用し、x、z、yes を使用してGPTデータをザッピングし、MBRを保持する必要があります。

  • デバイスレベルのddを実行しない場合は忘れないでください
    dd if=/dev/sdb of=/dev/sda bs=446 count=1
    。sdbがソースまたは古いドライブで、sdaが宛先または新しいドライブsource)を使用してMBRをコピーする必要があります。


1

最近、100GBパーティション(HDD)のイメージを作成して、新しいSSDディスクに書き込みました。

プロセスを劇的にスピードアップできるヒントがあります:)

ファイルを小さな部分に分割します(ファイルが大きいほど、動作が遅くなります)

sudo dd if=/dev/sda3 conv=sync,noerror bs=2M | split -a 3 -d -b 1G - /maindisk.img

プロセス中に、(別のターミナルで)を使用して速度を確認できます

pgrep -l '^dd$' #to find PROCESSID
kill -USR1 PROCESSID #to check the speed

次に、結果ファイル(maindisk.img000、maindisk.img001など)でいっぱいのディレクトリがある場合、次を使用します。

sudo cat maindisk.img* | sudo dd of=/dev/sda1

イメージをSSDの新しいパーティションに「焼き付ける」ため(パーティションは古いパーティションと同じサイズでなければなりません)

私にとっては、通常の方法よりも速く(分割することなく)動作しました。画像作成の平均速度は約13MB / sでした。「通常」の方法を使用すると、〜15MB / sで始まり、1MB / sに減少します。


1
複数の小さなファイルではなく、1つの大きなファイルを書き込む方が遅いのはなぜですか?ターゲットファイルシステムのタイプとそのマウントフラグは何ですか?
デビッドフォースター14

またconv=sync、パフォーマンスに有害であり、このユースケースではむしろ役に立たない。
デビッドフォースター14

0

このスレッドを見つけた人にとっては、ddrescueのようなデータ回復用に設計されたツールを使用する方がはるかに簡単で高速です。読み取りエラーが発生した場合に、まず良い部分を救おうとします。また、いつでもレスキューを中断して、同じ時点で後で再開できます。

2回実行します。

最初のラウンドでは、読み取りエラーなしですべてのブロックをコピーし、エラーをrescue.logに記録します。

sudo ddrescue -f -n /dev/sdX /dev/sdY rescue.log

2回目のラウンドでは、不良ブロックのみをコピーし、ソースからの読み取りを3回試行してからgivingめます。

sudo ddrescue -d -f -r3 /dev/sdX /dev/sdY rescue.log

これで、新しいドライブをマウントし、ファイルシステムの破損を確認できます。

詳細:https :
//www.gnu.org/software/ddrescue/manual/ddrescue_manual.html


0

Idは、読み取り速度を上げるために、入力/読み取り-ファイル/ディスクをSATAにすることをお勧めします。USB 2.0ハイスピードは、私は、平均速度を取得していますあまりにとして良いです33816キロバイト/秒ddrescueを設定がでSATAにUSB 2.0であった場合に比べ2014キロバイト/秒


0

別のブロックサイズを使用します。dd一度に読み取るデータの量です。読み取りが少なすぎると、プログラムロジックに多くの時間が費やされ、読み取りが多すぎると、大きなデータの移動に多くの時間が費やされます。

さまざまなブロックサイズで速度を測定するには、次のbashスクリプトを使用します。

  • $devデバイスに設定
  • cbtotal予想される読み取り速度の5倍以上になるように修正します
    (set -o errexit; skip=0; cbtotal=$((120*1024**2)); bs=256;
    for power in `seq 10`; do
      bs=$((bs*2)); skip=$((skip/2)); count=$((cbtotal/bs));
      if [ "$count" -lt 1 ]; then break; fi;
      echo $bs;
      dd if=$dev of=/dev/null skip=$skip bs=$bs count=$count
      skip=$((skip+count))
    done)

ディスクの先読みのために、結果はより大きなサイズに偏る可能性があります。そのため、cbtotal十分に大きく設定することが重要です。

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