XenのイメージファイルをLinuxからマウントする方法のメモ
Xenのディスクイメージファイルは以下のように固定ディスクをそのままファイルに移したような構造になっています。
# file test.img test.img: x86 boot sector; partition 1: ID=0x83, active, starthead 1, startsector 63, 208782 sectors; partition 2: ID=0x82, starthead 0, startsector 208845, 2104515 sectors; partition 3: ID=0x83, starthead 0, startsector 2313360, 18651465 sectors, code offset 0x48
なので、基本的にはループバック・デバイスとしてマウントする事が可能です。
ただし、ディスクイメージはパーティションに区切ってあると思いますので、その分にひと手間ひつようです。
基本的な作業の流れは以下のとおり。
- losetup コマンドでディスクイメージファイルをループバック・デバイスに割り当てる。
- kpartx コマンドでディスクイメージ内の各パーティションにデバイスファイルを割り当てる。
- 必要なパーティションのデバイスファイルを mount コマンドでマウントする。
losetup コマンドでディスクイメージファイルをループバック・デバイスに割り当てる。
losetup -fコマンドで空いているループバック・デバイスを探して、そのデバイスにイメージファイルを割り当てます。
# losetup -f /dev/loop0 # losetup /dev/loop0 /var/lib/xen/images/test.img # losetup -a /dev/loop0: [0900]:153944114 (/var/lib/xen/images/test.img)
kpartx コマンドでディスクイメージ内の各パーティションにデバイスファイルを割り当てる。
ループバック・デバイスに割り当てた仮想ディスクにパーティションの状況をfdiskコマンドで調べます。
# fdisk /dev/loop0 このディスクのシリンダ数は 1305 に設定されています。 間違いではないのですが、1024 を超えているため、以下の場合 に問題を生じうる事を確認しましょう: 1) ブート時に実行するソフトウェア (例. バージョンが古い LILO) 2) 別の OS のブートやパーティション作成ソフト (例. DOS FDISK, OS/2 FDISK) コマンド (m でヘルプ): p Disk /dev/loop0: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/loop0p1 * 1 13 104391 83 Linux /dev/loop0p2 14 144 1052257+ 82 Linux swap / Solaris /dev/loop0p3 145 1305 9325732+ 83 Linux コマンド (m でヘルプ): q
3つのパーティションが存在することが確認できます。
kpartx -aでそれぞれのパーティションをデバイスファイルに割り当てます。
/dev/mapperディレクトリの下に新たなデバイスファイルが作成されます。
# kpartx -a /dev/loop0 # ls -l /dev/mapper/ 合計 0 crw------- 1 root root 10, 62 2月 24 00:07 control brw-r----- 1 root disk 253, 0 3月 5 22:07 loop0p1 brw-r----- 1 root disk 253, 1 3月 5 22:07 loop0p2 brw-r----- 1 root disk 253, 2 3月 5 22:07 loop0p3
仮想ディスクでLVMを使っているとここから先がめんどくさいので、私はXenの仮想ディスクではLVMは使いません。
必要なパーティションのデバイスファイルを mount コマンドでマウントする。
あとは通常のディスクと同じようにマウントするだけです。
# mount -t ext3 /dev/mapper/loop0p1 /mnt/tmp # ls -l /mnt/tmp -rw-r--r-- 1 root root 952782 11月 4 08:46 System.map-2.6.18-164.6.1.el5xen drwxr-xr-x 2 root root 1024 11月 9 15:51 grub -rw------- 1 root root 2383144 11月 9 15:51 initrd-2.6.18-164.6.1.el5xen.img drwx------ 2 root root 12288 6月 17 2009 lost+found -rw-r--r-- 1 root root 80032 3月 13 2009 message -rw-r--r-- 1 root root 107413 11月 4 08:47 symvers-2.6.18-164.6.1.el5xen.gz -rwxr-xr-x 1 root root 817164 11月 4 09:53 xen-syms-2.6.18-164.6.1.el5 -rw-r--r-- 1 root root 375762 11月 4 06:11 xen.gz-2.6.18-164.6.1.el5
使い終わった後の手順
必要なくなった仮想ディスクを開放するには、逆の手順で行います。
# umount /mnt/tmp # kpartx -d /dev/loop0 # ls -l /dev/mapper/ 合計 0 crw------- 1 root root 10, 62 2月 24 00:07 control # losetup -d /dev/loop0 # losetup -a # losetup -f /dev/loop0