今回は息抜きを兼ねて,お待ちかねの(?)失敗やトラブルについてのお話です。
まあインフラエンジニアを長いことやっていれば,誰しも失敗やトラブルには見舞われるものです。まずは,筆者が自身で体験したものや,目撃したことのある失敗やトラブルを挙げてみます。
誤操作アラカルト
ファイル削除
これはまず誰でもやったことはあるのではないでしょうか。
筆者も某ISPのDNSのゾーンファイルをまとめて消してしまったことがあります。そのときはRCS(当時はRCSもよく使われていました)から1週間前の状態まで復旧させて,残りはメールでのゾーン情報変更報告を拾い集めて復旧させました。
また,他にもやってしまったことのあるミスとして,
# rm *~
とするところを
# rm * ~
として,そのディレクトリ以下の全ファイルを消したことがあります。
防止方法として良くあるのは,rmをrm -iのaliasにするというものでしょう。ただ筆者はaliasが嫌いです。それにrm -iだと消すつもりで消すときに面倒でなりません。-fを付ければ面倒じゃないですが,それだといつも-f付けるようになって同じことですね。
もちろん,ファイルを消すのはrmとは限りません。mvで消したことがある人も多いのではないでしょうか。
完全な防止策というのはなかなかないですが,筆者の場合だと特にワイルドカードを使っているときは,最初にrmの部分をlsにしておいてどう展開されるかを出力させて,そのあとhistoryから呼び出してlsをrmに書き換えて実行,という癖はついています。ワイルドカードを展開するのはshellの役割(つまりコマンドに渡されるときは展開が既に終わっている)というのがポイントですね。
あと,以前Twitterで某宮川氏につっこまれたことがありますが,いまだにRCSを使っていたりします。rmやmvだとディレクトリは消えないので,RCSディレクトリ自体は守られるので,いざ消してしまってもco -lで復旧させることができます。
そういえば,消してしまったがEmacsのバッファから復旧させたということもありました。
電源断
これは筆者ではないのですが…。
ラックにはだいたい電源レールというのが付いています。そしてそのレールの最下部に,CVCFからのケーブルが接続されているのが普通です。この最下部を誤って蹴ったり何かをぶつけてしまってケーブルが脱落し,そのラックの電源レールが片側まるまるダウンという事故がありました。しかもその1週間後に同一人物が全く同じラックを同じ目に合わせていましたね…。
データセンター内を走るとあまりロクなことがありません。
間違いシャットダウン
これは筆者ですが…。
# init 6
# init 0
とやってしまい,戻ってこなくなったことが数回あります。ちなみにinit 6は再起動(rebootやshutdown -rとだいたい同じ),init 0は停止(haltやshutdown -hとだいたい同じ)です。今のLinuxだと,だいたいshutdownはinitのwrapperだったりするんではないでしょうか。
昔はhaltやrebootやshutdownよりinitのほうが行儀が良いと言われていたので今でもそうしているのですが,行儀の良さ(ファイルシステムの整合性のチェックやinit.d以下のscriptのstop処理の実施など)が同じであればhaltやrebootのほうが間違いは起こしにくいのかもしれません。とはいえ,init 0やinit 6は間違いなく行儀がいいので,これからもinitで停止や再起動をすると思います。
OSフォーマット
これも筆者ではないのですが,あるラックにマウントされているマシンのOSを全部入れ直すはずが,1本隣のラックに対して行ってしまい,かなりのサーバのデータが失われたということがありました。なんと恐ろしい……。
OSを入れ直す前には必ずhostnameやifconfigを叩いたり,/homeの下を見るなりしないと駄目ですね。これが今まで見たことのある中で一番キツイ失敗だったかもしれません。10台以上のサーバのデータが復旧不可能でしたから。
プロセス落とし
sshdや(最近はないですが)telnetdをkillしてしまって接続できなくなる,という経験がある人もいるのではないでしょうか。ただこの場合は,今つながっているセッションは活きているはずなので,「あ,間違えた!」と思っても冷静に対処すれば復旧できると思います。なにげに,sshd.confを書き換えてSIGHUPを送るときはちょっとドキドキしますね。
そういえば余談ですが,最近はもうリモート接続といえばsshのみだと思いますが,15年ほど遡ればtelnetdやin.rlogindが普通に動いていました。データセンターにいるときに,普段あまりデータセンターに来ない人が来たので「どうしたんですか?」と聞いたら「いや間違ってtelnetdを落としてしまって」と言ったので,「じゃあrloginしたらいいじゃないですか」と言ったら嫌な顔をされたことがあります。せっかくデータセンターまで来てからそんなことを言うな,って感じだったんですね。
ネットワーク断
たとえばルータ(やL3スイッチ)でルーティングを間違えたり,フィルタの設定を間違えたり,サーバでもiptablesの設定を間違えて,瞬時に何もできなくなるという経験をした人も多いと思います。筆者も一度フィルタの設定を間違えて,あわててデータセンターに駆けつけたことがありました。
ネットワーク機器やiptablesの場合,その瞬間からなにもできなくなるのが辛いところです。お金に余裕があれば,全マシンにKVMスイッチやシリアルコンソールを付けておきたいところですね。もちろんミスをしないのが一番ですが…。

