On 4/22/20 10:30 AM, Fabian Ebner wrote: > Turns out that this alone doesn't make starting containers with an unmounted > zfs subvolume working. But "pct clone" and "pct mount" can still benefit from > this patch. The problem for starting a container is that when we call > PVE::Storage::activate_volumes, it happens inside the lxc-pve-prestart-hook > where the kernel/apparmor will block the "zfs mount" operation. And this > seems to be the case even for a privileged container and/or adding > "lxc.apparmor.profile: unconfined" (I guess because the relevant apparmor > profile is always "lxc-start" which is not affected by those changes?) >
This sounds wrong, Wolfgang can you check this out? > Calling activate_volumes directly in vm_start would work around this, > but if we remove it from lxc-pve-prestart-hook then it can break things for > somebody using "systemctl start pve-container@ID" directly (depending on the > storage) and if we don't remove it, it's code/work duplication. Is modifying > the lxc-start profile viable? > > On 21.04.20 14:00, Fabian Ebner wrote: >> This makes containers work even if the subvolumes are not already >> mounted beforehand for some reason. Without this patch, container >> could quietly fail for e.g. start and full clone, because >> bind-mounting still "worked" on the empty directory. >> >> Signed-off-by: Fabian Ebner <f.eb...@proxmox.com> >> --- >> >> This can be seen as an alternative to [0], which hasn't been applied >> AFAICT. And this approach even works when the subvolume is not mounted >> for a different reason than the one described in [0]. For example, I >> ran into the problem by having a non-empty '/myzpool', causing 'myzpool' >> to be not mountable, but 'myzpool/subvol-123-disk-0' would still be >> mountable. >> >> [0]: https://pve.proxmox.com/pipermail/pve-devel/2020-March/042089.html >> >> 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 10354b3..4a85732 100644 >> --- a/PVE/Storage/ZFSPoolPlugin.pm >> +++ b/PVE/Storage/ZFSPoolPlugin.pm >> @@ -546,9 +546,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; >> } >> > > _______________________________________________ > pve-devel mailing list > pve-devel@pve.proxmox.com > https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel > _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel