From 7291ac81bb43bbdb40fad90430462bcdba3e6c84 Mon Sep 17 00:00:00 2001 From: TAO Date: Thu, 15 Sep 2022 10:38:58 +0800 Subject: [PATCH] Fix: overlay umount error by mountpoint (#1698) Signed-off-by: tgfree Fix: overlay umount error by mountpoint --- pkg/prune/build_pruner.go | 6 +----- utils/mount/mount_service.go | 21 ++++++++++++++++----- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/pkg/prune/build_pruner.go b/pkg/prune/build_pruner.go index 4f90e6dba35..6a981609304 100644 --- a/pkg/prune/build_pruner.go +++ b/pkg/prune/build_pruner.go @@ -17,7 +17,6 @@ package prune import ( "github.com/sealerio/sealer/common" "github.com/sealerio/sealer/utils/mount" - osi "github.com/sealerio/sealer/utils/os" ) type buildPrune struct { @@ -33,10 +32,7 @@ func NewBuildPrune() Pruner { func (b buildPrune) Select() ([]string, error) { var pruneList []string // umount all tmp dir, and delete it - pruneUnits, err := osi.GetDirNameListInDir(b.pruneRootDir, osi.FilterOptions{ - All: true, - WithFullPath: true, - }) + pruneUnits, err := mount.GetDirNameListInDir(b.pruneRootDir) if err != nil { return pruneList, err } diff --git a/utils/mount/mount_service.go b/utils/mount/mount_service.go index 22e4a0ebaec..420a081d13e 100644 --- a/utils/mount/mount_service.go +++ b/utils/mount/mount_service.go @@ -19,12 +19,12 @@ import ( "net" "strings" + "github.com/moby/sys/mountinfo" + "github.com/sealerio/sealer/utils/ssh" "github.com/shirou/gopsutil/disk" "github.com/sirupsen/logrus" - "github.com/sealerio/sealer/utils/exec" "github.com/sealerio/sealer/utils/os/fs" - "github.com/sealerio/sealer/utils/ssh" strUtils "github.com/sealerio/sealer/utils/strings" ) @@ -120,6 +120,18 @@ func NewMountService(target, upper string, lowLayers []string) (Service, error) }, nil } +func GetDirNameListInDir(dir string) ([]string, error) { + var dirs []string + infos, err := mountinfo.GetMounts(mountinfo.PrefixFilter(dir)) + if err != nil { + return dirs, err + } + for _, info := range infos { + dirs = append(dirs, info.Mountpoint) + } + return dirs, nil +} + //NewMountServiceByTarget will filter file system by target,if not existed,return false. func NewMountServiceByTarget(target string) Service { mounted, info := GetMountDetails(target) @@ -141,12 +153,11 @@ type Info struct { } func GetMountDetails(target string) (bool, *Info) { - cmd := fmt.Sprintf("mount | grep %s", target) - result, err := exec.RunSimpleCmd(cmd) + infos, err := mountinfo.GetMounts(mountinfo.SingleEntryFilter(target)) if err != nil { return false, nil } - return mountCmdResultSplit(result, target) + return mountCmdResultSplit(infos[0].VFSOptions, target) } func GetRemoteMountDetails(s ssh.Interface, ip net.IP, target string) (bool, *Info) {