bus='virtio' is implied due to the device name beginning with "vd". So these are equal and unlikely to be the culprit.
driver name="qemu" is the default for the qemu driver. Also equal, unlikely to be the culprit.
driver type="raw" is the default for the qemu driver. Also equal, so unlikely to be the culprit.
The only thing left is the caching strategy. Virsh doesn't set one at all, so (AFAICT) no "cache=XXX" is passed to QEmu. When cache='none' is passed in the XML, def->cachemode gets set to VIR_DOMAIN_DISK_CACHE_DISABLE. For QEMU_CAPS_DRIVE_CACHE_V2 translates into ",cache=none". This seems like the only difference.
Just removing the <driver> tag should do the trick, really. The XML would end up being functionally identical to virsh's.
In my reading of libvirt:
bus='virtio' is implied due to the device name beginning with "vd". So these are equal and unlikely to be the culprit.
driver name="qemu" is the default for the qemu driver. Also equal, unlikely to be the culprit.
driver type="raw" is the default for the qemu driver. Also equal, so unlikely to be the culprit.
The only thing left is the caching strategy. Virsh doesn't set one at all, so (AFAICT) no "cache=XXX" is passed to QEmu. When cache='none' is passed in the XML, def->cachemode gets set to VIR_DOMAIN_ DISK_CACHE_ DISABLE. For QEMU_CAPS_ DRIVE_CACHE_ V2 translates into ",cache=none". This seems like the only difference.
Just removing the <driver> tag should do the trick, really. The XML would end up being functionally identical to virsh's.