[Bug 1973669] [NEW] 10_linuxzfs fails if a non-root filesystem has a mountpoint of /
Jason S
1973669 at bugs.launchpad.net
Tue May 17 02:36:26 UTC 2022
Public bug reported:
For ~4 years, this server ran Ubuntu-18.04 with the OS on mirrored SSDs
and all persistent data in a zpool on separate disks. Last week I
upgraded it. Installation of Ubuntu-22.04 ZFS-root on a new SSD ran
flawlessly. But after importing the persistent data pool, update-grub
(specifically 10_linux_zfs) found the valid kernels but wouldn't create
grub entries for them so /boot/grub/grub.cfg only contained memtest86.
10_linux_zfs's section of grub-mkconfig output is below.
The problem turned out to be a FreeBSD backup I'd zfs-send/rec'd to the
Ubuntu system 2 years ago. At the time, I added a prefix ("zmule") to
all of the FreeBSD filesystems' mountpoints and turned off "canmount".
Somehow I missed the *actual* root filesystem so it was still set to
mount on '/' with "canmount" enabled - though Ubuntu22.04 wouldn't mount
it on top of /, so I never noticed it. However, that's what was
confusing /etc/grub.d/10_linux_zfs even though 18.04 was fine with it.
Once I changed FreeBSD's root mountpoint to not '/', update-grub ran as
expected.
I know this is a strange, unusual situation that shouldn't happen, but a
missing /etc/os-release file in one root(ish) filesystem shouldn't block
it from creating entries for valid ones. If you'd like me to break it
again and run 10_linux_zfs with 'set -x' or similar, I'll be happy to do
that. (I'm a Linux SRE professionally so breaking stuff is all in a
days work.)
One more note: the bug submission wouldn't let me use "grub-common" as
the package, so I changed that to "grub2" even though, as you can see
below, that's not what's installed.
===================================================================
More detail:
$ lsb_release -rd
Description: Ubuntu 22.04 LTS
Release: 22.04
$ apt-cache policy grub-common
grub-common:
Installed: 2.06-2ubuntu7
Candidate: 2.06-2ubuntu7
Version table:
*** 2.06-2ubuntu7 500
500 http://us.archive.ubuntu.com/ubuntu jammy/main amd64 Packages
100 /var/lib/dpkg/status
$ apt-cache policy grub2
grub2:
Installed: (none)
Candidate: 2.06-2ubuntu7
Version table:
2.06-2ubuntu7 500
500 http://us.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
-----------------
### BEGIN /etc/grub.d/10_linux_zfs ###
Found linux image: vmlinuz-5.15.0-27-generic in rpool/ROOT/ubuntu_lva06t
Found initrd image: initrd.img-5.15.0-27-generic in rpool/ROOT/ubuntu_lva06t
Found linux image: vmlinuz-5.15.0-25-generic in rpool/ROOT/ubuntu_lva06t
Found initrd image: initrd.img-5.15.0-25-generic in rpool/ROOT/ubuntu_lva06t
/etc/grub.d/10_linux_zfs: 404: .: cannot open /tmp/zfsmnt.Z7nWCz/etc/os-release: No such file
-----------------
$ zfs get mountpoint persist/backup/mule-zfs/ROOT/default
NAME PROPERTY VALUE SOURCE
persist/backup/mule-zfs/ROOT/default mountpoint / local
-----------------
# oops! This fixed it:
$ sudo zfs set mountpoint=zmule persist/backup/mule-zfs/ROOT/default
$ zfs get mountpoint persist/backup/mule-zfs/ROOT/default
NAME PROPERTY VALUE SOURCE
persist/backup/mule-zfs/ROOT/default mountpoint /zmule local
** Affects: grub2 (Ubuntu)
Importance: Undecided
Status: New
--
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/1973669
Title:
10_linuxzfs fails if a non-root filesystem has a mountpoint of /
Status in grub2 package in Ubuntu:
New
Bug description:
For ~4 years, this server ran Ubuntu-18.04 with the OS on mirrored
SSDs and all persistent data in a zpool on separate disks. Last week I
upgraded it. Installation of Ubuntu-22.04 ZFS-root on a new SSD ran
flawlessly. But after importing the persistent data pool, update-grub
(specifically 10_linux_zfs) found the valid kernels but wouldn't
create grub entries for them so /boot/grub/grub.cfg only contained
memtest86. 10_linux_zfs's section of grub-mkconfig output is below.
The problem turned out to be a FreeBSD backup I'd zfs-send/rec'd to
the Ubuntu system 2 years ago. At the time, I added a prefix
("zmule") to all of the FreeBSD filesystems' mountpoints and turned
off "canmount". Somehow I missed the *actual* root filesystem so it
was still set to mount on '/' with "canmount" enabled - though
Ubuntu22.04 wouldn't mount it on top of /, so I never noticed it.
However, that's what was confusing /etc/grub.d/10_linux_zfs even
though 18.04 was fine with it. Once I changed FreeBSD's root
mountpoint to not '/', update-grub ran as expected.
I know this is a strange, unusual situation that shouldn't happen, but
a missing /etc/os-release file in one root(ish) filesystem shouldn't
block it from creating entries for valid ones. If you'd like me to
break it again and run 10_linux_zfs with 'set -x' or similar, I'll be
happy to do that. (I'm a Linux SRE professionally so breaking stuff
is all in a days work.)
One more note: the bug submission wouldn't let me use "grub-common" as
the package, so I changed that to "grub2" even though, as you can see
below, that's not what's installed.
===================================================================
More detail:
$ lsb_release -rd
Description: Ubuntu 22.04 LTS
Release: 22.04
$ apt-cache policy grub-common
grub-common:
Installed: 2.06-2ubuntu7
Candidate: 2.06-2ubuntu7
Version table:
*** 2.06-2ubuntu7 500
500 http://us.archive.ubuntu.com/ubuntu jammy/main amd64 Packages
100 /var/lib/dpkg/status
$ apt-cache policy grub2
grub2:
Installed: (none)
Candidate: 2.06-2ubuntu7
Version table:
2.06-2ubuntu7 500
500 http://us.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
-----------------
### BEGIN /etc/grub.d/10_linux_zfs ###
Found linux image: vmlinuz-5.15.0-27-generic in rpool/ROOT/ubuntu_lva06t
Found initrd image: initrd.img-5.15.0-27-generic in rpool/ROOT/ubuntu_lva06t
Found linux image: vmlinuz-5.15.0-25-generic in rpool/ROOT/ubuntu_lva06t
Found initrd image: initrd.img-5.15.0-25-generic in rpool/ROOT/ubuntu_lva06t
/etc/grub.d/10_linux_zfs: 404: .: cannot open /tmp/zfsmnt.Z7nWCz/etc/os-release: No such file
-----------------
$ zfs get mountpoint persist/backup/mule-zfs/ROOT/default
NAME PROPERTY VALUE SOURCE
persist/backup/mule-zfs/ROOT/default mountpoint / local
-----------------
# oops! This fixed it:
$ sudo zfs set mountpoint=zmule persist/backup/mule-zfs/ROOT/default
$ zfs get mountpoint persist/backup/mule-zfs/ROOT/default
NAME PROPERTY VALUE SOURCE
persist/backup/mule-zfs/ROOT/default mountpoint /zmule local
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1973669/+subscriptions
More information about the foundations-bugs
mailing list