{"record":{"id":"16447dd16359f888","repo":"lima-vm/lima","slug":"failed-to-delete-disk-q-w","errorCode":null,"errorMessage":"failed to delete disk %#q: %w","messagePattern":"failed to delete disk %#q: %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/limactl/disk.go","lineNumber":287,"sourceCode":"\t\t\t}\n\t\t\tvar refInstances []string\n\t\t\tfor _, inst := range instances {\n\t\t\t\tfor _, d := range inst.AdditionalDisks {\n\t\t\t\t\tif d.Name == diskName {\n\t\t\t\t\t\trefInstances = append(refInstances, inst.Name)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(refInstances) > 0 {\n\t\t\t\tlogrus.Warnf(\"Skipping deleting disk %#q, disk is referenced by one or more non-running instances: %#q\",\n\t\t\t\t\tdiskName, refInstances)\n\t\t\t\tlogrus.Warnf(\"To delete anyway, run %#q\", forceDeleteCommand(diskName))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif err := deleteDisk(disk); err != nil {\n\t\t\treturn fmt.Errorf(\"failed to delete disk %#q: %w\", diskName, err)\n\t\t}\n\t\tlogrus.Infof(\"Deleted %#q (%#q)\", diskName, disk.Dir)\n\t}\n\treturn nil\n}\n\nfunc deleteDisk(disk *store.Disk) error {\n\tif err := os.RemoveAll(disk.Dir); err != nil {\n\t\treturn fmt.Errorf(\"failed to remove %#q: %w\", disk.Dir, err)\n\t}\n\treturn nil\n}\n\nfunc forceDeleteCommand(diskName string) string {\n\treturn fmt.Sprintf(\"limactl disk delete --force %v\", diskName)\n}\n\nfunc newDiskUnlockCommand() *cobra.Command {","sourceCodeStart":269,"sourceCodeEnd":305,"githubUrl":"https://github.com/lima-vm/lima/blob/dd909d0973cd84fa35f9e1693181b4585ea616c1/cmd/limactl/disk.go#L269-L305","documentation":"The final removal of the disk (deleteDisk: removing the disk directory and its contents) failed after all in-use checks passed. The store-level deletion error is wrapped with the disk name. Typical causes are filesystem-level problems rather than Lima logic.","triggerScenarios":"`limactl disk delete <name>` where deleteDisk fails on os.RemoveAll of the disk dir — permission denied, files locked by a running VM process, or a partially missing directory.","commonSituations":"A VM process still holding files open in the disk dir; disk dir owned by root after a sudo run; disk on a network mount with stale handles.","solutions":["Ensure no VM is running that used this disk (limactl list; stop instances)","Fix ownership: sudo chown -R $(whoami) ~/.lima/disks/<name>, then retry","Read the wrapped %w error; if permission denied, adjust permissions, if EBUSY, kill the holding process","As a last resort remove ~/.lima/disks/<name> manually after confirming no process uses it"],"exampleFix":"// before\n$ limactl disk delete data\n// failed to delete disk \"data\": remove ...: permission denied\n// after\n$ sudo chown -R $(whoami) ~/.lima/disks/data\n$ limactl disk delete data","handlingStrategy":"try-catch","validationCode":"const { accessSync, constants } = require('fs')\ntry { accessSync(diskDirPath(name), constants.W_OK) } catch { throw new Error('no write permission on disk dir; fix chown first') }","typeGuard":"function isDeleteErr(err: unknown): boolean {\n  return err instanceof Error && /failed to delete disk/.test(err.message)\n}","tryCatchPattern":"try {\n  await deleteDisk(name)\n} catch (err) {\n  if (isDeleteErr(err)) {\n    console.error('Check for VM processes holding files and dir permissions:', err.cause ?? err)\n  } else throw err\n}","preventionTips":["Stop all instances that ever attached the disk before deleting","Avoid sudo-created disk dirs; keep one owning user","Keep ~/.lima/disks on a local, writable filesystem","Read the wrapped cause (%w) before retrying"],"tags":["disk","delete","filesystem"],"backgroundTag":"disk-delete-failed","analyzedSha":"dd909d0973cd84fa35f9e1693181b4585ea616c1","analyzedAt":"2026-09-01T14:24:59.842Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}