Merge pull request #18548 from wanyaoqi/automated-cherry-pick-of-#18546-upstream-master

Automated cherry pick of #18546: fix(host-deployer): clean nbd mount on host-deployer start
This commit is contained in:
Zexi Li
2023-11-02 15:01:32 +08:00
committed by GitHub
2 changed files with 48 additions and 3 deletions
+13
View File
@@ -193,6 +193,19 @@ func (d *NBDDriver) findLVMPartitions(partDev string) string {
return findVgname(partDev)
}
func (nbdDriver *NBDDriver) setupAndPutdownLVMS() error {
_, err := nbdDriver.setupLVMS()
if err != nil {
return err
}
if !nbdDriver.putdownLVMs() {
return errors.Errorf("failed putdown lvms")
}
return nil
}
func (d *NBDDriver) Disconnect() error {
if len(d.nbdDev) > 0 {
pathType, lock := lvmTool.Acquire(d.rootImagePath())
+35 -3
View File
@@ -65,11 +65,13 @@ func tryDetachNbd(nbddev string) error {
var errs []error
for tried < MaxTries && fileutils2.IsBlockDeviceUsed(nbddev) {
tried++
err := QemuNbdDisconnect(nbddev)
if err != nil {
if err := putdownNbdDevice(nbddev); err != nil {
errs = append(errs, err)
time.Sleep(time.Second)
continue
}
time.Sleep(time.Second)
break
}
if tried < MaxTries {
return nil
@@ -80,17 +82,47 @@ func tryDetachNbd(nbddev string) error {
return nil
}
func putdownNbdDevice(nbddev string) error {
nbdDriver := &NBDDriver{nbdDev: nbddev}
if err := nbdDriver.findPartitions(); err != nil {
return err
}
if _, err := nbdDriver.setupLVMS(); err != nil {
return err
}
for i := range nbdDriver.partitions {
if nbdDriver.partitions[i].IsMounted() {
if err := nbdDriver.partitions[i].Umount(); err != nil {
return errors.Wrapf(err, "umount %s", nbdDriver.partitions[i].GetPartDev())
}
}
}
if !nbdDriver.putdownLVMs() {
return errors.Errorf("failed putdown lvms")
}
if err := QemuNbdDisconnect(nbddev); err != nil {
return err
}
return nil
}
func (m *SNBDManager) cleanupNbdDevices() {
var i = 0
for {
nbddev := fmt.Sprintf("/dev/nbd%d", i)
if fileutils2.Exists(nbddev) {
if fileutils2.IsBlockDeviceUsed(nbddev) {
log.Infof("nbd device %s is used", nbddev)
err := tryDetachNbd(nbddev)
if err != nil {
log.Errorf("tryDetachNbd fail %s", err)
}
}
i++
} else {
break
}