2.

IMG (.img) とは | raw ディスクイメージ / dd / Raspberry Pi OS

編集
この記事の要点
  • .imgディスクの内容をセクタ単位でそのまま吸い出した raw イメージ。フロッピー・USB メモリ・SD カード・HDD などあらゆるブロックデバイスを丸ごとファイル化できる
  • ISO が光学ディスク前提なのに対し、IMG は パーティションテーブル(MBR / GPT)と複数パーティションを含められる 汎用フォーマット。実体は無構造の raw バイト列
  • Raspberry Pi OS、ESP32 ファームウェア、組み込み Linux、ルーター OS、各種シングルボードコンピュータの配布形式として広く使われる
  • 書き込みは dd if=foo.img of=/dev/sdX bs=4M が定番。GUI なら balenaEtcher、Raspberry Pi Imager、Rufus などが対応
  • 配布時は .img.gz / .img.xz / .img.zip など圧縮して提供されることが多い(中身がスカスカでも raw サイズで配ると重いため)
  • マウントするときは kpartxlosetup -P でパーティションを個別ループバックデバイスとして認識させる
  • ISO とは異なり書き戻し可能。ただし扱いは生のディスクと同じなので パーティション境界やファイルシステムの整合性を破壊しないよう注意

概要

IMG ファイル(拡張子 .img)は、ハードディスク・SSD・USB メモリ・SD カード・フロッピーディスクといった ブロックデバイスの全セクタを、先頭から末尾までそのままバイト列として保存した raw イメージファイル です。ファイルの内容物に余計なメタデータは一切含まれず、デバイスのバイト列がそのまま保存されているだけ、というシンプルな構造をしています。

ISO ファイルとよく似ていますが、ISO が 光学ディスク(ISO 9660 / UDF が前提) のイメージであるのに対し、IMG は パーティションテーブル(MBR または GPT)を含む任意のブロックデバイス を対象とできる点が異なります。1 枚の IMG ファイルの中に ブートローダー + EFI システムパーティション + ルートファイルシステム + データ領域 のように複数パーティションを含めることが普通です。

現代における代表的な用途は シングルボードコンピュータ向け OS の配布 です。Raspberry Pi OS、Ubuntu Server for Raspberry Pi、Armbian、LibreELEC、RetroPie、ESP32 / ESP8266 のファームウェアなど、SD カードや eMMC に直接書き込んで起動する OS は IMG 形式で配布されるのが普通です。Raspberry Pi 公式の Raspberry Pi Imager は IMG をダウンロード→書き込みまで一気通貫で実行する GUI ツールとして広く使われています。

IMG ファイルは内容がそのままバイト列なので 非常に巨大 になります。32 GB の SD カードを丸ごと吸い出すと(書き込み済みデータ量によらず)32 GB の IMG ファイルになります。配布時は .img.gz / .img.xz / .img.zip といった形で圧縮されることがほとんどです。空き領域が大量の 0x00 で埋まっているため、圧縮効率は非常に良くなります。

内部構造

IMG ファイルには ヘッダもメタデータも存在しません。先頭から末尾まで、ディスクと同じバイト列がそのまま入っています。典型的な 1 GB IMG の中身を見ると次のような構造をしています。

オフセット内容説明
0x000 - 0x1FFMBR(Master Boot Record)ブートコード + パーティションテーブル(最大 4 エントリ)
0x200 - 0x?パーティション 1(例: EFI System / FAT32)ブートローダーや UEFI 用ファイル
0x? - 0x?パーティション 2(例: Linux root / ext4)OS のルートファイルシステム
...追加のパーティションswap、データ領域など
末尾未使用領域(0x00 で埋まっていることが多い)配布時に圧縮で潰される

GPT(GUID Partition Table)を使う近年の IMG は MBR の代わりに先頭に Protective MBR + GPT ヘッダ、末尾に GPT バックアップ が配置されます。Raspberry Pi OS のように MBR + FAT32 ブートパーティション + ext4 ルートという構成が組み込み界隈では今も主流です。

