Ubuntu 16.04: Repair GRUB2

This article will describe repairing GRUB2 when GRUB2 cannot boot.

1 Run LiveDVD

Run Ubuntu 16.04's LiveDVD like ubuntu-16.04.1-desktop-amd64.iso and select "Try Ubuntu".

2 Mount storage

Mount HDD and SSD which is installed Ubuntu 16.04. This article uses VirtIO and storage device is /dev/vda. In case of physical machine is /dev/sda.

When using LVM, /dev/vda1 is /boot, /dev/vda5 is LVM volume and /dev/ubuntu-vg is root filesystem. When not using LVM, /dev/vda1 is /boot and /dev/vda5 is root filesystem.

$ 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 Copy /etc/default/grub

grub-mkconfig's variable is defined at /etc/default/grub. When installing Ubuntu, /etc/default/grub in LiveDVD will be copied to root filesytem.

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

4 Run chroot

Run chroot to storage root filesystem.

$ sudo chroot /mnt

5 Run lvm2-lvmetadの起動

When using LVM, grub-mkconfig needs running /etc/init.d/lvm2-lvmetad.

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

6 Repair GRUB2

Reinstall GRUB2 package.

# sudo apt install -y grub2 --reinstall

Write GRUB2 to MBR and /boot with grub-install.

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

Create GRUB2 menu with grub-mkconfig.

# 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