web-dev-qa-db-ja.com

ddを使用してHDDをSSDに複製しますか?

私はWindows 7を実行している自宅のマシンを持っていて、次のようなコマンドを実行するとうまくいくかどうか疑問に思っています。

dd if=/dev/${oldSataSpinningDisk} of=/dev/${newSSD}

SATA HDDで実行されている現在のシステムのコンテンツを新しいSSDにクローンしますか?主に、Windows 7が起動して実際に機能しますか?

9
dobbs

既存の回答を(完全に)完全に追加するために、まだコメントすることはできません。

なぜbs = 64(ブロックサイズ)が必要なのですか?それが最速の設定であるかどうかはわかりませんが、簡単な答えは、標準設定よりもはるかに高速(約4倍)に実行されるということです。 Tim Williscroft 100Mの方が高速である可能性があり、ここではさらに調査が必要になる可能性があると述べています。

私のシステムでのテストデータ:(最初の実行は時間がかかりすぎたためキャンセルしました)

$ Sudo dd if=/dev/sdb4 of=/dev/sda2 status=progress
12962501120 bytes (13 GB, 12 GiB) copied, 394 s, 32,9 MB/s
$ Sudo dd if=/dev/sdb4 of=/dev/sda2 status=progress bs=64K 
13143113728 bytes (13 GB, 12 GiB) copied, 98,0026 s, 134 MB/s 

エラーを防ぐためにconv=noerror,syncを追加することもお勧めします。

また、 Tim Williscroft の場合:規約conv=notruncを追加できます

あなたが調べることもできるのは、 Mistiry によるトリックです

誰も知らないようです[...] ddは非対称コピープログラムです。つまり、最初に読み取り、次に書き込み、次に戻るということです。次のように、ddをそれ自体にパイプして、対称的にコピーを実行するように強制できます。dd if =/dev/sda | dd of =/dev/sdb。私のテストでは、パイプなしでコマンドを実行すると、スループットが〜112kb/sになりました。パイプで、私は〜235kb/sを得ました。この方法で問題が発生したことは一度もありません。幸運を!

彼は意味の意味で対称的な言葉を誤用しているようですが、これもおそらく試してみる価値があります。

2
Cadoiz

はい、アイデアは正しいですが、コマンドは悪いです。読み取りエラーが1つでもある場合、ddコマンドは1バイトをスキップするため、パーティション分割スキームに障害が発生します。すべてのバイトが同じ物理的な場所に(最初から)コピーされるように指定する必要があります。

dd if=/dev/oldsataspinningdisk of=/dev/newssd bs=64K conv=noerror,sync
18
cden

私は最近、プレーンなバニラを使ってそれをしました:

Sudo dd if=/dev/sda of=/dev/sdb

私のラップトップをubuntu mate live usbで起動しました。

1TB HDDの場合、43mb/sで最大6時間かかり、新しいSSDでラップトップを起動し、すべて(すべてのウィンドウとLinuxパーティション)が問題なく動作しました。

2
Ajay Kumar