ddコマンドでディスクイメージを作成・書き込みする方法|bs・countの指定やUSBブート作成も


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > ddコマンドでディスクイメージを作成・書き込みする方法|bs・countの指定やUSBブート作成も
「ディスクの中身を丸ごとバックアップしたいけど、cpやtarでは無理そうだ」
「ISOイメージをUSBメモリに書き込んでブータブルUSBを作りたいが、やり方がわからない」
Linuxでディスクやパーティションをブロック単位で丸ごとコピーするには、dd(ディーディー)コマンドを使います。

この記事では、dd コマンドの基本構文から、ディスクイメージの作成・復元、ISOイメージのUSB書き込み、進捗表示の方法、そして実務で事故を防ぐための注意点まで解説します。
RHEL 9.4 / Rocky Linux 9.4 / Ubuntu 24.04 LTS で動作確認済みです。

この記事のポイント

・dd if=入力 of=出力 bs=サイズ でディスクを丸ごとコピーできる
・ISOイメージのUSB書き込みはdd一発で完了する
・if/ofの指定ミスはデータ全損に直結するため必ず確認する
・status=progressで進捗をリアルタイム表示できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

ddコマンドとは?(ブロック単位のコピーツール)

dd は「data duplicator」の略で、入力元(if)から出力先(of)へデータをブロック単位でコピーするコマンドです。

cp がファイル単位のコピーであるのに対し、dd はデバイスやパーティションをバイト列としてそのまま複製します。ファイルシステムの種類に関係なく、ディスクの中身を丸ごとコピーできるのが最大の特徴です。

典型的な使い方は以下のとおりです。

ディスクイメージの作成・復元:サーバーのディスクをイメージファイルとしてバックアップする
USBブートメディアの作成:ISOイメージをUSBメモリに書き込む
ディスクの初期化:/dev/zero で全領域をゼロ埋めする
MBR(ブートセクタ)のバックアップ:先頭512バイトだけをコピーする

基本構文とオプション

1. ddコマンドの基本書式

dd は一般的なLinuxコマンドと書式が異なり、オプション=値 の形式で引数を指定します。

# 基本書式 # dd if=入力元 of=出力先 bs=ブロックサイズ count=ブロック数 # /dev/sda の内容を disk.img というファイルにコピーする例 # dd if=/dev/sda of=/home/backup/disk.img bs=4M status=progress

2. 主要なオプション一覧

if=(input file):入力元を指定する。デバイス名(/dev/sda)やファイルパスを指定できる
of=(output file):出力先を指定する。ここを間違えるとデータが消える
bs=(block size):1回の読み書きで転送するサイズ。デフォルトは512バイト
count=:コピーするブロック数を指定する。省略するとif全体をコピーする
status=progress:コピーの進捗をリアルタイム表示する(GNU coreutils 8.24以降)
conv=:変換オプション。noerror(エラーを無視して続行)、sync(不足分をゼロ埋め)など

3. ブロックサイズ(bs)の選び方

bs の値はコピー速度に直結します。デフォルトの512バイトでは遅すぎるため、実務では 4M(4メガバイト)を指定するのが定番です。

# bs=512(デフォルト)でのコピー - 非常に遅い # dd if=/dev/sda of=disk.img # bs=4M でのコピー - 実務で推奨される速度 # dd if=/dev/sda of=disk.img bs=4M status=progress 4294967296 bytes (4.3 GB, 4.0 GiB) copied, 38 s, 113 MB/s

USBメモリへの書き込みなど、デバイスの書き込み速度が遅い場合は bs=1M でも十分です。大きすぎる値を指定するとメモリを圧迫するため、4M64M の範囲で調整してください。

ディスクイメージの作成と復元

4. ディスク全体をイメージファイルに保存する

サーバーのディスクを丸ごとイメージファイルとしてバックアップする手順です。

# /dev/sda 全体をイメージファイルにバックアップする # dd if=/dev/sda of=/mnt/backup/server_disk.img bs=4M status=progress 21474836480 bytes (21 GB, 20 GiB) copied, 185 s, 116 MB/s 8192+0 records in 8192+0 records out # 作成されたイメージファイルのサイズを確認する # ls -lh /mnt/backup/server_disk.img -rw-r--r--. 1 root root 20G 4月 11 10:30 server_disk.img

※ディスクイメージは元のディスクと同じサイズになります。20GBのディスクなら20GBのファイルが作られます。保存先の空き容量を事前に確認してください。

5. 圧縮しながらイメージを作成する

ディスクイメージはサイズが大きくなるため、gzip でパイプして圧縮しながら保存するのが実務的です。

# gzipで圧縮しながらディスクイメージを作成する # dd if=/dev/sda bs=4M status=progress | gzip > /mnt/backup/server_disk.img.gz # 圧縮後のサイズを確認する(元の20GBが約6GBに圧縮された例) # ls -lh /mnt/backup/server_disk.img.gz -rw-r--r--. 1 root root 5.8G 4月 11 10:45 server_disk.img.gz

