このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ
  • 追加された行はこの色です。
  • 削除された行はこの色です。
  • ddコマンド へ行く。

*目次 [#ac80b64c]

#contents


*ddコマンド [#s91ff748]

-ハードウェアでのRAID構成の場合、OS側からRAIDを意識することはない(当然ドライバ側は意識している)。
--つまり、ddコマンドでバックアップやリストアが可能となる。

*ddコマンドによるHDDのバックアップ [#u5a682f3]

 # dd if=[コピー元HDD] of=[コピー先HDD]

-同一容量の[[HDD]]を使った[[バックアップ]]に向く。
--このコマンドで丸ごとバックアップした場合、[[パーティション]]の切り方も同じ構成のディスクになる。コピー先のHDDの方が容量が大きい場合、残った領域は空領域になる。
-容量の大きいHDDにバックアップしたい場合には、[[dumpコマンド]]や[[restoreコマンド]]を使うほうがよい。

*ddコマンドによるゼロフォーマット [#ya223be4]

 次のように入力すると、ゼロをディスク全体に書き込み、データを完全に抹消する。

 # dd if=/dev/zero of=[フォーマット対象のHDD]

 このコマンドを実行すると、ifに指定したファイルから1ブロック(デフォルトでは512バイト)を読み込み、ofで指定したファイルに書き込むという動作をエラーが出るまで繰り返す。

 /dev/zeroは読み込むと常に0を返す[[仮想デバイス]]である。

 bs=10MBのようにブロックサイズを指定すると、フォーマットの時間を短縮できる。

 # dd if=/dev/zero of=[フォーマット対象のHDD] bs=10MB

**より安全なゼロフォーマット [#h490e115]

 単にゼロフォーマットをしただけだと、HDDを分解し、中の内部ディスクを取り出し、残留磁気を調査(0のところに0を上書きしたときと、1のところに0を上書きしたときでは磁気に違いが出る)するとデータを復元できてしまう((残留磁気の調査方法としては複数ある。代表的な手法として、[[磁気力顕微鏡]]による残留磁気の解析が挙げられる。))。

 よって、より安全にデータを抹消したい場合は、ランダムデータで2回上書きしてから、ゼロフォーマットする。

 # dd if=/dev/urandom of=[フォーマット対象のHDD]
 # dd if=/dev/urandom of=[フォーマット対象のHDD]
 # dd if=/dev/zero of=[フォーマット対象のHDD]

 /dev/urandomは乱数を生成する仮想デバイスである。

[補講]shredコマンドを使ってもランダムデータの上書き処理とゼロフォーマットを実現できる。-nオプションで指定した数の分だけランダム値で上書きをする(省略すると25回も行ってしまうので注意)。

 # shred -n 2 -z /dev/hda



[補講]Linuxには乱数を生成する仮想デバイスとして、/dev/randomと/dev/urandomがある。下記の理由により、通常は後者の/dev/urandomを使うべきである。

-/dev/random
--乱数が不十分である場合、乱数が蓄積されるまで、乱数の生成を行わない。
-/dev/urandom
--乱数が不十分である場合、保持している値の暗号学的に強いハッシュ値を返す。

*ddコマンドの実行中に途中経過を確認する [#f1dede97]

 ddコマンドのプロセスに対して、USR1シグナルを送ることで途中経過を表示させることができる。

 # dd if=[コピー元HDD] of=[コピー先HDD] &
 (プロセスIDが表示される)
 # kill -USR1 [上記のプロセスID]

*ddコマンドでMBRを保存する [#odbdfc09]

 # dd if=/dev/hda of=/mnt/floppy/mbr.dsk bs=512 count=1

 これでHDDの先頭セクタである(512バイト分)をFDに保存できる。

 書き出された内容を[[バイナリエディタ]]で表示すれば、セクタの内容を解析することもできる。

*ddコマンドでisoイメージを作成する [#x003b2a4]

 この方法を使えばマウントする必要がなく、書き込み権限のあるディレクトリを利用すれば一般ユーザーでもコピー可能である。

 # dd if=/dev/hdb of=/tmp/image.iso bs=1024

[注意]if=のところは環境に合わせて変更すること。 ◇

*ddコマンドでFDを複製する [#ja1a36bb]

1:複製元となるFDを挿入して、次のコマンドを実行する。

 # dd if=/dev/fd0 of=/tmp/fdimage

2:複製先となるFDを挿入して、次のコマンドを実行する。

 # dd if=/tmp/fdimage of=/dev/fd0 

*ddコマンドでLinuxのブートディスクを作成する [#e0d61f0a]

 # dd if=/boot/vmlinuz of=/dev/fd0

 "vmlinuz"の部分には現在使用中のカーネルイメージを指定する。

[補講]mkbootdiskコマンドでもブートFDを作成可能である。 ◇

*ddコマンドでテスト用データを作成する [#h13f0840]

 テストのために適当な大きさのデータを作成することができる。

 # dd if=/dev/zero of=[ファイル名] bs=[ブロックサイズ(バイト)] count=[ブロック数]

 出来上がるファイルの容量は「ブロックサイズ×ブロック数」になる。

例:1Gバイトのテスト用データを作成する。

 # dd if=/dev/zero of=testdata bs=1M count=1000

*GNU utilities for Win32に含まれているdd.exeを利用する [#zd3763b6]

-パスの指定の仕方が少し特殊なので注意。
--通常のDOSコマンドであれば「C:」と指定するところを、「\\.\c:」と指定する必要がある。

例:FDのイメージを作る。

 dd if=\\.\a: of=image

 ここでFDDはAドライブだと仮定した。