絶品ゆどうふのタレ

ふと気づいたことを綴るだけのメモ

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という認識。中身のぞけない。
  • 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

で、やっとうまくいった。
なんか、もっと楽な方法とかあったんじゃないかとも思いつつ、細かいところ忘れそうなのでメモメモ。

*1:潰したサーバはSATAだったのだけど、サブマシン郡は年寄りばっかりでみんなIDEの口しかなかったという。。。

*2:LVM対応ツールが失敗したのは、もしかするとbootセクションが壊れていたせいでそっちの情報がうまく引けなかっただけ、という可能性もあるかも