ディスクのクローン作成にDDを使用する


182

ディスククローン作成ツールに関していくつかの質問がありdd、少なくとも一度は提案されています。dd主に使いやすさ、そしてほとんどすべてのブート可能なLinuxディストリビューションですぐに利用できるため、私はすでに自分自身の使用を検討しています。

ddディスクのクローン作成に最適な方法は何ですか?簡単なGoogle検索を行ったところ、最初の結果は明らかに失敗した試みでした。使用後に行う必要ddがあることはありますか、つまり、使用できないものはありddますか?


私はddがどのように機能するかを知っています。私の質問は、ディスクのクローンを作成する際のddに関連する既知の問題(リンクで説明)の方にありました。彼の答えが含まれており、あなたの答えは「私は一度も問題を抱えたことがない」です。あなたが間違いなくいくつかの興味深いポイントを提示したので、私もあなたの答えに賛成しました(私は進行状況の表示に関するものが好きです)。
ファルストロ09年

1
:あなたはスポルスキバンプなったように見えるjoelonsoftware.com/items/2009/05/29.html
カイルクローニン


3
皮肉なことに、Joelが質問をサーバー障害の良い例としてリンクしましたが、良い答えはありませんでした。dd不良ブロックをスキップするための適切なオプションを備えた25(コメントを除く)の中に1つの答えはありませんでした。これは、リカバリのためにディスクをクローンするときに不可欠です。私は、不良ブロックを持つディスクのクローンを作成することができ、より良い答えを、追加しました:dd if=/dev/sda of=/dev/sdb bs=4096 conv=sync,noerror
サム・ワトキンス

ドライブジオメトリに依存するファイルシステムについて説明し、復元が同一でないハードドライブで実行される場合、dd復元は「失敗」する可能性があると思いますか?ddの復元でいくつかのエラーが発生しましたが、これは私の場合の問題だと思います。
マルコ

回答:


160

ddは間違いなく最高のクローン作成ツールであり、次のコマンドを使用するだけで100%レプリカを作成します。一度も問題があったことはありません。

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

すべてのバイトのクローンを作成する際、使用中のドライブまたはパーティションでこれを使用しないでください。特にデータベースのようなアプリケーションはこれにうまく対処できず、データが破損する可能性があります。


12
もちろん、限りDEV / sdbとは/ dev / sdaにと少なくとも同じ大きさである/と...
エディ・

22
「bs = 100M conv = notrunc」を追加すると、私の経験でははるかに高速です。
ティムウィリスクロフト2009年

127
ただ「I」と「O」の文字と非常に注意してください...
バンディ

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

13
@Mistiry、それは対称という言葉の意味ではありません。
-psusi

113

スペースを節約するために、ddによって生成されたデータをgzipで圧縮できます。例:

dd if=/dev/hdb | gzip -c  > /image.img

次の方法でディスクを復元できます。

gunzip -c /image.img.gz | dd of=/dev/hdb

さらにスペースを節約するには、クローンしたいドライブ/パーティションを事前にデフラグし(適切な場合)、残りの未使用スペースをすべてゼロにして、gzipが圧縮しやすくします。

mkdir /mnt/hdb
mount /dev/hdb /mnt/hdb
dd if=/dev/zero of=/mnt/hdb/zero

少し待つと、ddは最終的に「ディスクがいっぱいです」というメッセージで失敗します。

rm /mnt/hdb/zero
umount /mnt/hdb
dd if=/dev/hdb | gzip -c  > /image.img

また、次の例のように、killコマンドでシグナルを送信することで、ddプロセスをバックグラウンドで実行してステータスを報告できます。

dd if=/dev/hdb of=/image.img &
kill -SIGUSR1 1234

システムを確認してください-上記のコマンドはLinux、OSX、およびBSDのddコマンドで受け入れられる信号が異なります(OSXが使用するSIGINFO- Ctrl+ Tを押してステータスを報告できます)。


2
これは、BTRFS、NILFSなどの「現代の」fsでも機能しますか(あなたが夢見られるものは何でも)。
スティーブシュネップ09年

