Provided by: qemu-utils_8.2.2+ds-0ubuntu1.5_amd64 bug

NAME

       qemu-block-drivers - QEMU block drivers reference

SYNOPSIS

       QEMU block driver reference manual

DESCRIPTION

   Disk image file formats
       QEMU  supports  many  image file formats that can be used with VMs as well as with any of the tools (like
       qemu-img). This includes the preferred formats raw and qcow2 as well as formats that  are  supported  for
       compatibility with older QEMU versions or other hypervisors.

       Depending  on  the  image format, different options can be passed to qemu-img create and qemu-img convert
       using the -o option.  This section describes each format and the options that are supported for it.

       raw    Raw disk image format. This format has the advantage of being simple and easily exportable to  all
              other  emulators. If your file system supports holes (for example in ext2 or ext3 on Linux or NTFS
              on Windows), then only the written sectors will reserve space. Use qemu-img info to know the  real
              size used by the image or ls -ls on Unix/Linux.

              Supported options:

              preallocation
                     Preallocation  mode (allowed values: off, falloc, full). falloc mode preallocates space for
                     image by calling posix_fallocate(). full mode preallocates space for image by writing  data
                     to underlying storage. This data may or may not be zero, depending on the storage location.

       qcow2  QEMU  image  format,  the  most  versatile  format.  Use it to have smaller images (useful if your
              filesystem does not supports holes, for example on Windows), zlib based compression and support of
              multiple VM snapshots.

              Supported options:

              compat Determines the qcow2 version to use. compat=0.10 uses the traditional image format that can
                     be read by any QEMU since 0.10.  compat=1.1 enables image format extensions that only  QEMU
                     1.1  and  newer  understand  (this  is  the  default).  Amongst  others, this includes zero
                     clusters, which allow efficient copy-on-read for sparse images.

              backing_file
                     File name of a base image (see create subcommand)

              backing_fmt
                     Image format of the base image

              encryption
                     This option is deprecated and equivalent to encrypt.format=aes

              encrypt.format
                     If this is set to luks, it requests that the qcow2 payload (not qcow2 header) be  encrypted
                     using  the  LUKS  format. The passphrase to use to unlock the LUKS key slot is given by the
                     encrypt.key-secret parameter. LUKS encryption  parameters  can  be  tuned  with  the  other
                     encrypt.* parameters.

                     If  this is set to aes, the image is encrypted with 128-bit AES-CBC.  The encryption key is
                     given by the encrypt.key-secret parameter.  This encryption  format  is  considered  to  be
                     flawed by modern cryptography standards, suffering from a number of design problems:

                     • The  AES-CBC  cipher  is used with predictable initialization vectors based on the sector
                       number. This makes it vulnerable  to  chosen  plaintext  attacks  which  can  reveal  the
                       existence of encrypted data.

                     • The  user  passphrase  is  directly  used as the encryption key. A poorly chosen or short
                       passphrase will compromise the security of the encryption.

                     • In the event of the passphrase being compromised there is no way to change the passphrase
                       to  protect  data  in  any  qcow  images.  The  files  must  be cloned, using a different
                       encryption passphrase in the new file. The original file must  then  be  securely  erased
                       using  a  program  like  shred,  though even this is ineffective with many modern storage
                       technologies.

                     The use of this is no longer supported in system emulators. Support  only  remains  in  the
                     command  line  utilities, for the purposes of data liberation and interoperability with old
                     versions of QEMU. The luks format should be used instead.

              encrypt.key-secret
                     Provides the ID of a secret object that contains the  passphrase  (encrypt.format=luks)  or
                     encryption key (encrypt.format=aes).

              encrypt.cipher-alg
                     Name  of the cipher algorithm and key length. Currently defaults to aes-256. Only used when
                     encrypt.format=luks.

              encrypt.cipher-mode
                     Name  of  the  encryption  mode  to  use.  Currently  defaults  to  xts.   Only  used  when
                     encrypt.format=luks.

              encrypt.ivgen-alg
                     Name  of the initialization vector generator algorithm. Currently defaults to plain64. Only
                     used when encrypt.format=luks.

              encrypt.ivgen-hash-alg
                     Name of the hash algorithm to use with the initialization vector generator  (if  required).
                     Defaults to sha256. Only used when encrypt.format=luks.

              encrypt.hash-alg
                     Name  of  the  hash algorithm to use for PBKDF algorithm Defaults to sha256. Only used when
                     encrypt.format=luks.

              encrypt.iter-time
                     Amount of time, in milliseconds, to use for PBKDF algorithm  per  key  slot.   Defaults  to
                     2000. Only used when encrypt.format=luks.

              cluster_size
                     Changes  the  qcow2  cluster  size  (must be between 512 and 2M). Smaller cluster sizes can
                     improve the  image  file  size  whereas  larger  cluster  sizes  generally  provide  better
                     performance.

              preallocation
                     Preallocation   mode   (allowed  values:  off,  metadata,  falloc,  full).  An  image  with
                     preallocated metadata is initially larger but can improve performance when the image  needs
                     to  grow.  falloc and full preallocations are like the same options of raw format, but sets
                     up metadata also.

              lazy_refcounts
                     If this option is set to on, reference  count  updates  are  postponed  with  the  goal  of
                     avoiding  metadata  I/O  and  improving  performance. This is particularly interesting with
                     cache=writethrough which doesn't batch metadata updates. The tradeoff is that after a  host
                     crash,  the  reference  count  tables must be rebuilt, i.e. on the next open an (automatic)
                     qemu-img check -r all is required, which may take some time.

                     This option can only be enabled if compat=1.1 is specified.

              nocow  If this option is set to on, it will turn off COW of the file. It's only valid on btrfs, no
                     effect on other file systems.

                     Btrfs  has low performance when hosting a VM image file, even more when the guest on the VM
                     also using btrfs as file system. Turning off COW is a way to mitigate this bad performance.
                     Generally there are two ways to turn off COW on btrfs:

                     • Disable it by mounting with nodatacow, then all newly created files will be NOCOW.

                     • For an empty file, add the NOCOW file attribute. That's what this option does.

                     Note:  this  option is only valid to new or empty files. If there is an existing file which
                     is COW and has data blocks already, it couldn't be changed to NOCOW  by  setting  nocow=on.
                     One  can  issue  lsattr  filename  to check if the NOCOW flag is set or not (Capital 'C' is
                     NOCOW flag).

       qed    Old QEMU image format with support for backing files and compact image files (when your filesystem
              or transport medium does not support holes).

              When converting QED images to qcow2, you might want to consider using the lazy_refcounts=on option
              to get a more QED-like behaviour.

              Supported options:

              backing_file
                     File name of a base image (see create subcommand).

              backing_fmt
                     Image file format of backing file (optional).  Useful if the format cannot be  autodetected
                     because it has no header, like some vhd/vpc files.

              cluster_size
                     Changes the cluster size (must be power-of-2 between 4K and 64K). Smaller cluster sizes can
                     improve the  image  file  size  whereas  larger  cluster  sizes  generally  provide  better
                     performance.

              table_size
                     Changes  the  number  of  clusters  per  L1/L2 table (must be power-of-2 between 1 and 16).
                     There is normally no need to change this  value  but  this  option  can  between  used  for
                     performance benchmarking.

       qcow   Old  QEMU  image  format  with  support  for  backing  files,  compact image files, encryption and
              compression.

              Supported options:

                 backing_file
                        File name of a base image (see create subcommand)

                 encryption
                        This option is deprecated and equivalent to encrypt.format=aes

                 encrypt.format
                        If this is set to aes, the image is encrypted with 128-bit AES-CBC.  The encryption  key
                        is  given  by the encrypt.key-secret parameter.  This encryption format is considered to
                        be flawed by modern cryptography standards, suffering from a number of  design  problems
                        enumerated previously against the qcow2 image format.

                        The  use of this is no longer supported in system emulators. Support only remains in the
                        command line utilities, for the purposes of data liberation  and  interoperability  with
                        old versions of QEMU.

                        Users   requiring   native   encryption   should  use  the  qcow2  format  instead  with
                        encrypt.format=luks.

                 encrypt.key-secret
                        Provides  the   ID   of   a   secret   object   that   contains   the   encryption   key
                        (encrypt.format=aes).

       luks   LUKS v1 encryption format, compatible with Linux dm-crypt/cryptsetup

              Supported options:

              key-secret
                     Provides the ID of a secret object that contains the passphrase.

              cipher-alg
                     Name of the cipher algorithm and key length. Currently defaults to aes-256.

              cipher-mode
                     Name of the encryption mode to use. Currently defaults to xts.

              ivgen-alg
                     Name of the initialization vector generator algorithm. Currently defaults to plain64.

              ivgen-hash-alg
                     Name  of  the hash algorithm to use with the initialization vector generator (if required).
                     Defaults to sha256.

              hash-alg
                     Name of the hash algorithm to use for PBKDF algorithm Defaults to sha256.

              iter-time
                     Amount of time, in milliseconds, to use for PBKDF algorithm  per  key  slot.   Defaults  to
                     2000.

       vdi    VirtualBox 1.1 compatible image format.

              Supported options:

              static If this option is set to on, the image is created with metadata preallocation.

       vmdk   VMware 3 and 4 compatible image format.

              Supported options:

              backing_file
                     File name of a base image (see create subcommand).

              compat6
                     Create a VMDK version 6 image (instead of version 4)

              hwversion
                     Specify  vmdk  virtual  hardware  version.  Compat6  flag cannot be enabled if hwversion is
                     specified.

              subformat
                     Specifies which VMDK subformat  to  use.  Valid  options  are  monolithicSparse  (default),
                     monolithicFlat, twoGbMaxExtentSparse, twoGbMaxExtentFlat and streamOptimized.

       vpc    VirtualPC compatible image format (VHD).

              Supported options:

              subformat
                     Specifies which VHD subformat to use. Valid options are dynamic (default) and fixed.

       VHDX   Hyper-V compatible image format (VHDX).

              Supported options:

              subformat
                     Specifies which VHDX subformat to use. Valid options are dynamic (default) and fixed.

                     block_state_zero
                            Force  use  of  payload  blocks  of type 'ZERO'.  Can be set to on (default) or off.
                            When set to off, new blocks will  be  created  as  PAYLOAD_BLOCK_NOT_PRESENT,  which
                            means parsers are free to return arbitrary data for those blocks.  Do not set to off
                            when using qemu-img convert with subformat=dynamic.

                     block_size
                            Block size; min 1 MB, max 256 MB.  0 means auto-calculate based on image size.

                     log_size
                            Log size; min 1 MB.

   Read-only formats
       More disk image file formats are supported in a read-only mode.

       bochs  Bochs images of growing type.

       cloop  Linux Compressed Loop image, useful only to reuse directly compressed CD-ROM  images  present  for
              example in the Knoppix CD-ROMs.

       dmg    Apple disk image.

       parallels
              Parallels disk image format.

   Using host drives
       In  addition  to  disk image files, QEMU can directly access host devices. We describe here the usage for
       QEMU version >= 0.8.3.

   Linux
       On Linux, you can directly use the host device filename instead of a disk  image  filename  provided  you
       have enough privileges to access it. For example, use /dev/cdrom to access to the CDROM.

       CD     You  can specify a CDROM device even if no CDROM is loaded. QEMU has specific code to detect CDROM
              insertion or removal. CDROM ejection by the guest OS is supported. Currently  only  data  CDs  are
              supported.

       Floppy You  can  specify  a  floppy  device  even if no floppy is loaded. Floppy removal is currently not
              detected accurately (if you change floppy without doing floppy access  while  the  floppy  is  not
              loaded,  the guest OS will think that the same floppy is loaded).  Use of the host's floppy device
              is deprecated, and support for it will be removed in a future release.

       Hard disks
              Hard disks can be used. Normally you must specify the whole disk (/dev/hdb instead  of  /dev/hdb1)
              so that the guest OS can see it as a partitioned disk. WARNING: unless you know what you do, it is
              better to only make READ-ONLY accesses to the hard disk otherwise you may corrupt your  host  data
              (use the -snapshot command line option or modify the device permissions accordingly).

       Zoned block devices
              Zoned block devices can be passed through to the guest if the emulated storage controller supports
              zoned storage. Use --blockdev  host_device,  node-name=drive0,filename=/dev/nullb0,cache.direct=on
              to pass through /dev/nullb0 as drive0.

   Windows
       CD     The  preferred  syntax  is  the  drive letter (e.g. d:). The alternate syntax \\.\d: is supported.
              /dev/cdrom is supported as an alias to the first CDROM drive.

              Currently there is no specific code to handle removable media, so it is better to use  the  change
              or eject monitor commands to change or eject media.

       Hard disks
              Hard  disks  can be used with the syntax: \\.\PhysicalDriveN where N is the drive number (0 is the
              first hard disk).

              WARNING: unless you know what you do, it is better to only make READ-ONLY  accesses  to  the  hard
              disk  otherwise  you  may  corrupt  your  host  data  (use  the -snapshot command line so that the
              modifications are written in a temporary file).

   Mac OS X
       /dev/cdrom is an alias to the first CDROM.

       Currently there is no specific code to handle removable media, so it is better to use the change or eject
       monitor commands to change or eject media.

   Virtual FAT disk images
       QEMU  can  automatically  create a virtual FAT disk image from a directory tree. In order to use it, just
       type:

          qemu-system-x86_64 linux.img -hdb fat:/my_directory

       Then you access access to all the files in the /my_directory directory without having to copy them  in  a
       disk image or to export them via SAMBA or NFS. The default access is read-only.

       Floppies can be emulated with the :floppy: option:

          qemu-system-x86_64 linux.img -fda fat:floppy:/my_directory

       A read/write support is available for testing (beta stage) with the :rw: option:

          qemu-system-x86_64 linux.img -fda fat:floppy:rw:/my_directory

       What you should never do:

       • use non-ASCII filenames

       • use "-snapshot" together with ":rw:"

       • expect it to work when loadvm'ing

       • write to the FAT directory on the host system while accessing it with the guest system

   NBD access
       QEMU can access directly to block device exported using the Network Block Device protocol.

          qemu-system-x86_64 linux.img -hdb nbd://my_nbd_server.mydomain.org:1024/

       If the NBD server is located on the same host, you can use an unix socket instead of an inet socket:

          qemu-system-x86_64 linux.img -hdb nbd+unix://?socket=/tmp/my_socket

       In this case, the block device must be exported using qemu-nbd:

          qemu-nbd --socket=/tmp/my_socket my_disk.qcow2

       The use of qemu-nbd allows sharing of a disk between several guests:

          qemu-nbd --socket=/tmp/my_socket --share=2 my_disk.qcow2

       and then you can use it with two guests:

          qemu-system-x86_64 linux1.img -hdb nbd+unix://?socket=/tmp/my_socket
          qemu-system-x86_64 linux2.img -hdb nbd+unix://?socket=/tmp/my_socket

       If  the  nbd-server  uses  named  exports  (supported  since  NBD 2.9.18, or with QEMU's own embedded NBD
       server), you must specify an export name in the URI:

          qemu-system-x86_64 -cdrom nbd://localhost/debian-500-ppc-netinst
          qemu-system-x86_64 -cdrom nbd://localhost/openSUSE-11.1-ppc-netinst

       The URI syntax for NBD is supported since QEMU 1.3.  An alternative syntax is also available.   Here  are
       some example of the older syntax:

          qemu-system-x86_64 linux.img -hdb nbd:my_nbd_server.mydomain.org:1024
          qemu-system-x86_64 linux2.img -hdb nbd:unix:/tmp/my_socket
          qemu-system-x86_64 -cdrom nbd:localhost:10809:exportname=debian-500-ppc-netinst

   iSCSI LUNs
       iSCSI is a popular protocol used to access SCSI devices across a computer network.

       There are two different ways iSCSI devices can be used by QEMU.

       The  first  method  is  to mount the iSCSI LUN on the host, and make it appear as any other ordinary SCSI
       device on the host and then to access this device as a /dev/sd device from QEMU. How to do  this  differs
       between host OSes.

       The  second  method involves using the iSCSI initiator that is built into QEMU. This provides a mechanism
       that works the same way regardless of which host OS you are running QEMU on. This section  will  describe
       this second method of using iSCSI together with QEMU.

       In QEMU, iSCSI devices are described using special iSCSI URLs. URL syntax:

          iscsi://[<username>[%<password>]@]<host>[:<port>]/<target-iqn-name>/<lun>

       Username  and  password are optional and only used if your target is set up using CHAP authentication for
       access control.  Alternatively the username and password can also be set  via  environment  variables  to
       have these not show up in the process list:

          export LIBISCSI_CHAP_USERNAME=<username>
          export LIBISCSI_CHAP_PASSWORD=<password>
          iscsi://<host>/<target-iqn-name>/<lun>

       Various  session  related  parameters  can  be  set  via  special options, either in a configuration file
       provided via '-readconfig' or directly on the command line.

       If   the    initiator-name    is    not    specified    qemu    will    use    a    default    name    of
       'iqn.2008-11.org.linux-kvm[:<uuid>']  where <uuid> is the UUID of the virtual machine. If the UUID is not
       specified qemu will use 'iqn.2008-11.org.linux-kvm[:<name>'] where <name> is  the  name  of  the  virtual
       machine.

       Setting a specific initiator name to use when logging in to the target:

          -iscsi initiator-name=iqn.qemu.test:my-initiator

       Controlling which type of header digest to negotiate with the target:

          -iscsi header-digest=CRC32C|CRC32C-NONE|NONE-CRC32C|NONE

       These can also be set via a configuration file:

          [iscsi]
            user = "CHAP username"
            password = "CHAP password"
            initiator-name = "iqn.qemu.test:my-initiator"
            # header digest is one of CRC32C|CRC32C-NONE|NONE-CRC32C|NONE
            header-digest = "CRC32C"

       Setting the target name allows different options for different targets:

          [iscsi "iqn.target.name"]
            user = "CHAP username"
            password = "CHAP password"
            initiator-name = "iqn.qemu.test:my-initiator"
            # header digest is one of CRC32C|CRC32C-NONE|NONE-CRC32C|NONE
            header-digest = "CRC32C"

       How to use a configuration file to set iSCSI configuration options:

          cat >iscsi.conf <<EOF
          [iscsi]
            user = "me"
            password = "my password"
            initiator-name = "iqn.qemu.test:my-initiator"
            header-digest = "CRC32C"
          EOF

          qemu-system-x86_64 -drive file=iscsi://127.0.0.1/iqn.qemu.test/1 \
            -readconfig iscsi.conf

       How  to set up a simple iSCSI target on loopback and access it via QEMU: this example shows how to set up
       an iSCSI target with one CDROM and one DISK  using  the  Linux  STGT  software  target.  This  target  is
       available on Red Hat based systems as the package 'scsi-target-utils'.

          tgtd --iscsi portal=127.0.0.1:3260
          tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.qemu.test
          tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 \
              -b /IMAGES/disk.img --device-type=disk
          tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 2 \
              -b /IMAGES/cd.iso --device-type=cd
          tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL

          qemu-system-x86_64 -iscsi initiator-name=iqn.qemu.test:my-initiator \
            -boot d -drive file=iscsi://127.0.0.1/iqn.qemu.test/1 \
            -cdrom iscsi://127.0.0.1/iqn.qemu.test/2

   GlusterFS disk images
       GlusterFS is a user space distributed file system.

       You can boot from the GlusterFS disk image with the command:

       URI:

          qemu-system-x86_64 -drive file=gluster[+TYPE]://[HOST}[:PORT]]/VOLUME/PATH
                                       [?socket=...][,file.debug=9][,file.logfile=...]

       JSON:

          qemu-system-x86_64 'json:{"driver":"qcow2",
                                   "file":{"driver":"gluster",
                                            "volume":"testvol","path":"a.img","debug":9,"logfile":"...",
                                            "server":[{"type":"tcp","host":"...","port":"..."},
                                                      {"type":"unix","socket":"..."}]}}'

       gluster is the protocol.

       TYPE  specifies  the  transport  type  used  to  connect  to  gluster management daemon (glusterd). Valid
       transport types are tcp and unix. In the URI form, if a transport type isn't specified, then tcp type  is
       assumed.

       HOST  specifies  the server where the volume file specification for the given volume resides. This can be
       either a hostname or an ipv4 address.  If  transport  type  is  unix,  then  HOST  field  should  not  be
       specified.  Instead socket field needs to be populated with the path to unix domain socket.

       PORT  is  the  port  number  on  which  glusterd  is listening. This is optional and if not specified, it
       defaults to port 24007. If the transport type is unix, then PORT should not be specified.

       VOLUME is the name of the gluster volume which contains the disk image.

       PATH is the path to the actual disk image that resides on gluster volume.

       debug is the logging level of the gluster protocol driver. Debug levels are 0-9, with 9  being  the  most
       verbose,  and  0  representing  no  debugging output.  The default level is 4. The current logging levels
       defined in the gluster source are 0 - None, 1 - Emergency, 2 - Alert, 3  -  Critical,  4  -  Error,  5  -
       Warning, 6 - Notice, 7 - Info, 8 - Debug, 9 - Trace

       logfile is a commandline option to mention log file path which helps in logging to the specified file and
       also help in persisting the gfapi logs. The default is stderr.

       You can create a GlusterFS disk image with the command:

          qemu-img create gluster://HOST/VOLUME/PATH SIZE

       Examples

          qemu-system-x86_64 -drive file=gluster://1.2.3.4/testvol/a.img
          qemu-system-x86_64 -drive file=gluster+tcp://1.2.3.4/testvol/a.img
          qemu-system-x86_64 -drive file=gluster+tcp://1.2.3.4:24007/testvol/dir/a.img
          qemu-system-x86_64 -drive file=gluster+tcp://[1:2:3:4:5:6:7:8]/testvol/dir/a.img
          qemu-system-x86_64 -drive file=gluster+tcp://[1:2:3:4:5:6:7:8]:24007/testvol/dir/a.img
          qemu-system-x86_64 -drive file=gluster+tcp://server.domain.com:24007/testvol/dir/a.img
          qemu-system-x86_64 -drive file=gluster+unix:///testvol/dir/a.img?socket=/tmp/glusterd.socket
          qemu-system-x86_64 -drive file=gluster+rdma://1.2.3.4:24007/testvol/a.img
          qemu-system-x86_64 -drive file=gluster://1.2.3.4/testvol/a.img,file.debug=9,file.logfile=/var/log/qemu-gluster.log
          qemu-system-x86_64 'json:{"driver":"qcow2",
                                   "file":{"driver":"gluster",
                                            "volume":"testvol","path":"a.img",
                                            "debug":9,"logfile":"/var/log/qemu-gluster.log",
                                            "server":[{"type":"tcp","host":"1.2.3.4","port":24007},
                                                      {"type":"unix","socket":"/var/run/glusterd.socket"}]}}'
          qemu-system-x86_64 -drive driver=qcow2,file.driver=gluster,file.volume=testvol,file.path=/path/a.img,
                                               file.debug=9,file.logfile=/var/log/qemu-gluster.log,
                                               file.server.0.type=tcp,file.server.0.host=1.2.3.4,file.server.0.port=24007,
                                               file.server.1.type=unix,file.server.1.socket=/var/run/glusterd.socket

   Secure Shell (ssh) disk images
       You can access disk images located on a remote ssh server by using the ssh protocol:

          qemu-system-x86_64 -drive file=ssh://[USER@]SERVER[:PORT]/PATH[?host_key_check=HOST_KEY_CHECK]

       Alternative syntax using properties:

          qemu-system-x86_64 -drive file.driver=ssh[,file.user=USER],file.host=SERVER[,file.port=PORT],file.path=PATH[,file.host_key_check=HOST_KEY_CHECK]

       ssh is the protocol.

       USER is the remote user.  If not specified, then the local username is tried.

       SERVER specifies the remote ssh server.   Any  ssh  server  can  be  used,  but  it  must  implement  the
       sftp-server protocol.  Most Unix/Linux systems should work without requiring any extra configuration.

       PORT is the port number on which sshd is listening.  By default the standard ssh port (22) is used.

       PATH is the path to the disk image.

       The  optional HOST_KEY_CHECK parameter controls how the remote host's key is checked.  The default is yes
       which means to use the local .ssh/known_hosts file.  Setting this to no turns off  known-hosts  checking.
       Or  you  can  check  that the host key matches a specific fingerprint. The fingerprint can be provided in
       md5, sha1, or sha256 format, however, it is strongly recommended to only  use  sha256,  since  the  other
       options are considered insecure by modern standards. The fingerprint value must be given as a hex encoded
       string:

          host_key_check=sha256:04ce2ae89ff4295a6b9c4111640bdcb3297858ee55cb434d9dd88796e93aa795

       The key string may optionally contain ":" separators between each pair of hex digits.

       The $HOME/.ssh/known_hosts file contains the base64 encoded host keys. These can be  converted  into  the
       format needed for QEMU using a command such as:

          $ for key in `grep 10.33.8.112 known_hosts | awk '{print $3}'`
            do
              echo $key | base64 -d | sha256sum
            done
            6c3aa525beda9dc83eadfbd7e5ba7d976ecb59575d1633c87cd06ed2ed6e366f  -
            12214fd9ea5b408086f98ecccd9958609bd9ac7c0ea316734006bc7818b45dc8  -
            d36420137bcbd101209ef70c3b15dc07362fbe0fa53c5b135eba6e6afa82f0ce  -

       Note that there can be multiple keys present per host, each with different key ciphers. Care is needed to
       pick the key fingerprint that matches the cipher QEMU will negotiate with the remote server.

       Currently authentication must be done using ssh-agent.  Other authentication methods may be supported  in
       future.

       Note:  Many  ssh  servers  do not support an fsync-style operation.  The ssh driver cannot guarantee that
       disk flush requests are obeyed, and this causes a risk of disk corruption if the remote server or network
       goes down during writes.  The driver will print a warning when fsync is not supported:

          warning: ssh server ssh.example.com:22 does not support fsync

       With sufficiently new versions of libssh and OpenSSH, fsync is supported.

   NVMe disk images
       NVM  Express  (NVMe)  storage  controllers  can be accessed directly by a userspace driver in QEMU.  This
       bypasses the host kernel file system and block layers while retaining QEMU block  layer  functionalities,
       such  as  block  jobs, I/O throttling, image formats, etc.  Disk I/O performance is typically higher than
       with -drive file=/dev/sda using either thread pool or linux-aio.

       The controller will be exclusively used by the QEMU process once started. To be  able  to  share  storage
       between multiple VMs and other applications on the host, please use the file based protocols.

       Before starting QEMU, bind the host NVMe controller to the host vfio-pci driver.  For example:

          # modprobe vfio-pci
          # lspci -n -s 0000:06:0d.0
          06:0d.0 0401: 1102:0002 (rev 08)
          # echo 0000:06:0d.0 > /sys/bus/pci/devices/0000:06:0d.0/driver/unbind
          # echo 1102 0002 > /sys/bus/pci/drivers/vfio-pci/new_id

          # qemu-system-x86_64 -drive file=nvme://HOST:BUS:SLOT.FUNC/NAMESPACE

       Alternative syntax using properties:

          qemu-system-x86_64 -drive file.driver=nvme,file.device=HOST:BUS:SLOT.FUNC,file.namespace=NAMESPACE

       HOST:BUS:SLOT.FUNC is the NVMe controller's PCI device address on the host.

       NAMESPACE is the NVMe namespace number, starting from 1.

   Disk image file locking
       By  default,  QEMU  tries  to  protect  image  files  from  unexpected concurrent access, as long as it's
       supported by the block protocol driver and host operating system. If multiple QEMU  processes  (including
       QEMU  emulators  and  utilities) try to open the same image with conflicting accessing modes, all but the
       first one will get an error.

       This feature is currently supported by the file protocol on Linux with the  Open  File  Descriptor  (OFD)
       locking  API, and can be configured to fall back to POSIX locking if the POSIX host doesn't support Linux
       OFD locking.

       To explicitly enable image locking, specify "locking=on" in the file  protocol  driver  options.  If  OFD
       locking  is  not possible, a warning will be printed and the POSIX locking API will be used. In this case
       there is a risk that the lock will get silently lost when doing hot plugging and block jobs, due  to  the
       shortcomings of the POSIX locking API.

       QEMU transparently handles lock handover during shared storage migration.  For shared virtual disk images
       between multiple VMs, the "share-rw" device option should be used.

       By default, the guest has exclusive write access to its disk image. If the guest  can  safely  share  the
       disk  image  with  other writers the -device ...,share-rw=on parameter can be used.  This is only safe if
       the guest is running software, such as a cluster file system, that coordinates  disk  accesses  to  avoid
       corruption.

       Note  that  share-rw=on only declares the guest's ability to share the disk.  Some QEMU features, such as
       image file formats, require exclusive write access to the disk  image  and  this  is  unaffected  by  the
       share-rw=on option.

       Alternatively,  locking  can be fully disabled by "locking=off" block device option. In the command line,
       the option is usually in the form of "file.locking=off" as the protocol driver is normally  placed  as  a
       "file" child under a format driver. For example:

          -blockdev driver=qcow2,file.filename=/path/to/image,file.locking=off,file.driver=file

       To  check  if image locking is active, check the output of the "lslocks" command on host and see if there
       are locks held by the QEMU process on the image file.  More than one byte could be  locked  by  the  QEMU
       instance,  each  byte  of  which  reflects  a  particular permission that is acquired or protected by the
       running block driver.

   Filter drivers
       QEMU supports several filter drivers, which don't store any data,  but  perform  some  additional  tasks,
       hooking io requests.

       preallocate
              The  preallocate  filter  driver  is intended to be inserted between format and protocol nodes and
              preallocates some additional space (expanding the protocol file) when writing past the file’s end.
              This can be useful for file-systems with slow allocation.

              Supported options:

              prealloc-align
                     On preallocation, align the file length to this value (in bytes), default 1M.

              prealloc-size
                     How much to preallocate (in bytes), default 128M.

SEE ALSO

       The HTML documentation of QEMU for more precise information and Linux user mode emulator invocation.

AUTHOR

       Fabrice Bellard and the QEMU Project developers

COPYRIGHT

       2024, The QEMU Project Developers