kvm ( qemu-kvm ) の仮想ディスク・イメージ
qemu-img qemu-nbd kpartx
QEMUは多くのディスクイメージをサポートします。 増加するディスクイメージ(空でないセクターが書き込まれるごとに大きくなる)や、圧縮された、暗号化されたディスクイメージを含みます。
仮想ディスクイメージの作成やコンバートするコマンドとして qemu-img をつかいます。現時点での「qemu-img バージョン 0.15.1」では、以下のフォーマットをサポートしているようです。httpとかftpとかありますね。これはどんな形式か今度調べてみますわ。
Supported formats:
rbd tftp ftps ftp https http host_cdrom host_floppy host_device
file blkverify sheepdog blkdebug nbd parallels qed qcow2 vvfat
vpc bochs dmg cloop vmdk vdi qcow cow raw
この中で raw qcow2 qcow cow vmdk cloop 形式を説明します。
- raw
Raw ディスクイメージフォーマット(デフォルト)。このフォーマットは単純なディスク・イメージで、ddコマンドで出力する形式と同じであり、他の仮想エミュレータに簡単にコンバート可能です。ユーザーのファイルシステムが holes(例えば、Linux での ext2 や ext3 で、Windows での NTFS で)をサポートしていれば、 書き込まれたセクターのみがスペースを保存します。qemu-img info を使用して、イメージ又は Unix/Linux 上で ls -ls で使用されている本当のサイズを知ることができます。また、linux上のmountコマンドで -t loop とし ループバックデバイスとして簡単にマウントできます。 - qcow2
QEMU イメージフォーマットは最も柔軟性のあり、kvmを使用するにあたって一般的なフォーマットです。より小さなイメージ (例えば Windows で使用フィルシステムが holes をサポートしない場合)、オプションの AES 暗号化、zlib ベースの圧縮、及び 複数 VM スナップショットのサポートなどを得るのに使用します。 - qcow
旧来の QEMU イメージフォーマットです。古いバージョンとの互換性の為にのみ含まれています。 - cow
ユーザーモード Linux Copy On Write イメージフォーマットです。cow フォーマットは以前のバージョンとの互換性の為にのみ含まれています。Windows では機能しません。 - vmdk
VMware 3 と 4 の互換イメージフォーマットです。 - cloop
cloopは圧縮ループイメージで、Debian系の1CD,DVD Linuxとして有名なKNOPPIXのルートファイルシステムとして利用されていることで有名であり、圧縮したままディスクイメージとしてマウントできます。使用例としては Knoppix の CD-ROMやDVDディスクやイメージファイルを起動する時くらいです。
※ 以下 OS環境 Fedora 16 64bit にて検証
仮想ディスク・イメージ qemu-img コマンド
使い方: qemu-img command [command options]
qcow2形式(サイズ増加形式)で4GBサイズを作成
# qemu-img create -f qcow2 qcow2.img 4G
イメージの情報を確認
# qemu-img info qcow2.img
kvmの起動例
# qemu-kvm -m 1024 -cpu core2duo -hda qcow2.img -cdrom DVD.iso
qcow2形式のマウント
qcow2形式のイメージファイルをスタンドアローン起動Linuxからマウントしてみる。
qcow2形式のマウントはqemu-nbdをつかう。qemu-nbdはqemuで用いられる特殊なVMディスク(qcow2フォーマット,例えば差分形式であったり暗号化されていたりする)をループバックマウントするためのツールです。
nbdモジュールのロード、/dev/nbd0にマッピング接続。
# modprobe nbd
//connect
# qemu-nbd -c /dev/nbd0 qcow2.img
プロセスを確認するとqemu-nbdが駐在してる
# ps ax | grep qemu-nbd
fsidkでパーティション情報を読み取る
# fdisk -lu /dev/nbd0
ループバックでマウント。fdiskで得たセクタ情報を元にする。
# mount -o loop,offset=$((63*512)) /dev/nbd0 /mnt/nbd1
/dev/nbd0のマッピングを切断。
// disconnect
# qemu-nbd -d /dev/nbd0
qemu-nbdプロセスが終了していることを確認する
# ps ax | grep qemu-nbd
kpartxコマンドでフォーマットする
fdiskやpartinfoのようなコマンドがあればオフセットを知るのは容易かと思うが、kpartxというコマンド使うことでより容易に(オフセットを計算せずに)任意のパーティションをマウントできる。kpartxはパーティション毎のブロック・デバイス・ファイルを /dev/mapper/の下に生成できる。
kpartxを使ってqemu-nbdのマッピング接続からマッパーデバイスを作成する(/dev/mapper/nbd0p1)
# kpartx -a /dev/nbd0
フォーマットしてみる
# mkfs.ext3 /dev/mapper/nbd0p1
マウントしてみる
# mount -t ext3 /dev/mapper/nbd0p1 /mnt/nbd
確認
# df -hT
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
rootfs rootfs 110G 17G 92G 16% /
devtmpfs devtmpfs 7.7G 0 7.7G 0% /dev
tmpfs tmpfs 7.8G 236K 7.8G 1% /dev/shm
/dev/sda2 ext4 110G 17G 92G 16% /
tmpfs tmpfs 7.8G 50M 7.7G 1% /run
tmpfs tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
tmpfs tmpfs 7.8G 0 7.8G 0% /media
/dev/sda1 ext4 2.0G 145M 1.8G 8% /boot
/dev/mapper/nbd0p1 ext3 4.0G 73M 3.7G 2% /mnt/nbd
マッパーデバイスを解除
# kpartx -d /dev/nbd0
仮想ディスク・イメージのその他
今回は qemu-img で qcow2形式を作成、qemu-nbdでスタンドアローン起動のOSでマッピング・マウント、そしてkpartxで仮想ディスク・イメージをマッパーデバイスに割り当てしフォーマットしてみた。
この他、「別の形式タイプを扱うこと」や「仮想イメージのスナップショットをとる」などいろいろできるので、試してみるといいと思う。
補足だが、qemu-imgコマンドは、VmWare のイメージファイル(vmdk)をコンバート(変換)することができる。( qemu-img convert ) そしてXenはraw形式をサポートしている。