Provided by: qemu-system-common_4.2-3ubuntu6.30_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: a) Disable it by mounting with nodatacow, then all
               newly created files will be NOCOW. b) 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 be 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).

       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

       Sheepdog disk images

       Sheepdog  is  a  distributed  storage  system for QEMU.  It provides highly available block level storage
       volumes that can be attached to QEMU-based virtual machines.

       You can create a Sheepdog disk image with the command:

               qemu-img create sheepdog:///<image> <size>

       where image is the Sheepdog image name and size is its size.

       To import the existing filename to Sheepdog, you can use a convert command.

               qemu-img convert <filename> sheepdog:///<image>

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

               qemu-system-x86_64 sheepdog:///<image>

       You can also create a snapshot of the Sheepdog image like qcow2.

               qemu-img snapshot -c <tag> sheepdog:///<image>

       where tag is a tag name of the newly created snapshot.

       To boot from the Sheepdog snapshot, specify the tag name of the snapshot.

               qemu-system-x86_64 sheepdog:///<image>#<tag>

       You can create a cloned image from the existing snapshot.

               qemu-img create -b sheepdog:///<base>#<tag> sheepdog:///<image>

       where base is an image name of the source snapshot and tag is its tag name.

       You can use an unix socket instead of an inet socket:

               qemu-system-x86_64 sheepdog+unix:///<image>?socket=<path>

       If the Sheepdog daemon doesn't run on the local host, you need to specify one of the Sheepdog servers  to
       connect to.

               qemu-img create sheepdog://<hostname>:<port>/<image> <size>
               qemu-system-x86_64 sheepdog://<hostname>:<port>/<image>

       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"

       Howto 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:
       "host_key_check=md5:78:45:8e:14:57:4f:d5:45:83:0a:0e:f3:49:82:c9:c8"  ("sha1:"  can  also  be  used  as a
       prefix, but note that OpenSSH tools only use MD5 to print fingerprints).

       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.

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

                                                   2024-10-20                            QEMU-BLOCK-DRIVERS.7(7)