仮想化ソフトウェアのディスクイメージを変換
Virtualboxのハードディスクイメージのファイル形式はvdi形式ですが、VMwareのvmdk形式、VirtualPCのvhd形式、Parallelesのhdd形式については、VirtualBoxは対応しているので、そのまま利用できます。 qemu/kvmのqcow2形式やddなどで切り出したディスクイメージは、対応していないので変換をする必要があります。
仮想化ソフトウェア | ディスクイメージタイプ | VirtualBoxでの利用 |
---|---|---|
VirtualBox | vdi | ◎ |
VMware | vmdk | ◎ |
VirtualPC | vhd | ◎ |
Parallels | hdd | ◎ |
qemu/kvm | qcow2 | × |
raw image | 特になし(慣例的にimgなど) | × |
ハードディスクイメージの変換
ハードディスクイメージの変換に使うツールですが、VirtualBoxが対応しているディスクイメージとrawイメージについては付属の vboxmanage コマンドを利用して変換できます。 vboxmanage が対応していないディスクイメージについては、qemu/kvmのユーティリティである qemu-img を利用すると変換できます。
qemu/kvmのqcow2形式からVirtualboxのvdi/VMwareのvmdk形式
VirtualboxはVMwareのvmdk形式も利用する事ができるので、qemuのqemu-imgコマンドを使いvmdk形式に変換して利用します。 qemu-imgでvdiに対応したのでそのまま変換できます。
$ qemu-img convert -O vmdk (元イメージファイル名).qcow2 (変換イメージファイル名).vmdk
vdiにしたい場合は、一度rawイメージにしてからvdiに変換します。
$ qemu-img convert -O raw (元イメージファイル名).qcow2 (作業用ファイル名).raw $ VBoxManage convertfromraw --format VDI (作業用ファイル名).raw (変換イメージファイル名).vdi
変換したイメージを少しコンパクトにしたいなら。
$ VBoxManage modifyhd (変換イメージファイル名).vdi --compact
余談ですが、VMwareの2Gごとに分割されたvmdkイメージを一つにするには、こんな感じにするとよいみたいです(未確認)
$ vmware-vdiskmanager -r (分割イメージファイル名).vmdk -t 0 (書き出すファイル名).vmdk
Virtualboxのvdi形式からqemu/kvmのqcow2形式
VirtualboxのVBoxManageコマンドを使ってrawかvmdk形式に変換してから、qemuのqemu-imgを使ってqcow2形式に変換します。
$ VBoxManage clonehd --format VMDK|VHD|RAW (元イメージファイル名).vdi (作業用ファイル名) $ qemu-image convert -f vmdk|vhd|raw -O qcow2 (作業用ファイル名) (変換イメージファイル名).qcow2
Virtualbox 2.x系(?)では、VBoxManage clonehdにバグがあり、うまくクローニングできません。少なくとも 2.1/2.2ではダメでした。 clonehdでクローンした後、VBoxManage internalcommands sethduuid を使ってuuidを振りなおすと使えるようになります。
$ VBoxManage internalcommands sethduuid (作業用ファイル名) (2.1/2.2系の場合。3.x系は未確認)
実パーティション(Raw Partition)をディスクイメージに変換する
実パーティションをディスクイメージに変換するには、後述のqemu-nbdとntfsclone/partedを使います。
イメージファイル内のパーティションを操作する
qemu/kvmのqemu-nbdを使うとネットワークブロックデバイス(nbd)を利用してイメージファイルの中のパーティションを直接操作できます。
参考
- QEMU - Debian Wiki: http://wiki.debian.org/QEMU
- qemu-nbdの使いかた - KVM日記: http://d.hatena.ne.jp/kvm/20080619/1213888527
まずカーネルモジュールnbdを組み込みます。オプションのmax_partをつけないとパーティションが見えないので必ずつけてください。
# modprobe nbd max_part=16
nbdデバイスができました。
# ls /dev/nbd* /dev/nbd0 /dev/nbd10 /dev/nbd12 /dev/nbd14 /dev/nbd2 /dev/nbd4 /dev/nbd6 /dev/nbd8 /dev/nbd1 /dev/nbd11 /dev/nbd13 /dev/nbd15 /dev/nbd3 /dev/nbd5 /dev/nbd7 /dev/nbd9
イメージファイルをnbdデバイスに接続します。例では/dev/nbd0にマウントしました。 参照のみで書き込みをしたくない場合は–read-onlyオプションをつけます。
# qemu-nbd -c /dev/nbd0 (イメージファイル).vdi|qcow2
パーティションが見えました。
# ls /dev/nbd* /dev/nbd0 /dev/nbd1 /dev/nbd11 /dev/nbd13 /dev/nbd15 /dev/nbd3 /dev/nbd5 /dev/nbd7 /dev/nbd9 /dev/nbd0p1 /dev/nbd10 /dev/nbd12 /dev/nbd14 /dev/nbd2 /dev/nbd4 /dev/nbd6 /dev/nbd8
fdisk -lで/dev/nbd0を見てみます。
# fdisk -l /dev/nbd0
Disk /dev/nbd0: 21 GB, 21467980800 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System /dev/nbd0p1 * 1 2609 20956761 7 HPFS/NTFS
パーティションをマウントしてみました。
# mount -t ntfs /dev/nbd0p1 /mnt/ # ls /mnt/ AUTOEXEC.BAT IO.SYS Program Files WINDOWS f13531f3d40a89b79498 CONFIG.SYS MSDOS.SYS RECYCLER boot.ini ntldr Documents and Settings NTDETECT.COM System Volume Information bootfont.bin pagefile.sys
パーティションの操作を止めるにはアンマウントして、qemu-nbdの接続を解除します。
# umount /mnt # qemu-nbd -d /dev/nbd0
ハードディスクやパーティションをイメージファイル化する
イメージファイルを実パーティションのように扱えるということは、NTFSパーティションをコピーするntfscloneやパーティションを操作するpartedを使い、実パーティションからイメージファイル、イメージファイルから実パーティションといった操作もできます。
Microsoftが出しているdisk2vhdを使うと、その辺の処理をしてイメージファイル化するので、WindowsパーティーションのP2Vをしたい場合は、そちらを使うほうが良いでしょう。
ntfscloneを使ってntfsパーティションを操作した例をあげます。
nbd0にイメージファイルをマウント。
# qemu-nbd -c /dev/nbd0 VIRTUALDISK.vdi
イメージファイルのパーティション1に対して、実パーティションの/dev/sda1をntfscloneでクローンします。
# ntfsclone -O /dev/nbd0p1 /dev/sda1