Linux が正常に起動せず、 initramfs の実行中にbusyboxプロンプトが表示されると、かなりイライラします。多くの場合、根本的な原因はファイルシステムの何らかの問題、例えばスーパーブロックの破損やディスク UUID の不一致などです。ええ、必ずしも原因が明らかというわけではありません。システムが「予期しない不整合」という不可解なメッセージを表示したり、単に /dev/sda1 が存在しないと表示したりすることもあります。これは、Linux が必要なボリュームを見つけられないことが原因です。おそらく fstab がディスクの現在の UUID と一致していないか、スーパーブロックが破損している可能性があります。幸いなことに、最初のショックを乗り越えれば、通常は手動で fsck コマンドを実行したり、設定を調整したりすることで修復でき、システムを再び起動できるようになります。これは必ずしも簡単ではなく、マウントに関するエラーやシステムが緊急モードに陥るなど、奇妙なことが起こることもあります。基本を理解しておけば、頭を悩ませる手間を大幅に省くことができます。
LinuxがBusyBoxに落ちた場合のファイルシステムまたはブートの問題を修正する方法
ルートファイルシステムに手動のfsckが必要かどうかを確認する
これはよくあるケースです。「 」のようなメッセージが表示される場合は/dev/sda1: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY、ファイルシステムに問題があることを示しています。通常、# fsck /dev/sda1 -yinitramfs で実行することで破損は修復されますが、ボリュームがマウントされている場合は、まずアンマウントする必要があります。場合によっては、ボリュームがマウントされていたり、システムが直接 fsck を実行できないことがあります。
- busybox シェルを起動し、ルートボリュームのアンマウントを試してください
# umount /dev/sda1。マウントされている場合は、それが成功の合図です。それでもダメなら、外付けのライブUSBまたはレスキューディスクから起動し、そこから fsck を実行する必要があるかもしれません。 - アンマウント後、 を実行してください
# fsck /dev/sda1 -y。ファイルシステムのエラーをスキャンして修復します。修復のためのプロンプトが表示されますが、-y オプションを指定すると修復が自動的に確認されます。環境によっては、このコマンドだけでシステムを復旧できる場合があります。
壊れたスーパーブロックを手動で修復する
fsck がエラーを出力したり、破損したスーパーブロックに関するエラーが表示されたりした場合は、それも修復できます。まず、 でバックアップスーパーブロックを特定します# sudo dumpe2fs /dev/vda2 | grep superblock。バックアップスーパーブロックの場所(通常は 98304 などのブロック付近)を探します。
- 次に、バックアップ スーパーブロックの 1 つを使用してチェックを実行します。例:
# sudo fsck -b 98304 /dev/vda2 -y。 - fsck が問題を報告し、確認を求めてきたら、必ず「はい」と答えてください。システムが問題を修正し、ボリュームが再びクリーンな状態になることが期待できます。
一部のマシンでは、ボリュームがマウントされたままだったり、fsck が実行できなかったりすることがあります。その場合は、ライブ環境から起動して修復を行う必要があります。当然ですが、Linux は必要以上に困難にする必要があるためです。
ブートボリュームのUUIDの不一致またはfstabの問題に対処する
表示される場合ALERT! /dev/sda1 does not exist. Dropping to a shell.、fstab が UUID に基づいて間違ったデバイスを参照している可能性があります。これを修正するには、ライブメディアから起動し、# sudo blkid現在のディスク UUID を一覧表示するコマンドを実行してください。マウントされたパーティションの UUID を確認し、/etc/fstab の内容と比較してください。
- ルート パーティションをマウントします:
# sudo mount /dev/sda2 /mnt。 - UUID行が間違っている場合は確認し
/mnt/etc/fstabて更新してください。例:UUID=36cce3d5-cbdb-46f4-adbf-3f9aaa01d729 / ext4 errors=remount-rw 0 1 - 保存してアンマウントし、再起動してください。これが根本的な問題であれば、エラーは解消されるはずです。
GRUBを使用してハードウェアまたはSATAポートの問題を修正する
システムのBIOSまたはハードウェア設定がディスク検出に問題を引き起こす場合(SATAポート番号がランダムになるなど)、GRUBのブートパラメータを編集することで解決できる場合があります。緊急モードまたはライブディスクで起動し、/boot/grub/grub.cfgを編集してください。
- 次のような行を見つけます。
Linux /boot/vmlinuz-4.15.0-70-generic root=/dev/sda1 rw quiet elevator=noop fsck.repair=yes - 安定性のために、次のようにルート デバイス パスを UUID に置き換えます。
Linux /boot/vmlinuz-4.15.0-70-generic root=UUID=36cce3d5-cbdb-46f4-adbf-3f9aaa01d729 ro quiet elevator=noop fsck.repair=yes
これにより、デバイス名の不一致による起動エラーの発生を防ぐことができます。特にSATAポートが不適切に再割り当てされた場合に顕著です。カーネルやgrubをアップデートする場合は注意してください。これらの設定が元に戻ってしまう場合があり、やり直さなければならないことがあります。
これらの修正は毎回うまくいくとは限りませんが、私がいじったいくつかのシステムを救ってくれました。ログやコマンドを調べるのは少々面倒ですが、少なくとも毎回Linuxを最初から再インストールするよりはましです。
まとめ
- 起動中にファイルシステム エラーが発生した場合は、fsck を手動でチェックしてください。
- dumpe2fs を使用してバックアップ スーパーブロックを見つけ、必要に応じて復元します。
blkidUUID の不一致により起動の問題が発生する場合は、/etc/fstab 内の UUID を一致させます。- ハードウェアの癖や SATA の再割り当てを考慮して grub 構成を編集します。
まとめ
正直なところ、Linuxの起動問題を解決するのは、ファイルシステムの破損、UUIDの不一致、ハードウェアの不具合など、様々な要因が絡むため、まるで尻尾を追うように作業を進めるようなものです。しかし、どのコマンドを実行し、どこを確認すれば良いかを把握すれば、通常は再インストールしなくても解決できます。必要なのは、ある程度の忍耐と論理的なトラブルシューティングだけです。この記事が誰かの時間とストレスを少しでも軽減してくれることを願っています。