DDは、ファイルシステムよりも低い抽象化レベルであるブロックデバイスで動作するため、必要です。しかし、実際に試したことはありません。うーん、NILFSはおもしろそうです。私はそれを見なければなりません。
デビッドヒックス

4
+1 kill -SIGUSR1 %1、およびOSX ddコマンドはSIGUSR1を喜んで受け入れます...とても便利です、ありがとう!
stuartc

1
+1をKill -SIGUSR1 1234探していました。
hot2use

2
次のようにする必要がありますdd if=/dev/hdb | gzip -c > /image.img.gzか?
マイクコーザー

37

注意:ライブファイルシステムをdd 'すると、ファイルが破損する可能性があります。その理由は単純であり、進行中のファイルシステムのアクティビティを理解しておらず、それを軽減しようとはしていません。書き込みが部分的に進行中の場合、部分的な書き込みが行われます。これは通常、物事には良くなく、一般的にはデータベースにとって致命的です。また、あなたはタイプミスが発生しやすいが台無し場合場合パラメータ、あなたがたに災い。ほとんどの場合、rsyncマルチタスクの登場後に書かれた同様に効果的なツールであり、個々のファイルの一貫したビューを提供します。

ただし、DDはマウントされていないドライブのビット状態を正確にキャプチャする必要があります。ブートローダー、llvmボリューム、パーティションUUID、ラベルなど。ターゲットドライブをビット単位でミラーリングできるドライブがあることを確認してください。


7
syncファイル破損の問題に対する答えではないのではないかと思います。操作sync中に、デーモンまたは何かがの後にさらにファイルを書き込むとどうなりますddか?
削除

5
最初にドライブをアンマウントする(または読み取り専用として再マウントする)ことをお勧めしますが、常に可能とは限りません
Alex Bolotov

1
その場合、rsyncを使用してファイルハンドルマジックを実行し、一貫性のあるファイルを取得し、Copy On Writeセマンティクスで着信書き込みを処理します。
jldugger

4
マウントされたファイルシステムでddを実行すると、マウントされたファイルシステムのファイルが破損しないことを追加したいのですが、ここでの意味は、ファイルシステムのコピーが必ず既知の良好な状態になることです。
モーロ

1
を使用rsyncすると、宛先ファイルシステムの内部データの一貫性が保証されます。それはしません、ファイル内のデータが一致していることを確認してください-それを行うには、ファイルとこれらのロックを尊重する必要があるファイルに書き込むすべてのプログラムをロックする必要があります。
マーティンガイスラー14

26

ddを使用して不良セクタを含む可能性のあるディスクのクローンを作成する場合は、「conv = noerror、sync」を使用して、エラーが発生しても停止せず、欠落しているセクタをヌルバイトで埋めます。これは通常、障害が発生したディスクまたは障害が発生したディスクから回復しようとする場合の最初の手順です。回復を試みる前にコピーを取得し、正常な(クローン)ディスクで回復を行います。コピーできなかった空白セクターに対処するために、回復ツールに任せます。

また、ddの速度はbs(ブロックサイズ)設定の影響を受ける場合があります。私は通常bs = 32768を試しますが、自分のシステムでテストして、何が最も速く機能するかを確認することをお勧めします。(これは、テープに書き込む場合など、別の理由で特定のブロックサイズを使用する必要がないことを前提としています。)


13
不良セクタのあるディスクがある場合、ddではなく「ddrescue」を使用する必要があります。はるかに効率的で、より多くのデータを回復できる可能性がはるかに高くなります。(dd_rescueと混同しないでください。dd_rescueはそれほど良くありません)
-davr

3
不良ブロックをスキップしようとする場合、大きなブロックサイズを使用しないでください。4096は十分な大きさです。
サムワトキンス

17

ディスクのクローンを作成するために本当に必要なことは、ddへの入力と出力を指定することだけです。

dd if=/dev/hdb of=/image.img

