Public bug reported:

[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."

** Affects: grub2 (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: eoan

** Attachment added: "/etc/grub.d/10_linux_zfs: Ignore failed /etc/fstab mount 
in the get_system_directory() function"
   
https://bugs.launchpad.net/bugs/1849347/+attachment/5299227/+files/10_linux_zfs.patch

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1849347

Title:
  /etc/grub.d/10_linux_zfs gives up if any checked /etc/fstab entry is
  invalid

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1849347/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to