※ 2015/4/30追記 : mountオプションで直接マウントする方法を書きました
Xenの仮想マシンのディスクは、パーティションやファイルを使用できますが、これらのパーティションやファイルを、仮想マシンを起動せずに中身を覗きたい場合があります。こういうときは、パーティションやファイルをLinuxのデバイスファイルとして扱ってあげることで、ディスクイメージをマウントすることができます。
デバイスファイルにするには、losetupコマンド、さらに作ったデバイスファイルをディスクと見立ててパーティションを読み取るのがkpartxコマンドです。
まずはlosetupコマンドで、パーティションやファイルをループバックデバイスとして設定していきます。ループバックデバイスは/dev/loop0や/dev/loop1などですが、使われていないループバックデバイスを探します。
# losetup -f /dev/loop1
ディスクイメージを/dev/loop1にマッピングします。ここではファイルを指定していますが、パーティションでもOKです。
# losetup /dev/loop1 /root/xen.img
設定できたかを確認します。下の例ではloop1にxen.imgが設定されています。
# losetup -a /dev/loop0: [0803]:41058319 (/root/cent5.4.iso) /dev/loop1: [0803]:42238103 (/root/xen.img)
これで/dev/loop1は、通常のディスクでいう/dev/hdaなどに相当します。しかし実際のディスクの場合、パーティションをつくると、/dev/hda1とか/dev/hda2とかいった風に番号がついていきますが、losetupだけではこれらのパーティション毎のデバイスファイルが作られません。そこで使用するのがkpartxコマンドです。
kpartxでloop1上のパーティションを見てみます。ここでは3っつのパーティションを確認できます。
# kpartx -l /dev/loop1 loop1p1 : 0 208782 /dev/loop1 63 loop1p2 : 0 4192965 /dev/loop1 208845 loop1p3 : 0 20980890 /dev/loop1 4401810
パーティションテーブルから、パーティションのデバイスファイルを作成します。
# kpartx -a /dev/loop1
確認します。/dev/mapperやfdiskコマンドで確認します。
# ls /dev/mapper/
# fdisk -lu /dev/loop1 ~省略~ /dev/loop1p1 * 63 208844 104391 83 Linux /dev/loop1p2 208845 4401809 2096482+ 82 Linux swap / Solaris /dev/loop1p3 4401810 25382699 10490445 83 Linux
ext3フォーマットのパーティションなどはそのままマウント可能です。
# mount /dev/mapper/loop1p3 /mnt/tmp
元に戻すには、アンマウント後、以下のようにコマンドを実行するだけです。
# umount /mnt/tmp # kpartx -d /dev/loop1 # losetup -d /dev/loop1