Feed

ddコマンド

Posted on 3月 15th, 2013 in Linux by 店長

壊れたHDDからデータを取り出すときによく使うのがLinuxのddコマンドです。

ddコマンドはファイルのコピーと変換を行うことができるので、HDDのイメージを取り出したりすることに使用できます。
取り出したイメージをマウントすることによって、破損したHDDに過度の負荷をかけることなく、データを回収することも可能となります。
ddコマンドはファイルシステムを問わないのでWindowsであろうとMacであろうとLinuxだろうと何でもイメージファイルを作ることができます。またデバイスファイルなど特殊なファイルもバックアップ可能となっていますので、インストールしたOSのイメージを保存しておけば、それを戻すだけで故障が発生した時に瞬時に復旧できることになります。バックアップしたイメージを復元する場合には、同じスペックのドライブが必要となります。吸い出すイメージには空き容量も含まれますので、100GB のパーティションのイメージは100GBとなります。
DSC_0952

ddコマンドの使い方 基本
イメージ作成

$ dd if=/dev/hda1 of=/hda1.img

ddに続き,「if=」でバックアップ元のデバイス名,そしてバックアップ先のファイル名を「of=」の次に指定します。ここでは/dev/hda1のパーティションを,現在ログイン中のホームディレクトリにhda1.imgというファイルで作成しています。また復元する際には,「if=」と「of=」指定を逆にするだけです。

ディスクからディスクへバックアップ

$ dd if=/dev/hda of=/dev/hdb

HDDに故障箇所があっても、読めるところを強引に読んでしまう。
dd は多少のエラーがあると作業をやめてしまうので、故障箇所はすっ飛ばして、読める箇所をどんどん読み込んでバックアップを取っていきます。

$ dd if=/dev/hda of=/dev/hdb conv=sync,noerror bs=4096

noerror がエラー読み飛ばし
sync はエラー箇所をNUL(ゼロ)で埋める
bs はbyte size 読込書き出すバイトサイズ
bs が小さい方がゼロ埋量が少なくて済むけど、512など小さいと極端に時間がかかります。ディスクエラーからのデータ取り出しなどを伴う作業は512で行います。

dd の途中経過が分からない・・・
dd 実行中に困る問題。うんともすんとも反応がないのでどこまで進んでいるかがわかりません。

別のターミナルを起動して、次のコマンドを実行すれば元のターミナルに途中経過が現れます。

$ killall -USR1 dd

dd の進捗を見ることが出来ます。

4495865+0 レコード入力
4495865+0 レコード出力
2301882880 バイト (2.3 GB) コピーされました、 86.7475 秒、 26.5 MB/秒。

MBR コピー

$ dd if=/dev/hda of=mbr.img bs=512 count=63
$ dd if=mbr.img of=/dev/hdb bs=512 count=63

(関連記事)

 


トラックバック URL

コメントはまだありません

最初のコメントをどうぞ!

コメントをどうぞ

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)