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 を忘れていたことに気が付いたので、死んだ VM を CentOS-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 で一元管理していたので無事。
あー疲れた(主に精神的に)。開発サーバとはいえちゃんとバックアップ取らないとだめだ……