【Linux troubleshooting case 1】システムファイルを消してしまったら?

今回、冒頭はまたシリアスな感じでいきたいと思います。

詳細に入る前に、この記事にはシステムを破壊するコマンドが含まれています。
実機では絶対に実行しないでください。
またこれを悪用し他人のPCを破壊すると
電子計算機損壊等業務妨害罪に問われます。
絶対にやらないでください。

それでは行きます。

操作をミスってシステムファイルを削除してしまった

ある日、Gentooインストールの動画を撮ろうと、準備をしていたぱぎー。
システムの更新をしていて、カーネルの更新があることに気付き、カーネルの更新をした。
カーネルの更新が終わり、古いカーネルを削除しようとした時、誤ってシステムファイルを削除してしまった。
本来なら
rm - rf /lib/modules/<カーネルバージョン>
とすべきところを
rm - rf /lib/
と打ったところでエンターと同時に押してしまい、システムファイルを消してしまったのである。
ぱぎーは慌てて再起動をかけた。
その結果、システムが起動する事はなかった。

システムファイルを誤って消し再起不能になったらどうしたらいいか

いかがでしょうか?
多分これやった方いると思います。
(私がやらかしました)
この場合、一応再インストールなしで修復することは可能です。
今回はこうなった場合、どうすれば修復できるかを見て行きましょう。

今回用意したLinuxは、Arch Linuxです。
まずArch Linuxのシステムファイルを削除していきます。
今回は/usrファイルを削除してみました。

rm -rf /usr/

そうすると、壁紙が消えマウスカーソルがおかしくなりました。

再起動してみようとすると、ログアウトしかできなくなっていました。
また、そのログアウトについても全く反応しないので、強制的に再起動することにしました。
その後、起動を試みますが、/sbin/initが存在しないというエラーで起動しませんでした。

なので、Arch Linuxのisoイメージファイルから起動し、修復を開始しました。
まず、キーマップをロードし、

loadkeys jp106

ファイルシステムをマウントします。

mount /dev/ /mnt

そして必要なファイルシステムのマウントが終わったら、chrootの準備をします。

mount -t proc /proc /mnt/proc
mount -t sysfs /sys /mnt/sys
mount --rbind /dev /mnt/dev
mount --rbind /run /mnt/run


それからは実際にchrootをするわけではなく、この状態から修復を行っていきます。
まず、パッケージ管理システムの設定ファイルをいじるので、バックアップを取っておきます。

cp /mnt/etc/pacman.conf /mnt/etc/pacman.conf.bk

そして、設定ファイルをいじっていきます。

vim /etc/pacman.conf

変更箇所は、SigLevelというところです。

SigLevel = Required DatabaseOptional

となっているはずなので

SigLevel = Never

に変更します。


そして、修復先のパッケージのデータベースを取得するために、

pacman --sysroot=/mnt -Qnq

を実行します。
すると、修復先のArch Linuxにインストールされているパッケージが列挙されるので、それをpacmanの引数に渡します。

pacman --sysroot=/mnt -Qnq | pacman --sysroot=/mnt -S -

これを実行し、全パッケージの再インストールを行います。

ものすごく時間がかかりますが、終わるまで待ちましょう。

修復中はこのようなwarningが大量に出てきます

全パッケージの修復が終わったら、バックアップを取っていたpacman.confを戻します。

mv /mnt/etc/pacman.conf.bk /mnt/etc/pacman.conf

あとは再起動すれば、きちんと起動するはずです。
ただ、起動したのはいいのですが、言語が英語になっています。
なぜならlocale-genが実行されていないからです。
rootになって

locale-gen

を実行します。
また、AUR経由でインストールされたパッケージについては全く修復されていないので、それも修復する必要があります。
gitをインストールして、yayを再インストールします。

pacman -S git
git clone https://aur.archlinux.org/yay.git

一般ユーザーになり

cd ./yay
makepkg -sci

そして、そのほかのAURパッケージも修復していきます。
同様に一般ユーザーにて

pacman -Qmq | yay -S -

このようにすれば一応完全に元通りになると思います。

まとめ

こんな感じで、まずはArch Linuxでシステムファイルを消してしまった時の対処法をやっていきましたが、いかがでしたか?
一応システムファイルを消したとしても修復はできるので、あわてる必要はないのですが、非常にめんどくさいので、日ごろからコマンドの扱いには気を付ける必要があるのではないかと思います。
否応なしにファイルを削除するrm -rf取り扱いに十分注意する必要がありますね。
ほかにもいろいろな危険なコマンドが存在するので気を付けましょう。
もっと詳しく知りたい方は動画もあるのでそちらもご覧ください。

www.youtube.com

今回はここまでにします。
では、また。