qcow2のディスクイメージをマウントして編集する@Ubuntu12.04

KVMなどで使われているqcow2形式のディスクイメージは、単純なディスクイメージと異なり、そのままループバックに繋いでもマウントすることができません。中身を編集するには、qemu-nbd コマンドを使って nbd (Network Block Device) 経由で扱います。nbd は、ネットワーク経由でローカルディスク上にあるディスクイメージをリモートからブロックデバイスとして扱えるようにするための機能がメインのものですが、今回はローカルにあるqcow2のディスクイメージをマウントするのに使うので、ネットワークはあまり関係ありません。

今回は、Ubuntu のクラウド向けの qcow2 ディスクイメージ precise-server-cloudimg-amd64-disk1.img をマウントしてみます。

qemu-utils パッケージがインストールされていない場合はインストールします。

# apt-get install qemu-utils

nbd カーネルモジュールをロードします。

# modprobe nbd

ロードが正常に完了すると、/dev/nbd0 や /dev/nbd1 といったデバイスが見えます。

# 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

/dev/nbd0 に ディスクイメージを繋ぎます。
※ファイル名は絶対パスを書かないとエラーになるので、`pwd`を付けています。

# qemu-nbd --connect=/dev/nbd0 `pwd`/precise-server-cloudimg-amd64-disk1.img

connectすると、パーティションがある場合は自動的にパーティションに応じたデバイスが自動的に作らるので、kpartxは不要です。

# ls /dev/nbd0*
/dev/nbd0  /dev/nbd0p1

いまどのデバイスを使っているかは、コマンドでは確認できそうにないですが、プロセスをgrepして確認可能です。

# ps -ef | grep [q]emu-nbd
root     11461     1  0 10:49 ?        00:00:00 qemu-nbd --connect=/dev/nbd0 /home/share/img/precise-server-cloudimg-amd64-disk1.img

後は、/dev/nbd0p1 を適当にマウントすれば中身が見られます。

# mkdir /mnt/tmp
# mount /dev/nbd0p1 /mnt/tmp

ディスクイメージのデフォルトのパスワード変更したいなら、chroot して passwd コマンド叩けば、イメージ起動後にコンソールからログインできるようにもなります。

# chroot /mnt/tmp
# passwd ubuntu
# exit

後始末は、アンマウントして、disconnectします。disconnectの時は、デバイス名の前に”=”は不要です。

# umount /mnt/tmp
# qemu-nbd --disconnect /dev/nbd0 
/dev/nbd0 disconnected
タイトルとURLをコピーしました