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