qemu-nbdの使いかた

qemu-nbdはqemuで用いられる特殊なVMディスク(qcow2フォーマット,例えば差分形式であったり暗号化されていたりする)をループバックマウントするためのツールです.KVMの場合kvm-70から同梱されています.

qemu-nbdはNBDサーバとして振る舞い,その特殊なVMディスクを単純なブロックデバイスとしてnbd-clientに見せます.nbd-clientはそのブロックデバイスをブロックデバイスファイル(ex. /dev/nbd0)と結びつけます.

あとは,/dev/nbd0をマウントするだけですが,そのまま単純にマウントできるわけではありません./dev/nbd0はディスクそのものなのでパーティションを指定しなければマウントできません.(/dev/nbd0p1でアクセスする方法がある?)またVMディスクでLVMを使っている場合も追加の処理が必要です(エントリ末の参考ページ参照).

以下は使用例です.

/sbin/modprobe nbd
# mknod /dev/nbd0 b 43 0

/usr/bin/qemu-nbd -p 1234 guest.qcow2 &
# sleep 1
/usr/sbin/nbd-client localhost 1234 /dev/nbd0

/sbin/fdisk -l -u /dev/nbd0

# 63番目のセクタを開始位置とするパーティションをマウントする場合
/bin/mount -t ext3 -o offset=$((63*512)) /dev/nbd0 /somewhere/mnt/

# /somewhere/mnt/以下を操作する

# sync;sync;sync;
/bin/umount /somewhere/mnt/
/usr/sbin/nbd-client -d /dev/nbd0
# qemu-nbdは自動的に終了する(はず)

コメントアウトしてある箇所はなくても動作するはずですが,私が試した環境でスクリプト化して実行した場合に必要だった処理です.もしうまく動作しなかった場合に,試してみると問題が解決するかもしれません.

参考ページ:

7/21追記

qemu-nbdをもっと使いやすくするパッチが流れてましたね.

qemu-nbd --connect=/dev/nbd0 my_disk.qcow2
fdisk -l /dev/nbd0
qemu-nbd --disconnect /dev/nbd0

これはお手軽だ;)