Ubuntu 16.04: GRUB2を復旧する

GRUB2が起動しなくなった場合の復旧方法を記載します。

1 LiveDVDの起動

Ubuntu 16.04のLiveDVD(ubuntu-16.04.1-desktop-amd64.iso等)で起動し、Try UbuntuでLiveDVDを起動します。

2 ストレージのマウント

HDDやSSDのUbuntuをインストールしたストレージをマウントします。この記事では仮想環境のVirtIOストレージを用いており、ストレージは/dev/vdaとして見えます。実機環境の場合は/dev/sdaになると思います。

LVMを使っている場合は/dev/vda1に/boot、/dev/vda5にLVMボリューム、/dev/ubuntu-vg/rootにルートファイルシステムがインストールされてます。LVMを使っていない場合は/dev/vda1に/boot、/dev/vda5にルートファイルシステムがインストールされています。

$ sudo mount -o rw /dev/ubuntu-vg/root /mnt # In case non-lvm is /dev/vda5
$ sudo mount -o rw /dev/vda1 /mnt/boot
$ for fs in proc sys dev; do sudo mount -o bind /$fs /mnt/$fs; done

3 /etc/default/grubの復旧

/etc/default/grubはgrub-mkconfigで使用するgrub.cfgの変数を定義しています。/etc/default/grubの編集でGRUB2が立ち上がらなくなった場合は、LiveDVDのものをコピーしてください。Ubuntu 16.04をインストールした直後はLiveDVDの/etc/default/grubがそのままコピーされています。

$ sudo cp /etc/default/grub /mnt/etc/default/

4 chrootの実行

ルートファイルシステムにchrootします。

$ sudo chroot /mnt

5 lvm2-lvmetadの起動

LVMの場合はgrub-mkconfigで/etc/init.d/lvm2-lvmetadが動いている必要があります。

# /etc/init.d/lvm2-lvmetad start

6 GRUB2の復旧

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

# sudo apt install -y grub2 --reinstall

grub-installでMBRと/bootににGRUB2のファイルを書き込みます。

# grub-install /dev/vda
Installing for i386-pc platform.
Installation finished. No error reported.

grub-mkconfigでGRUB2のメニューを更新します。

# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.4.0-42-generic
Found initrd image: /boot/initrd.img-4.4.0-42-generic
Found linux image: /boot/vmlinuz-4.4.0-38-generic
Found initrd image: /boot/initrd.img-4.4.0-38-generic
Found linux image: /boot/vmlinuz-4.4.0-31-generic
Found initrd image: /boot/initrd.img-4.4.0-31-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
done