読者です 読者をやめる 読者になる 読者になる

$ rm -rf で/tmpを削除してしまった話

Linux Ubuntu 技術

つい4時間程前の話。
ubuntuで色々作業していた時に、一時作業ディレクトリとして適当な所に

:../hoge/fuga$ mkdir tmp

という感じでtmpディレクトリを作った。

その後作業が終わり、tmpというディレクトリがいらなくなったのでディレクトリごと削除しようとして何も考えずにtab連打で

$ rm -rf /tmp/

なんて打ち込んでしまった。

まぁこの結果はご想像の通り、/boot /devとかの中にある/tmpというディレクトリを削除してしまうことになるわけです。f:id:i-hako:20141209035231p:plain

あまりLinuxについて詳しくは知らないのですが、/tmpは基本的にはその名前の通り一時的なデータを保存するディレクトリらしいです。*1
ところが、このディレクトリには色々な設定とかが書かれているため、/tmpディレクトリごと削除すると色々問題があるわけです。*2



さぁ困った。
とにかく落ち着こう。
こういう時はどうするんだ。そうだ。まずは再起動してみよう。*3

。。。。。再起動。。。。。
起動した…が、おかしい。ログイン画面が現れた。これは設定した覚えがないぞ。
とりあえずパスワード入れてログインを試みる。ログインできない。
ゲストアカウントもダメだ。さてコイツはまずいぞ…


…という感じですごく焦っていたのですが、色々考えてみた所ubuntuをインストールしたLiveCDを使って、LiveCDの/tmpを、起動しないUbuntuが入ったデバイスのルートディレクトリに突っ込めば直せそうだという結論に達した。
とても簡単な話だった。

  1. LiveCDからブートする
    LiveCDを入れてCDブートする
  2. Ubuntuを試すとかでお試し版を起動
    /tmpディレクトリを持ってくるため、お試し版を起動
  3. 起動しないUbuntuが入ったドライブをマウント

    $ sudo su
    ...
    # cd /
    # mount /dev/<device> /mnt/

    とかでマウント。root権限じゃないとマウントできないっぽい

  4. LiveCD側の/tmp以下を/mntにコピー
    LiveCD側のルートディレクトリに移動して以下のコマンドでコピー

    # cp -a /tmp/ /mnt

    "-a"はディレクトリの構造や設定を保ったままコピーしてくれるオプションらしい

  5. 再起動
    あとは再起動してみてちゃんと起動したら成功。
    起動後にエラーメッセージ出るかもしれませんが、ちゃんと詳細を確認して適切な対処をしてください。

こんなんでいいのかどうかわからないけど、とりあえずちゃんと起動できるようになりました。
問題あったらどうしようかな


というわけで、今回はこれだけ。忘れないようにメモ。

*1:再起動の度にデータが掃除されるとかなんとか…

*2:terminal新しく立ち上げたらなんか「hoge.sh XXXXXがありません」的な感じで怒られました

*3:コイツが一番まずかった