本記事は「本番環境でやらかしちゃった人 Advent Calendar 2021」24日目となります。
前提事項
事故を起こしたのは確か6年くらい前
サーバーのOSは確かCentOS6
諸事情でワンオペだった
本番環境を操作するPCと手順書を表示するPCが別々
手順書は本番操作用PCに入れることができなかった。つまりすべて手入力。
当時の記憶を元にした再現であり多少盛ってるので細かいツッコミは勘弁してください
何をしてたか
~~~本番環境作業中~~~
(手順書ナガメー)
よし、次はファイルの移動か
mvコマンド入力してカチャカチャカチャ…ッターン
mv: cannot move /bin/ac to '/home/user/work_dir': Permission denied
mv: cannot move /bin/aconnet to '/home/user/work_dir': Permission denied
mv: cannot move /bin/addr2line to '/home/user/work_dir': Permission denied
mv: cannot move /bin/alias to '/home/user/work_dir': Permission denied
mv: cannot move /bin/alsaloop to '/home/user/work_dir': Permission denied
mv: cannot move /bin/alsamixer to '/home/user/work_dir': Permission denied
mv: cannot move /bin/amidi to '/home/user/work_dir': Permission denied
mv: cannot move /bin/amixer to '/home/user/work_dir': Permission denied
mv: cannot move /bin/amuFormat.sh to '/home/user/work_dir': Permission denied
mv: cannot move /bin/analog to '/home/user/work_dir': Permission denied
mv: cannot move /bin/aplay to '/home/user/work_dir': Permission denied
mv: cannot move /bin/aplaymidi to '/home/user/work_dir': Permission denied
mv: cannot move /bin/appstream-compose to '/home/user/work_dir': Permission denied
...以下省略
!!!!!!!!?????????????????????????
えっえっ何これやべぇ止めなきゃ!Ctrl+C
ポチー
何が起きたのか
// 実行したかったコマンド
# mv /tmp/logfile.zip /home/user/work_dir
// 実際に実行したコマンド
# mv / tmp/logfile.zip /home/user/work_dir
何が違うかおわかりでしょうか
実行したかったのは単純なファイル移動コマンドでしたが
ファイルの先頭の /
と tmp/logfile.zip
の間に半角スペースが混ざっていました
これにより本来なら/tmp/logfile.zip
を/home/user/work_dir
に移動するはずが
/
配下全てとカレントのtmp/logfile.zip
を/home/user/work_dir
に移動するという
rm -rf /*
に匹敵する**即死コマンドに変貌**したわけです
その後どうした
まずは移動先となった/home/user/work_dir
の中を確認
不幸中の幸いとしてrootで作業しておらずsudoも付けず、すぐ処理を止めたことにより
移動されてしまったファイルは無かった(確か)ので首の皮は繋がっていました
一応作業ログを見返しやばそうな出力は無かったのでそのまま作業を再開しました。
その後特に問題は起きていませんでした。
なぜ惨劇は起きかけたか
いうまでもなくワンオペでクロスチェックも何もあったものじゃなかった環境であり
長文コマンドを全て手打ちせざるを得ない環境だったので起きるべくして起きた事象だと思います
ただし当時は人がいなくてペアとなる人員を用意できなかったプロジェクトだったのお察しでしょう
Q. シェルスクリプトとか用意してなかったの?
A. 用意することにより手順が変わるため手順書の改版と検証が必要となり、その工数が認められるような雰囲気じゃなかったため
当時は私も技術力があるとは言えなかったので説得しきる材料もありませんでした
二度と惨劇を起こさないためにどうしたのか
正直このタイプの凡ミスはどうしたって無くならないような気もするんですが
今回は手順書を横目で見ながら長いコマンドを手打ちしていたことがミスを誘発した一因と思っています
これに限らず、当時の手順書は実行するコマンドが多く長いものもあったので
実行するPC内に手順書を置く許可を貰い、コピー&ペーストでコマンドを実行させてもらえるように交渉しました
(サーバーへ接続するのは専用のPCからのみだったため)
最後に
筆者はこの事故の影響でmvコマンドがトラウマになりました
今でも可能ならcp
してからrm
するという手間を挟んでファイル移動を行っています
あとrootもどうしようもない限り使うのは辞めとこうとも
(追記)
何も変わってないやんという感じですが
cp
というクッションを挟むことによって慎重に確認を行うための個人的な儀式です
さすがに何年も経った今はこんなこと起こさないはずだけどミスると一発アウトはどうしても怖い