もちろん、/ dev / hdbから直接読み取るための適切なアクセス許可があることを確認し(rootとして実行することをお勧めします)、/ dev / hdb がマウントされていないことを確認します(ディスクがコピーされている間はコピーしないでください)変更されている-読み取り専用としてマウントすることもできます)。完了すると、image.imgはディスク全体のバイト単位のクローンになります。

ddを使用してディスクを複製することには、いくつかの欠点があります。まず、ddはディスク全体をコピーし、空のスペースもコピーします。大きなディスクで実行すると、非常に大きなイメージファイルが作成される可能性があります。第二に、ddは進行状況をまったく表示しません。これは、コピーに時間がかかるためイライラする可能性があります。3番目に、このイメージを他のドライブにコピーする場合(やはりddを使用)、それらは元のディスクと同じかそれ以上である必要がありますが、ターゲットディスクにある追加のスペースは使用するまで使用できませんパーティションのサイズを変更します。

ディスクからディスクへの直接コピーを行うこともできます。

dd if=/dev/hdb of=/dev/hdc

ただし、空き容量に関しては上記の制限が適用されます。

問題や落とし穴に関する限り、ddはほとんどの場合素晴らしい仕事をしています。しかし、しばらく前に私は死にかけそうなハードドライブを持っていたので、完全に死ぬ前にddを使ってどんな情報をコピーできるか試しました。その後、ddは読み取りエラーをあまりうまく処理できないことがわかりました。ddが読み取ることができなかったディスク上のセクターがいくつかあり、ddがcopyめてコピーを停止しました。当時、私は、読み取りエラーが発生したにも関わらず、継続してDDを伝える方法を見つけることができなかった(にもかかわらず、それが表示され、それはその設定を持っているかのように)ので、私はスキップして、上でホップすることを求める規定手動でかなりの時間を費やし読めないセクション。

私は(タスクを完了した後)この問題の解決策を調査す​​るためにしばらく時間を費やし、サイトによるとddのように動作するがエラーが発生しても読み続けるddrescueというプログラムを見つけました。プログラムを実際に使用したことはありませんが、特に、コピー元のディスクが古く、システムが正常に表示されていても不良セクタが存在する可能性がある場合は、検討する価値があります。


7
... ddは進行状況をまったく表示しません...-これは真実ではありません- 進行状況を表示する方法はちょっとトリッキーな方法があります-ddプロセスのpidを見つける必要があります( 'ps -a | grep dd')シグナルUSR1をこのプロセスに送信します-'kill -USR1 <dd_pid_here>'(<>なし)は、ddに進行情報を表示させます。
ミハルベルンハルト

4
「ddが読み取れなかったディスク上のいくつかのセクター」:それconv=sync,noerrorが役立つと思います。
ゴーティエ

2
これらのconv=sync,noerrorオプションは必須であり、ddが不良ブロックをスキップし、イメージ内でそれらをゼロにすることで、物事が正しく整列されるようにします。それについて何かコメントしたごく少数の人々への小道具。
サムワトキンス

1
GNU ddrescueは特別なオプションなしで進行状況インジケーターを提供します。コピーを停止して、中断したところから再開できます。
エンドリス

2
ddで進歩を得るためのそれほどトリッキーな方法は、オプションを追加することですstatus=progress
ジェームズ

11

ソースドライブがまったく破損している場合はdd_rhelpdd_rescue(私の個人的な好み)またはGNU を使用して、より多くの運がありますddrescue

これの背後にある理由は、読み取りエラー時に、dd試行と試行と試行の継続-タイムアウトが発生するまで長時間待機する可能性があるためです。dd_rescueエラーを読み取り、ディスク上のさらに特定の場所を選択し、最後のエラーまで逆読みするなど、スマートなことを行います。dd_rhelp基本的にはdd_rescueセッションマネージャーです- dd_rescue実行を賢く開始して再開し、迅速に実行します。

最終結果はdd_rhelp、最短時間で最大のデータが回復されることです。実行したままにdd_rhelpすると、最終的にはdd同じ時間にまったく同じジョブを実行します。ただし、dd100Gbディスクのバイト100で読み取りエラーが発生した場合、他の9,999,900バイト*を回復するのに長い時間待つ必要がありますが、dd_rhelp+ dd_rescueはデータの大部分をはるかに速く回復します。


