2007-08-13

ディスクイメージとパーティション

Xenの HVM Domain(完全仮想化)を使うと、まるで実機のごとくゲストOSをインストールして動かせるわけだけれども、完全仮想ドメインに与えてやる仮想ディスクは「パーティション」ではなく「ディスク」として扱われるので、ホストOS側から見るとそのディスクイメージにはパーティションテーブルといった情報が書き込まれた謎のバイナリデータであり、ファイルシステムとしてマウントすることができない。
この問題はHVM Domainを使う場合以外にも、iSCSIで他のホストにディスクをエクスポートする場合も同様である(iSCSIで提供できるのはパーティションではなくディスク)。

これだとホストOSからファイルレベルでバックアップを取るようなことができなくて困るのでどうしたものかと思っていたが、Xenのメーリングリストを見ていたら multipath-toolsなるツール群に含まれる kpartxなるコマンドでディスクイメージの中にあるパーティションに対してデバイスマッパー経由でアクセスできるようになることがわかった。

# emerge multipath-tools (AMD64の場合maskされてるので /etc/portage/package.keywordsで適当にunmaskする)

例えば /dev/raid5/winxp なるボリュームが実は Windows XPを入れたHVM Domain用のディスクイメージだとする。ホストOSからは、そのままだと(カーネルのNTFSサポートが有効でも)このディスクをマウントすることができない。マウントしたいファイルシステムが格納されているのは、このディスクイメージの中に含まれている「パーティション」だから。

そこで

# kpartx -a /dev/raid5/winxp

としてやると、ディスクに含まれるパーティションを示す /dev/mapper/winxp1 なるデバイスが出現するので、これを mount -t ntfs /dev/mapper/winxp1 /mnt のようにしてマウントしてやることが出来るのである(パーティションが複数あるディスクイメージの場合は winxp1 winxp2 のように複数のデバイスがマッピングされる)。

マウントして、アレやソレして、アンマウントして、そいつらに対する用が済んだら、

# kpartx -d /dev/raid5/winxp

で/dev/mapperからそれらのパーティションは居なくなる。

kpartxがGUIDパーティションに対応しているかどうかは未検証(GUIDパーティションを切ったディスクイメージに対して試しにやってみたらとりあえずエラーにはならなかったが、なにぶん中身が HFS+だったのでそれ以上検証せず)

それにしても Linuxのデバイスマッパーって色々できるね・・・

1 件のコメント:

Blogger Yasushi さんは書きました...

offset=32256をmountにつけると最初のパーティションはマウントできたりする

2007/08/13 22:33  

コメントを投稿

<< ホーム