mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 02:37:24 +08:00
fix(host-deployer): clean nbd mount on host-deployer start
This commit is contained in:
@@ -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())
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user