1. 28 9月, 2011 1 次提交
  2. 16 9月, 2011 1 次提交
  3. 06 9月, 2011 2 次提交
    • P
      link-state: qemu: Add monitor handling for link state modification · 8277c151
      Peter Krempa 提交于
      This patch adds handlers for modification of guest's interface
      link state. Both HMP and QMP commands are supported, but as the
      link state functionality is from the beginning supported in QMP
      the HMP code will probably never be used.
      8277c151
    • O
      latency: Update monitor functions for new latency fields · 2f58ba89
      Osier Yang 提交于
      The mainly changes are:
      
      1) Update qemuMonitorGetBlockStatsInfo and it's children (Text/JSON)
         functions to return the value of new latency fields.
      2) Add new function qemuMonitorGetBlockStatsParamsNumber, which is
         to count how many parameters the underlying QEMU supports.
      3) Update virDomainBlockStats in src/qemu/qemu_driver.c to be
         compatible with the changes by 1).
      2f58ba89
  4. 05 9月, 2011 1 次提交
    • E
      snapshot: wire up new qemu monitor command · e702b5ba
      Eric Blake 提交于
      No one uses this yet, but it will be important once
      virDomainSnapshotCreateXML learns a VIR_DOMAIN_SNAPSHOT_DISK_ONLY
      flag, and the xml allows passing in the new file names.
      
      * src/qemu/qemu_monitor.h (qemuMonitorDiskSnapshot): New prototype.
      * src/qemu/qemu_monitor_text.h (qemuMonitorTextDiskSnapshot):
      Likewise.
      * src/qemu/qemu_monitor_json.h (qemuMonitorJSONDiskSnapshot):
      Likewise.
      * src/qemu/qemu_monitor.c (qemuMonitorDiskSnapshot): New
      function.
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONDiskSnapshot):
      Likewise.
      e702b5ba
  5. 22 7月, 2011 3 次提交
    • A
      Asynchronous event for BlockJob completion · d489b046
      Adam Litke 提交于
      When an operation started by virDomainBlockPull completes (either with
      success or with failure), raise an event to indicate the final status.
      This API allow users to avoid polling on virDomainGetBlockJobInfo if
      they would prefer to use an event mechanism.
      
      * daemon/remote.c: Dispatch events to client
      * include/libvirt/libvirt.h.in: Define event ID and callback signature
      * src/conf/domain_event.c, src/conf/domain_event.h,
        src/libvirt_private.syms: Extend API to handle the new event
      * src/qemu/qemu_driver.c: Connect to the QEMU monitor event
        for block_stream completion and emit a libvirt block pull event
      * src/remote/remote_driver.c: Receive and dispatch events to application
      * src/remote/remote_protocol.x: Wire protocol definition for the event
      * src/remote_protocol-structs: structure definitions for protocol verification
      * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h,
        src/qemu/qemu_monitor_json.c: Watch for BLOCK_STREAM_COMPLETED event
        from QEMU monitor
      d489b046
    • A
      Implement virDomainBlockPull for the qemu driver · b976165c
      Adam Litke 提交于
      The virDomainBlockPull* family of commands are enabled by the
      following HMP/QMP commands: 'block_stream', 'block_job_cancel',
       'info block-jobs' / 'query-block-jobs', and 'block_job_set_speed'.
      
      * src/qemu/qemu_driver.c src/qemu/qemu_monitor_text.[ch]: implement disk
        streaming by using the proper qemu monitor commands.
      * src/qemu/qemu_monitor_json.[ch]: implement commands using the qmp monitor
      b976165c
    • E
      build: rename files.h to virfile.h · 8e22e089
      Eric Blake 提交于
      In preparation for a future patch adding new virFile APIs.
      
      * src/util/files.h, src/util/files.c: Move...
      * src/util/virfile.h, src/util/virfile.c: ...here, and rename
      functions to virFile prefix.  Macro names are intentionally
      left alone.
      * *.c: All '#include "files.h"' uses changed.
      * src/Makefile.am (UTIL_SOURCES): Reflect rename.
      * cfg.mk (exclude_file_name_regexp--sc_prohibit_close): Likewise.
      * src/libvirt_private.syms: Likewise.
      * docs/hacking.html.in: Likewise.
      * HACKING: Regenerate.
      8e22e089
  6. 21 7月, 2011 1 次提交
  7. 14 7月, 2011 1 次提交
  8. 13 7月, 2011 1 次提交
    • E
      maint: print flags in hex during debug · 06dbfa6d
      Eric Blake 提交于
      Continuation of commit 313ac7fd, and enforce things with a syntax
      check.
      
      Technically, virNetServerClientCalculateHandleMode is not printing
      a mode_t, but rather a collection of VIR_EVENT_HANDLE_* bits;
      however, these bits are < 8, so there is no different in the
      output, and that was the easiest way to silence the new syntax check.
      
      * cfg.mk (sc_flags_debug): New syntax check.
      (exclude_file_name_regexp--sc_flags_debug): Add exemptions.
      * src/fdstream.c (virFDStreamOpenFileInternal): Print flags in
      hex, mode_t in octal.
      * src/libvirt-qemu.c (virDomainQemuMonitorCommand)
      (virDomainQemuAttach): Likewise.
      * src/locking/lock_driver_nop.c (virLockManagerNopInit): Likewise.
      * src/locking/lock_driver_sanlock.c (virLockManagerSanlockInit):
      Likewise.
      * src/locking/lock_manager.c: Likewise.
      * src/qemu/qemu_migration.c: Likewise.
      * src/qemu/qemu_monitor.c: Likewise.
      * src/rpc/virnetserverclient.c
      (virNetServerClientCalculateHandleMode): Print mode with %o.
      06dbfa6d
  9. 12 7月, 2011 1 次提交
    • D
      Add monitor API for checking whether KVM is enabled · 7760eaa0
      Daniel P. Berrange 提交于
      When attaching to an external QEMU process, it is neccessary
      to check if the process is using KVM or not. This can be done
      using a monitor command
      
      * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h,
        src/qemu/qemu_monitor_json.c, src/qemu/qemu_monitor_json.h,
        src/qemu/qemu_monitor_text.c, src/qemu/qemu_monitor_text.h: Add
        API for checking if KVM is enabled
      7760eaa0
  10. 01 7月, 2011 1 次提交
    • D
      Fix uninitialized value in QEMU monitor FD sending code · f870c99b
      Daniel P. Berrange 提交于
      The 'char control[CMSG_SPACE(sizeof(int))];' was not being
      wiped, so could potentially contain uninitialized bytes.
      While this was harmless in this case, it caused complaints
      from valgrind
      
      * src/qemu/qemu_monitor.c: memset 'control' variable
        in qemuMonitorIOWriteWithFD
      f870c99b
  11. 24 6月, 2011 3 次提交
    • E
      Revert "Implement virDomainBlockPull for the qemu driver" · 3c2f0a17
      Eric Blake 提交于
      This reverts commit 784ee08d.
      3c2f0a17
    • E
      Revert "Asynchronous event for BlockPull completion" · c4c59e72
      Eric Blake 提交于
      This reverts commit 12cd77a0.
      
      Conflicts:
      
      	python/libvirt-override-virConnect.py
      	python/libvirt-override.c
      	src/remote/remote_protocol.x
      c4c59e72
    • D
      Support reboots with the QEMU driver · 42f43592
      Daniel P. Berrange 提交于
      For controlled shutdown we issue a 'system_powerdown' command
      to the QEMU monitor. This triggers an ACPI event which (most)
      guest OS wire up to a controlled shutdown. There is no equiv
      ACPI event to trigger a controlled reboot. This patch attempts
      to fake a reboot.
      
       - In qemuDomainObjPrivatePtr we have a bool fakeReboot
         flag.
       - The virDomainReboot method sets this flag and then
         triggers a normal 'system_powerdown'.
       - The QEMU process is started with '-no-shutdown'
         so that the guest CPUs pause when it powers off the
         guest
       - When we receive the 'POWEROFF' event from QEMU JSON
         monitor if fakeReboot is not set we invoke the
         qemuProcessKill command and shutdown continues
         normally
       - If fakeReboot was set, we spawn a background thread
         which issues 'system_reset' to perform a warm reboot
         of the guest hardware. Then it issues 'cont' to
         start the CPUs again
      
      * src/qemu/qemu_command.c: Add -no-shutdown flag if
        we have JSON support
      * src/qemu/qemu_domain.h: Add 'fakeReboot' flag to
        qemuDomainObjPrivate struct
      * src/qemu/qemu_driver.c: Fake reboot using the
        system_powerdown command if JSON support is available
      * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h,
        src/qemu/qemu_monitor_json.c, src/qemu/qemu_monitor_json.h,
        src/qemu/qemu_monitor_text.c, src/qemu/qemu_monitor_text.h: Add
        binding for system_reset command
      * src/qemu/qemu_process.c: Reset the guest & start CPUs if
        fakeReboot is set
      42f43592
  12. 21 6月, 2011 1 次提交
    • C
      Promote virEvent*Handle/Timeout to public API · 6094ad7b
      Cole Robinson 提交于
      Since we virEventRegisterDefaultImpl is now a public API, callers need
      a way to invoke the default registered Handle and Timeout functions. We
      already have general functions for these internally, so promote
      them to the public API.
      
      v2:
          Actually add APIs to libvirt.h
      6094ad7b
  13. 15 6月, 2011 2 次提交
    • A
      Asynchronous event for BlockPull completion · 12cd77a0
      Adam Litke 提交于
      When an operation started by virDomainBlockPullAll completes (either with
      success or with failure), raise an event to indicate the final status.  This
      allows an API user to avoid polling on virDomainBlockPullInfo if they would
      prefer to use the event mechanism.
      
      * daemon/remote.c: Dispatch events to client
      * include/libvirt/libvirt.h.in: Define event ID and callback signature
      * src/conf/domain_event.c, src/conf/domain_event.h,
        src/libvirt_private.syms: Extend API to handle the new event
      * src/qemu/qemu_driver.c: Connect to the QEMU monitor event
        for block_stream completion and emit a libvirt block pull event
      * src/remote/remote_driver.c: Receive and dispatch events to application
      * src/remote/remote_protocol.x: Wire protocol definition for the event
      * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h,
        src/qemu/qemu_monitor_json.c: Watch for BLOCK_STREAM_COMPLETED event
        from QEMU monitor
      Signed-off-by: NAdam Litke <agl@us.ibm.com>
      12cd77a0
    • A
      Implement virDomainBlockPull for the qemu driver · 784ee08d
      Adam Litke 提交于
      The virDomainBlockPull* family of commands are enabled by the
      'block_stream' and 'info block_stream' qemu monitor commands.
      
      * src/qemu/qemu_driver.c src/qemu/qemu_monitor_text.[ch]: implement disk
        streaming by using the stream and info stream text monitor commands
      * src/qemu/qemu_monitor_json.[ch]: implement commands using the qmp monitor
      Signed-off-by: NAdam Litke <agl@us.ibm.com>
      Acked-by: NDaniel P. Berrange <berrange@redhat.com>
      784ee08d
  14. 14 6月, 2011 1 次提交
    • S
      qemu: Faster response time to qemu startup errors · f5358fdc
      Stefan Berger 提交于
      The below patch decreases the response time of libvirt to errors reported by Qemu upon startup by checking whether the qemu process is still alive while polling for the local socket to show up.
      
      This patch also introduces a special handling of signal for the Win32 part of virKillProcess.
      f5358fdc
  15. 03 6月, 2011 1 次提交
    • D
      Fix handling of VIR_EVENT_HANDLE_ERROR in QEMU monitor · 43917db3
      Daniel P. Berrange 提交于
      Commit 4454a9ef introduced bad
      behaviour on the VIR_EVENT_HANDLE_ERROR condition. This condition
      is only hit when an invalid FD is used in poll() (typically due
      to a double-close bug). The QEMU monitor code was treating this
      condition as non-fatal, and thus libvirt would poll() in a fast
      loop forever burning 100% CPU. VIR_EVENT_HANDLE_ERROR must be
      handled in the same way as VIR_EVENT_HANDLE_HANGUP, killing the
      QEMU instance.
      
      * src/qemu/qemu_monitor.c: Treat VIR_EVENT_HANDLE_ERROR as EOF
      43917db3
  16. 29 5月, 2011 2 次提交
    • D
      Issue full error messages when processing QEMU monitor I/O · 80d2038d
      Daniel P. Berrange 提交于
      Currently the QEMU monitor I/O handler code uses errno values
      to report errors. This results in a sub-optimal error messages
      on certain conditions, in particular when parsing JSON strings
      malformed data simply results in 'EINVAL'.
      
      This changes the code to use the standard libvirt error reporting
      APIs. The virError is stored against the qemuMonitorPtr struct,
      and when a monitor API is run, any existing stored error is copied
      into that thread's error local
      
      * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h,
        src/qemu/qemu_monitor_json.c, src/qemu/qemu_monitor_text.c: Use
        virError APIs for all monitor I/O handling code
      80d2038d
    • D
      Don't kill QEMU process when a monitor I/O parsing error occurs · 4454a9ef
      Daniel P. Berrange 提交于
      Currently whenever there is any failure with parsing the monitor,
      this is treated in the same was as end-of-file (ie QEMU quit).
      The domain is terminated, if not already dead.
      
      With this change, failures in parsing the monitor stream do not
      result in the death of QEMU. The guest continues running unchanged,
      but all further use of the monitor will be disabled.
      
      The VMM_FAILURE event will be emitted, and the mgmt application
      can decide when to kill/restart the guest to re-gain control
      
      * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h: Run a
        different callback for monitor EOF vs error conditions.
      * src/qemu/qemu_process.c: Emit VMM_FAILURE event when monitor
        fails
      4454a9ef
  17. 16 5月, 2011 2 次提交
    • D
      Wire up SPICE client relocation with QEMU migration · cc53b4c4
      Daniel P. Berrange 提交于
      Use the graphics information from the QEMU migration cookie to
      issue a 'client_migrate_info' monitor command to QEMU. This causes
      the SPICE client to automatically reconnect to the target host
      when migration completes
      
      * src/qemu/qemu_migration.c: Set data for SPICE client relocation
        before starting migration on src
      * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h,
        src/qemu/qemu_monitor_json.c, src/qemu/qemu_monitor_json.h,
        src/qemu/qemu_monitor_text.c, src/qemu/qemu_monitor_text.h: Add
        new qemuMonitorGraphicsRelocate() command
      cc53b4c4
    • J
      qemu: Update domain state when reconnecting monitor · 9f131961
      Jiri Denemark 提交于
      A qemu domain can get paused when libvirtd is stopped (e.g., because of
      I/O error) so we should check its current state when reconnecting to it.
      9f131961
  18. 13 5月, 2011 1 次提交
    • M
      qemu: Implement the driver methods · 9936aecf
      Michal Privoznik 提交于
      * src/qemu/qemu_driver.c: new qemuDomainScreenshot() function
      * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h,
        src/qemu/qemu_monitor_json.c, src/qemu/qemu_monitor_json.h,
        src/qemu/qemu_monitor_text.c, src/qemu/qemu_monitor_text.h:
        Monitor command
      9936aecf
  19. 12 5月, 2011 1 次提交
    • L
      libvirt,logging: cleanup VIR_XXX0() · b65f37a4
      Lai Jiangshan 提交于
      These VIR_XXXX0 APIs make us confused, use the non-0-suffix APIs instead.
      
      How do these coversions works? The magic is using the gcc extension of ##.
      When __VA_ARGS__ is empty, "##" will swallow the "," in "fmt," to
      avoid compile error.
      
      example: origin				after CPP
      	high_level_api("%d", a_int)	low_level_api("%d", a_int)
      	high_level_api("a  string")	low_level_api("a  string")
      
      About 400 conversions.
      
      8 special conversions:
      VIR_XXXX0("") -> VIR_XXXX("msg") (avoid empty format) 2 conversions
      VIR_XXXX0(string_literal_with_%) -> VIR_XXXX(%->%%) 0 conversions
      VIR_XXXX0(non_string_literal) -> VIR_XXXX("%s", non_string_literal)
        (for security) 6 conversions
      Signed-off-by: NLai Jiangshan <laijs@cn.fujitsu.com>
      b65f37a4
  20. 11 5月, 2011 1 次提交
  21. 06 5月, 2011 1 次提交
    • E
      maint: rename virBufferVSprintf to virBufferAsprintf · 68ea80cf
      Eric Blake 提交于
      We already have virAsprintf, so picking a similar name helps for
      seeing a similar purpose.  Furthermore, the prefix V before printf
      generally implies 'va_list', even though this variant was '...', and
      the old name got in the way of adding a new va_list version.
      
      global rename performed with:
      
      $ git grep -l virBufferVSprintf \
        | xargs -L1 sed -i 's/virBufferVSprintf/virBufferAsprintf/g'
      
      then revert the changes in ChangeLog-old.
      68ea80cf
  22. 30 3月, 2011 2 次提交
    • W
      check whether qemuMonitorJSONHMP() failed · 0ecfa7f2
      Wen Congyang 提交于
      If qemu quited unexpectedly when we call qemuMonitorJSONHMP(),
      libvirt will crash.
      Steps to reproduce this bug:
      1. use gdb to attach libvirtd, and set a breakpoint in the function
         qemuMonitorSetCapabilities()
      2. start a vm
      3. let the libvirtd to run until qemuMonitorJSONSetCapabilities() returns.
      4. kill the qemu process
      5. continue running libvirtd
      Signed-off-by: NWen Congyang <wency@cn.fujitsu.com>
      0ecfa7f2
    • W
      do not send monitor command after monitor meet error · cc2424fc
      Wen Congyang 提交于
      If the monitor met a error, and we will call qemuProcessHandleMonitorEOF().
      But we may try to send monitor command after qemuProcessHandleMonitorEOF()
      returned. Then libvirtd will be blocked in qemuMonitorSend().
      
      Steps to reproduce this bug:
      1. use gdb to attach libvirtd, and set a breakpoint in the function
         qemuConnectMonitor()
      2. start a vm
      3. let the libvirtd to run until qemuMonitorOpen() returns.
      4. kill the qemu process
      5. continue running libvirtd
      Signed-off-by: NWen Congyang <wency@cn.fujitsu.com>
      cc2424fc
  23. 25 3月, 2011 1 次提交
    • E
      build: enforce reference count checking · 72d4ff5b
      Eric Blake 提交于
      Add the compiler attribute to ensure we don't introduce any more
      ref bugs like were just patched in commit 9741f346, then explicitly
      mark the remaining places in code that are safe.
      
      * src/qemu/qemu_monitor.h (qemuMonitorUnref): Mark
      ATTRIBUTE_RETURN_CHECK.
      * src/conf/domain_conf.h (virDomainObjUnref): Likewise.
      * src/conf/domain_conf.c (virDomainObjParseXML)
      (virDomainLoadStatus): Fix offenders.
      * src/openvz/openvz_conf.c (openvzLoadDomains): Likewise.
      * src/vmware/vmware_conf.c (vmwareLoadDomains): Likewise.
      * src/qemu/qemu_domain.c (qemuDomainObjBeginJob)
      (qemuDomainObjBeginJobWithDriver)
      (qemuDomainObjExitRemoteWithDriver): Likewise.
      * src/qemu/qemu_monitor.c (QEMU_MONITOR_CALLBACK): Likewise.
      Suggested by Daniel P. Berrange.
      72d4ff5b
  24. 23 3月, 2011 1 次提交
    • E
      qemu: simplify monitor callbacks · 18d68462
      Eric Blake 提交于
      A future patch will change reference counting idioms; consolidating
      this pattern now makes the next patch smaller (touch only the new
      macro rather than every caller).
      
      * src/qemu/qemu_monitor.c (QEMU_MONITOR_CALLBACK): New helper.
      (qemuMonitorGetDiskSecret, qemuMonitorEmitShutdown)
      (qemuMonitorEmitReset, qemuMonitorEmitPowerdown)
      (qemuMonitorEmitStop, qemuMonitorEmitRTCChange)
      (qemuMonitorEmitWatchdog, qemuMonitorEmitIOError)
      (qemuMonitorEmitGraphics): Use it to reduce duplication.
      18d68462
  25. 22 3月, 2011 4 次提交
    • J
      qemu: Detect support for HMP passthrough · abdfca09
      Jiri Denemark 提交于
      abdfca09
    • E
      qemu: simplify interface fd handling in monitor · a24ada4e
      Eric Blake 提交于
      With only a single caller to these two monitor commands, I
      didn't need to wrap a new WithFds version, but just change
      the command itself.
      
      * src/qemu/qemu_monitor.h (qemuMonitorAddNetdev)
      (qemuMonitorAddHostNetwork): Add parameters.
      * src/qemu/qemu_monitor.c (qemuMonitorAddNetdev)
      (qemuMonitorAddHostNetwork): Add support for fd passing.
      * src/qemu/qemu_hotplug.c (qemuDomainAttachNetDevice): Use it to
      simplify code.
      a24ada4e
    • E
      qemu: simplify PCI configfd handling in monitor · 09831239
      Eric Blake 提交于
      This is also a bug fix - on the error path, qemu_hotplug would
      leave the configfd file leaked into qemu.  At least the next
      attempt to hotplug a PCI device would reuse the same fdname,
      and when the qemu getfd monitor command gets a new fd by the
      same name as an earlier one, it closes the earlier one, so there
      is no risk of qemu running out of fds.
      
      * src/qemu/qemu_monitor.h (qemuMonitorAddDeviceWithFd): New
      prototype.
      * src/qemu/qemu_monitor.c (qemuMonitorAddDevice): Move guts...
      (qemuMonitorAddDeviceWithFd): ...to new function, and add support
      for fd passing.
      * src/qemu/qemu_hotplug.c (qemuDomainAttachHostPciDevice): Use it
      to simplify code.
      Suggested by Daniel P. Berrange.
      09831239
    • E
      qemu: simplify monitor fd error handling · 058d4efa
      Eric Blake 提交于
      qemu_monitor was already returning -1 and setting errno to EINVAL
      on any attempt to send an fd without a unix socket, but this was
      a silent failure in the case of qemuDomainAttachHostPciDevice.
      Meanwhile, qemuDomainAttachNetDevice was doing some sanity checking
      for a better error message; it's better to consolidate that to a
      central point in the API.
      
      * src/qemu/qemu_hotplug.c (qemuDomainAttachNetDevice): Move sanity
      checking...
      * src/qemu/qemu_monitor.c (qemuMonitorSendFileHandle): ...into
      central location.
      Suggested by Chris Wright.
      058d4efa
  26. 18 3月, 2011 1 次提交
    • W
      unlock the monitor when unwatching the monitor · 9741f346
      Wen Congyang 提交于
      Steps to reproduce this bug:
      # virsh qemu-monitor-command domain 'cpu_set 2 online' --hmp
      The domain has 2 cpus, and we try to set the third cpu online.
      The qemu crashes, and this command will hang.
      
      The reason is that the refs is not 1 when we unwatch the monitor.
      We lock the monitor, but we do not unlock it. So virCondWait()
      will be blocked.
      Signed-off-by: NWen Congyang <wency@cn.fujitsu.com>
      9741f346
  27. 16 3月, 2011 2 次提交
    • E
      qemu: support migration to fd · 100bba06
      Eric Blake 提交于
      * src/qemu/qemu_monitor.h (qemuMonitorMigrateToFd): New
      prototype.
      * src/qemu/qemu_monitor.c (qemuMonitorMigrateToFd): New function.
      100bba06
    • E
      qemu: improve efficiency of dd during snapshots · 8e42c50b
      Eric Blake 提交于
      POSIX states about dd:
      
      If the bs=expr operand is specified and no conversions other than
      sync, noerror, or notrunc are requested, the data returned from each
      input block shall be written as a separate output block; if the read
      returns less than a full block and the sync conversion is not
      specified, the resulting output block shall be the same size as the
      input block. If the bs=expr operand is not specified, or a conversion
      other than sync, noerror, or notrunc is requested, the input shall be
      processed and collected into full-sized output blocks until the end of
      the input is reached.
      
      Since we aren't using conv=sync, there is no zero-padding, but our
      use of bs= means that a short read results in a short write.  If
      instead we use ibs= and obs=, then short reads are collected and dd
      only has to do a single write, which can make dd more efficient.
      
      * src/qemu/qemu_monitor.c (qemuMonitorMigrateToFile):
      Avoid 'dd bs=', since it can cause short writes.
      8e42c50b