それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

dd でディスクをコピーするよく使う例

dd コマンドはハードディスク・パーティションを丸ごと取り出します。0/1の信号のママ取り出すらしいです。ddコマンドを使えばデータをそのまま、ディスクを移動させることが出来ます。

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

ディスクToディスクでコピーする場合。ハードディスクの容量が同じゃないとだめ

dd if=/dev/sdb of=/dev/sdc 

dd でディスクからイメージファイルへ

HDDに空き容量があるなら、イメージファイルを作っちゃうのが後で使いやすい。

dd if=/dev/sdb of=/var/disk-img/some-winXp-hdd.img

HDDに故障箇所があっても、読めるところを強引に読んでしまう。

→ディスクにエラーがあっても大丈夫

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

dd if=/dev/sdb of=/var/disk-img/some-winXp-hdd.img conv=sync,noerror bs=4096
  • noerror がエラー読み飛ばし
  • sync はエラー箇所をNUL(ゼロ)で埋める
  • bs はbyte size 読込書き出すバイトサイズ

bs が小さい方がゼロ埋量が少なくて済むけど、512など小さいと極端に時間が掛るから注意が必要。ディスクエラーからのデータ取り出しなど神経使う作業は512していかな。

dd の途中経過が分からない!!!

→大丈夫、見れるよ!

dd をしていて困るのがコレ。いつおわるの?どこまで進んだの?
別のBashを起動して、次のコマンドを実行します。

DD実行中に、転送状況

途中の経過を見ます.

killall -USR1 dd 

mac osx やBSD 系は INFOね(こっちが正しい実装だと思う

killall -INFO dd  # OSX

ddは KILLのオプションでUSRをしていたら途中経過を表示します.

dd の進捗を見ることが出来ます。
7129825+0 記録始め
7129824+0 記録終わり
3650469888 バイト (3.7 GB) コピー終了, 450.668 s, 8.1 MB/s

この転送速度からどれくらいの時間が掛るか計算できますね。転送速度や、残りの途中経過を見ながら、dd コマンドを使えばOKですね。


ntfs でも問題ない?

→大丈夫。DD出来る。でもntfscloneも使える

WindowsのNTFSでも問題なくDD出来ます。0/1を書いちゃうから当たり前。だけど、ntfs はNTFS用のツールを使うのも良い。パーティション単位ならNTFSツールが高速

ntfsclone -rescue -O /dev/sdb1 /dev/sdc1

dd でディスクの完全消去

dd は null を書き込むことが出来るので HDDをzeroで埋めて、データを消去することが出来ます。ディスクの完全消去にも使えます。フォーマットでも消えないデータを消せます。

dd if=/dev/zero of=/dev/sdc

dd でCD-ROMをイメージ化

dd でCD-ROMをiso イメージにすることが出来ます。

dd if=/dev/cdrom of=fooobar.iso

他にもいろいろな使い方が出来ます。

  • 出力先 をネットワークに指定することが出来ます。
    • SSH越しにバックアップ出来る
  • 圧縮しながらバックアップ

など、標準入出力を使うことで、コマンド連携が可能でした。

出来がったイメージファイルは圧縮しておくと良いです。

Gzipで圧縮すると相当小さくなります。

lzop で圧縮

takuya@v1055d:/media/disk/disk-imgs$ time lzop takuya-letsnot.img

gzip で圧縮

takuya@v1055d:/media/disk/disk-imgs$ time gzip takuya-letsnot.img
http://d.hatena.ne.jp/takuya_1st/20101019/1287508076
<gzipの場合>
# dd if=/dev/sda | gzip -c > /mnt/sdc1/sda.img.gz
http://blog.dc-d.jp/?p=600

2010-10-28追記

知識としてdd を知っておいた方がいい。実際使うのはdd_rescueが便利かも
dd_rescueコマンドで、HDDのバックアップ が楽になる - それマグで!