#chiroito ’s blog

Java を中心とした趣味の技術について

LVMを使用したOracle VM仮想マシンイメージをVirtualBoxでサルベージ

 Oracle VM Serverで動かしていた仮想マシンにSSHのキーを忘れてきてしまったので仮想マシンのディスクイメージからVirtualBoxを使用して回収を試みました。今回のディスクイメージはLVMを使用しています。

環境

ホストマシン
  • Windows 7 Ultimate SP1
  • Oracle VM VirtualBox 4.1.4
サルベージ用仮想環境
  • Oracle Linux 6 update 1
  • ディスク:SSH OEL6u1.vdi
サルベージ対象の環境
  • Oracle VM Server 2.2
  • Oracle Enterprise Linux 5 update 4
  • ディスク:System.img(中ではLVMを使用)
サルベージ対象のディスク(System.img)はC:\に置いてあるものとします。

ディスクイメージの変換

VirtualBoxツールにパスが通っていることを確認します。

C:\Users\chiro>echo %PATH%
(略);C:\Program Files\Oracle\VirtualBox;(略)
 パスが通っていない場合は環境変数の設定からパスを通してください。VirtualBoxのCUIツールでディスクイメージの変換を行います。

C:\>vboxmanage convertfromraw System.img vbSystem.vdi --format VDI
Converting from raw image file="System.img" to file="vbSystem.vdi"...
Creating dynamic image with size 5242880000 bytes (5000MB)...
 変換したディスク(vbSystem.vdi)を使ってサルベージ用仮想環境で下図の用にディスクを構成します。

サルベージ

VirtualBoxでサルベージ用仮想環境を起動しましょう。 現状のマウント状況を確認します。

[root@localhost ~]# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
ボリュームグループの確認と有効化を行います。

[root@localhost ~]# lvm vgscan
Reading all physical volumes. This may take a while...
Found volume group "VolGroup00" using metadata type lvm2
Found volume group "VolGroup" using metadata type lvm2
今回のサルベージ対象のボリュームグループはVolGroup00です。

[root@localhost ~]# lvm vgchange -ay VolGroup00
2 logical volume(s) in volume group "VolGroup00" now active
含まれる論理ボリュームを確認します。

[root@localhost ~]# ls -l /dev/VolGroup00
合計 0
lrwxrwxrwx. 1 root root 7 10月 25 13:01 2011 LogVol00 -> ../dm-2
lrwxrwxrwx. 1 root root 7 10月 25 13:01 2011 LogVol01 -> ../dm-3
今回対象となる論理ボリュームはLogVol00になりますのでマウントします。

[root@localhost mnt]# mkdir /mnt/vm
[root@localhost mnt]# mount /dev/VolGroup00/LogVol00 /mnt/vm
[root@localhost mnt]# ls /mnt/vm
bin etc lib64 misc opt sbin sys usr
boot home lost+found mnt proc selinux tftpboot var
dev lib media net root srv tmp
マウントできましたので必要なファイルを回収しましょう。 回収が完了したらアンマウントなどの後処理を行います。

[root@localhost mnt]# umount /mnt/vm
[root@localhost mnt]# lvm vgchange -an VolGroup00
0 logical volume(s) in volume group "VolGroup00" now active
[root@localhost mnt]# ls -l /dev/VolGroup00
ls: cannot access /dev/VolGroup00: そのようなファイルやディレクトリはありません