LVM内のデータをWin上からVirtualBoxを使ってサルベージした話
タイトルのまんまです。意外とめんどくさかったのでメモ。
最近ブログ書いてないからって理由もあるけど。
ツールでさくっとできるかなーと思っていたら、LVMボリュームの認識がうまくいかず、ちょっと苦労した。。。
経緯
自宅でサーバにしていたマシンのgrubをいじって実験してたら起動しなくなった。
USBブートで何とかするかー。。。と思っていたのだが、困ったことにサーバのグラフィック周りがやられてしまっていたようで、ブート画面が出なかった。
仕方ないのでHDDを取り出し、別のマシンでマウントしようと思ったら、規格が合うマシンがWindows7 64bitのPCしかなかった*1ので、Win上からサルベージをする羽目に。
試したツール
結論から言うと表題の方法しかうまくいかなかったのだけど、色々ツールとかも試したのでせっかくなのでメモ。*2
- Explore2fs
- http://www.chrysocome.net/explore2fs
- Win7対応ではないらしいけど動いた。
- ext2/3はうまく認識。でもSATAなのにhdaとかいわれた。不安感。
- LVMボリュームが、存在は認識するけど中がみえなかった。
- DiskInternals Linux Reader
- http://www.diskinternals.com/linux-reader/
- 見た目とか色々きれい。
- ext2/3はうまく認識。中のファイルも見れるしなかなかよい。
- 残念ながら、LVMはempty raw driveという認識。中身のぞけない。
- Ext2Read
- http://sourceforge.net/projects/ext2read/
- ちょっとかっこいい。
- ext4もよめるらしい!
- LVMパーティションを検出すらしなかった。対応と謳ってるんだけどね。。。
- Ext2fsd
- http://www.ext2fsd.com/
- ほかのと違って、Win上でドライブとしてマウントするタイプ
- ext2/3とかは、ちゃんとマウントできた。読み書きもできた。
- LVMもマウントできたんだけど、やっぱり中身はのぞけず。「フォーマットが必要」といわれてしまった。。。
と、4種類ぐらい試したところで、これはもうツールではだめだと思って、方針を変更した。
VritualBoxで実ドライブを使う
方針を変えて、Win上で仮想マシン作って、その上に建てたDebianからマウントしてしまうことにした。
VirtualBoxはそのままでは実ドライブをマウントできないので、以下のようにして対象のドライブを参照するような仮想ディスクを作成する。
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe internalcommands createrawvmdk -filename "C:\Users\<username>\VirtualBox VMs\debian64\rawdisk.vmdk" -rawdisk \\.\PhysicalDrive1 RAW host disk access VMDK file C:\Users\<username>\VirtualBox VMs\debian64\rawdisk.vmdk created successfully.
これをVirtualBoxの設定で仮想マシンのストレージにアタッチしてから、仮想マシンを起動する。
そうするとたぶん、おかしなことをしてなければ/dev/sdbとかに実ドライブが見えるはず。
こうなればしめたもので、あとはLVMボリュームを何とかするだけ。
root@debian:~# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb /dev/sdb1 /dev/sdb2 root@debian:~# vgscan Reading all physical volumes. This may take a while... Found volume group "server" using metadata type lvm2 Found volume group "debian" using metadata type lvm2 root@debian:~# lvscan ACTIVE '/dev/server/root' [295.32 GiB] inherit ACTIVE '/dev/server/swap_1' [2.53 GiB] inherit ACTIVE '/dev/debian/root' [1.63 GiB] inherit ACTIVE '/dev/debian/swap_1' [128.00 MiB] inherit root@debian:~# ls -l /dev/mapper/ 合計 0 crw------- 1 root root 10, 59 2011-06-05 19:55 control lrwxrwxrwx 1 root root 7 2011-06-05 19:55 debian-root -> ../dm-0 lrwxrwxrwx 1 root root 7 2011-06-05 19:55 debian-swap_1 -> ../dm-1 lrwxrwxrwx 1 root root 7 2011-06-05 19:55 server-root -> ../dm-2 lrwxrwxrwx 1 root root 7 2011-06-05 19:55 server-swap_1 -> ../dm-3
おお、特に何もしなくてもACTIVEだ。ACTIVEじゃないならvgchange -ayとかでACTIVEにする。
ここでは、容量から/dev/server/rootが目的のLVMだとわかっているので、後はマウントするだけ。
root@debian:~# mount /dev/server/root /data/ root@debian:~# cd /data/ root@debian:/data# ls bin etc initrd.img.old media proc selinux tmp vmlinuz boot home lib mnt root srv usr vmlinuz.old dev initrd.img lost+found opt sbin sys var
で、やっとうまくいった。
なんか、もっと楽な方法とかあったんじゃないかとも思いつつ、細かいところ忘れそうなのでメモメモ。