1
dd_rescueとddrescueの選択に役立つヘルプ:askubuntu.com/a/211579/50450
ヨハン

7

ソースディスクにはファイルシステムがマウントされていてはなりません。ブロックデバイスを読み取ることができるユーザー(rootが機能する)として、「dd if = / dev / sda ....」を実行します。

さて、ここでのすてきなことの1つは、バイトストリームを作成していることです...そして、それを使って多くのことができます:圧縮、ネットワーク経由での送信、小さなblobへのチャンクなど。

例えば:

dd if=/dev/sda | ssh user@backupserver "cat > backup.img"

しかし、より強力に:

dd if=/dev/sda | pv -c | gzip | ssh user@backupserver "split -b 2048m -d - backup-`hostname -s`.img.gz"

上記は、ソースハードドライブの圧縮イメージをリモートシステムにコピーし、ソースホストの名前を使用して番号付きの2Gチャンクに保存し、進行状況を更新します。

ディスクのサイズ、ソースのCPUの速度、デスティネーションのCPUの速度、ネットワークの速度などに応じて、圧縮をスキップしたり、リモート側で圧縮を実行したり、sshの圧縮を有効にしたりできます。


+1 gzipを介したパイピングにより、時間と帯域幅を大幅に節約できます!
M.ダドリー

また、ddコマンドに「bs = 1M」を追加すると、通常、速度が大幅に向上することに注意してください。
-retracile

6

ディスクのクローンを作成するために本当に必要なことは、入力と出力を指定することだけですdd

dd if=/dev/hdb of=hdb.img

もちろん、直接読み取るための適切な権限を持っていることを確認し/dev/hdb(rootとして実行することをお勧めします)、/dev/hdbマウントされていないこと(ディスクの変更中はコピーしないでください)。完了hdb.imgすると、ディスク全体のバイト単位のクローンになります。

ddディスクのクローン作成にはいくつかの欠点があります。最初に、dd空のスペースも含めてディスク全体をコピーします。大きなディスクで実行すると、非常に大きなイメージファイルが作成される可能性があります。第二に、dd進行状況の表示はまったくありません。これは、コピーに時間がかかるためイライラする可能性があります。3番目に、このイメージを他のドライブにコピーする場合(やはりddを使用)、それらは元のディスクと同じかそれ以上である必要がありますが、ターゲットディスク上にある追加スペースを使用することはできませんパーティションのサイズを変更します。

ディスクからディスクへの直接コピーを行うこともできます。

dd if=/dev/hdb of=/dev/hdc

ただし、空き容量に関しては上記の制限が適用されます。

最初の欠点は、コピーを作成するときにデータをgzipすることで解決できます。例えば:

dd if=/dev/hdb | gzip -9 > hdb.img.gz

2番目の欠点は、pipeview(pv)ツールを使用して解決できます。例えば:

dd if=/dev/hdb | (pv -s `fdisk -l /dev/hdb | grep -o '[0-9]*\{1\} MB' | awk '{print $1}'`m) | cat > hdb.img

3番目の欠点を克服する方法はありません。

さらに、ddより大きなデータの塊を処理するように指示することにより、コピー時間を短縮できます。例えば:

dd if=/dev/hdb of=hdb.img bs=1024

1
3番目の欠点を克服する方法は既に説明しました...パーティションのサイズを変更します。パーティションの拡大は通常、安全で高速な操作です(縮小または移動に対して、データを移動するため低速でより危険です)。
-davr

gzipは、現在のデータまたは削除されたデータで満たされるため、しばらく使用されているディスクでは機能しません。gzipは、空のスペースがゼロになっている場合にのみ機能します。これは、新しいディスクの場合のみです。
トズ

