web-dev-qa-db-ja.com

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

このコマンドを使用して、2つの同一のドライブでddを実行しています。

 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時間以内)

60
Kaz Wolfe

私の経験では、コマンドラインにはddのような高速なものはないと思います。 bsパラメーターを調整すると、速度を上げることができます。たとえば、読み取り/書き込み速度が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パラメーターを使用すると、4 TBドライブを7時間未満(現在の速度150 MB/sで6時間50分)で実行できます。 。

enter image description here

使用している接続タイプと使用可能な他の接続タイプを使用して、いくつかのテストを行いました。 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 
67
Luis Alvarado

問題は接続タイプとブロックサイズです。最速の結果を得るには、ブロックサイズを通常の最低書き込み速度の半分にする必要があります。これにより、安全なマージンが得られますが、それでも多数を許可します。もちろん、データを保持するのに十分な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程度になるはずです。

12
Fellow

よく調整されたdd( 'pv')または 'cat'コマンドの生の速度は打ちにくいですが、コピーに問題がある場合(不良セクタ、停電、ユーザーエラーなど)その後、最初からやり直す必要があります。

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

5
dan_linder

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フラグメントを削除する必要があります。これ nix&Linux QA はこれを助けてくれました。デバイスでgdiskを使用し、x、z、yesを使用してGPTデータをザッピングし、MBRを保持していることを確認する必要があります。

  • デバイスレベルのddを実行しない場合は、忘れずにMBRをコピーする必要があります。
    dd if=/dev/sdb of=/dev/sda bs=446 count=1
    sdbはソースまたは古いドライブ、sdaはデスティネーションまたは新しいドライブsource

2
Chris K

最近、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 /秒で始まり、1MB /秒に減少します。

1
matowc1991

このスレッドを見つけた人にとっては、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
goetzc

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

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

  • $devをデバイスに設定します
  • 予想される読み取り速度の少なくとも5倍になるようにcbtotalを修正します
    (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を十分に大きく設定することが重要です。

0
ivan_pozdeev

Idは、読み取り速度を上げるために、入力/読み取り-ファイル/ディスクをSATAにすることをお勧めします。 USB 2.0 High Speedは、33816 kb/sの平均速度がddrescueのときと比較して優れているため、設定はUSB 2.0からSATA2014 kb/s

0
NateNjugush