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