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
コメントはまだありません。