LVMでファイル消しちゃったときの復旧方法(VM利用を前提)

実は…VMのLinux上で開発してたときに間違ってファイルを消してしまいました(爆)
調べてたら、extundeleteってのがありますので、それに頼りました。(ちなみにext3,ext4が対象です)
しかも、(CentOSのせた)LVM(論理ボリューム)なので、さらに厄介です。

まず、やっちまったLinux上でrunlevelを1にします。1になったところですかさずshutdown。

su
telinit 1
shutdown

そして、対象のハードディスクのイメージを安全な場所にコピーします(バックアップ)。

次に、LVMをマウントしてないLinuxを1つ用意します。
(ちなみに私のとこでは、別にDebianの環境があったので、それを使いました)
このマシンにさきほどの(復旧したい)ディスクイメージをつなぎます。
そしてそのマシンに、extundeleteを入れます。
C++と、ext2fsライブラリがいります。Debianだとこれで入ります。

aptitude install g++
aptitude install ext2fs-dev

extundeleteを展開し、configureしてmakeします。

bunzip2 -c -d extundelete-0.2.0.tar.bz2 | tar xvf -
cd extundelete-0.2.0
./configure
make
make install

デフォルトでは、LVMはマウントされてないはずなので(dfしてみてマウントされてなかったら大丈夫)、これからLVMの確認作業です。
pvscanで、いま繋がってるLVMのPhysical Volume一覧がでてきます。

pvscan

vgscanで、いま繋がってるLVMのVolume Group一覧がでてきます。デフォルトで「VolGroup00」とか出るあれです。

vgscan

lvscanで、論理ボリューム(Logical Volume)一覧がでてきます。

lvscan

いづれも、引数なしでOKです。

これで、LVMの VolumeGroup と LogicalVolume がわかると思います。
デフォルトは「VolGroup00」、「LogVol00」のはず。

これまでの /dev/sda1 と同じようなデバイス指定方法だと、

/dev/VolGroup00/LogVol00

みたいなかんじになります。

わかったところで、extundeleteを実行します。

extundelete --after (エポック時間) --restore-all /dev/VolGroup00/LogVol00

「エポック時間」は、time(2)で返される、1970年1月1日0時ジャストからの経過秒数です。
これで、指定時間「以降」に削除されたファイルが復元されます。

ま、LVMでも仕組みわかれば従来のファイルシステム同様に扱えるわけで。

とりあえず。
ひさびさに、マジで心臓に悪い思いをしました…。

とりあえず、一番大事なことは

  • 落ち着く
  • 容赦なく落とす
  • バックアップをとる

こんだけ。

参考にしたサイト

Comments are closed.