lima-vm/lima · error

failed to delete driver instance: %w

Error message

failed to delete driver instance: %w

What it means

unregister in pkg/instance/delete.go successfully created the driver, but limaDriver.Delete(ctx) failed while tearing down driver-managed resources (disks, network interfaces, ssh config). The instance directory is kept so the operation can be retried.

Source

Thrown at pkg/instance/delete.go:46

		if err := unregister(ctx, inst); err != nil {
			return fmt.Errorf("failed to unregister %#q: %w", inst.Dir, err)
		}
	}
	if err := os.RemoveAll(inst.Dir); err != nil {
		return fmt.Errorf("failed to remove %#q: %w", inst.Dir, err)
	}

	return nil
}

func unregister(ctx context.Context, inst *limatype.Instance) error {
	limaDriver, err := driverutil.CreateConfiguredDriver(ctx, inst, 0)
	if err != nil {
		return fmt.Errorf("failed to create driver instance: %w", err)
	}

	if err := limaDriver.Delete(ctx); err != nil {
		return fmt.Errorf("failed to delete driver instance: %w", err)
	}
	server.Stop(inst.Dir, true)

	return nil
}

View on GitHub (pinned to dd909d0973)

Solutions

  1. Read the wrapped driver error to see which resource teardown failed.
  2. Ensure no process uses the VM's disk (check qemu/vz/WSL processes) and retry `limactl delete`.
  3. Stop forcibly first: `limactl stop -f <instance>` then delete.
  4. If resources are already gone, manually remove the instance dir (`rm -rf ~/.lima/<instance>`).

Example fix

// before
limactl delete myvm
// after
limactl stop -f myvm && limactl delete myvm
Defensive patterns

Strategy: retry

Validate before calling

// ensure nothing holds the disk image before delete
if locked, _ := fileLocked(filepath.Join(inst.Dir, "basedisk")); locked {
    return errors.New("disk in use; stop the VM first")
}

Try / catch

err := instance.Delete(ctx, inst, false)
if err != nil && strings.Contains(err.Error(), "failed to delete driver instance") {
    time.Sleep(2 * time.Second)
    err = instance.Delete(ctx, inst, false) // retry once for transient locks
}
return err

Prevention

When it happens

Trigger: unregister(ctx, inst) calls limaDriver.Delete(ctx) at delete.go:45 and it returns an error — e.g. qcow2/disk file already gone or locked, vzvirt network device busy, or hypervisor API rejecting the delete.

Common situations: Disk image mounted or in use by another process, leftover network interfaces from a crashed VM, running delete twice concurrently, or WSL2/HVF backend reporting stale resources.

Related errors


AI-assisted analysis of lima-vm/lima@dd909d0973 (2026-09-01). Data as JSON: /api/errors/0accd59b1a379ae5. Report an issue: GitHub.