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