[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [Bug 1437367] Re: Qemu guest fails to write files with raw
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [Bug 1437367] Re: Qemu guest fails to write files with raw disk (like \\.\PhysicalDrive1) on Windows host. |
Date: |
Mon, 30 Mar 2015 16:04:28 -0000 |
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.
--
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1437367
Title:
Qemu guest fails to write files with raw disk (like
\\.\PhysicalDrive1) on Windows host.
Status in QEMU:
New
Bug description:
Qemu guest fails to write files with specifing raw disk like
\\.\PhysicalDrive1
full command line is below.
qemu-sysytem-i386.exe -kernel bzImage -drive file=rootfs.ext2,index=0,if=scsi
-append root=/dev/sda -drive file=\\.\PhysicalDrive1,index=1,if=scsi
I found the reason is below aio_worker returns -EIO when flush
operation.
https://github.com/qemu/qemu/blob/master/block/raw-win32.c#L95
static int aio_worker(void *arg)
...
case QEMU_AIO_FLUSH:
if (!FlushFileBuffers(aiocb->hfile)) {
return -EIO;
}
FlushFileBuffers always fails with GetLastError() == ERROR_INVALID_FUNCTION
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
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1437367/+subscriptions
- [Qemu-devel] [PATCH v6 0/7] Block Throttle Group Support, Alberto Garcia, 2015/03/30
- [Qemu-devel] [PATCH 7/7] throttle: Update throttle infrastructure copyright, Alberto Garcia, 2015/03/30
- [Qemu-devel] [PATCH 3/7] throttle: Add throttle group infrastructure tests, Alberto Garcia, 2015/03/30
- [Qemu-devel] [PATCH 6/7] throttle: add the name of the ThrottleGroup to BlockDeviceInfo, Alberto Garcia, 2015/03/30
- [Qemu-devel] [PATCH 5/7] throttle: acquire the ThrottleGroup lock in bdrv_swap(), Alberto Garcia, 2015/03/30
- [Qemu-devel] [PATCH 1/7] throttle: Extract timers from ThrottleState into a separate structure, Alberto Garcia, 2015/03/30
- [Qemu-devel] [PATCH 2/7] throttle: Add throttle group infrastructure, Alberto Garcia, 2015/03/30
- [Qemu-devel] [PATCH 4/7] throttle: Add throttle group support, Alberto Garcia, 2015/03/30