From 24662191397331a3e396374a2742824dd00d1702 Mon Sep 17 00:00:00 2001 From: Zexi Li Date: Mon, 23 Dec 2024 20:13:15 +0800 Subject: [PATCH] feat(host): mount post_overlay with metacopy feature (#21880) --- .../volume_mount/disk/post_overlay.go | 4 +++- pkg/util/mountutils/mount.go | 20 ++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/pkg/hostman/container/volume_mount/disk/post_overlay.go b/pkg/hostman/container/volume_mount/disk/post_overlay.go index ff1321d737..24f7ea5441 100644 --- a/pkg/hostman/container/volume_mount/disk/post_overlay.go +++ b/pkg/hostman/container/volume_mount/disk/post_overlay.go @@ -161,7 +161,9 @@ func (d diskPostOverlay) mountPostOverlay(pod volume_mount.IPodInfo, ctrId strin return errors.Wrapf(err, "get post overlay mountpoint for container %s", ctrId) } - return mountutils.MountOverlay(ov.HostLowerDir, upperDir, workDir, mergedDir) + return mountutils.MountOverlayWithFeatures(ov.HostLowerDir, upperDir, workDir, mergedDir, &mountutils.MountOverlayFeatures{ + MetaCopy: true, + }) } func (d diskPostOverlay) unmountPostOverlay(pod volume_mount.IPodInfo, ctrId string, vm *hostapi.ContainerVolumeMount, ov *apis.ContainerVolumeMountDiskPostOverlay, useLazy bool, cleanLayers bool) error { diff --git a/pkg/util/mountutils/mount.go b/pkg/util/mountutils/mount.go index a6fc40fe08..644cf4e8ea 100644 --- a/pkg/util/mountutils/mount.go +++ b/pkg/util/mountutils/mount.go @@ -56,10 +56,28 @@ func Mount(devPath string, mountPoint string, fsType string) error { } func MountOverlay(lowerDir []string, upperDir string, workDir string, mergedDir string) error { + return mountOverlay(lowerDir, upperDir, workDir, mergedDir, nil) +} + +type MountOverlayFeatures struct { + MetaCopy bool +} + +func MountOverlayWithFeatures(lowerDir []string, upperDir string, workDir string, mergedDir string, features *MountOverlayFeatures) error { + return mountOverlay(lowerDir, upperDir, workDir, mergedDir, features) +} + +func mountOverlay(lowerDir []string, upperDir string, workDir string, mergedDir string, features *MountOverlayFeatures) error { return mountWrap(mergedDir, func() error { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() - overlayArgs := []string{"-t", "overlay", "overlay", "-o", fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", strings.Join(lowerDir, ":"), upperDir, workDir), mergedDir} + optStr := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", strings.Join(lowerDir, ":"), upperDir, workDir) + if features != nil { + if features.MetaCopy { + optStr += ",metacopy=on" + } + } + overlayArgs := []string{"-t", "overlay", "overlay", "-o", optStr, mergedDir} if out, err := procutils.NewRemoteCommandContextAsFarAsPossible(ctx, "mount", overlayArgs...).Output(); err != nil { return errors.Wrapf(err, "mount %v: %s", overlayArgs, out) }