Ubuntu 起動トラブルの対処:Live 環境からの GRUB 再インストール

Ubuntu が起動しなくなったとき、特に GRUB(ブートローダ)が壊れたときの対処として、Ubuntu のインストールメディア(Live USB/DVD)で Live 環境を起動し、chroot を使って GRUB を再インストールする手順を説明する。

作業前のデータ保護

起動しない原因が特定できていない場合は、修復操作の前にデータを退避する。Live 環境ではインストール済みシステムのディスクを読み取れるので、ファイルマネージャや cp コマンドで、必要なファイルを外付けディスクや別の USB メモリにコピーする。ファイルシステムが破損している場合、書き込みを伴う操作は破損を広げることがあるため、退避を先に行う。

必要なもの

手順 1: Ubuntu Live 環境での起動

  1. 用意した Ubuntu インストールメディアから PC を起動する。起動デバイスの選択は、PC のブートメニュー(電源投入直後の F12、F11、Esc など。機種により異なる)または UEFI/BIOS 設定画面で行う。
  2. GRUB のメニューが表示されたら、「Try or Install Ubuntu」を選び、Enter キーを押す。
  3. しばらく待つと、インストーラの画面が表示される。ここで言語を選び、「Try Ubuntu」(Ubuntu を試す)を選ぶ。インストールは行わない。デスクトップ画面が表示され、Live 環境が使える状態になる。
  4. (Live 環境の画面が表示されない場合)GRUB のメニューで e キーを押すと、起動オプションを編集できる。linux で始まる行の末尾に nomodeset を追加し、Ctrl+x キー(または F10 キー)で起動する。これはグラフィックスドライバの初期化を抑制する指定で、画面が表示されない症状の回避に使う。編集内容はこの起動のみに適用され、メディアには保存されない。
  5. Live 環境のデスクトップが表示されたら、端末(Terminal)を開く。Ctrl+Alt+T キーを押すか、アプリケーション一覧から「Terminal」を選ぶ。Live 環境ではパスワードなしで sudo が使える。

手順 2: パーティションとブートモードの確認

  1. Live 環境の端末で、次のコマンドを実行し、ディスクとパーティションの構成を表示する。
    lsblk -f
    sudo fdisk -l
  2. 表示結果から、次を確認して書き留める。
    • ルートパーティション: Ubuntu 本体がインストールされているパーティション。ファイルシステムは ext4 のことが多い。例: /dev/sda2、/dev/nvme0n1p2
    • EFI システムパーティション(ESP): UEFI 環境で使う、ファイルシステムが vfat(FAT32)の 100 MB 〜 1 GB 程度の小さいパーティション。例: /dev/sda1、/dev/nvme0n1p1
    • ディスク全体のデバイス名: パーティション番号を除いた名前。例: /dev/sda、/dev/nvme0n1
    LVM や暗号化(LUKS)を使っている場合は、ルートファイルシステムがこれらの上にあるため、手順が異なる。
  3. Live 環境が UEFI で起動しているかを、次のコマンドで確認する。
    ls /sys/firmware/efi
    ディレクトリの内容が表示されれば UEFI、「No such file or directory」と表示されれば BIOS(レガシー)である。以降の手順は、この結果によって分かれる。

手順 3: インストール済みシステムへの chroot

GRUB の再インストールは、インストール済みシステムの中に chroot して実行する。Live 環境からそのまま grub-install を実行すると、Live 環境側の設定が使われ、期待した修復結果にならない。

  1. ルートパーティションをマウントする。/dev/sda2 は、手順 2 で確認したルートパーティションのデバイス名に置き換える。
    sudo mount /dev/sda2 /mnt
  2. マウントしたシステムが目的の Ubuntu であることを確認する。
    ls /mnt
    etc、boot、home などのディレクトリが表示されることを確認する。表示されない場合は、別のパーティションを指定している。次のコマンドでアンマウントし、手順 2 で確認した内容を見直す。
    sudo umount /mnt
  3. 別のパーティションに /boot を置いている構成の場合は、それもマウントする。該当しない場合は、この操作は不要である。
    sudo mount /dev/sda3 /mnt/boot
  4. UEFI 環境の場合、EFI システムパーティションをマウントする。/dev/sda1 は、手順 2 で確認した EFI システムパーティションのデバイス名に置き換える。
    sudo mount /dev/sda1 /mnt/boot/efi
  5. システム用のディレクトリを、Live 環境から chroot 先に見せるためにマウントする。
    for d in /dev /dev/pts /proc /sys /run; do sudo mount --bind $d /mnt$d; done
  6. chroot する。
    sudo chroot /mnt
    プロンプトが変わり、以降のコマンドはインストール済みシステムの中で実行される。

手順 4: GRUB の再インストールと設定ファイルの再生成

この操作は、ディスクのブート設定を書き換える。Windows などと共存させているマルチブート環境では、GRUB のインストール先ディスクを間違えると、これまで使っていたブートメニューが置き換わる。手順 2 で確認したデバイス名を使う。

  1. UEFI 環境の場合、次のコマンドを実行する。ubuntu は EFI システムパーティション内に作られるディレクトリ名で、通常はこのままでよい。
    grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
  2. BIOS(レガシー)環境の場合、ディスク全体のデバイス名を指定して実行する。/dev/sda は、手順 2 で確認したディスク全体のデバイス名に置き換える。パーティション(/dev/sda1 など)を指定しない。
    grub-install /dev/sda
  3. Installation finished. No error reported. と表示され、エラーが出ていないことを確認する。
  4. GRUB の設定ファイルを再生成する。
    update-grub
    検出されたカーネル(vmlinuz)や、他の OS が一覧表示される。Ubuntu のカーネルが 1 つも検出されない場合は、カーネルパッケージが削除されている。その場合は、ネットワーク接続のある状態で次のコマンドを実行し、カーネルを再インストールしてから、あらためて update-grub を実行する。
    apt update
    apt install --reinstall linux-image-generic
    update-grub

手順 5: 後始末と再起動

  1. chroot を終了する。
    exit
  2. マウントしたディレクトリをまとめてアンマウントする。
    sudo umount -R /mnt
    「target is busy」と表示される場合は、/mnt 以下を開いているファイルマネージャや端末を閉じてから、もう一度実行する。
  3. 再起動する。
    sudo reboot
  4. 画面が消えたらインストールメディアを取り外す。GRUB のメニューが表示され、Ubuntu が起動することを確認する。
  5. 起動後、次のコマンドを実行し、GRUB の設定が現在のシステム構成と一致していることを確認しておく。
    sudo update-grub

確認事項