cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

qemu-block-drivers.rst.inc (31777B)


      1Disk image file formats
      2~~~~~~~~~~~~~~~~~~~~~~~
      3
      4QEMU supports many image file formats that can be used with VMs as well as with
      5any of the tools (like ``qemu-img``). This includes the preferred formats
      6raw and qcow2 as well as formats that are supported for compatibility with
      7older QEMU versions or other hypervisors.
      8
      9Depending on the image format, different options can be passed to
     10``qemu-img create`` and ``qemu-img convert`` using the ``-o`` option.
     11This section describes each format and the options that are supported for it.
     12
     13.. program:: image-formats
     14.. option:: raw
     15
     16  Raw disk image format. This format has the advantage of
     17  being simple and easily exportable to all other emulators. If your
     18  file system supports *holes* (for example in ext2 or ext3 on
     19  Linux or NTFS on Windows), then only the written sectors will reserve
     20  space. Use ``qemu-img info`` to know the real size used by the
     21  image or ``ls -ls`` on Unix/Linux.
     22
     23  Supported options:
     24
     25  .. program:: raw
     26  .. option:: preallocation
     27
     28    Preallocation mode (allowed values: ``off``, ``falloc``,
     29    ``full``). ``falloc`` mode preallocates space for image by
     30    calling ``posix_fallocate()``. ``full`` mode preallocates space
     31    for image by writing data to underlying storage. This data may or
     32    may not be zero, depending on the storage location.
     33
     34.. program:: image-formats
     35.. option:: qcow2
     36
     37  QEMU image format, the most versatile format. Use it to have smaller
     38  images (useful if your filesystem does not supports holes, for example
     39  on Windows), zlib based compression and support of multiple VM
     40  snapshots.
     41
     42  Supported options:
     43
     44  .. program:: qcow2
     45  .. option:: compat
     46
     47    Determines the qcow2 version to use. ``compat=0.10`` uses the
     48    traditional image format that can be read by any QEMU since 0.10.
     49    ``compat=1.1`` enables image format extensions that only QEMU 1.1 and
     50    newer understand (this is the default). Amongst others, this includes
     51    zero clusters, which allow efficient copy-on-read for sparse images.
     52
     53  .. option:: backing_file
     54
     55    File name of a base image (see ``create`` subcommand)
     56
     57  .. option:: backing_fmt
     58
     59    Image format of the base image
     60
     61  .. option:: encryption
     62
     63    This option is deprecated and equivalent to ``encrypt.format=aes``
     64
     65  .. option:: encrypt.format
     66
     67    If this is set to ``luks``, it requests that the qcow2 payload (not
     68    qcow2 header) be encrypted using the LUKS format. The passphrase to
     69    use to unlock the LUKS key slot is given by the ``encrypt.key-secret``
     70    parameter. LUKS encryption parameters can be tuned with the other
     71    ``encrypt.*`` parameters.
     72
     73    If this is set to ``aes``, the image is encrypted with 128-bit AES-CBC.
     74    The encryption key is given by the ``encrypt.key-secret`` parameter.
     75    This encryption format is considered to be flawed by modern cryptography
     76    standards, suffering from a number of design problems:
     77
     78    - The AES-CBC cipher is used with predictable initialization vectors based
     79      on the sector number. This makes it vulnerable to chosen plaintext attacks
     80      which can reveal the existence of encrypted data.
     81    - The user passphrase is directly used as the encryption key. A poorly
     82      chosen or short passphrase will compromise the security of the encryption.
     83    - In the event of the passphrase being compromised there is no way to
     84      change the passphrase to protect data in any qcow images. The files must
     85      be cloned, using a different encryption passphrase in the new file. The
     86      original file must then be securely erased using a program like shred,
     87      though even this is ineffective with many modern storage technologies.
     88
     89    The use of this is no longer supported in system emulators. Support only
     90    remains in the command line utilities, for the purposes of data liberation
     91    and interoperability with old versions of QEMU. The ``luks`` format
     92    should be used instead.
     93
     94  .. option:: encrypt.key-secret
     95
     96    Provides the ID of a ``secret`` object that contains the passphrase
     97    (``encrypt.format=luks``) or encryption key (``encrypt.format=aes``).
     98
     99  .. option:: encrypt.cipher-alg
    100
    101    Name of the cipher algorithm and key length. Currently defaults
    102    to ``aes-256``. Only used when ``encrypt.format=luks``.
    103
    104  .. option:: encrypt.cipher-mode
    105
    106    Name of the encryption mode to use. Currently defaults to ``xts``.
    107    Only used when ``encrypt.format=luks``.
    108
    109  .. option:: encrypt.ivgen-alg
    110
    111    Name of the initialization vector generator algorithm. Currently defaults
    112    to ``plain64``. Only used when ``encrypt.format=luks``.
    113
    114  .. option:: encrypt.ivgen-hash-alg
    115
    116    Name of the hash algorithm to use with the initialization vector generator
    117    (if required). Defaults to ``sha256``. Only used when ``encrypt.format=luks``.
    118
    119  .. option:: encrypt.hash-alg
    120
    121    Name of the hash algorithm to use for PBKDF algorithm
    122    Defaults to ``sha256``. Only used when ``encrypt.format=luks``.
    123
    124  .. option:: encrypt.iter-time
    125
    126    Amount of time, in milliseconds, to use for PBKDF algorithm per key slot.
    127    Defaults to ``2000``. Only used when ``encrypt.format=luks``.
    128
    129  .. option:: cluster_size
    130
    131    Changes the qcow2 cluster size (must be between 512 and 2M). Smaller cluster
    132    sizes can improve the image file size whereas larger cluster sizes generally
    133    provide better performance.
    134
    135  .. option:: preallocation
    136
    137    Preallocation mode (allowed values: ``off``, ``metadata``, ``falloc``,
    138    ``full``). An image with preallocated metadata is initially larger but can
    139    improve performance when the image needs to grow. ``falloc`` and ``full``
    140    preallocations are like the same options of ``raw`` format, but sets up
    141    metadata also.
    142
    143  .. option:: lazy_refcounts
    144
    145    If this option is set to ``on``, reference count updates are postponed with
    146    the goal of avoiding metadata I/O and improving performance. This is
    147    particularly interesting with :option:`cache=writethrough` which doesn't batch
    148    metadata updates. The tradeoff is that after a host crash, the reference count
    149    tables must be rebuilt, i.e. on the next open an (automatic) ``qemu-img
    150    check -r all`` is required, which may take some time.
    151
    152    This option can only be enabled if ``compat=1.1`` is specified.
    153
    154  .. option:: nocow
    155
    156    If this option is set to ``on``, it will turn off COW of the file. It's only
    157    valid on btrfs, no effect on other file systems.
    158
    159    Btrfs has low performance when hosting a VM image file, even more
    160    when the guest on the VM also using btrfs as file system. Turning off
    161    COW is a way to mitigate this bad performance. Generally there are two
    162    ways to turn off COW on btrfs:
    163
    164    - Disable it by mounting with nodatacow, then all newly created files
    165      will be NOCOW.
    166    - For an empty file, add the NOCOW file attribute. That's what this
    167      option does.
    168
    169    Note: this option is only valid to new or empty files. If there is
    170    an existing file which is COW and has data blocks already, it couldn't
    171    be changed to NOCOW by setting ``nocow=on``. One can issue ``lsattr
    172    filename`` to check if the NOCOW flag is set or not (Capital 'C' is
    173    NOCOW flag).
    174
    175.. program:: image-formats
    176.. option:: qed
    177
    178   Old QEMU image format with support for backing files and compact image files
    179   (when your filesystem or transport medium does not support holes).
    180
    181   When converting QED images to qcow2, you might want to consider using the
    182   ``lazy_refcounts=on`` option to get a more QED-like behaviour.
    183
    184   Supported options:
    185
    186   .. program:: qed
    187   .. option:: backing_file
    188
    189      File name of a base image (see ``create`` subcommand).
    190
    191   .. option:: backing_fmt
    192
    193     Image file format of backing file (optional).  Useful if the format cannot be
    194     autodetected because it has no header, like some vhd/vpc files.
    195
    196   .. option:: cluster_size
    197
    198     Changes the cluster size (must be power-of-2 between 4K and 64K). Smaller
    199     cluster sizes can improve the image file size whereas larger cluster sizes
    200     generally provide better performance.
    201
    202   .. option:: table_size
    203
    204     Changes the number of clusters per L1/L2 table (must be
    205     power-of-2 between 1 and 16).  There is normally no need to
    206     change this value but this option can between used for
    207     performance benchmarking.
    208
    209.. program:: image-formats
    210.. option:: qcow
    211
    212  Old QEMU image format with support for backing files, compact image files,
    213  encryption and compression.
    214
    215  Supported options:
    216
    217   .. program:: qcow
    218   .. option:: backing_file
    219
    220     File name of a base image (see ``create`` subcommand)
    221
    222   .. option:: encryption
    223
    224     This option is deprecated and equivalent to ``encrypt.format=aes``
    225
    226   .. option:: encrypt.format
    227
    228     If this is set to ``aes``, the image is encrypted with 128-bit AES-CBC.
    229     The encryption key is given by the ``encrypt.key-secret`` parameter.
    230     This encryption format is considered to be flawed by modern cryptography
    231     standards, suffering from a number of design problems enumerated previously
    232     against the ``qcow2`` image format.
    233
    234     The use of this is no longer supported in system emulators. Support only
    235     remains in the command line utilities, for the purposes of data liberation
    236     and interoperability with old versions of QEMU.
    237
    238     Users requiring native encryption should use the ``qcow2`` format
    239     instead with ``encrypt.format=luks``.
    240
    241   .. option:: encrypt.key-secret
    242
    243     Provides the ID of a ``secret`` object that contains the encryption
    244     key (``encrypt.format=aes``).
    245
    246.. program:: image-formats
    247.. option:: luks
    248
    249  LUKS v1 encryption format, compatible with Linux dm-crypt/cryptsetup
    250
    251  Supported options:
    252
    253  .. program:: luks
    254  .. option:: key-secret
    255
    256    Provides the ID of a ``secret`` object that contains the passphrase.
    257
    258  .. option:: cipher-alg
    259
    260    Name of the cipher algorithm and key length. Currently defaults
    261    to ``aes-256``.
    262
    263  .. option:: cipher-mode
    264
    265    Name of the encryption mode to use. Currently defaults to ``xts``.
    266
    267  .. option:: ivgen-alg
    268
    269    Name of the initialization vector generator algorithm. Currently defaults
    270    to ``plain64``.
    271
    272  .. option:: ivgen-hash-alg
    273
    274    Name of the hash algorithm to use with the initialization vector generator
    275    (if required). Defaults to ``sha256``.
    276
    277  .. option:: hash-alg
    278
    279    Name of the hash algorithm to use for PBKDF algorithm
    280    Defaults to ``sha256``.
    281
    282  .. option:: iter-time
    283
    284    Amount of time, in milliseconds, to use for PBKDF algorithm per key slot.
    285    Defaults to ``2000``.
    286
    287.. program:: image-formats
    288.. option:: vdi
    289
    290  VirtualBox 1.1 compatible image format.
    291
    292  Supported options:
    293
    294  .. program:: vdi
    295  .. option:: static
    296
    297    If this option is set to ``on``, the image is created with metadata
    298    preallocation.
    299
    300.. program:: image-formats
    301.. option:: vmdk
    302
    303  VMware 3 and 4 compatible image format.
    304
    305  Supported options:
    306
    307  .. program: vmdk
    308  .. option:: backing_file
    309
    310    File name of a base image (see ``create`` subcommand).
    311
    312  .. option:: compat6
    313
    314    Create a VMDK version 6 image (instead of version 4)
    315
    316  .. option:: hwversion
    317
    318    Specify vmdk virtual hardware version. Compat6 flag cannot be enabled
    319    if hwversion is specified.
    320
    321  .. option:: subformat
    322
    323    Specifies which VMDK subformat to use. Valid options are
    324    ``monolithicSparse`` (default),
    325    ``monolithicFlat``,
    326    ``twoGbMaxExtentSparse``,
    327    ``twoGbMaxExtentFlat`` and
    328    ``streamOptimized``.
    329
    330.. program:: image-formats
    331.. option:: vpc
    332
    333  VirtualPC compatible image format (VHD).
    334
    335  Supported options:
    336
    337  .. program:: vpc
    338  .. option:: subformat
    339
    340    Specifies which VHD subformat to use. Valid options are
    341    ``dynamic`` (default) and ``fixed``.
    342
    343.. program:: image-formats
    344.. option:: VHDX
    345
    346  Hyper-V compatible image format (VHDX).
    347
    348  Supported options:
    349
    350  .. program:: VHDX
    351  .. option:: subformat
    352
    353    Specifies which VHDX subformat to use. Valid options are
    354    ``dynamic`` (default) and ``fixed``.
    355
    356    .. option:: block_state_zero
    357
    358      Force use of payload blocks of type 'ZERO'.  Can be set to ``on`` (default)
    359      or ``off``.  When set to ``off``, new blocks will be created as
    360      ``PAYLOAD_BLOCK_NOT_PRESENT``, which means parsers are free to return
    361      arbitrary data for those blocks.  Do not set to ``off`` when using
    362      ``qemu-img convert`` with ``subformat=dynamic``.
    363
    364    .. option:: block_size
    365
    366      Block size; min 1 MB, max 256 MB.  0 means auto-calculate based on
    367      image size.
    368
    369    .. option:: log_size
    370
    371      Log size; min 1 MB.
    372
    373Read-only formats
    374~~~~~~~~~~~~~~~~~
    375
    376More disk image file formats are supported in a read-only mode.
    377
    378.. program:: image-formats
    379.. option:: bochs
    380
    381  Bochs images of ``growing`` type.
    382
    383.. program:: image-formats
    384.. option:: cloop
    385
    386  Linux Compressed Loop image, useful only to reuse directly compressed
    387  CD-ROM images present for example in the Knoppix CD-ROMs.
    388
    389.. program:: image-formats
    390.. option:: dmg
    391
    392  Apple disk image.
    393
    394.. program:: image-formats
    395.. option:: parallels
    396
    397  Parallels disk image format.
    398
    399Using host drives
    400~~~~~~~~~~~~~~~~~
    401
    402In addition to disk image files, QEMU can directly access host
    403devices. We describe here the usage for QEMU version >= 0.8.3.
    404
    405Linux
    406^^^^^
    407
    408On Linux, you can directly use the host device filename instead of a
    409disk image filename provided you have enough privileges to access
    410it. For example, use ``/dev/cdrom`` to access to the CDROM.
    411
    412CD
    413  You can specify a CDROM device even if no CDROM is loaded. QEMU has
    414  specific code to detect CDROM insertion or removal. CDROM ejection by
    415  the guest OS is supported. Currently only data CDs are supported.
    416
    417Floppy
    418  You can specify a floppy device even if no floppy is loaded. Floppy
    419  removal is currently not detected accurately (if you change floppy
    420  without doing floppy access while the floppy is not loaded, the guest
    421  OS will think that the same floppy is loaded).
    422  Use of the host's floppy device is deprecated, and support for it will
    423  be removed in a future release.
    424
    425Hard disks
    426  Hard disks can be used. Normally you must specify the whole disk
    427  (``/dev/hdb`` instead of ``/dev/hdb1``) so that the guest OS can
    428  see it as a partitioned disk. WARNING: unless you know what you do, it
    429  is better to only make READ-ONLY accesses to the hard disk otherwise
    430  you may corrupt your host data (use the ``-snapshot`` command
    431  line option or modify the device permissions accordingly).
    432
    433Windows
    434^^^^^^^
    435
    436CD
    437  The preferred syntax is the drive letter (e.g. ``d:``). The
    438  alternate syntax ``\\.\d:`` is supported. ``/dev/cdrom`` is
    439  supported as an alias to the first CDROM drive.
    440
    441  Currently there is no specific code to handle removable media, so it
    442  is better to use the ``change`` or ``eject`` monitor commands to
    443  change or eject media.
    444
    445Hard disks
    446  Hard disks can be used with the syntax: ``\\.\PhysicalDriveN``
    447  where *N* is the drive number (0 is the first hard disk).
    448
    449  WARNING: unless you know what you do, it is better to only make
    450  READ-ONLY accesses to the hard disk otherwise you may corrupt your
    451  host data (use the ``-snapshot`` command line so that the
    452  modifications are written in a temporary file).
    453
    454Mac OS X
    455^^^^^^^^
    456
    457``/dev/cdrom`` is an alias to the first CDROM.
    458
    459Currently there is no specific code to handle removable media, so it
    460is better to use the ``change`` or ``eject`` monitor commands to
    461change or eject media.
    462
    463Virtual FAT disk images
    464~~~~~~~~~~~~~~~~~~~~~~~
    465
    466QEMU can automatically create a virtual FAT disk image from a
    467directory tree. In order to use it, just type:
    468
    469.. parsed-literal::
    470
    471  |qemu_system| linux.img -hdb fat:/my_directory
    472
    473Then you access access to all the files in the ``/my_directory``
    474directory without having to copy them in a disk image or to export
    475them via SAMBA or NFS. The default access is *read-only*.
    476
    477Floppies can be emulated with the ``:floppy:`` option:
    478
    479.. parsed-literal::
    480
    481  |qemu_system| linux.img -fda fat:floppy:/my_directory
    482
    483A read/write support is available for testing (beta stage) with the
    484``:rw:`` option:
    485
    486.. parsed-literal::
    487
    488  |qemu_system| linux.img -fda fat:floppy:rw:/my_directory
    489
    490What you should *never* do:
    491
    492- use non-ASCII filenames
    493- use "-snapshot" together with ":rw:"
    494- expect it to work when loadvm'ing
    495- write to the FAT directory on the host system while accessing it with the guest system
    496
    497NBD access
    498~~~~~~~~~~
    499
    500QEMU can access directly to block device exported using the Network Block Device
    501protocol.
    502
    503.. parsed-literal::
    504
    505  |qemu_system| linux.img -hdb nbd://my_nbd_server.mydomain.org:1024/
    506
    507If the NBD server is located on the same host, you can use an unix socket instead
    508of an inet socket:
    509
    510.. parsed-literal::
    511
    512  |qemu_system| linux.img -hdb nbd+unix://?socket=/tmp/my_socket
    513
    514In this case, the block device must be exported using qemu-nbd:
    515
    516.. parsed-literal::
    517
    518  qemu-nbd --socket=/tmp/my_socket my_disk.qcow2
    519
    520The use of qemu-nbd allows sharing of a disk between several guests:
    521
    522.. parsed-literal::
    523
    524  qemu-nbd --socket=/tmp/my_socket --share=2 my_disk.qcow2
    525
    526and then you can use it with two guests:
    527
    528.. parsed-literal::
    529
    530  |qemu_system| linux1.img -hdb nbd+unix://?socket=/tmp/my_socket
    531  |qemu_system| linux2.img -hdb nbd+unix://?socket=/tmp/my_socket
    532
    533If the nbd-server uses named exports (supported since NBD 2.9.18, or with QEMU's
    534own embedded NBD server), you must specify an export name in the URI:
    535
    536.. parsed-literal::
    537
    538  |qemu_system| -cdrom nbd://localhost/debian-500-ppc-netinst
    539  |qemu_system| -cdrom nbd://localhost/openSUSE-11.1-ppc-netinst
    540
    541The URI syntax for NBD is supported since QEMU 1.3.  An alternative syntax is
    542also available.  Here are some example of the older syntax:
    543
    544.. parsed-literal::
    545
    546  |qemu_system| linux.img -hdb nbd:my_nbd_server.mydomain.org:1024
    547  |qemu_system| linux2.img -hdb nbd:unix:/tmp/my_socket
    548  |qemu_system| -cdrom nbd:localhost:10809:exportname=debian-500-ppc-netinst
    549
    550iSCSI LUNs
    551~~~~~~~~~~
    552
    553iSCSI is a popular protocol used to access SCSI devices across a computer
    554network.
    555
    556There are two different ways iSCSI devices can be used by QEMU.
    557
    558The first method is to mount the iSCSI LUN on the host, and make it appear as
    559any other ordinary SCSI device on the host and then to access this device as a
    560/dev/sd device from QEMU. How to do this differs between host OSes.
    561
    562The second method involves using the iSCSI initiator that is built into
    563QEMU. This provides a mechanism that works the same way regardless of which
    564host OS you are running QEMU on. This section will describe this second method
    565of using iSCSI together with QEMU.
    566
    567In QEMU, iSCSI devices are described using special iSCSI URLs. URL syntax:
    568
    569::
    570
    571  iscsi://[<username>[%<password>]@]<host>[:<port>]/<target-iqn-name>/<lun>
    572
    573Username and password are optional and only used if your target is set up
    574using CHAP authentication for access control.
    575Alternatively the username and password can also be set via environment
    576variables to have these not show up in the process list:
    577
    578::
    579
    580  export LIBISCSI_CHAP_USERNAME=<username>
    581  export LIBISCSI_CHAP_PASSWORD=<password>
    582  iscsi://<host>/<target-iqn-name>/<lun>
    583
    584Various session related parameters can be set via special options, either
    585in a configuration file provided via '-readconfig' or directly on the
    586command line.
    587
    588If the initiator-name is not specified qemu will use a default name
    589of 'iqn.2008-11.org.linux-kvm[:<uuid>'] where <uuid> is the UUID of the
    590virtual machine. If the UUID is not specified qemu will use
    591'iqn.2008-11.org.linux-kvm[:<name>'] where <name> is the name of the
    592virtual machine.
    593
    594Setting a specific initiator name to use when logging in to the target:
    595
    596::
    597
    598  -iscsi initiator-name=iqn.qemu.test:my-initiator
    599
    600Controlling which type of header digest to negotiate with the target:
    601
    602::
    603
    604  -iscsi header-digest=CRC32C|CRC32C-NONE|NONE-CRC32C|NONE
    605
    606These can also be set via a configuration file:
    607
    608::
    609
    610  [iscsi]
    611    user = "CHAP username"
    612    password = "CHAP password"
    613    initiator-name = "iqn.qemu.test:my-initiator"
    614    # header digest is one of CRC32C|CRC32C-NONE|NONE-CRC32C|NONE
    615    header-digest = "CRC32C"
    616
    617Setting the target name allows different options for different targets:
    618
    619::
    620
    621  [iscsi "iqn.target.name"]
    622    user = "CHAP username"
    623    password = "CHAP password"
    624    initiator-name = "iqn.qemu.test:my-initiator"
    625    # header digest is one of CRC32C|CRC32C-NONE|NONE-CRC32C|NONE
    626    header-digest = "CRC32C"
    627
    628How to use a configuration file to set iSCSI configuration options:
    629
    630.. parsed-literal::
    631
    632  cat >iscsi.conf <<EOF
    633  [iscsi]
    634    user = "me"
    635    password = "my password"
    636    initiator-name = "iqn.qemu.test:my-initiator"
    637    header-digest = "CRC32C"
    638  EOF
    639
    640  |qemu_system| -drive file=iscsi://127.0.0.1/iqn.qemu.test/1 \\
    641    -readconfig iscsi.conf
    642
    643How to set up a simple iSCSI target on loopback and access it via QEMU:
    644this example shows how to set up an iSCSI target with one CDROM and one DISK
    645using the Linux STGT software target. This target is available on Red Hat based
    646systems as the package 'scsi-target-utils'.
    647
    648.. parsed-literal::
    649
    650  tgtd --iscsi portal=127.0.0.1:3260
    651  tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.qemu.test
    652  tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 \\
    653      -b /IMAGES/disk.img --device-type=disk
    654  tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 2 \\
    655      -b /IMAGES/cd.iso --device-type=cd
    656  tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
    657
    658  |qemu_system| -iscsi initiator-name=iqn.qemu.test:my-initiator \\
    659    -boot d -drive file=iscsi://127.0.0.1/iqn.qemu.test/1 \\
    660    -cdrom iscsi://127.0.0.1/iqn.qemu.test/2
    661
    662GlusterFS disk images
    663~~~~~~~~~~~~~~~~~~~~~
    664
    665GlusterFS is a user space distributed file system.
    666
    667You can boot from the GlusterFS disk image with the command:
    668
    669URI:
    670
    671.. parsed-literal::
    672
    673  |qemu_system| -drive file=gluster[+TYPE]://[HOST}[:PORT]]/VOLUME/PATH
    674                               [?socket=...][,file.debug=9][,file.logfile=...]
    675
    676JSON:
    677
    678.. parsed-literal::
    679
    680  |qemu_system| 'json:{"driver":"qcow2",
    681                           "file":{"driver":"gluster",
    682                                    "volume":"testvol","path":"a.img","debug":9,"logfile":"...",
    683                                    "server":[{"type":"tcp","host":"...","port":"..."},
    684                                              {"type":"unix","socket":"..."}]}}'
    685
    686*gluster* is the protocol.
    687
    688*TYPE* specifies the transport type used to connect to gluster
    689management daemon (glusterd). Valid transport types are
    690tcp and unix. In the URI form, if a transport type isn't specified,
    691then tcp type is assumed.
    692
    693*HOST* specifies the server where the volume file specification for
    694the given volume resides. This can be either a hostname or an ipv4 address.
    695If transport type is unix, then *HOST* field should not be specified.
    696Instead *socket* field needs to be populated with the path to unix domain
    697socket.
    698
    699*PORT* is the port number on which glusterd is listening. This is optional
    700and if not specified, it defaults to port 24007. If the transport type is unix,
    701then *PORT* should not be specified.
    702
    703*VOLUME* is the name of the gluster volume which contains the disk image.
    704
    705*PATH* is the path to the actual disk image that resides on gluster volume.
    706
    707*debug* is the logging level of the gluster protocol driver. Debug levels
    708are 0-9, with 9 being the most verbose, and 0 representing no debugging output.
    709The default level is 4. The current logging levels defined in the gluster source
    710are 0 - None, 1 - Emergency, 2 - Alert, 3 - Critical, 4 - Error, 5 - Warning,
    7116 - Notice, 7 - Info, 8 - Debug, 9 - Trace
    712
    713*logfile* is a commandline option to mention log file path which helps in
    714logging to the specified file and also help in persisting the gfapi logs. The
    715default is stderr.
    716
    717You can create a GlusterFS disk image with the command:
    718
    719.. parsed-literal::
    720
    721  qemu-img create gluster://HOST/VOLUME/PATH SIZE
    722
    723Examples
    724
    725.. parsed-literal::
    726
    727  |qemu_system| -drive file=gluster://1.2.3.4/testvol/a.img
    728  |qemu_system| -drive file=gluster+tcp://1.2.3.4/testvol/a.img
    729  |qemu_system| -drive file=gluster+tcp://1.2.3.4:24007/testvol/dir/a.img
    730  |qemu_system| -drive file=gluster+tcp://[1:2:3:4:5:6:7:8]/testvol/dir/a.img
    731  |qemu_system| -drive file=gluster+tcp://[1:2:3:4:5:6:7:8]:24007/testvol/dir/a.img
    732  |qemu_system| -drive file=gluster+tcp://server.domain.com:24007/testvol/dir/a.img
    733  |qemu_system| -drive file=gluster+unix:///testvol/dir/a.img?socket=/tmp/glusterd.socket
    734  |qemu_system| -drive file=gluster+rdma://1.2.3.4:24007/testvol/a.img
    735  |qemu_system| -drive file=gluster://1.2.3.4/testvol/a.img,file.debug=9,file.logfile=/var/log/qemu-gluster.log
    736  |qemu_system| 'json:{"driver":"qcow2",
    737                           "file":{"driver":"gluster",
    738                                    "volume":"testvol","path":"a.img",
    739                                    "debug":9,"logfile":"/var/log/qemu-gluster.log",
    740                                    "server":[{"type":"tcp","host":"1.2.3.4","port":24007},
    741                                              {"type":"unix","socket":"/var/run/glusterd.socket"}]}}'
    742  |qemu_system| -drive driver=qcow2,file.driver=gluster,file.volume=testvol,file.path=/path/a.img,
    743                                       file.debug=9,file.logfile=/var/log/qemu-gluster.log,
    744                                       file.server.0.type=tcp,file.server.0.host=1.2.3.4,file.server.0.port=24007,
    745                                       file.server.1.type=unix,file.server.1.socket=/var/run/glusterd.socket
    746
    747Secure Shell (ssh) disk images
    748~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    749
    750You can access disk images located on a remote ssh server
    751by using the ssh protocol:
    752
    753.. parsed-literal::
    754
    755  |qemu_system| -drive file=ssh://[USER@]SERVER[:PORT]/PATH[?host_key_check=HOST_KEY_CHECK]
    756
    757Alternative syntax using properties:
    758
    759.. parsed-literal::
    760
    761  |qemu_system| -drive file.driver=ssh[,file.user=USER],file.host=SERVER[,file.port=PORT],file.path=PATH[,file.host_key_check=HOST_KEY_CHECK]
    762
    763*ssh* is the protocol.
    764
    765*USER* is the remote user.  If not specified, then the local
    766username is tried.
    767
    768*SERVER* specifies the remote ssh server.  Any ssh server can be
    769used, but it must implement the sftp-server protocol.  Most Unix/Linux
    770systems should work without requiring any extra configuration.
    771
    772*PORT* is the port number on which sshd is listening.  By default
    773the standard ssh port (22) is used.
    774
    775*PATH* is the path to the disk image.
    776
    777The optional *HOST_KEY_CHECK* parameter controls how the remote
    778host's key is checked.  The default is ``yes`` which means to use
    779the local ``.ssh/known_hosts`` file.  Setting this to ``no``
    780turns off known-hosts checking.  Or you can check that the host key
    781matches a specific fingerprint:
    782``host_key_check=md5:78:45:8e:14:57:4f:d5:45:83:0a:0e:f3:49:82:c9:c8``
    783(``sha1:`` can also be used as a prefix, but note that OpenSSH
    784tools only use MD5 to print fingerprints).
    785
    786Currently authentication must be done using ssh-agent.  Other
    787authentication methods may be supported in future.
    788
    789Note: Many ssh servers do not support an ``fsync``-style operation.
    790The ssh driver cannot guarantee that disk flush requests are
    791obeyed, and this causes a risk of disk corruption if the remote
    792server or network goes down during writes.  The driver will
    793print a warning when ``fsync`` is not supported:
    794
    795::
    796
    797  warning: ssh server ssh.example.com:22 does not support fsync
    798
    799With sufficiently new versions of libssh and OpenSSH, ``fsync`` is
    800supported.
    801
    802NVMe disk images
    803~~~~~~~~~~~~~~~~
    804
    805NVM Express (NVMe) storage controllers can be accessed directly by a userspace
    806driver in QEMU.  This bypasses the host kernel file system and block layers
    807while retaining QEMU block layer functionalities, such as block jobs, I/O
    808throttling, image formats, etc.  Disk I/O performance is typically higher than
    809with ``-drive file=/dev/sda`` using either thread pool or linux-aio.
    810
    811The controller will be exclusively used by the QEMU process once started. To be
    812able to share storage between multiple VMs and other applications on the host,
    813please use the file based protocols.
    814
    815Before starting QEMU, bind the host NVMe controller to the host vfio-pci
    816driver.  For example:
    817
    818.. parsed-literal::
    819
    820  # modprobe vfio-pci
    821  # lspci -n -s 0000:06:0d.0
    822  06:0d.0 0401: 1102:0002 (rev 08)
    823  # echo 0000:06:0d.0 > /sys/bus/pci/devices/0000:06:0d.0/driver/unbind
    824  # echo 1102 0002 > /sys/bus/pci/drivers/vfio-pci/new_id
    825
    826  # |qemu_system| -drive file=nvme://HOST:BUS:SLOT.FUNC/NAMESPACE
    827
    828Alternative syntax using properties:
    829
    830.. parsed-literal::
    831
    832  |qemu_system| -drive file.driver=nvme,file.device=HOST:BUS:SLOT.FUNC,file.namespace=NAMESPACE
    833
    834*HOST*:*BUS*:*SLOT*.\ *FUNC* is the NVMe controller's PCI device
    835address on the host.
    836
    837*NAMESPACE* is the NVMe namespace number, starting from 1.
    838
    839Disk image file locking
    840~~~~~~~~~~~~~~~~~~~~~~~
    841
    842By default, QEMU tries to protect image files from unexpected concurrent
    843access, as long as it's supported by the block protocol driver and host
    844operating system. If multiple QEMU processes (including QEMU emulators and
    845utilities) try to open the same image with conflicting accessing modes, all but
    846the first one will get an error.
    847
    848This feature is currently supported by the file protocol on Linux with the Open
    849File Descriptor (OFD) locking API, and can be configured to fall back to POSIX
    850locking if the POSIX host doesn't support Linux OFD locking.
    851
    852To explicitly enable image locking, specify "locking=on" in the file protocol
    853driver options. If OFD locking is not possible, a warning will be printed and
    854the POSIX locking API will be used. In this case there is a risk that the lock
    855will get silently lost when doing hot plugging and block jobs, due to the
    856shortcomings of the POSIX locking API.
    857
    858QEMU transparently handles lock handover during shared storage migration.  For
    859shared virtual disk images between multiple VMs, the "share-rw" device option
    860should be used.
    861
    862By default, the guest has exclusive write access to its disk image. If the
    863guest can safely share the disk image with other writers the
    864``-device ...,share-rw=on`` parameter can be used.  This is only safe if
    865the guest is running software, such as a cluster file system, that
    866coordinates disk accesses to avoid corruption.
    867
    868Note that share-rw=on only declares the guest's ability to share the disk.
    869Some QEMU features, such as image file formats, require exclusive write access
    870to the disk image and this is unaffected by the share-rw=on option.
    871
    872Alternatively, locking can be fully disabled by "locking=off" block device
    873option. In the command line, the option is usually in the form of
    874"file.locking=off" as the protocol driver is normally placed as a "file" child
    875under a format driver. For example:
    876
    877::
    878
    879  -blockdev driver=qcow2,file.filename=/path/to/image,file.locking=off,file.driver=file
    880
    881To check if image locking is active, check the output of the "lslocks" command
    882on host and see if there are locks held by the QEMU process on the image file.
    883More than one byte could be locked by the QEMU instance, each byte of which
    884reflects a particular permission that is acquired or protected by the running
    885block driver.
    886
    887Filter drivers
    888~~~~~~~~~~~~~~
    889
    890QEMU supports several filter drivers, which don't store any data, but perform
    891some additional tasks, hooking io requests.
    892
    893.. program:: filter-drivers
    894.. option:: preallocate
    895
    896  The preallocate filter driver is intended to be inserted between format
    897  and protocol nodes and preallocates some additional space
    898  (expanding the protocol file) when writing past the file’s end. This can be
    899  useful for file-systems with slow allocation.
    900
    901  Supported options:
    902
    903  .. program:: preallocate
    904  .. option:: prealloc-align
    905
    906    On preallocation, align the file length to this value (in bytes), default 1M.
    907
    908  .. program:: preallocate
    909  .. option:: prealloc-size
    910
    911    How much to preallocate (in bytes), default 128M.