Ubuntu 起動トラブルの対処:Live 環境からの GRUB 再インストール
Ubuntu が起動しなくなったとき、特に GRUB(ブートローダ)が壊れたときの対処として、Ubuntu のインストールメディア(Live USB/DVD)で Live 環境を起動し、chroot を使って GRUB を再インストールする手順を説明する。
作業前のデータ保護
起動しない原因が特定できていない場合は、修復操作の前にデータを退避する。Live 環境ではインストール済みシステムのディスクを読み取れるので、ファイルマネージャや cp コマンドで、必要なファイルを外付けディスクや別の USB メモリにコピーする。ファイルシステムが破損している場合、書き込みを伴う操作は破損を広げることがあるため、退避を先に行う。
必要なもの
- Ubuntu のインストールメディア(Live USB メモリ、または Live DVD)
- 修復対象の Ubuntu と同じか、より新しいバージョンを用意する。
- 修復対象と同じアーキテクチャ(amd64 など)のメディアを使う。
- Live 環境は、修復対象システムと同じブートモード(UEFI または BIOS/レガシー)で起動する。ブートモードが異なると、後述の GRUB 再インストールが正しく行えない。
- データ退避用の外付けディスクまたは USB メモリ
手順 1: Ubuntu Live 環境での起動
- 用意した Ubuntu インストールメディアから PC を起動する。起動デバイスの選択は、PC のブートメニュー(電源投入直後の
F12、F11、Escなど。機種により異なる)または UEFI/BIOS 設定画面で行う。
- GRUB のメニューが表示されたら、「Try or Install Ubuntu」を選び、
Enterキーを押す。
- しばらく待つと、インストーラの画面が表示される。ここで言語を選び、「Try Ubuntu」(Ubuntu を試す)を選ぶ。インストールは行わない。デスクトップ画面が表示され、Live 環境が使える状態になる。
- (Live 環境の画面が表示されない場合)GRUB のメニューで
eキーを押すと、起動オプションを編集できる。linuxで始まる行の末尾にnomodesetを追加し、Ctrl+xキー(またはF10キー)で起動する。これはグラフィックスドライバの初期化を抑制する指定で、画面が表示されない症状の回避に使う。編集内容はこの起動のみに適用され、メディアには保存されない。
- Live 環境のデスクトップが表示されたら、端末(Terminal)を開く。
Ctrl+Alt+Tキーを押すか、アプリケーション一覧から「Terminal」を選ぶ。Live 環境ではパスワードなしでsudoが使える。
手順 2: パーティションとブートモードの確認
- Live 環境の端末で、次のコマンドを実行し、ディスクとパーティションの構成を表示する。
lsblk -fsudo fdisk -l - 表示結果から、次を確認して書き留める。
- ルートパーティション: Ubuntu 本体がインストールされているパーティション。ファイルシステムは ext4 のことが多い。例:
/dev/sda2、/dev/nvme0n1p2 - EFI システムパーティション(ESP): UEFI 環境で使う、ファイルシステムが vfat(FAT32)の 100 MB 〜 1 GB 程度の小さいパーティション。例:
/dev/sda1、/dev/nvme0n1p1 - ディスク全体のデバイス名: パーティション番号を除いた名前。例:
/dev/sda、/dev/nvme0n1
- ルートパーティション: Ubuntu 本体がインストールされているパーティション。ファイルシステムは ext4 のことが多い。例:
- Live 環境が UEFI で起動しているかを、次のコマンドで確認する。
ディレクトリの内容が表示されれば UEFI、「No such file or directory」と表示されれば BIOS(レガシー)である。以降の手順は、この結果によって分かれる。ls /sys/firmware/efi
手順 3: インストール済みシステムへの chroot
GRUB の再インストールは、インストール済みシステムの中に chroot して実行する。Live 環境からそのまま grub-install を実行すると、Live 環境側の設定が使われ、期待した修復結果にならない。
- ルートパーティションをマウントする。
/dev/sda2は、手順 2 で確認したルートパーティションのデバイス名に置き換える。sudo mount /dev/sda2 /mnt - マウントしたシステムが目的の Ubuntu であることを確認する。
ls /mntetc、boot、homeなどのディレクトリが表示されることを確認する。表示されない場合は、別のパーティションを指定している。次のコマンドでアンマウントし、手順 2 で確認した内容を見直す。sudo umount /mnt - 別のパーティションに
/bootを置いている構成の場合は、それもマウントする。該当しない場合は、この操作は不要である。sudo mount /dev/sda3 /mnt/boot - UEFI 環境の場合、EFI システムパーティションをマウントする。
/dev/sda1は、手順 2 で確認した EFI システムパーティションのデバイス名に置き換える。sudo mount /dev/sda1 /mnt/boot/efi - システム用のディレクトリを、Live 環境から chroot 先に見せるためにマウントする。
for d in /dev /dev/pts /proc /sys /run; do sudo mount --bind $d /mnt$d; done - chroot する。
プロンプトが変わり、以降のコマンドはインストール済みシステムの中で実行される。sudo chroot /mnt
手順 4: GRUB の再インストールと設定ファイルの再生成
この操作は、ディスクのブート設定を書き換える。Windows などと共存させているマルチブート環境では、GRUB のインストール先ディスクを間違えると、これまで使っていたブートメニューが置き換わる。手順 2 で確認したデバイス名を使う。
- UEFI 環境の場合、次のコマンドを実行する。
ubuntuは EFI システムパーティション内に作られるディレクトリ名で、通常はこのままでよい。grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu - BIOS(レガシー)環境の場合、ディスク全体のデバイス名を指定して実行する。
/dev/sdaは、手順 2 で確認したディスク全体のデバイス名に置き換える。パーティション(/dev/sda1など)を指定しない。grub-install /dev/sda -
Installation finished. No error reported.と表示され、エラーが出ていないことを確認する。 - GRUB の設定ファイルを再生成する。
検出されたカーネル(update-grubvmlinuz)や、他の OS が一覧表示される。Ubuntu のカーネルが 1 つも検出されない場合は、カーネルパッケージが削除されている。その場合は、ネットワーク接続のある状態で次のコマンドを実行し、カーネルを再インストールしてから、あらためてupdate-grubを実行する。apt updateapt install --reinstall linux-image-genericupdate-grub
手順 5: 後始末と再起動
- chroot を終了する。
exit - マウントしたディレクトリをまとめてアンマウントする。
「target is busy」と表示される場合は、sudo umount -R /mnt/mnt以下を開いているファイルマネージャや端末を閉じてから、もう一度実行する。 - 再起動する。
sudo reboot - 画面が消えたらインストールメディアを取り外す。GRUB のメニューが表示され、Ubuntu が起動することを確認する。
- 起動後、次のコマンドを実行し、GRUB の設定が現在のシステム構成と一致していることを確認しておく。
sudo update-grub
確認事項
- UEFI 環境で GRUB のメニューが表示されない場合は、UEFI 設定画面のブート順序で
ubuntuの項目が先頭になっているかを確認する。ブート項目の一覧は、次のコマンドで表示できる。sudo efibootmgr -v - UEFI 設定の Secure Boot が有効な環境では、署名済みのブートローダが必要である。この場合は、
grub-efi-amd64-signedとshim-signedのパッケージがインストールされている必要がある。