Linux
Ubuntu

Ubuntu でboot ローダを再インストールする

Ubuntu のブートローダ及び/boot パーティションを再インストールする

Ubuntu のパッケージアップデート時やオペレーションミス等でLinux が起動しなくなってしまうような状況に陥ってしまった時、諦めてUbuntu を再インストール…ということは無いでしょうか。
その環境、まだ直るかもしれません。
今回はUbuntu16.04 LTS で検証しました。

前提条件

前提条件としてルート("/")のファイルシステムは壊れていないことが前提です。
今回はUbuntu16.04 LTS で以下のデバイス構成でEFI ブートで起動していたものを実際に復旧してみましょう。

/dev/sda1     /boot/efi
/dev/sda2     /boot
/dev/sda3     /

なお、BIOS ブートな環境では/boot/efi のデバイスがありませんが、基本的にEFI のときと同じ手順で実施可能です。

Live USB の作成

Ubuntu16.04 LTS のデスクトップ版(今回はubuntu-14.04.5-desktop-amd64.iso)をダウンロードしてUSB 等のメディアに焼いてください。本手順は説明を割愛します。
USB をマシンに挿したら、マシンの電源を入れてUSB からUbuntu を起動するようにしてください。

Live USB からUbuntu desktop の起動

Live USB から起動したらTry Ubuntu (without installing) を選択してください。
そこからターミナルを開いてroot ユーザにて作業をしていきます。

rootユーザになる
$ sudo su -

デバイスのマウント

復旧したいOS がインストールされているデバイスをマウントしていきます。

mount
# mount /dev/sda3 /mnt
# mount /dev/sda2 /mnt/boot
# mount /dev/sda1 /mnt/boot/efi

その他クリティカルな部分もマウントしていきます。

/dev/dev/pts/proc/sys/runのマウント
# for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done

マウントが完了したらマウントしたディレクトリにchroot で入っていきます。

chroot
# chroot /mnt

Linux kernel のインストール

インストールされていたkernel を確認します。

dpkg
$ dpkg --list | grep linux-image
ii  linux-image-4.4.0-116-generic        4.4.0-116.140                              amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-116-generic  4.4.0-116.140                              amd64        Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP

今回再インストールするkernel は4.4.0-116 で行っていきます。
kernel を確認したら/boot 領域を一旦全部削除します。

/bootの削除
$ rm -rf /boot/*

kernel を再インストールします。

kernelの再インストール
# apt-get install --reinstall linux-image-4.4.0-116-generic

grub ローダをインストールします。

grub-install
# grub-install --recheck /dev/sda
# update-grub

以上で完了です。

# exit      # <- chroot を抜ける
# shutdown -h now

chroot を抜けてシャットダウンして、USB ディスクを抜いてマシンの電源を入れてみましょう。
ubuntu が起動してくるはずです。

参考