ゲストの仮想ディスクをホストでマウントして使う

VMwareのフラット・ディスクはHDDのイメージそのもの、ということは、わざわざゲストマシンを立ち上げなくてもホストマシン上でマウントして使えることになる。 HDDのイメージファイルをマウントして使う方法はいくつかあるが、ここでは一番手間のかからないkpartxコマンドでパーティションにアクセスするためのデバイスファイルを作成し、そのデバイスファイルをマウントしてみる。(Linux上でHDDイメージファイルをマウントして使う詳しい方法は「HDDイメージファイルをマウントして使う方法」を参照。)

[root@server Fedora-8]# ls /dev/mapper/			;: ← 念のためmapperの下が空なのを確認
control
[root@server Fedora-8]# kpartx -v -a smallest-flat.vmdk	;: ←kpartxでパーティションのファイルを作る
add map loop0p1 : 0 208782 linear /dev/loop0 63
[root@server Fedora-8]# ls /dev/mapper/			;: ←mapperの下にデバイスファイルを確認
control  loop0p1
[root@server Fedora-8]# mount /dev/mapper/loop0p1 /mnt	;: ←そのデバイスファイルをマウントしてみると
[root@server Fedora-8]# ls /mnt				;: ←ゲストマシンのファイルにアクセス
lost+found
[root@server Fedora-8]#

これで、ゲストマシンのディスクにホストマシンから直接アクセスできることが確認できた。試しに、このマウントした状態で適当なファイルを書き込んでみる。

[root@server Fedora-8]# cp /boot/vmlinuz-2.6.25.10-47.fc8 /mnt	;: ←vmlinuzをコピーしてみる
[root@server Fedora-8]# ls -l /mnt				;: ←コピーしたファイルを確認
total 2039
drwx------ 2 root root   12288 2008-07-25 16:36 lost+found
-rw-r--r-- 1 root root 2065176 2008-07-25 17:24 vmlinuz-2.6.25.10-47.fc8
[root@server Fedora-8]# umount /mnt				;: ←デバイスをアンマウントし
[root@server Fedora-8]# kpartx -v -d smallest-flat.vmdk		;: ←loopデバイスを開放する
del devmap : loop0p1
loop deleted : /dev/loop0
[root@server Fedora-8]# ls /dev/mapper/				;: ←開放されたことを確認
control
[root@server Fedora-8]#

次にゲストマシンを立ち上げてsmallestディスクの内容を確認してみると、

[root@fedora-8 ~]# mount /dev/sdb1 /mnt
[root@fedora-8 ~]# ls -l /mnt
total 2039
drwx------ 2 root root   12288 2008-07-25 16:36 lost+found
-rw-r--r-- 1 root root 2065176 2008-07-25 17:24 vmlinuz-2.6.25.10-47.fc8
[root@fedora-8 ~]#

はい、ちゃんとホスト上でコピーしたファイルをゲスト上でも確認できました。

なお、フラットデバイスをゲストマシンとホストマシンで同時にアクセスすることはやめておいた方がいい。それぞれのマシンでキャッシュしているので、データの不整合が起き、ファイルシステムを壊してしまう筈(未確認)。
⇒ホスト上のHDDイメージファイルをゲストマシンでマウントして使う