【Linux】KVMの仮想ハードディスクイメージをマウントする
以前、ディスクイメージファイルをマウントする方法について記事を書きました。
同様のパターンとしてKVMの仮想ハードディスクイメージをマウントしたいケースがあります。
KVMの仮想ハードディスクイメージをマウントしたい場合、raw形式であれば普通にループバックデバイスとしてマウント出来ますが、qcow2形式だとそうはいきません。
qcow2形式は、暗号化されていたり差分形式をとっていたりするためです。
とはいえ、どうにもならないわけではありません。qcow2形式のディスクイメージをマウントしたい場合は、nbd(Network Block Device)経由で行います。
そんなわけで、本日の記事はKVMのraw形式ディスクイメージ、qcow2形式ディスクイメージそれぞれのマウント方法について書きます。
なお、いつもの通り、この記事での例はUbuntuによるものです。
ちなみに、普通のディスクイメージをマウントする方法について書いた過去記事はこちら。
ループバックデバイスの使い方を知らない方は、上記の記事からどうぞ。
raw形式の場合
raw形式のディスクイメージファイルであれば、以前紹介した記事の手法でいけます。
(下記例では、kpartxを使用)
# kpartx -av /var/lib/libvirt/images/raw_hdd.img
add map loop0p1 (252:0): 0 48232448 linear /dev/loop0 2048
add map loop0p2 (252:1): 0 2 linear /dev/loop0 48236542
add map loop0p5 : 0 4190208 linear /dev/loop0 48236544
# mount /dev/mapper/loop0p1 /mnt/hddimage/
$ ls /mnt/hddimage/
bin boot cdrom dev etc home initrd.img lib lib64 lost+found media mnt opt proc root run sbin snap srv sys tmp usr var vmlinuz
普通にOK。
qcow2形式の場合
qcow2形式のディスクイメージファイルの場合は、前述の通り、nbd経由でマウントします。
「nbd」というのは、Network Block Deviceの略で、その名の通りネットワーク上にある他マシンのブロックデバイス*1をネットワーク経由でローカルのブロックデバイスに見せかけるものです。
qemu-nbdというツールを使って、qcow2ディスクイメージをnbdクライアントとして扱うことでマウントします。
qemu-nbdがインストールされている必要があります。
qemu-nbdはqemu-utilsというパッケージに含まれますので、インストールされてなければ入れましょう。
# apt-get install qemu-utils
nbdを利用しますので、nbdカーネルモジュールをロードする必要があります。
# modprobe nbd
ロードすると、/dev下に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
では、qemu-nbdを利用して、とりあえずnbd0にディスクイメージを接続しましょう。
# qemu-nbd --connect=/dev/nbd0 /var/lib/libvirt/images/qcow2_hdd.img
qcow2に複数パーティションがあっても、kpartxなどを利用する必要はありません。
自動的にパーティションごとのデバイスを作ってくれます。下記例では/dev/nbd0p1が一つ目のパーティションです。
$ ls /dev/nbd0*
/dev/nbd0 /dev/nbd0p1 /dev/nbd0p2 /dev/nbd0p5
後は、マウントするだけです。
# mount /dev/nbd0p1 /mnt/hddimage/
$ ls /mnt/hddimage/
bin cdrom etc initrd.img lib lost+found mnt proc run srv tmp var vmlinuz.old
boot dev home initrd.img.old lib64 media opt root sbin sys usr vmlinuz
使い終わったら、アンマウントと併せてqemu-nbdでdisconnectしましょう。
# umount /mnt/hddimage
# qemu-nbd --disconnect /dev/nbd0
/dev/nbd0 disconnected
*1:ハードディスクやCD/DVDドライブなどのこと