"Error: Failed getting disk path: exec: 'zvol_id': executable file not found in $PATH" upon starting VM


I am trying to set up a FreeBSD/TrueNAS VM with LXD.

When I am doing this on my local Storage Pool (System Disk, btrfs) located on my system’s boot device, it works fine.

I am trying to set it up on my additional Storage Pool (ZFS Mirror, managed by LXD) and I am running into an error upon machines startup:

Error: Failed getting disk path: exec: "zvol_id": executable file not found in $PATH

Commands used to set it up:

lxc init nas \
    --vm \
    --empty \
    --profile=default \
    --project=run \
    --storage=zpool1 \
    -c limits.cpu=4 \
    -c limits.memory=32GiB \
    -c security.secureboot=false

echo '-cpu host' | lxc config set nas --project=run raw.qemu -

lxc config device add nas --project=run iso disk \
    source=/opt/iso/TrueNAS-13.0-U3.1.iso \

What does this message mean? What can I do to get the VM running on the zfs pool? And why I do not have problems on the system’s boot HD device?

All my LXD Containers are running very well on the zfs pool.

Thanks for your help and suggestions.


Do you have a command called zvol_id on your system? Apparently its not in /lib/udev/zvol_id nor is it in your PATH.

Apparently udev is also not working on your system.
What is your host OS/version?

As you are getting an error here:

Hi Thomas,

host OS is Alpine 3.17. And you’re right, I did not manually install udev (I try to keep my system lean). But the directoy is there. This is all it’s content:

core:/lib/udev/rules.d# ls -a
.                     ..                    64-btrfs-dm.rules     64-btrfs-zoned.rules  80-kvm.rules          99-fuse.rules

For containers on the zfs pool and for VM on the local btrfs pool it does not cause any issues. They are going smooooooth.

I suppose it depends on whether there is another way of programatically locating the device path for a ZFS block volume.