6. イメージファイルからディスクを復元する

バックアップしたイメージファイルをディスクに書き戻す場合は、ifof を逆にします。

# イメージファイルをディスクに復元する # dd if=/mnt/backup/server_disk.img of=/dev/sda bs=4M status=progress # gzip圧縮イメージから復元する場合 # gunzip -c /mnt/backup/server_disk.img.gz | dd of=/dev/sda bs=4M status=progress

※復元先のディスクは復元されるデータで完全に上書きされます。既存のデータはすべて消えるため、対象ディスクを間違えないよう lsblk で必ず確認してから実行してください。

ISOイメージのUSB書き込み(ブータブルUSBの作成)

7. ISOファイルをUSBメモリに書き込む

LinuxのインストールメディアをUSBメモリで作成する場面で、dd は最もよく使われるコマンドです。

# まずUSBメモリのデバイス名を確認する # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 238.5G 0 disk |-sda1 8:1 0 600M 0 part /boot/efi |-sda2 8:2 0 1G 0 part /boot |-sda3 8:3 0 236.9G 0 part / sdb 8:16 1 14.5G 0 disk <-- これがUSBメモリ |-sdb1 8:17 1 14.5G 0 part /run/media/user/USB # USBメモリがマウントされていたらアンマウントする # umount /dev/sdb1 # ISOイメージをUSBメモリに書き込む(sdb全体を指定する) # dd if=Rocky-9.4-x86_64-dvd.iso of=/dev/sdb bs=4M status=progress conv=fsync 10737418240 bytes (11 GB, 10 GiB) copied, 612 s, 17.5 MB/s

注意点が3つあります。

デバイス名は「sdb」であり「sdb1」ではない:パーティション(sdb1)ではなく、ディスク全体(sdb)を指定する
conv=fsyncを付ける:書き込みが確実にディスクに反映されてからddが終了する。これがないとUSBを抜いた時にデータが壊れる場合がある
ofの指定を絶対に間違えない:of=/dev/sda と書いてしまうと、メインディスクが消える

MBR(ブートセクタ)のバックアップと復元

8. MBR(先頭512バイト)をバックアップする

MBR(Master Boot Record)はディスクの先頭512バイトに格納されています。ddcount オプションで必要な部分だけを切り出せます。

# MBR(先頭512バイト)をバックアップする # dd if=/dev/sda of=/root/mbr_backup.bin bs=512 count=1 1+0 records in 1+0 records out 512 bytes copied, 0.000512 s, 1.0 MB/s # バックアップ内容を16進数で確認する # xxd /root/mbr_backup.bin | tail -3 000001e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 000001f0: 0000 0000 0000 0000 0000 0000 0000 55aa ..............U.

末尾の 55aa がMBRのマジックナンバーです。この値が確認できれば、正しくバックアップされています。

9. MBRを復元する

# バックアップからMBRを復元する # dd if=/root/mbr_backup.bin of=/dev/sda bs=512 count=1

※GPT(GUIDパーティションテーブル)を使用している環境では、MBRの操作は基本的に不要です。現在のRHEL 9 / Rocky Linux 9はデフォルトでGPTを使用しています。レガシーBIOSのシステムを扱う場合のみ必要になります。

ディスクの初期化(ゼロ埋め・ランダム埋め)

10. ディスクをゼロ埋めする

ディスクを廃棄・譲渡する際に、全領域をゼロで上書きしてデータを消去します。

# /dev/sdb を全領域ゼロ埋めする(データ完全消去) # dd if=/dev/zero of=/dev/sdb bs=4M status=progress dd: error writing '/dev/sdb': No space left on device 15518924800 bytes (16 GB, 14 GiB) copied, 870 s, 17.8 MB/s

「No space left on device」というメッセージが出て終了するのが正常な動作です。ディスクの末尾まで書き込んだことを示しています。

11. ランダムデータで上書きする(より安全な消去)

セキュリティ要件が厳しい場合は、/dev/urandom でランダムデータを書き込みます。

# ランダムデータで上書きする # dd if=/dev/urandom of=/dev/sdb bs=4M status=progress

/dev/urandom はゼロ埋めより処理が遅くなりますが、データ復元の難度が大幅に上がります。一般的な社内利用であればゼロ埋めで十分です。

実務Tips:ddコマンドを安全に使う

12. 実行前に必ずlsblkでデバイスを確認する

dd の最大のリスクは、of= に誤ったデバイスを指定してデータを破壊することです。実行前には必ず lsblk でデバイスの構成を確認してください。

# dd実行前に必ずデバイス構成を確認する # lsblk -o NAME,SIZE,TYPE,MOUNTPOINTS NAME SIZE TYPE MOUNTPOINTS sda 238.5G disk |-sda1 600M part /boot/efi |-sda2 1G part /boot |-sda3 236.9G part / sdb 14.5G disk <-- USBメモリ(書き込み先) |-sdb1 14.5G part

