qemu-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]