はじめに
かなりの大事故をやらかし「うわー、にっちもさっちもいかない・・・(ノД`)・゜・。」的な状況になったのですが、首の皮一枚で救われた(´▽`) こんな経験から記事を起こしてみました。
みなさまには決して経験していただきたくはないので、経験した内容も含めて書いていこうと思います。
何やらかしたのさ?
細かいところは省略しますが、RedHatLinux6(64ビット)のサーバ作業中に、rootユーザでシェルスクリプトを使ってこんなコマンドを流してしまいました。
# mv /*
で、どうなったかというと
# ls
-bash: /bin/ls: No such file or directory
# /path/bin/ls
-bash: /path/bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
# /path/bin/mv
-bash: /path/bin/mv: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
ありとあらゆる基本コマンドが使えなくなり、新たにSSH接続を行えない状態に。使えるのは echo
、cd
、export
といった程度・・・
普通でしたらサーバをインストールDVD/CDメディアで起動し、トラブルとなったディスクをマウントして救済、という手段を思いつくのですが、このケースでは当方でマシン自身を触って操作を行うことができない状況でした。
あらこんなところに!
サーバ構築や運用経験がそれほど多くない私ではどうにもできず、いろんな方にヘルプを求め、わしゃわしゃしてるときにでてきた案が今回の「busybox
を使ってみては?」でした。
「それって何? おいしいの? ls や cat も使えないのに大丈夫なのかな? そもそもこのサーバに入っているのかな・・・?」と半信半疑なのでしたが・・・探してみたら・・・いました!
藁にもすがる思いでコマンドポチポチ。
# /path/to/busybox ls
README testfile.txt
# /path/to/busybox cat testfile.txt
abcdefg
hijklmn
「出た~~~!」
# お化けじゃないって・・・
mv も使えるようになってるかな・・・期待して、急ぎ、最低限のバイナリ群を戻してみる。
# /path/to/busybox mv /path2/lib64 /
# /path/to/busybox mv /path2/lib /
# /path/to/busybox mv /path2/bin /
成功! (≧▽≦)
これで使えるようになるはず・・・
# ls
README testfile.txt
うわぁん! 嬉しすぎる!!
busyboxって何者?
今回のトラブルの救世主となった busybox
。結局どんなモジュールなのか調べてみました。
◆BusyBoxサイト
英語なんでざっくり一言でまとめると「UNIXコマンドをひとまとめに詰め込んだ、これ単体で完結するアーミーナイフ(=十徳ナイフ)みたいなもの」だそうです。
busybox [UNIXコマンド]
のようにコマンド投入すると指定したUNIXコマンドが実行できる優れモノです。
こいつ 救世主 busybox
ですが、ルーターとかミュージックプレーヤーとかの機器でLinuxを使う際に利用されているようです。
最後に
もし現在のサーバにこれが入っていないようであれば、「何かあったときのため」に入れておくのもよいかと思います。
こんなことにならないために、いくら時間が限られていても、コードレビューと入念なテスト、必要に応じて別の人に作業中の確認を行ってもらうことが大切です。
#これがあるから root ユーザで作業するのはすごく怖く、極力やりたくない・・・