13. status=progressで進捗を確認する

dd はデフォルトでは進捗を表示しないため、大きなディスクのコピー中に「動いているのか止まっているのか」がわかりません。status=progress を付ければ、転送量・経過時間・速度がリアルタイムで表示されます。

# 進捗表示あり(推奨) # dd if=/dev/sda of=disk.img bs=4M status=progress 5368709120 bytes (5.4 GB, 5.0 GiB) copied, 45 s, 119 MB/s

status=progress が使えない古いシステム(CentOS 6など)では、別ターミナルから kill -USR1 シグナルを送ることで進捗を表示させることもできます。

# 別ターミナルで実行中のddのPIDを確認してシグナルを送る # pgrep -x dd 12345 # kill -USR1 12345

14. conv=fsyncとconv=noerrorの使い分け

conv= オプションで指定する変換オプションのうち、実務で使うのは主に2つです。

conv=fsync:全データの書き込みが物理的にディスクに反映されてからddが終了する。USBメモリへの書き込み時に必須
conv=noerror,sync:読み取りエラーが発生しても処理を中断せず、エラー箇所をゼロ埋めして続行する。障害ディスクからの救出に使う

# 障害ディスクからデータを救出する(エラーを無視して続行) # dd if=/dev/sda of=/mnt/rescue/disk_rescue.img bs=4096 conv=noerror,sync status=progress

障害ディスクからの救出には、より高機能な ddrescue(GNU ddrescue)を使うほうが安全です。ddconv=noerror はエラー箇所のリトライを行わないため、ddrescue のほうが復旧率が高くなります。

トラブルシュート:ddで困った時の対処法

「Permission denied」が出た場合

dd でデバイス(/dev/sda、/dev/sdb等)を操作するには root 権限が必要です。

# 一般ユーザーで実行するとエラーになる $ dd if=/dev/sda of=disk.img bs=4M dd: failed to open '/dev/sda': Permission denied # sudo を付けて実行する $ sudo dd if=/dev/sda of=disk.img bs=4M status=progress

「No space left on device」が出た場合

2つのケースがあります。

ゼロ埋めの場合:正常終了。ディスク末尾まで書き込んだことを示している
イメージ保存の場合:保存先の空き容量不足。df -h で確認し、十分な空き容量がある場所に出力先を変更する

ddの実行を途中でキャンセルしたい場合

Ctrl+C で中断できます。ただし、書き込み中に中断するとデータが中途半端な状態になります。

イメージ作成中の中断:作りかけのイメージファイルが残るだけで、元のディスクには影響なし
イメージ復元中の中断:復元先ディスクが不完全な状態になる。最初からやり直す必要がある
USB書き込み中の中断:USBメモリが使用不能になる場合がある。再度ddで書き込めば復旧する

【重要】ddの危険性と事故防止策

dd は「disk destroyer」と揶揄されるほど、誤操作によるデータ破壊のリスクが高いコマンドです。以下の3点を必ず守ってください。

if=とof=を書き間違えない:入力と出力が逆になると、空のデバイスの内容で本番ディスクが上書きされる
デバイス名を目視で2回確認する:lsblk の出力と dd コマンドの of= を見比べてから Enter を押す
本番サーバーでは必ずアンマウントしてから実行する:マウント中のファイルシステムに対して dd で書き込むと、ファイルシステムが破損する

本記事のまとめ(ddコマンド早見表)

やりたいこと コマンド
ディスク全体をイメージに保存する dd if=/dev/sda of=disk.img bs=4M status=progress
圧縮しながらイメージを保存する dd if=/dev/sda bs=4M | gzip > disk.img.gz
イメージからディスクを復元する dd if=disk.img of=/dev/sda bs=4M status=progress
ISOをUSBメモリに書き込む dd if=image.iso of=/dev/sdb bs=4M conv=fsync status=progress
MBR(512バイト)をバックアップする dd if=/dev/sda of=mbr.bin bs=512 count=1
ディスクをゼロ埋めする dd if=/dev/zero of=/dev/sdb bs=4M status=progress
ランダムデータで上書き消去する dd if=/dev/urandom of=/dev/sdb bs=4M status=progress
障害ディスクからデータを救出する dd if=/dev/sda of=rescue.img bs=4096 conv=noerror,sync
dd はLinuxのディスク操作で最も基本的かつ強力なコマンドです。使い方を覚えると、ディスクのバックアップ・復元・クローンが自在にできるようになります。

ただし、of= の指定を間違えた瞬間にデータは消えます。「lsblkで確認 → コマンドを組み立て → デバイス名を目視で再確認 → 実行」の手順を習慣にしてください。

ddコマンドを「何となく」使っていませんか?

ディスクイメージの作成やUSBブートの書き込みは、操作を一歩間違えるだけでデータが消失します。ddの if=of= の指定ひとつとっても、デバイス名の確認手順や安全なオプション選択など、正しい知識がなければ本番環境で事故を起こしかねません。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。