3
@Tozz:ファイルシステムを0で埋められたファイルで満たし、ディスクに同期してから削除することで、ファイルシステムイメージの圧縮率を向上させることができます。 dd if=/dev/zero bs=1M of=/balloon; sync; rm /balloon (ファイルシステム層の
モジュラー

5

ddおよびレスキューディスクでできるもう1つの良い点は、ネットワーク経由でデータをコピーすることです。

remote_machine$ nc -l -p 12345

local_machine$ dd if=/dev/sda | nc remote_machine 12345

ネットワークがローカルでない場合、これら両方のパイプラインにgzipを貼り付けることができます。進行するには、を使用しますpv。local_machineのnetcatがコピーを終了した後に終了させるには-w 5、何かを追加します。


9
これはまったく正しくありません。「remote_machine」コマンドは、次のような何かを、欠けている> disk_backup.imgか、|dd of=/dev/sdbまたは何か他のもの、あなたが何をしたいかによって異なります。ディスクイメージをstdoutにダンプしたくないと思います。
-davr

1
そして、送信データをさらに最小化するために、両端にgzipを投入します。
モーロ

4

ddは、すべての空白スペースを含む正確なコピーを作成することに注意してください。

つまり:

  1. 2番目のドライブは少なくとも最初のドライブと同じ大きさでなければなりません
  2. 2番目のドライブが大きくなると、余分なスペースが無駄になります(ファイルシステム拡張できます)
  3. ソースドライブがいっぱいでない場合、ddは空白スペースのコピーに多くの時間を浪費します。
  4. この方法で、ドライブ全体をコピーすることも、単一のパーティションをコピーすることもできます。
  5. これがブート可能なドライブである場合、ddを使用した後にブートローダーをインストールする必要があると確信しています

お役に立てば幸いです


8
ハードディスク全体を複製する場合、ブートローダーも複製します。
クリスチャン・シウピトゥ2009年

welll、単なるthouhgtですが、gpartedを使用して、コピーされているパーティション/ディスクを使用されているものに復元し、ddをドロップすることはできませんか?一度限りのイメージであると仮定すると、この問題を軽減するはずです。
bbqchickenrobot


3

もう1つの重要な機能は、MBR、パーティションテーブル、およびブートレコードのコピーです。

ただ

dd if=/dev/sda of=parttable bs=512 count=1

そして、あなたがそれを書いているときの周りの他の方向。あとで磨くfdisk

パーティションテーブルをバックアップしておくと、はるかに安全です。

また、(パーティション構造を変更しながら)別のハードドライブに移行するのも楽しいことです。


3

これは一種の安価なハックですが、DDプロセスを監視するための迅速で汚い方法です。

ddコマンドを実行します。新しいシェルを開き、ps awxを実行してddプロセスのPIDを見つけます。次に、新しいシェルタイプでwatch -n 10 kill -USR1 {DDプロセスのpid}

これはウォッチ出力ウィンドウでは何もしませんが、元のDDシェルに戻ると、DDは10秒ごとにステータスレポートの出力を開始します。watchコマンドの-n 10は、もちろん他の時間枠に変更できます。

タキオン


OS Xはwatch利用できず、-USR1dd を強制終了します。次のコマンドは、しかし作品: while [ true ]; do killall -INFO dd; sleep 30; done
アダム・フランコ

私はこれが初心者にとって非常に実用的ではないと思います。彼らはより良いpvコマンドを提供されるかもしれません。
ロビーマッケニー

ddでCTRL-Tを使用してSIGINFOを送信することもできます。whileループよりも簡単で、私が持っているOSX 10.6 cdにはkillallがありません。これをen.wikipedia.org/wiki/Unix_signal#Sending_signals
シチズンケプラー14

3
dd if=/dev/sda of=/dev/sdb bs=4096 conv=sync,noerror

これにより、ディスクがコピーされ、エラーのあるブロックがスキップされます。これは非常に重要です。

これらは、ddを使用してディスクをクローンまたはレスキューするための基本的かつ不可欠なオプションです。

私は別の答えを投稿したくありませんでしたが、すでに投稿された25の中で重要な「conv = sync、noerror」オプションの良い答えはありませんでした。


1
実際には、1つの回答と少なくとも2つのコメントで以前に言及されました。
マイケルハンプトン

1
@Michaelにリンクした答えには完全なコマンド例が含まれておらず、他の欠点conv=sync,noerrorもあります。各不良ブロックに対して大量のデータをスキップするため、大きなブロックサイズを使用することはお勧めできません。これらのオプションは「リカバリクローニング」に不可欠であり、それらのコメントを検索する必要はありません。最も一般的な答えは、ディスクに不良ブロックがない場合です。たとえば、初期ディスクのクローンを作成するためであり、リカバリのためではありません。
サムワトキンス

@Michaelの例は、プロのディスクリカバリに数回使用したコマンドです。少し良い仕事をするかもしれない他のツールがありますが、私が与えたdd例は、ここで他のすべての例よりもディスク回復クローンで優れていますが、エラーのないディスクをクローンするのにも適しています。したがって、ここでは、「ディスククローン作成にDDを使用する」方法についての私の答えが最善であると考えています。進捗状況や圧縮などの監視に関する情報は追加しませんでした。シンプルに保ち、基本を正しく理解するための短い回答を提供したいからです。
サムワトキンス

3

あなたは実際にこのようなことを試すことができます

dd if = / dev / sda2 of = / dev / sdb2 bs = 4096 conv = sync、noerror

すべてのエラーをスキップし、パーティションまたはハードドライブの正確なクローンを作成する


conv = sync、noerrorである必要があります。syncオプションが必要です。そうでない場合、エラーのあるブロックはゼロとしてコピーされるのではなく削除されます。
サムワトキンス

2

ddは進行情報を提供します-Linuxのほとんどのバージョン。私は、Unixの風味を思い出さないが、思い出さないものを見てきました。

マニュアルページには、USR1シグナルを実行中の「dd」プロセスに送信すると、I / O統計が標準エラーに出力され、コピーが再開されます。

私はこの機能を定期的に使用しています。


有用ではありますが、初心者には実用性に疑問があります。
ロビーマッケニー

2

誰かがこれを言わなければなりませんでした:Clonezillaを試してください(http:// clonezilla.org/)

あなたは何を得ますか?ファイルシステムの使用済み部分のみをコピーします。Clonezillaはdd、grub、sfdisk、parted、partimage、ntfsclone、partcloneを使用します。選択したオプションに応じて。

適切なドキュメントは、http://clonezilla.org/clonezilla-live/doc/にあります。


私はドキュメントが少し荒いことに気付き、Linux PATAドライブをSATAドライブに複製しても、まだ起動できるものが残っていませんでした。しかし、ddと同じ結果になるまでにはるかに高速であり、ラップトップドライブのアップグレードに最適でした。
jbdavid 2009年

2

ddを使用して(この場合はリモートマシンにコピーしますが、ローカルコピーにも同じ原理が適用されます)進行状況を表示します。

これは、ファイル記述子3を介して/ tmp / pidにpidを保存することで機能し、その後、USR1シグナルを使用した後続のキルに使用されます。問題は、サブシェルを介したstderrのフィルタリングを介して、stderrの進行状況の出力を1行のみにフィルタリングすることでした。

(dd bs=1M if=$lv-snapshot & echo $! >&3 ) 3>/tmp/pid  2> >(grep 'copied' 1>&2) | gzip --fast | ssh $DEST "gzip -d | dd bs=1M of=$lv" &
# Need this sleep to give the above time to run
sleep 1
PID=$(</tmp/pid)

while kill -0 $PID; do
  kill -USR1 $PID
  sleep 5
done

質問にはあまり関係ありませんが、
サブシェル

私はそれが:)私自身かなりきちんとしたと思った、特に以来、ディスクのクローンを作成するとき、私は別のDDオプションについては、このページに自分自身を言及していたので、私がクローニングに使用したものの最終結果を置くために時間に適切な場所に見えた
エドワードGroenendaal

2

ほとんどの情報は、以前に挿入されたレシピで説明されましたが、すべてが説明されたわけではありません。

Linuxでは、ddコマンドでハードドライブまたはパーティションのクローンを作成できます。注意、間違いを犯すと、すべてのデータが失われます。

最初に、宛先を使用しないでください。次に、ソースを使用しないか、読み取り専用モードに再マウントしてください。そうしないと、コピーが破損します。再マウントが不可能な場合、ブータブルドライブ(hdd / ssd / pendrive)を任意のLinuxライブディストリビューションにしてください。私はknoppixを優先しますが、これはあなたの選択です。可能な場合は、シングルユーザーモードでシステムレベルを1にブートまたは変更するか、シングルユーザーモードでシステムを直接再起動できます。これはディストリビューションに依存します。1つのパーティションのみをクローンする場合、このパーティションをアンマウントするか、ROに再マウントする必要があります。

umount /mountpoint_or_device

または

remount -o,ro /mountpoint_or_device

ハードドライブ全体のクローンを作成する場合は、すべてのパーティションをアンマウントまたは再マウントする必要があります。

送信元デバイスと宛先デバイスを識別する必要があります。dmesgをご覧ください。ここには、ベンダーなど、デバイスに関する必要な情報がすべて保存されています。また、デバイスサイズが異なる場合は、デバイスサイズに基づいて識別することもできます。次に、送信先は送信元と同じかそれより大きい必要があります。ソースを計算する必要があります。例:fdisk -l / dev / sdaパーティションジオメトリ(GPTがあります)を除き、フェッチします。 3.バイト単位のブロックサイズ。通常は512です。

例えば:

# fdisk -l /dev/sda

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000f1d1e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    40136703    20067328   83  Linux
/dev/sda2        40138750    41940991      901121    5  Extended
/dev/sda5        40138752    41940991      901120   82  Linux swap /     Solaris

次に、512を超える除算器を試してみましょう。物理セクターは41943040です。

41943040/256 = 163840、非常に良い、256セクターの一括コピーを実行できます。もっとできますか?試してみましょう:41943040/1024 = 40960、これで十分だと思います。これを選択します。セクターグループのサイズをカウントしましょう:512(セクターサイズ)* 1024 = 524288バイトeq 512K 次に、パラメータbs = 512K以下を使用できますが、これを2 ^ xで除算します。大きな内部キャッシュを備えた最新のハードドライブの場合、これは十分実用的です。キャッシュがはるかに小さい古いドライブの場合、32K以下の値で十分です。

準備が完了したら、コピーを実行できます。ddif = / dev / source_devide of = / dev / destination_device bs = 32Kでコピーが完了します。間違いがあると、importandデータが上書きされます。宛先では、すべてが上書きされます。

破損したソースディスクでレスキューデータを試す場合は、ネイティブセクターサイズ(通常は512バイト)を使用し、オプションconv = notruncを追加します。そうしないと、不良セクタによってドロップされたソースのホールに、宛先でのセクタシフトが加わります。これにより、コピーが破損し、修復の機会がほとんどなくなります。コマンドは次のようになります。

dd if=/dev/source of=/dev/destination bs=512 conv=notrunc  

、ドライブとシステムがあきらめ、セクターごとに最後まで歩き回るまで長い時間待ちます。

ddは、パーティションを新しい場所に移動するための便利なツールです。単にパーティションを作成し、ddを新しいパーティションに(これはより大きく、はるかに大きくすることができます)、可能であれば、コピーされたファイルシステムをすべての新しいパーティションを満たすために拡張します。ext3/ ext4 / xfs / zfs / btrfsにはこの機能があります。最後に/ etc / fstabを変更し、可能であればumount / mountを変更するか、システムを再起動する必要があります。

もちろん、あらゆるタイプのパーティションのクローンを作成できます。ddコマンドはファイルシステムタイプを調べません。その構造には何もしません。このコマンドは、NTFSまたはその他のパーティションタイプのクローン作成に使用できます。

トリックがあります。パラメータを設定しなかった場合、ddは出力を標準出力に出力します。次に、ディスクまたはパーティションの圧縮された生のコピーを作成できます。次に例を示します。

dd if=/dev/sda bs=512 | gzip >/any/place/computerOne_sda.gz

もちろん、これはオフラインで行う必要があります。これを復元するには:

zcat /any/place/computerOne_sda.gz| dd of=/dev/sda bs=512   

、すべてのsdaハードドライブがこのバックアップによって上書きされ、現在のデータはすべて失われます。これは、NTFS Windowsパーティションとこれで使用されるハードドライブでも実行できます。もちろん、選択に応じて他の圧縮コマンドを使用できます。


1

bzip2またはのgzip代わりに、パーティション(またはディスク)の圧縮イメージファイルをオンザフライで作成できますdd。これは、リムーバブルメディアに画像を保存するのに便利です。

bzip2 -c /dev/sdaX >imagefile.bz2
or
gzip -c /dev/sdaX >imagefile.gz

ディスクが以前に頻繁に使用されていた場合、イメージングの前にすべての未使用領域をゼロで埋めることにより、圧縮を強化できます。

mkdir /mnt/mymountpoint
mount /dev/sdaX /mnt/mymountpoint
cat /dev/zero >/mnt/mymountpoint/dummyfile.bin
(Wait for it to end with a "disk full" error)
rm /mnt/mymountpoint/dummyfile.bin
umount /mnt/mymountpoint

イメージを別のディスクに復元するために必要なことは、次のとおりです。

bzcat imagefile.bz2 >/dev/sdbY
or
zcat imagefile.gz >/dev/sdbY

残りのスペースをゼロで埋めるトリックに賛成しました。スマート!
混乱

これ、これが必要だった!SDカードは以前ビデオキャプチャに使用されていましたが、がらくたでいっぱいでしたが、圧縮はまったく役に立ちませんでした。
コーディスミス

0

何らかの理由で、オーディオトラックを含むCDをイメージングすると、ddが失敗します。画像+ TOCファイルを取得するには、cdrdaoなどを使用する必要があります。


0

速度に関する注意:私の経験では、デフォルトのbs = 512の代わりにbs = 1024を指定した場合、ddは2倍速くなります。さらに大きなブロックサイズを使用しても、bs = 1024以上の顕著な高速化は得られません。


4
現在、ディスククラスタは通常4k前後であるため、4096を使用するのがおそらく適切なオプションであり、一度に2つのクラスタを読み取りたい場合は8192を使用することもできます。あなたが断片化メモリの問題に実行するように、しかし、あまりにも大きな行ってはいけない
user4767

0

フルディスクをdd-ingする場合、受信ディスクのマスターブートレコードが上書きされることに注意する必要があります。これには、パーティションテーブルとその他の重要な情報が含まれます。新しいディスクが古いディスクと同じでない場合、あらゆる種類のテーブルを作成できます。パーティションのコピーは一般的に安全です(スワップパーティションをコピーする必要はありません)


0

私は何年もの間管理者の役割を辞めてきましたが、「dd」が仕事をしていることを知っています。私は、80年代後半にSun Sparcおよび386iコンピューターでこの手法を定期的に使用しました。複数のQICテープで配布されたCADソフトウェアを実行している30の386iシステムで1つのクライアント注文がありました。

最初のコンピューターにインストールし、アプリを構成し、SunOSのsys-unconfigを実行し、ドライブを別のSCSIアドレスのシューボックスに入れてから、他の30台のドライブに「dd」に進みました。


0

他の人が上記で言及したように、マウントされたファイルシステムのクローンを作成する際の落とし穴の1つは、潜在的なデータ破損です。これは明らかにフルドライブクローンには適用されませんが、LVMを使用している場合は、論理ボリュームとddをスナップショットからスナップショットして、一貫したイメージを取得できます。



0

言う必要がある初心者への警告:少なくとも一部のバージョンでは、bs = XはXのサイズのメモリが文字通り割り当てられることを意味します。1GBのRAMと不十分なスワップを備えたシステムでbs = 2GBを使用すると、問題が発生します。

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