abiosoft/colima · error
error preparing storage pools directory: %w
Error message
error preparing storage pools directory: %w
What it means
wipeDisk begins by running 'sudo rm -rf <disk_file> <meta_dir>' in the guest to clear old pool artifacts before recreating storage; that cleanup command failed. rm failures here usually mean the pool file is busy (zfs still holding it), sudo failed, or the guest filesystem errored.
Source
Thrown at environment/container/incus/incus.go:486
return err
}
if out != poolName {
return fmt.Errorf("default storage pool recovery failure")
}
return nil
}
func (c *incusRuntime) wipeDisk(size int) error {
// prepare by deleting relevant files/directories
deleteScript := strings.NewReplacer(
"{disk_file}", poolDiskFile,
"{meta_dir}", poolMetaDir,
).Replace("sudo rm -rf {disk_file} {meta_dir}")
if err := c.guest.RunQuiet("sh", "-c", deleteScript); err != nil {
return fmt.Errorf("error preparing storage pools directory: %w", err)
}
// create new storage pool
var diskSize = fmt.Sprintf("%dGiB", size)
return c.guest.RunQuiet("sudo", "incus", "storage", "create", poolName, storageDriver, "size="+diskSize)
}
// migrationScript returns a script that migrates from the old disk layout
// (separate incus-disks and incus-backups subdirectories) to the new layout
// (full /var/lib/incus directory).
func migrationScript() string {
mountPoint := limautil.MountPoint()
return `MOUNT_POINT="` + mountPoint + `"
if [ -d "$MOUNT_POINT/incus-disks" ] && [ ! -d "$MOUNT_POINT/incus" ]; then
mkdir -p "$MOUNT_POINT/incus"
if [ -d /var/lib/incus ]; then
cp -a /var/lib/incus/. "$MOUNT_POINT/incus/"
fiView on GitHub (pinned to c3a5f9184d)
Solutions
- Check what holds the files: 'colima ssh -- sudo lsof +D /var/lib/incus; sudo zpool list'
- Export any imported pool first: 'colima ssh -- sudo zpool export <pool>' then retry
- Retry after a full stop/start: 'colima stop && colima start'
- If the data volume is faulty, recreate the VM: 'colima delete && colima start'
Defensive patterns
Strategy: try-catch
Validate before calling
// ensure nothing holds the pool before wiping
if c.poolImported() {
_ = c.guest.RunQuiet("sh", "-c", "sudo zpool export "+poolName)
} Try / catch
if err := c.guest.RunQuiet("sh", "-c", deleteScript); err != nil {
// busy files clear after services stop; retry once post-stop
_ = c.systemctl.Stop("incus.service")
if err2 := c.guest.RunQuiet("sh", "-c", deleteScript); err2 != nil {
return fmt.Errorf("error preparing storage pools directory: %w", err2)
}
} Prevention
- Stop incus services before manual cleanup of disk files
- Export zfs pools before removing their .img backing files
- Monitor guest disk health (dmesg I/O errors) and replace flaky volumes
When it happens
Trigger: guest.RunQuiet('sh','-c', 'sudo rm -rf ...') errors: zfs pool still imported and holding the .img, another process has files open under the meta dir, permissions changed, guest disk in read-only/error state.
Common situations: Wiping after a failed recovery where the pool got imported in between, concurrent incus operations in the guest, disk I/O errors on the data volume.
Related errors
- no existing storage pool disks found
- cannot recover disk: %w, creating new storage pool
- cannot list storage pool disks: %w
- error recovering storage pool: %w
- default storage pool recovery failure
AI-assisted analysis of abiosoft/colima@c3a5f9184d (2026-08-15).
Data as JSON: /api/errors/7ca12a81e9e69d70.
Report an issue: GitHub.