Qemu guest fails to write files with raw disk (like \\.\PhysicalDrive1) on Windows host.
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
QEMU |
Expired
|
Undecided
|
Unassigned |
Bug Description
Qemu guest fails to write files with specifing raw disk like \\.\PhysicalDrive1
full command line is below.
qemu-sysytem-
I found the reason is below aio_worker returns -EIO when flush operation.
https:/
static int aio_worker(void *arg)
...
case QEMU_AIO_FLUSH:
if (!FlushFileBuff
return -EIO;
}
FlushFileBuffers always fails with GetLastError() == ERROR_INVALID_
I think this function doesn't support raw device.
For flushing, you might have to issue scsi/ata command or use another way.
Trying to just ignoring this error, writing function seems to be fine for me.
Thanks
hiroaki
The documentation of FlushFileBuffers() only mentions that consoles cannot be flushed. It doesn't specifically mention physical drives, but it does explicitly mention that whole volumes can be flushed this way:
https:/ /msdn.microsoft .com/en- us/library/ windows/ desktop/ aa364439% 28v=vs. 85%29.aspx
Of course, I'm not really a Windows expert, so my reading of this may be wrong. If anyone knows how physical drives are supposed to be flushed other than with FlushFileBuffers(), we can certainly implement that in qemu.
In any case, just disabling the flush is not advisable as it may harm data integrity in case of crashes/power failure. If you really want to disable it, the cache=unsafe option should avoid the calls.