2021-06-15に更新

大事なサーバの/varを消した話。悪夢の無限列車編👹

お久しぶりです!
ここの所、立て込んでいたり(表題の件で)、メンタルやられ気味だったり(表題の件で)で余裕がなかった私です。

あれほど講師の方に、「rmを使うときは気を付けよう」と言われていたのに…


v目次にゃv

1.どんなサーバなのか
2.CentOSの/varを消したお話ー悪夢の始まり無限列車編
3.CentOSの/varを消したお話ー血鬼術の落とし穴編
4.消した後ーお前ももうおやすみ・・・
5.起こったこと
6.復旧作業
7.結末
8.考えられる復元法
9.回避の呼吸!型集


どんなサーバなのか

私はゲーム制作サークルのサーバ担当(仮?)をしてますねこー。
ざっくり挙げると
・ホームページ
・工程、プロジェクト管理ソフトの管理
・Gitサーバ
を管理をしているきんぎょ。
昔はメールサーバもやっていたけど色々考えて、Google Workspaceと兼用させてるぎょぴ。

ちなみに、VPSでCentOS7をつかっていますきんぎょ。
これは消してはいけない。障害を起こしてはダメなやつだ()


CentOSの/varを消したお話ー悪夢の始まり無限列車編

今回、新しいシステムの導入にあたって、色々入れたり、消したりをしていたねこ~。
とある理由から
/var/hogehoge/nekoneko/
/var/hogehoge/kitune/
/var/piyopiyo/fugafuga/
のkingyo.poi を×10個くらい(仮称)を消す必要があったにゃ。
そこで下記のコマンドを実行し、対象ファイルを削除していきました。

rm -rf /var/hogehoge/#抹消対象#

そう。これが悪夢の始まりだったのにゃー…


CentOSの/varを消したお話ー血鬼術の落とし穴編

先ほど紹介したrm -rf /var/hogehoge/#抹消対象# の血鬼術ですが、重大な"欠陥"がある鬼~。
そう、""鬼術だけに…(欠陥と血管をかけた)

基本的にLinuxにはWindowsでいうゴミ箱が存在しないきんぎょ。
つまり、消したものは、ほぼ二度と元には戻りません

今回の落とし穴(後悔ポイント)

・cdで/varに移動して作業していれば消えるフォルダは最小で済んだ
・脳死でポチポチやっていた
・脳死のためエンターキーとTabキーを間違えた

抹殺対象を消すために、1つ1つ手打ちで打っていたわけです。正規表現しようにも、ダブりで消せないファイルもあるので…
数もそれなりにあるので、脳死状態でポチポチ術を発動していきます。Tab変換を活用して…

rm -rf /var エンターキーポチッ!\(^o^)/アッオワッタ
実行した瞬間、理解できず、思考がグルグル走馬灯。一瞬が5分くらいに長く感じ、冷や汗が全身をつたいました。


消した後ーお前ももうおやすみ・・・

/varを消した直後、
”今動いているシステムは消せないよ”とのメッセージが。
lsで確認するとtmp以外消えている!!!!!!!!!
【VirtualBoxで再現した写真↓もちろん今回はバックアップをとってある】
image.png!


起こったこと

・/varに配置しているものは全て消失しました。
→ホームページの消失
→行程、プロジェクト管理のデータ消失(Webで動作するもののため)
→プロジェクト管理のデータベース消失
・yumが死んだ。(rpmもだめ)
・firewallが起動できない(iptablesはギリ生きていたっぽい?)
・SSHアクセスが弾かれる
・私は内心大泣き
・私、汗だく

・gitも死んだと思っていたら、/var以外の場所で管理していたのでセーフ(本当に良かった。)
・wgetやcurlは使用可能


復旧作業

どうやらextundeleteコマンドで復旧可能らしい!
標準では入っていないので、yum install extundeleteで導入します!
_人人人人人人人人人人人_
> yumが使えない!! <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄

はい。終わりました。
どうやらyumにかかわるデータが/var以下にあったようで、正常に動作しなくなりました

他にデータ復元方法はいくつかあり、試しましたが全部だめでした。
他のcentから消えたデータを移植したり、リカバリーモードを起動したり、OSの書き換えを試みたり…


結末

結局、新しくサーバを立て、生きているデータを故サーバからサルベージ。移行する手段を取りました。
VPSという特性上いろいろ気を遣う作業が多かったです。(今回ばかりはハードを直で触れる自宅サーバを羨みました。)


考えられる復元法

私の知識、経験不足ゆえに、実現しませんでしたが、この状況でも復活できる可能性はありました。
・wgetやcurlを使って修復系パッケージの導入
・健全なサーバより消滅したデータを移行。権限や依存関係も手動で設定
・パーティションやプロセスから復元
いずれも果てしない労力と戦場で培うべき経験、正しい知識が必要なためペーペーの私は力尽きました…


回避の呼吸!型集

今から大事なことを書きます!
・rmコマンドの扱い
まずはrmコマンドを使うときは慎重に行きましょう。絶対です。
特に-rf オプションを使うときは要注意です。なんでも消せちゃいます。イレイザーヘッドです💦
・バックアップを取っておく
何事も作業前にバックアップを取っておきましょう。VirtualBoxならスナップショット。VPSならイメージOSの保存とかね。
・extundelete等の復元ツールは予め入れておく
ことが起きてからでは遅いです。今回みたくyumひいてはOSそのものがダウンして緊急時には何が使えなくなるか分かりません。前もって対策しておきましょう。
・実験環境を用意、活用する
普通なら本番と全く同じ実験環境(兼バックアップ)を利用すべきです。コストがかかるのは仕方ないですが、データ復旧費や今までの労力が水の泡になるよりは安いです!
サークル活動でのリアルな実験環境費用捻出は難しいですが…
本当に業務上じゃなくてよかった…
・ある程度子ディレクトリに入って作業をする
今回は絶対パスで/varと打っていたのも原因の1つです。
仮にvarにい状態で作業していればvarそのものが消えるという事態は避けられていました


エンドタイトル

ということで悪夢の無限列車編を締めくくりたいと思います。
何かあってからでの対策では遅いということを痛感しました。
色々やばすぎて、語尾を忘れるくらいですからきんぎょ。
本当に業務での失態でなくてよかったです…おそらく私じゃ払いきれない額の損害でしょうから(震え)
さらに辛かったのが「var消しちゃった💦」で検索してもヒットしなかったことです。varを消す馬鹿野郎は私くらいということですかね~(すっとぼけ)

今回はここまで🐾
みなさん、私の屍を超えていけ!!!!

ツイッターでシェア
みんなに共有、忘れないようにメモ

keito_woood

実際はもう少しまともです。本当です。嘘じゃないです。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント