]> granicus.if.org Git - zfs/commitdiff
initramfs: Honor canmount=off
authorRichard Laager <rlaager@wiktel.com>
Fri, 24 Nov 2017 05:08:02 +0000 (23:08 -0600)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 28 Nov 2017 17:38:13 +0000 (09:38 -0800)
The initramfs script was not honoring canmount=off.  With this change,
it does.  If the administrator has asked that a filesystem not be
mounted, that should be honored.

As an exception, the initramfs script ignores canmount=off on the
rootfs.  The rootfs should not have canmount=off set either.  However,
mounting it anyway seems harmless because it is being asked for
explicitly.  The point of this exception is to avoid the risk of
breaking existing systems, just in case someone has canmount=off set on
their rootfs.

The initramfs still mounts filesystems with canmount=noauto.  This is
necessary because it is typical to set that on the rootfs so that it can
be cloned.  Without canmount=noauto, the clones' duplicate mountpoints
would conflict.

This is the remainder of the fix for:
https://github.com/zfsonlinux/pkg-zfs/issues/221

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: George Melikov <mail@gmelikov.ru>
Signed-off-by: Richard Laager <rlaager@wiktel.com>
Closes #6897

contrib/initramfs/scripts/zfs.in

index 52098cc14e2307db95cb0e2a8685b983d8b0b760..d51ae1ea03cce23d3a0cd6a927cf1c46882be3c8 100644 (file)
@@ -317,6 +317,14 @@ mount_fs()
        "${ZFS}" list -oname -tfilesystem -H "${fs}" > /dev/null 2>&1
        [ "$?" -ne 0 ] && return 1
 
+       # Skip filesystems with canmount=off.  The root fs should not have
+       # canmount=off, but ignore it for backwards compatibility just in case.
+       if [ "$fs" != "${ZFS_BOOTFS}" ]
+       then
+               canmount=$(get_fs_value "$fs" canmount)
+               [ "$canmount" = "off" ] && return 0
+       fi
+
        # Need the _original_ datasets mountpoint!
        mountpoint=$(get_fs_value "$fs" mountpoint)
        if [ "$mountpoint" = "legacy" -o "$mountpoint" = "none" ]; then