how to mount xen image file

Xenの仮想マシンのハードディスクとして使用しているイメージファイルのマウント

仮想化マシン上で作業をして、その中身をホストマシンにコピーしたいときとかありますよね。
SCPでもいいですがいっぱいファイルがあると面倒ですし、同一マシン上なら面倒なことせずにコピーとかしたいです。なので以下の様にします。正直参考URLだけで完結しますが、一応自分の理解のために書きます。

シェルは#です。パス名などは自分の環境に合わせて読み替えが必要です。

環境

ホスト Debian etch
ゲスト Debian etch
まぁ環境なんてほとんど関係ないんですけどね。
たぶんLinuxならどれでもいっしょ。

準備

以下のコマンドを使います。一応どんなコマンドなのかくらいは把握しましょう。
fdisk
losetup
mount
全てスーパユーザじゃないと使えないコマンドなので、suするかsudoで実行してください。

手順

まず空いているループバックデバイスを探す。
#losetup -f
/dev/loop2とかが表示される
空いている最初のループバックデバイスがわかるので、そのループバックデバイスと対象のイメージファイルを接続する。
#losetup /dev/loop2 /tmp/Xen.img(イメージファイルへのパス)
ちゃんと接続されているか確認する。
#losetup /dev/loop2
/dev/loop2: [0812]:4309068(接続されているファイル名), offset ...
こんな感じで表示されればOK。

インストール時にパーティションを切っていない人

インストール時にパーティションを切っていない人は以下でOK
#mkdir mountpoint
マウントポイントを作ります。名前はなんでもいいです。
#mount /dev/loop2 mountpoint
mountpoint/にゲストOSの中身が見えているはず。

インストール時にパーティションを切った人

いきなりマウントコマンドを叩いてもマウントできません。
#mkdir mountpoint
マウントポイントを作ります。
次にイメージファイルを接続したループバックデバイスのジオメトリ情報を見ます。
#fdisk -l -u (オプションはお好みで) /dev/loop2
Disk /dev/loop2: 6442 MB, 6442450944 bytes
255 heads, 63 sectors/track, 783 cylinders, total 12582912 sectors
Units = sectors of 1 * 512 = 512 bytes

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *          63    11936294     5968116   83  Linux
/dev/loop0p2        11936295    12578894      321300    5  Extended
/dev/loop0p5        11936358    12578894      321268+  82  Linux swap / Solaris
こんな感じになります。自分の場合はマウントしたいのは一番上のブートフラグが立っているパーティションです。スワップ領域とかマウントしても楽しくありません。なので以下の様にオフセットを計算します。この計算した値は後で使います。offsetはUnits × startアドレスで求めます。
#((offset = 63*512))
計算できていることを確認します。
#echo $offset
32256
大丈夫なら、イメージファイルのアドレスをオフセット分進めたものを別のループバックデバイスに接続します。
#losetup -f
/dev/loop3
空いているデバイスを確認して、以下を実行します。
#losetup -o $offset /dev/loop3 /tmp/Xen.img(イメージファイルへのパス)
接続できたかどうかを確認します。
#losetup /dev/loop3
/dev/loop3: [0812]:4309068(接続されているファイル名), offset ...
このように出ればOKです。
最後にこのループバックデバイスをマウントします。
#mount /dev/loop3 mountpoint

最後に

使わなくなったらアンマウントしましょう。
#umount mountpoint
ループバックデバイスも削除しておきましょう。
#losetup -d /dev/loop2
#losetup -d /dev/loop3
以上です。
繰り返しになりますが、参考URLを見れば大体解決すると思います。先人に感謝。

最終更新:2008年04月02日 20:23
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。