Here’s what I did.
In the TrueNAS UI, I went to Containers and stopped the VM I want to move back to Virtual Machines.
Then, in the TrueNAS shell I listed the volumes I had imported into Incus with zfs list -r -t vol <pool>/.ix-virt
I imported my Zvol to Incus using the move option, and I did not replace my root disk with the Zvol, as in Stux’s guide. Here’s how my volumes looked and the steps I took using this as an example.
sudo zfs list -r -t vol tank/.ix-virt
NAME USED AVAIL REFER MOUNTPOINT
tank/.ix-virt/custom/default_haos 32.5G 119G 1.89G -
tank/.ix-virt/virtual-machines/HAOS.block 56K 87.9G 56K -
I can see that tank/.ix-virt/custom/default_haos is the Zvol I want to move, so I took a snapshot of it.
sudo zfs snapshot -r tank/.ix-virt/custom/default_haos@relocate
Then I used zfs send/receive to copy that to the desired location in my pool.
sudo zfs send tank/.ix-virt/custom/default_haos@relocate | sudo zfs receive -v tank/vm/haos
I checked the cache settings and volmode as Stux mentioned, and they were already set correctly. However, I had to set refreservation=auto so the Zvol used thick provisioning. (TrueNAS default when creating a Zvol in the UI)
sudo zfs set refreservation=auto tank/vm/haos
Then I recreated the VM on the Virtual Machines page, using the existing Zvol. Once I confirmed it was functioning correctly, I deleted the VM from the Containers page and deleted the hidden Zvol from the Configuration > Manage Volumes menu. I also deleted the @relocate snapshot from the Zvol I moved.