主な用途

  • SBC(シングルボードコンピュータ)の OS インストール — Raspberry Pi / Orange Pi / Rock Pi / BeagleBone などの SD カード書き込み
  • 組み込み機器のファームウェア配布 — ルーター・NAS・産業用デバイスの初期化イメージ
  • USB ブートメディアの作成 — Linux ライブ環境、レスキューシステム
  • ディスククローン・バックアップ — 起動可能な状態を含めた完全バックアップ。dd で吸い出し / 書き戻し
  • 仮想マシン用ディスク — QEMU は .img をそのまま仮想ディスクとして起動できる(-drive file=disk.img,format=raw
  • フォレンジック調査 — 押収媒体のビット単位コピー(dd / dcfldd / FTK Imager)

関連形式との比較

形式対象圧縮備考
IMG(raw)任意のブロックデバイスなしシンプル・ツール非依存
ISO光学ディスクなしISO 9660 / UDF 前提
VHD / VHDX仮想ディスク差分・可変対応Microsoft 仮想化
VMDK仮想ディスク分割・差分対応VMware 仮想化
QCOW2仮想ディスクあり / 差分 / 暗号化QEMU/KVM 標準
DMGmacOS イメージありApple 独自、HFS+/APFS

IMG は 最もプリミティブで互換性が高い 反面、サイズが大きく差分・スナップショットなどの高機能はありません。仮想マシン用途では QCOW2 や VHDX のほうが効率的です。

コマンド・ツール

SD カードへの書き込み(デバイス名は lsblk で必ず確認):

# 圧縮イメージを直接書き込み(パイプで展開)
xzcat 2024-03-15-raspios-bookworm-arm64.img.xz | sudo dd of=/dev/sdX bs=4M status=progress conv=fsync
sync

# 平文 IMG の書き込み
sudo dd if=disk.img of=/dev/sdX bs=4M status=progress conv=fsync

ディスク → IMG への吸い出し(バックアップ):

# SD カードを丸ごと IMG 化(圧縮しながら)
sudo dd if=/dev/sdX bs=4M status=progress | gzip -c > sdcard-backup.img.gz

IMG 内のパーティションをマウント:

# 方法 1: losetup -P でパーティション認識
sudo losetup -fP --show disk.img
# → /dev/loop0, /dev/loop0p1, /dev/loop0p2 が現れる
sudo mount /dev/loop0p2 /mnt/root

# 方法 2: kpartx
sudo kpartx -av disk.img
sudo mount /dev/mapper/loop0p2 /mnt/root

# 後始末
sudo umount /mnt/root
sudo losetup -d /dev/loop0

注意点

  • ddof= を絶対に間違えない。誤って /dev/sda(システムディスク)を指定するとシステムが即座に破壊される。lsblk -f で対象を確認する習慣を
  • ブロックサイズ(bs=)は 1M〜4M 程度を指定すると速い。デフォルトの 512 バイトでは遅すぎる
  • SD カードの容量より大きな IMG は当然書き込めない。逆に小さい場合は末尾領域が未使用のまま残るので、書き込み後にパーティションを拡張する(raspi-configparted で resize)
  • 圧縮 IMG(.img.xz / .img.gz)を一度展開してから書くより、xzcat | ddgunzip -c | dd でパイプしたほうがディスク容量を節約できる
  • Windows でのデバイス書き込みは GUI ツール(Raspberry Pi Imager / Rufus / balenaEtcher)を使うほうが安全。生 dd は MSYS / WSL でも動くがリスクが高い
  • IMG ファイルは 差分やスナップショットを持てない。VM 用途では QCOW2 / VHDX のほうがディスク効率と運用性で優れる

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ISO(.iso)
  2. IMG(.img)
  3. VHD / VHDX(.vhd / .vhdx)
  4. QCOW2(.qcow2)
  5. OVA / OVF(.ova / .ovf)
  6. PEM(.pem)
  7. CRT / CER / DER(.crt / .cer / .der)
  8. PFX / P12(.pfx / .p12)
  9. PCAP / PCAPNG(.pcap / .pcapng)
  10. DMP / コアダンプ(.dmp / .core)

最近更新/作成されたページ