diff --git a/pkg/hostman/diskutils/fsutils/fsutils.go b/pkg/hostman/diskutils/fsutils/fsutils.go index 29b7b360c2..b0ab84aa7b 100644 --- a/pkg/hostman/diskutils/fsutils/fsutils.go +++ b/pkg/hostman/diskutils/fsutils/fsutils.go @@ -228,8 +228,8 @@ func ResizePartitionFs(fpath, fs string, raiseError bool) (error, bool) { return nil, false } var ( - cmds = [][]string{} - uuids = fileutils2.GetDevUuid(fpath) + cmds = [][]string{} + uuids, _ = fileutils2.GetDevUuid(fpath) ) if strings.HasPrefix(fs, "linux-swap") { if v, ok := uuids["UUID"]; ok { diff --git a/pkg/hostman/guestfs/kvmpart/kvmpart.go b/pkg/hostman/guestfs/kvmpart/kvmpart.go index 4e45f5f6ff..2a23bed1d6 100644 --- a/pkg/hostman/guestfs/kvmpart/kvmpart.go +++ b/pkg/hostman/guestfs/kvmpart/kvmpart.go @@ -36,6 +36,7 @@ type SKVMGuestDiskPartition struct { *SLocalGuestFS partDev string fs string + uuid string readonly bool sourceDev string @@ -164,13 +165,13 @@ func (p *SKVMGuestDiskPartition) mount(readonly bool) error { var err error if fsType == "xfs" { - uuids := fileutils2.GetDevUuid(p.partDev) - uuid := uuids["UUID"] - if len(uuid) > 0 { - LockXfsPartition(uuid) + uuids, _ := fileutils2.GetDevUuid(p.partDev) + p.uuid, _ = uuids["UUID"] + if len(p.uuid) > 0 { + LockXfsPartition(p.uuid) defer func() { if err != nil { - UnlockXfsPartition(uuid) + UnlockXfsPartition(p.uuid) } }() } @@ -250,19 +251,18 @@ func (p *SKVMGuestDiskPartition) Umount() error { return nil } + defer func() { + if p.fs == "xfs" && len(p.uuid) > 0 { + UnlockXfsPartition(p.uuid) + } + }() + var tries = 0 var err error for tries < 10 { tries += 1 _, err = procutils.NewCommand("umount", p.mountPath).Output() if err == nil { - if p.fs == "xfs" { - uuids := fileutils2.GetDevUuid(p.partDev) - uuid := uuids["UUID"] - if len(uuid) > 0 { - UnlockXfsPartition(uuid) - } - } if _, err := procutils.NewCommand("blockdev", "--flushbufs", p.partDev).Output(); err != nil { log.Warningf("blockdev --flushbufs %s error: %v", p.partDev, err) } @@ -292,7 +292,7 @@ func (p *SKVMGuestDiskPartition) Zerofree() { } func (p *SKVMGuestDiskPartition) zerofreeSwap() { - uuids := fileutils2.GetDevUuid(p.partDev) + uuids, _ := fileutils2.GetDevUuid(p.partDev) output, err := procutils.NewCommand("shred", "-n", "0", "-z", p.partDev).Output() if err != nil { log.Errorf("zerofree swap error: %s, %s", err, output) diff --git a/pkg/util/fileutils2/fileutils.go b/pkg/util/fileutils2/fileutils.go index 79c8db3b1b..0550897fa3 100644 --- a/pkg/util/fileutils2/fileutils.go +++ b/pkg/util/fileutils2/fileutils.go @@ -349,10 +349,11 @@ func GetDevId(spath string) string { return strings.Join(data, ":") } -func GetDevUuid(dev string) map[string]string { +func GetDevUuid(dev string) (map[string]string, error) { lines, err := procutils.NewCommand("blkid", dev).Output() if err != nil { - return nil + log.Errorf("GetDevUuid %s error: %v", dev, err) + return map[string]string{}, errors.Wrapf(err, "blkid") } for _, l := range strings.Split(string(lines), "\n") { if strings.HasPrefix(l, dev) { @@ -367,8 +368,8 @@ func GetDevUuid(dev string) map[string]string { } } } - return ret + return ret, nil } } - return nil + return map[string]string{}, nil }