You can use the steps below to reinstall grub on a Ubuntu 16.04 ROOT on ZFS installation.
Step 1: Prepare The Install Environment
1.1 Boot the Ubuntu Live CD, select Try Ubuntu Without Installing, and open a terminal (press Ctrl-Alt-T).
1.2 Optional: Install the OpenSSH server in the Live CD environment: If you have a second system, using SSH to access the target system can be convenient.
$ sudo apt-get --yes install openssh-server
Set a password on the “ubuntu” (Live CD user) account:
$ passwd
Hint: You can find your IP address with ip addr show scope global. Then, from your main machine, connect with ssh ubuntu@IP.
1.3 Become root:
# sudo -i
1.4 Install ZFS in the Live CD environment:
# apt-add-repository universe
# apt update
(ignore errors about moving an old database out of the way)
# apt install --yes debootstrap gdisk zfs-initramfs grub-efi-amd64
Step 2: Discover available ZFS pools
2.1 check if ZFS pools are already imported
# zpool list
# zfs list
2.2 if so, we need to export the zfs pool so we can mount it in a different directory so we can chroot to it
# zpool export rpool
Step 3: Chroot into ZFS pool
3.1 import pool to non-default location. The -N flag (don’t automatically mount) is necessary because otherwise the rpool root, and the rpool/root/UBUNTU pool, will both try to mount on /mnt
# zpool import -a -N -R /mnt
3.2 mount the root system
# zfs mount rpool/ROOT/ubuntu
3.3 mount the remaining file systems
# zfs mount -a
3.4 Bind the virtual filesystems from the LiveCD environment to the new system and chroot into it:
# mount --rbind /dev /mnt/dev
# mount --rbind /proc /mnt/proc
# mount --rbind /sys /mnt/sys
# chroot /mnt /bin/bash --login
Note: This is using –rbind, not —bind.
Step 4: Re-initialise EFI partitions on all root pool components
4.1 Check the wildcard gets the correct root pool partitions:
# for i in /dev/disk/by-id/*ata*part3; do echo $i; done
4.2 Add an entry for /boot/efi for each disk to /etc/fstab for failover purposes in future:
# for i in /dev/disk/by-id/*ata*part3; \
do mkdosfs -F 32 -n EFI ${i}; \
echo PARTUUID=$(blkid -s PARTUUID -o value \
${i}) /boot/efi vfat defaults 0 1 >> /etc/fstab; done
4.3 mount the first disk
# mount /dev/disk/by-id/scsi-SATA_disk1-part3 /boot/efi
4.4 install grub
# grub-install --target=x86_64-efi --efi-directory=/boot/efi \
--bootloader-id=ubuntu --recheck —no-floppy
4.5 unmount the first partition
# umount /boot/efi
4.6 mount the second disk
# mount /dev/disk/by-id/scsi-SATA_disk2-part3 /boot/efi
4.7 install grub
# grub-install --target=x86_64-efi --efi-directory=/boot/efi \
--bootloader-id=ubuntu --recheck —no-floppy
4.8 repeat steps 4.5 to 4.7 for each additional disk 4.9 For added insurance, do an MBR installation to each disk too
# grub-install /dev/disk/by-id/scsi-SATA_disk1
# grub-install /dev/disk/by-id/scsi-SATA_disk2
Step 5: Reboot
5.1 Quit from the chroot
# exit
5.2 Reboot
# reboot
No comments:
Post a Comment