
In addition to using normal file images for the emulated storage
devices, QEMU can also use networked resources such as iSCSI devices.
These are specified using a special URL syntax.

``iSCSI``
   iSCSI support allows QEMU to access iSCSI resources directly and use
   as images for the guest storage. Both disk and cdrom images are
   supported.

   Syntax for specifying iSCSI LUNs is
   "iscsi://<target-ip>[:<port>]/<target-iqn>/<lun>"

   By default qemu will use the iSCSI initiator-name
   'iqn.2008-11.org.linux-kvm[:<name>]' but this can also be set from
   the command line or a configuration file.

   Since version QEMU 2.4 it is possible to specify a iSCSI request
   timeout to detect stalled requests and force a reestablishment of the
   session. The timeout is specified in seconds. The default is 0 which
   means no timeout. Libiscsi 1.15.0 or greater is required for this
   feature.

   Example (without authentication):

   .. parsed-literal::

      |qemu_system| -iscsi initiator-name=iqn.2001-04.com.example:my-initiator \\
                       -cdrom iscsi://192.0.2.1/iqn.2001-04.com.example/2 \\
                       -drive file=iscsi://192.0.2.1/iqn.2001-04.com.example/1

   Example (CHAP username/password via URL):

   .. parsed-literal::

      |qemu_system| -drive file=iscsi://user%password@192.0.2.1/iqn.2001-04.com.example/1

   Example (CHAP username/password via environment variables):

   .. parsed-literal::

      LIBISCSI_CHAP_USERNAME="user" \\
      LIBISCSI_CHAP_PASSWORD="password" \\
      |qemu_system| -drive file=iscsi://192.0.2.1/iqn.2001-04.com.example/1

``NBD``
   QEMU supports NBD (Network Block Devices) both using TCP protocol as
   well as Unix Domain Sockets. With TCP, the default port is 10809.

   Syntax for specifying a NBD device using TCP, in preferred URI form:
   "nbd://<server-ip>[:<port>]/[<export>]"

   Syntax for specifying a NBD device using Unix Domain Sockets;
   remember that '?' is a shell glob character and may need quoting:
   "nbd+unix:///[<export>]?socket=<domain-socket>"

   Older syntax that is also recognized:
   "nbd:<server-ip>:<port>[:exportname=<export>]"

   Syntax for specifying a NBD device using Unix Domain Sockets
   "nbd:unix:<domain-socket>[:exportname=<export>]"

   Example for TCP

   .. parsed-literal::

      |qemu_system| --drive file=nbd:192.0.2.1:30000

   Example for Unix Domain Sockets

   .. parsed-literal::

      |qemu_system| --drive file=nbd:unix:/tmp/nbd-socket

``SSH``
   QEMU supports SSH (Secure Shell) access to remote disks.

   Examples:

   .. parsed-literal::

      |qemu_system| -drive file=ssh://user@host/path/to/disk.img
      |qemu_system| -drive file.driver=ssh,file.user=user,file.host=host,file.port=22,file.path=/path/to/disk.img

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

``GlusterFS``
   GlusterFS is a user space distributed file system. QEMU supports the
   use of GlusterFS volumes for hosting VM disk images using TCP, Unix
   Domain Sockets and RDMA transport protocols.

   Syntax for specifying a VM disk image on GlusterFS volume is

   .. parsed-literal::

      URI:
      gluster[+type]://[host[:port]]/volume/path[?socket=...][,debug=N][,logfile=...]

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

   Example

   .. parsed-literal::

      URI:
      |qemu_system| --drive file=gluster://192.0.2.1/testvol/a.img,
                                     file.debug=9,file.logfile=/var/log/qemu-gluster.log

      JSON:
      |qemu_system| '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| -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

   See also http://www.gluster.org.

``HTTP/HTTPS/FTP/FTPS``
   QEMU supports read-only access to files accessed over http(s) and
   ftp(s).

   Syntax using a single filename:

   ::

      <protocol>://[<username>[:<password>]@]<host>/<path>

   where:

   ``protocol``
      'http', 'https', 'ftp', or 'ftps'.

   ``username``
      Optional username for authentication to the remote server.

   ``password``
      Optional password for authentication to the remote server.

   ``host``
      Address of the remote server.

   ``path``
      Path on the remote server, including any query string.

   The following options are also supported:

   ``url``
      The full URL when passing options to the driver explicitly.

   ``readahead``
      The amount of data to read ahead with each range request to the
      remote server. This value may optionally have the suffix 'T', 'G',
      'M', 'K', 'k' or 'b'. If it does not have a suffix, it will be
      assumed to be in bytes. The value must be a multiple of 512 bytes.
      It defaults to 256k.

   ``sslverify``
      Whether to verify the remote server's certificate when connecting
      over SSL. It can have the value 'on' or 'off'. It defaults to
      'on'.

   ``cookie``
      Send this cookie (it can also be a list of cookies separated by
      ';') with each outgoing request. Only supported when using
      protocols such as HTTP which support cookies, otherwise ignored.

   ``timeout``
      Set the timeout in seconds of the CURL connection. This timeout is
      the time that CURL waits for a response from the remote server to
      get the size of the image to be downloaded. If not set, the
      default timeout of 5 seconds is used.

   Note that when passing options to qemu explicitly, ``driver`` is the
   value of <protocol>.

   Example: boot from a remote Fedora 20 live ISO image

   .. parsed-literal::

      |qemu_system_x86| --drive media=cdrom,file=https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/20/Live/x86_64/Fedora-Live-Desktop-x86_64-20-1.iso,readonly

      |qemu_system_x86| --drive media=cdrom,file.driver=http,file.url=http://archives.fedoraproject.org/pub/fedora/linux/releases/20/Live/x86_64/Fedora-Live-Desktop-x86_64-20-1.iso,readonly

   Example: boot from a remote Fedora 20 cloud image using a local
   overlay for writes, copy-on-read, and a readahead of 64k

   .. parsed-literal::

      qemu-img create -f qcow2 -o backing_file='json:{"file.driver":"http",, "file.url":"http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/20/Images/x86_64/Fedora-x86_64-20-20131211.1-sda.qcow2",, "file.readahead":"64k"}' /tmp/Fedora-x86_64-20-20131211.1-sda.qcow2

      |qemu_system_x86| -drive file=/tmp/Fedora-x86_64-20-20131211.1-sda.qcow2,copy-on-read=on

   Example: boot from an image stored on a VMware vSphere server with a
   self-signed certificate using a local overlay for writes, a readahead
   of 64k and a timeout of 10 seconds.

   .. parsed-literal::

      qemu-img create -f qcow2 -o backing_file='json:{"file.driver":"https",, "file.url":"https://user:password@vsphere.example.com/folder/test/test-flat.vmdk?dcPath=Datacenter&dsName=datastore1",, "file.sslverify":"off",, "file.readahead":"64k",, "file.timeout":10}' /tmp/test.qcow2

      |qemu_system_x86| -drive file=/tmp/test.qcow2
