ついにやらかした rm -rf /

UNIX の root なら誰もが必ず一度はやるという、rm -rf / をついにやった。root歴10年にして…… 社内の開発サーバだったのが不幸中の幸いではあったが。
vsftpd でホームディレクトリがない時の挙動を確認したくて、テスト用のユーザ fujiwara2 の home を mv しようと、

# mv /home/fujiwara2 /

ここまで打ち込んで、やっぱ mv じゃなくて rm でいいや、と思い直して

# rm -rf /home/fujiwara2 /

最後の / を付けたままで実行してしまった……
なんか返ってこないな? と思って気が付いて、慌ててキャンセルはしたのだが、時既に遅し。 /dev /etc あたりがごっそり消えた。なんでか /bin /boot は残ってた。
これまた幸いというか、このホストは VMware のバーチャルマシンだったので、2007年7月時点のディスクイメージが残っていた。ここから復旧することに。
ざっと見て /usr/local /usr/lib/perl5 は 2007年7月以降に書き換わっていたので、 tar で固めて NFS マウントしてあったディレクトリに cp して逃がした。ちなみに /etc が空なので ssh とか出来ない。現在のセッションを切ったらもうログインできない状態。
/var/lib/pgsql (PostgreSQL) も保存しておく必要があったのだが、動転していたためかすっかり忘れてシャットダウン (といっても halt も shutdown もできないので VM の電源 OFF)。

さて、古い VM image で起動して、/usr/local と /usr/lib/perl5 は書き戻す。
ここでやっと /var/lib/pgsql を忘れていたことに気が付いたので、死んだ VMCentOS-4 の Live CD で boot してファイルを救出することにした。
Live CD で boot すると DHCP で eth0 のアドレス取得に失敗。 MAC address が新旧 VM で同じなのが原因だったので、

# ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx

として一つ隣の値に書き換え。
ディスクは LVM だったので、自動的にはマウントされていなかった。

# mkdir /mnt/lv01
# mount /dev/VG0/LV01 /mnt/lv01

ここまできたら、rsync で残っているファイルをごっそりコピーできる。
さらに、2007/7以降に入れた RPM パッケージ。/mnt/lv01/var/log/yum.log を見てインストール。
で、ほぼ復旧完了。
ただし /etc は全部消えたので、2007/7 以降に書き換えた設定ファイルの類は失われてしまった。httpd.conf に追記した部分とか。ユーザ情報などは LDAP で一元管理していたので無事。

あー疲れた(主に精神的に)。開発サーバとはいえちゃんとバックアップ取らないとだめだ……