xen – bluegold https://blog.bluegold.me OpenSolaris と MacBook で自宅ネットワークを構築するメモ Wed, 24 Mar 2010 07:10:19 +0000 ja hourly 1 https://wordpress.org/?v=5.2.1 6047458 Xenのディスクイメージをマウントする https://blog.bluegold.me/2010/03/how-to-mount-xen-disk-image-on-linux/ https://blog.bluegold.me/2010/03/how-to-mount-xen-disk-image-on-linux/#respond Fri, 05 Mar 2010 13:21:47 +0000 http://blog.bluegold.me/?p=410 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

なので、基本的にはループバック・デバイスとしてマウントする事が可能です。
ただし、ディスクイメージはパーティションに区切ってあると思いますので、その分にひと手間ひつようです。

基本的な作業の流れは以下のとおり。

  1. losetup コマンドでディスクイメージファイルをループバック・デバイスに割り当てる。
  2. kpartx コマンドでディスクイメージ内の各パーティションにデバイスファイルを割り当てる。
  3. 必要なパーティションのデバイスファイルを 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

]]>
https://blog.bluegold.me/2010/03/how-to-mount-xen-disk-image-on-linux/feed/ 0 410