[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
Thu Nov 14 11:19:22 UTC 2019
Thank you very much for the detailed bug report and the patch. We've
applied your patch but removed the redirection to stderr to help
understand the error in case of failure.
--
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:
Triaged
Status in grub2 source package in Focal:
Triaged
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