そこはかと

日々、見たもの、触ったもの、思った事をそこはかと書いていきます。

Xenのイメージファイルをマウントする

この文書について

色々な理由でXenのイメージファイルをマウントしたくなった時の参考に。勿論、対象のdomUは停止した状態でマウントしましょう。

追加パッケージ

kpartxとutil-linuxが必要ですが、きっと入っているでしょう。

確認

Xenのイメージファイルは、デフォルトでは/var/lib/xen/imagesにあります。
fileコマンドで確認すると、以下のようになります。

# file xen.img
xen.img: x86 boot sector; partition 1: ID=0x83, active, starthead 1, startsector 63, 208782 sectors; partition 2: ID=0x8e, starthead 0, startsector 208845, 20755980 sectors, code offset 0x48

ID 83の通常のLinuxパーティションと、ID 8eのLinux LVMパーティションの2つが確認できました。

これをそのままマウントしようとすると

# mount xen.img /mnt/img/
mount: xen.img はブロックデバイスではありません (多分 `-o loop' とやってみたら?)

と言われます。アドバイス通りオプションを付けても

# mount -o loop xen.img /mnt/img/
mount: ファイルシステムタイプを指定する必要があります

と言われてやっぱりマウント出来ません。しつこくファイルシステムタイプを指定しても

# mount -o loop -t ext3 pc813xen.img /mnt/img/
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       missing codepage or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

ますますダメっぽいです。

こんな時にはlosetupコマンドとkpartxコマンドを使います。

マウント

losetupコマンド

# losetup
usage:
  losetup loop_device                                       # give info
  losetup -d loop_device                                    # delete
  losetup -f                                                # find unused
  losetup -a                                                # list all used
  losetup -r                                                # read-only loop
  losetup [-e encryption] [-o offset] [-r] {-f|loop_device} file # setup
# losetup -a
# losetup -f
/dev/loop0
# losetup /dev/loop0 /var/lib/xen/images/xen.img
# losetup -a
/dev/loop0: [0806]:49155 (/var/lib/xen/images/xen.img)

kpartxコマンド

# kpartx
usage : kpartx [-a|-d|-l] [-v] wholedisk
        -a add partition devmappings
        -d del partition devmappings
        -l list partitions devmappings that would be added by -a
        -p set device name-partition number delimiter
        -v verbose
# ls /dev/mapper/
control
# kpartx -l /dev/loop0
loop0p1 : 0 208782 /dev/loop0 63
loop0p2 : 0 7968240 /dev/loop0 208845
# kpartx -a /dev/loop0
# ls /dev/mapper/
control  loop0p1  loop0p2

fdiskで確認

# fdisk -lu /dev/loop0

Disk /dev/loop0: 4194 MB, 4194304000 bytes
255 heads, 63 sectors/track, 509 cylinders, total 8192000 sectors
Units = セクタ数 of 1 * 512 = 512 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *          63      208844      104391   83  Linux
/dev/loop0p2          208845     8177084     3984120   8e  Linux LVM

結果はfileコマンドで確認した通りの構成。

loop0p1は、ID 83なので、このままマウントできます。

# mount /dev/mapper/loop0p1 /mnt/p1
# ls /mnt/p1
System.map-2.6.18-92.el5xen  initrd-2.6.18-92.el5xen.img  symvers-2.6.18-92.el5xen.gz  xen.gz-2.6.18-92.el5
config-2.6.18-92.el5xen      lost+found                   vmlinuz-2.6.18-92.el5xen
grub                         message                      xen-syms-2.6.18-92.el5

しかし、loop0p2は、LVMの為、マウントできません。

LVMのマウント

Physical Volume、Volume Group、Logical Volumeの確認

# pvscan
  PV /dev/mapper/loop0p2   VG VolGroup00   lvm2 [3.78 GB / 0    free]
  Total: 1 [3.78 GB] / in use: 1 [3.78 GB] / in no VG: 0 [0   ]
# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "VolGroup00" using metadata type lvm2
# lvscan
  inactive          '/dev/VolGroup00/LogVol00' [2.75 GB] inherit
  inactive          '/dev/VolGroup00/LogVol01' [1.03 GB] inherit

inactiveになっているLVをactiveにします。

# vgchange -ay
  2 logical volume(s) in volume group "VolGroup00" now active
# lvscan
  ACTIVE            '/dev/VolGroup00/LogVol00' [2.75 GB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol01' [1.03 GB] inherit

マウント出来ました。

# mount /dev/VolGroup00/LogVol00 /mnt/p2/
# ls /mnt/p2
bin   dev  home  lib64       media  mnt  proc  sbin     srv  tmp  var
boot  etc  lib   lost+found  misc   opt  root  selinux  sys  usr

アンマウント

マウントの逆です。
アンマウント

# umount /mnt/p2/
# ls /mnt/p2/

LVをinactive

# vgchange -an
  0 logical volume(s) in volume group "VolGroup00" now active
# lvscan
  inactive          '/dev/VolGroup00/LogVol00' [2.75 GB] inherit
  inactive          '/dev/VolGroup00/LogVol01' [1.03 GB] inherit

kpartx

# kpartx -d /dev/loop0
# ls /dev/mapper/
control

losetup

# losetup -d /dev/loop0
# losetup -a

参考にしたところ

lvmのディスクイメージをmount – 間違いだらけの備忘録

ゲストディスクイメージのデータへのアクセス Ja JP/FedoraXenQuickstartFC6 – FedoraProject

19.11. ゲストディスクイメージ上のデータアクセス RED HAT DOCUMENTATION

広告

3件のコメント »

  1. […] Xenのイメージファイルをマウントする < < そこはかと […]

    ピンバック by XenのDomainUのファイルシステム障害をDomain0から直す | ひげろぐ | 2011 1月 8 | 返信する

  2. […] Xenのイメージファイルをマウントする « そこはかと […]

    ピンバック by pc.casey.jp » [VMware][Xen] Dom0が起動しないXen img を vmdk に変換(3) | 2011 5月 1 | 返信する

  3. […] Xenのイメージファイルをマウントする « そこはかとv/mapper/ control # kpartx -l /dev/loop0 loop0p1 : 0 208782 /dev/loop0 63 loop0p2 : 0 7968240 /dev/loop0 208845 # kpartx -a /dev/l…はてなブックマークより Garrett Ace 250 Volume Control ModdYouTubeより […]

    ピンバック by volume control | 2011 6月 2 | 返信する


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。