From 815df2dd08ac4c7295135262e60d64fbb57b8f5c Mon Sep 17 00:00:00 2001 From: Fabian Ebner Date: Mon, 28 Sep 2020 11:48:37 +0200 Subject: [PATCH] ZFS: mount subvols in activate_volume Makes it possible to clone and start a container whose ZFS subvols are not yet mounted for some reason. If a subvol cannot be mounted, there's a better error now: zfs error: cannot mount '/myzpool/subvol-103-disk-0': directory is not empty Previously, cloning would quietly do an "empty" clone, and startup would fail with: mount_autodev: 1074 Permission denied - Failed to create "/dev" directory lxc_setup: 3238 Failed to mount "/dev" do_start: 1224 Failed to setup container "103" __sync_wait: 41 An error occurred in another process (expected sequence number 5) Signed-off-by: Fabian Ebner --- PVE/Storage/ZFSPoolPlugin.pm | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/PVE/Storage/ZFSPoolPlugin.pm b/PVE/Storage/ZFSPoolPlugin.pm index 7c180ea..215b703 100644 --- a/PVE/Storage/ZFSPoolPlugin.pm +++ b/PVE/Storage/ZFSPoolPlugin.pm @@ -549,9 +549,14 @@ sub activate_volume { my (undef, undef, undef, undef, undef, undef, $format) = $class->parse_volname($volname); - return 1 if $format ne 'raw'; - - $class->zfs_wait_for_zvol_link($scfg, $volname); + if ($format eq 'raw') { + $class->zfs_wait_for_zvol_link($scfg, $volname); + } elsif ($format eq 'subvol') { + my $mounted = $class->zfs_get_properties($scfg, 'mounted', "$scfg->{pool}/$volname"); + if ($mounted !~ m/^yes$/) { + $class->zfs_request($scfg, undef, 'mount', "$scfg->{pool}/$volname"); + } + } return 1; }