[Bug 1849347] Re: /etc/grub.d/10_linux_zfs gives up if any checked /etc/fstab entry is invalid
Jean-Baptiste Lallement
jean-baptiste.lallement at ubuntu.com
Fri Nov 15 15:15:28 UTC 2019
** Changed in: grub2 (Ubuntu Focal)
Status: Triaged => In Progress
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to grub2 in Ubuntu.
https://bugs.launchpad.net/bugs/1849347
Title:
/etc/grub.d/10_linux_zfs gives up if any checked /etc/fstab entry is
invalid
Status in grub2 package in Ubuntu:
In Progress
Status in grub2 source package in Focal:
In Progress
Bug description:
[Impact]
Ubuntu's ZFS boot support (`/etc/grub.d/10_linux_zfs`) will fail to generate any GRUB entries for ZFS roots if any of the checked `/etc/fstab` entries fails to mount. This includes all past ZFS snapshots.
[Test Case]
1. On a system that has a ZFS root (e.g. one installed with zsys), run `sudo update-grub`.
2. Verify that there are GRUB boot entries for ZFS:
sed -n '/^### BEGIN \/etc\/grub\.d\/10_linux_zfs ###$/,/^### END
\/etc\/grub\.d\/10_linux_zfs ###$/p;/^### END
\/etc\/grub\.d\/10_linux_zfs ###$/q' /boot/grub/grub.cfg
3. To reproduce the problem, create or edit a `/boot` entry that will
fail mounting. (Back up the existing line if you have one and are
working on a real system.) Example:
echo 'UUID=deaddead-dead-4ead-dead-deaddeaddead /boot
ext2 discard,nofail 0 2' | sudo tee -a /etc/fstab
4. (Optional) Take a ZFS snapshot of the dataset that provides `/etc`:
sudo zfs snap "$(df /etc -t zfs | sed '/^Filesystem/d' | awk
'{print $1}')"@repro
5. If you performed step 4, restore the `/etc/fstab` back to its
original working condition:
sudo sed -i '/^UUID=deaddead-dead-4ead-dead-deaddeaddead/d'
/etc/fstab
6. Run `sudo update-grub` again.
7. See that the GRUB boot entries for ZFS roots have been wiped out:
sed -n '/^### BEGIN \/etc\/grub\.d\/10_linux_zfs ###$/,/^### END
\/etc\/grub\.d\/10_linux_zfs ###$/p;/^### END
\/etc\/grub\.d\/10_linux_zfs ###$/q' /boot/grub/grub.cfg
[Regression Potential]
The patch adds a sanity check for a mount that could fail. The sanity check prevents the entire `/etc/grub.d/10_linux_zfs` from being wiped out from that failed mount.
The new behavior causes the `get_system_directory()` function in
`/etc/grub.d/10_linux_zfs` to act as if the bad mount didn't exist.
The function would then continue to the next case, which is currently
documented as "Handle zfs case, which can be a snapshots."
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1849347/+subscriptions
More information about the foundations-bugs
mailing list