CHROOT 内から「UPDATE-GRUB」を実行する方法

CHROOT 内から「UPDATE-GRUB」を実行する方法

私は Windows 10 と Ubuntu 18.04 をデュアルブートしています。最近 Windows 10 を更新しましたが、それ以来 Linux を起動できなくなりました。時々、更新によって Linux パーティションの起動がおかしくなることがありますが、grub コマンドラインで常に修正できました。これはまったく別の問題のようです。

重複している場合はお詫びします。私が見た関連する質問では、質問者は通常、リカバリ メニューにアクセスできる、または通常どおり起動できるがリカバリ モードには入らないようです。

grub からブート プロセスを正常に開始できますが、その時点から Ubuntu のログイン画面に到達できません。grub (2.02) に入った後、「Ub​​untu」または「Ubuntu の詳細オプション」に移動すると、次の 4 つのオプションが表示されます。

Ubuntu, with Linux  4.18.0-21-generic
Ubuntu, with Linux  4.18.0-21-generic (recovery mode)
Ubuntu, with Linux  4.18.0-20-generic
Ubuntu, with Linux  4.18.0-20-generic (recovery mode)

4 つのうちのいずれかを起動すると、grub が正常に終了し、画面出力がカスケード表示されます。ただし、グラフィカル ログイン ウィンドウ、ログイン プロンプト、または対話型のものにはアクセスできません。ここでは、通常最後の 5 行を入力します。

[   OK   ] Reached target Local Encrypted Volumes.
[   OK   ] Reached target Local File Systems (Pre).
[   OK   ] Listening on Load/Save RF Kill Switch Status /dev/rfkill Watch
[   OK   ] Reached target Sound Card.
[   OK   ] Found device WDC_WDBNCE5000PNC SSD.

その後、何も起こりません。コンピューターを再起動するには、電源ボタンを 6 秒間押し続けなければなりません。新規インストール以外に、何かアイデアはありますか?

以前のセリフを知りたい人がいたら、喜んでここに書き起こします。どんな協力でもいただければありがたいです。

編集: @K9spud のアドバイスに従った結果、 fsckこうなりました。クリーンな状態に戻ったので、ほっとしました。Linuxchrootインストールをルート ディレクトリとして使用していたのですが、/var/boot.log が最初にリストされていたよりもずっと進んでいることがわかりました。私が気づいたことの 1 つは、私が投稿したログの最後にあるデバイスがマウントに失敗していたことです。おそらく、/etc/fstab間違った設定をしたためでしょう。ログの最後のメッセージは次のとおりです。

[  OK   ] Started Show Plymouth Boot Screen

/etc/fstab から問題のある行を削除すると、システムは正常に起動します。

TL;DR: 設定が間違っていると、/etc/fstabログイン画面が表示されなくなります。

答え1

これは答えるのが難しい質問かもしれません。最も簡単な答えは新規インストールすることですが、古いインストールに既に多くのデータやカスタマイズが投入されている場合は、それは面倒です。

私のマシンであれば、Ubuntu USB インストール サムドライブからライブ モードで Ubuntu を起動し、ハード ディスクを調べて何が問題なのかを突き止め、修復を試みます。

最初にやるべきことは、すべてのバックアップ イメージを作成することです。初めて修正しようとすると、状況が悪化してしまう可能性があるからです。

次に、Linux パーティションで fsck を実行して、パーティションが破損していないことを確認します。fsck の結果が正常であれば、すべてのデータがまだそこにあり、必要に応じて何らかの方法で回復できます。fsck の結果が多数のエラーである場合は、インストールが失敗し、パーティションが破損しているため、新規インストールを行う前に取得できるカスタム データ以外は回復する価値がないと言えます。

fsck が成功したら、Linux パーティションをマウントし、"chroot" を使用して、Linux インストールから起動したかのように Linux インストール内から作業を開始します。chroot 環境内で dev、sys、proc などをマウントして調整してから、"update-grub" を実行して grub を再インストールします。"update-grub" を実行すると、起動できない理由を説明できるエラーがいくつか表示されることがあります。

「update-grub」が何も重要な情報を表示せずに動作する場合は、/var/log の下を調べて、ログ ファイルにシステムの起動に失敗した理由を示すエラーがないか確認してください。

それ以外では、すべてのエラー メッセージを自分で確認し、何が壊れていて何が壊れていないかを評価しなければ、他に何を提案すればよいかわかりません。

Windows が Linux のインストールをほとんど考慮せず、Linux の起動が妨げられることがあるのは非常にイライラします。Windows とのデュアル ブート システムはまったく避けたいと思わされます。Microsoft が改善し、今後は Linux のインストールを台無しにしないようにもっと注意するようになるといいですね。

答え2

CHROOT 内から「UPDATE-GRUB」を実行する方法

  1. Linux Live モードで Ubuntu USB サムドライブから起動します。BIOS がシステムに適したモード (UEFI と Legacy/MBR) で USB ドライブを起動することを確認してください。そうしないと、update-grub が機能しないという大きな問題が発生します。

  2. ライブ Linux を起動したら、ターミナルを開いて次のコマンドを実行します。

mkdir linux

sudo mount /dev/sdXX linux

(「/dev/sdXX」を、ハード ドライブ上の Linux パーティションの正しいデバイス/パーティション番号に置き換えます。パーティション テーブルを調べて何が何であるかを把握するには、「gparted」を実行する必要があるかもしれません)

sudo chroot linux /bin/bash

mount -t devtmpfs udev /dev

mount -t proc proc /proc

mount -t sysfs sysfs /sys

update-grub

(一部のシステムでは、/boot や /boot/efi にいくつかの追加の「マウント」コマンドが必要になる場合があります。必要に応じて、システムの /etc/fstab ファイルを参照して、それらをマウントする方法を確認してください)

すべてが正しく動作している場合、「update-grub」は次のようになります。

Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-48-generic
Found initrd image: /boot/initrd.img-4.15.0-48-generic
Adding boot menu entry for EFI firmware configuration
done

私の場合、システムを再度起動させるために必要なのは update-grub だけでした。しかし、人によっては、grub が MBR または UEFI が使用するものから完全に消去されている場合、「grub-install」も使用する必要があるかもしれません。

これらすべてがエラーなく完了したら、終了する前に、chroot 環境内で以前にマウントしたすべてのものをアンマウントする必要があります。そうしないと、Ubuntu がシャットダウンしたときに Linux パーティションを正常にアンマウントするのが難しくなります。

umount /sys

umount /proc

umount /dev

exit

sudo umount linux

sync

関連情報