この記事はDigital Identity Creative Div. Advent Calendar 2019の7日目です。
余裕と油断は紙一重
とはよく言ったもので、人生の教訓や名言ってのはその身になってみて初めて理解が得られるものだなと。
子供の躾もいくら危険を注意して伝えたところで本人が理解しないと何も伝わらない。
時折「一度痛い目見ないとわかんないのよ」っていうのはある意味的を得ているものだ。
これは私がエンジニアとして駆け出しから一人立ちして少し経った時の大失敗の話。
なおこの時の失敗はそこから中堅シニアと経験を重ねた今でも身についているものである。
とある案件を初めて一人で任される
新卒で入社してCGIスクリプトをせこせこ構築する日々が続いたある日上司からとある案件のメンテナンス作業を任されることになった。
任されるサーバと設置ファイル階層の特質上操作はSSHで操作する必要がある。
それまでサーバアップロードはFTPのみだった私にとっては初のSSH操作の解禁を示すことになる。
SSH操作は入社した際初めて任された社内Webサーバ構築時以来の操作となる。
しかもその時はコマンド操作を事前に確認して行なっていたためファイル操作や削除など特定処理は行なっていなかった。
当時の社内ではSSHの解禁は以降プロジェクトを単体で任され出す予兆とされていた。
正直震えた、ついにきたかと。
ただ私は上司の「SSH操作は気をつけないと簡単にサーバ飛ばせるからねw」っていう軽く警告を受けていたことを忘れてはいない。
基本のコマンド操作には最新の注意を払い作業を進める、漆黒のターミナル画面での操作はより慎重さを覚えると共に
自ら入力したコマンドによって動作する様をみると単なるファイル移動でさえ心が踊ったものだ。
急変は突然に
そんな作業を半年以上行なっていたあくる日、SSH操作も慣れてきてrootの危機感も少し薄れてきていた。
本プロジェクト以外にも複数サーバ対応を任され慣れてきたからだ。
最初はコマンドを入力し間違いかないか確認していたものだが、上司のキー操作よろしくタブ置換操作よろしくエンターキーをッッターーーンとしていた。
気がつけば社内でキータイプの速さが1、2を争うレベルになっており、どっちの方が環境構築を早く仕上げられるかみたいなよくわからん話まで聞こえる始末。
別段それにあぐらをかいていたわけではないが少なくとも成長したんだなという実感を覚えて少しだけ鼻は高くなっていた気がする。
そんなおり日々のシステムメンテナンスで作業差分ファイルをアップロードする時間になった。
当時はgitからデータ取得するものではなく、サーバにファイルをアップロードして該当ディレクトリへコピー処理を行っていた。
そう、それこそ何100回と行なってきた行為である。
ただその日はシステムのバックアップ作業も依頼されていた、ファイル容量はそれなりに膨大だったため並行して作業をすることに。
バックアップファイルを圧縮しダウンロードさせつつ、いつものようにファイルをアップロードする、、ドキュメントルートへコピー作業を行おうとした際にふとディレクトリ内のファイル群を見る。
・・・なんかわちゃわちゃしてるな。。
私以外にも作業したものがいるのだろうか、アップロードディレクトリは以前のパッチファイルや不明な画像ファイルなどが溢れてごちゃごちゃしていた。
汚いな。。整理しよう。。
別段HDD容量を圧迫していたわけではないが、万が一違うファイルを展開してしまっては問題だ。
またアップロードファイルの銘名規約があったため、日付以外は途中までファイル名が似ているのでタブキー置換がめんどすかかった。
もちろん他メンバーが行なったタスクと比較し上司にも確認した上でファイルの削除を行いディレクトリを一掃、スッキリ!
さぁ満を辞してアップロードとファイルコピーを行い動作確認のためブラウザアクセスした時目の前に広がっていた光景は
404 not found
そこは真っ白な雪国のような何かでした
404 not found
中に誰もいませんよ?
おっと、トラウマを思い出すところだったぜ、それよりもどちらかといえば自宅マンション上からスーパースローモーションで落下したあとにヒャッハーしたほうが目が冴えてしまってねむれなかったじゃないk・・いやいや、正気を保て、時系列が違いすぎる。
そう、ファイルがかき消えていたのである。
え、なんで?コピーしただけなのになんでなくなってるの??
アップロード先のドキュメントルートを見ると中身完全にからっぽ。は??
何が起きたかわからず復旧しようにもそもそもファイル自体が存在していない。
そう、バックアップはアップロードするファイルのみの差分ファイルしかとっていなかったのである。
システム全部は取っていない。
テンパった挙句自力復旧も不可能。。大人しく上司に報告に行く。
普段温厚な上司が顔を歪めて即あれこれ駆け回り、デイリーバックアップからデータを復旧させてくれてことなきを得たものの、その事件はシコリとなって数日ひきづる羽目となる。
なんで消えたか、そこが問題である。
上司と共に自分がやった作業を見返すためコマンド履歴を追っていく。
すると一つのコマンドにて手が止まる。
rm -rf ./up_YYYYMMDD/* /var/www/html/*
そう、コピーコマンドを実行する前にディレクトリ内の掃除を行なったのであった。
その時コピー元と先のディレクトリ階層を入力するのを端折って履歴から辿ろうとした際にcpコマンドとrmコマンドがごっちゃになってしまったのである。
ありえないミス…!普通に考えたらあり得ない致命的ミス…!だが発生…!
立木文彦さんのナレーションが響き渡った気がした。
そのあと強めだが短くお説教を受け、当分の間コマンド操作時は事前にコマンドリストをまとめチェックしてもらってからコピペで実行するお達しを受けトボトボ帰路に帰ることとなるのであった。
最後に
以降現在に至るまでSSHコマンド操作を行う際はエンターを押す時必ず一旦止まる癖が今でも残っている。
人生最大にして最高のミス。
余談だが、その時の凹みっぷりから別の先輩上司に「いやー、凹むなって、まだマシだよ。俺なんてお客のサーバ吹っ飛ばして300万円の損害賠償支払うことになったものwwそれに比べたら軽いよww」とか言われたけど、当時の私にはピンとこなすぎて一ミリの救いにもならなかったことを添えておく。
みんなもサーバの扱いは気をつけようね。