]>
Commit | Line | Data |
---|---|---|
78aa8aa0 SH |
1 | @c man begin SYNOPSIS |
2 | QEMU 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 | ||
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. | |
16 | ||
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. | |
20 | ||
21 | @table @option | |
22 | @item raw | |
23 | ||
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. | |
30 | ||
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(). | |
fa27c478 HR |
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. | |
78aa8aa0 SH |
38 | @end table |
39 | ||
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. | |
45 | ||
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. | |
54 | ||
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} | |
61 | ||
62 | @item encrypt.format | |
63 | ||
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. | |
69 | ||
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: | |
74 | ||
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 | |
87 | ||
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. | |
92 | ||
93 | @item encrypt.key-secret | |
94 | ||
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}). | |
97 | ||
98 | @item encrypt.cipher-alg | |
99 | ||
100 | Name of the cipher algorithm and key length. Currently defaults | |
101 | to @code{aes-256}. Only used when @code{encrypt.format=luks}. | |
102 | ||
103 | @item encrypt.cipher-mode | |
104 | ||
105 | Name of the encryption mode to use. Currently defaults to @code{xts}. | |
106 | Only used when @code{encrypt.format=luks}. | |
107 | ||
108 | @item encrypt.ivgen-alg | |
109 | ||
110 | Name of the initialization vector generator algorithm. Currently defaults | |
111 | to @code{plain64}. Only used when @code{encrypt.format=luks}. | |
112 | ||
113 | @item encrypt.ivgen-hash-alg | |
114 | ||
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}. | |
117 | ||
118 | @item encrypt.hash-alg | |
119 | ||
120 | Name of the hash algorithm to use for PBKDF algorithm | |
121 | Defaults to @code{sha256}. Only used when @code{encrypt.format=luks}. | |
122 | ||
123 | @item encrypt.iter-time | |
124 | ||
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}. | |
127 | ||
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. | |
132 | ||
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. | |
139 | ||
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. | |
147 | ||
148 | This option can only be enabled if @code{compat=1.1} is specified. | |
149 | ||
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. | |
153 | ||
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. | |
160 | ||
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). | |
165 | ||
166 | @end table | |
167 | ||
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). | |
171 | ||
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. | |
174 | ||
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 | |
191 | ||
192 | @item qcow | |
193 | Old QEMU image format with support for backing files, compact image files, | |
194 | encryption and compression. | |
195 | ||
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} | |
202 | ||
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. | |
209 | ||
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. | |
213 | ||
214 | Users requiring native encryption should use the @code{qcow2} format | |
215 | instead with @code{encrypt.format=luks}. | |
216 | ||
217 | @item encrypt.key-secret | |
218 | ||
219 | Provides the ID of a @code{secret} object that contains the encryption | |
220 | key (@code{encrypt.format=aes}). | |
221 | ||
222 | @end table | |
223 | ||
224 | @item luks | |
225 | ||
226 | LUKS v1 encryption format, compatible with Linux dm-crypt/cryptsetup | |
227 | ||
228 | Supported options: | |
229 | @table @code | |
230 | ||
231 | @item key-secret | |
232 | ||
233 | Provides the ID of a @code{secret} object that contains the passphrase. | |
234 | ||
235 | @item cipher-alg | |
236 | ||
237 | Name of the cipher algorithm and key length. Currently defaults | |
238 | to @code{aes-256}. | |
239 | ||
240 | @item cipher-mode | |
241 | ||
242 | Name of the encryption mode to use. Currently defaults to @code{xts}. | |
243 | ||
244 | @item ivgen-alg | |
245 | ||
246 | Name of the initialization vector generator algorithm. Currently defaults | |
247 | to @code{plain64}. | |
248 | ||
249 | @item ivgen-hash-alg | |
250 | ||
251 | Name of the hash algorithm to use with the initialization vector generator | |
252 | (if required). Defaults to @code{sha256}. | |
253 | ||
254 | @item hash-alg | |
255 | ||
256 | Name of the hash algorithm to use for PBKDF algorithm | |
257 | Defaults to @code{sha256}. | |
258 | ||
259 | @item iter-time | |
260 | ||
261 | Amount of time, in milliseconds, to use for PBKDF algorithm per key slot. | |
262 | Defaults to @code{2000}. | |
263 | ||
264 | @end table | |
265 | ||
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 | |
274 | ||
275 | @item vmdk | |
276 | VMware 3 and 4 compatible image format. | |
277 | ||
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 | |
295 | ||
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 | |
304 | ||
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 | |
324 | ||
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 | |
338 | ||
339 | ||
340 | @node host_drives | |
341 | @subsection Using host drives | |
342 | ||
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. | |
345 | ||
346 | @subsubsection Linux | |
347 | ||
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. | |
351 | ||
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 | |
372 | ||
373 | @subsubsection Windows | |
374 | ||
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. | |
380 | ||
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). | |
387 | ||
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 | |
393 | ||
394 | ||
395 | @subsubsection Mac OS X | |
396 | ||
397 | @file{/dev/cdrom} is an alias to the first CDROM. | |
398 | ||
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. | |
402 | ||
403 | @node disk_images_fat_images | |
404 | @subsection Virtual FAT disk images | |
405 | ||
406 | QEMU can automatically create a virtual FAT disk image from a | |
407 | directory 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 | ||
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}. | |
416 | ||
417 | Floppies 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 | ||
423 | A 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 | ||
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 | |
437 | ||
438 | @node disk_images_nbd | |
439 | @subsection NBD access | |
440 | ||
441 | QEMU can access directly to block device exported using the Network Block Device | |
442 | protocol. | |
443 | ||
444 | @example | |
664785ac | 445 | @value{qemu_system} linux.img -hdb nbd://my_nbd_server.mydomain.org:1024/ |
78aa8aa0 SH |
446 | @end example |
447 | ||
448 | If the NBD server is located on the same host, you can use an unix socket instead | |
449 | of 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 | ||
455 | In this case, the block device must be exported using qemu-nbd: | |
456 | ||
457 | @example | |
458 | qemu-nbd --socket=/tmp/my_socket my_disk.qcow2 | |
459 | @end example | |
460 | ||
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 | |
465 | ||
466 | @noindent | |
467 | and 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 | ||
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 | |
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 | ||
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 | |
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 | ||
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. | |
494 | ||
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. | |
501 | ||
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 | |
507 | ||
508 | You 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 | ||
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. | |
518 | ||
519 | To boot from the Sheepdog snapshot, specify the tag name of the | |
520 | snapshot. | |
521 | @example | |
664785ac | 522 | @value{qemu_system} sheepdog:///@var{image}#@var{tag} |
78aa8aa0 SH |
523 | @end example |
524 | ||
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 | |
9277d81f | 529 | where @var{base} is an image name of the source snapshot and @var{tag} |
78aa8aa0 SH |
530 | is its tag name. |
531 | ||
532 | You 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 | ||
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} | |
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 | ||
548 | iSCSI is a popular protocol used to access SCSI devices across a computer | |
549 | network. | |
550 | ||
551 | There are two different ways iSCSI devices can be used by QEMU. | |
552 | ||
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. | |
556 | ||
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. | |
561 | ||
562 | In QEMU, iSCSI devices are described using special iSCSI URLs | |
563 | ||
564 | @example | |
565 | URL syntax: | |
566 | iscsi://[<username>[%<password>]@@]<host>[:<port>]/<target-iqn-name>/<lun> | |
567 | @end example | |
568 | ||
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 | |
573 | ||
574 | @example | |
575 | export LIBISCSI_CHAP_USERNAME=<username> | |
576 | export LIBISCSI_CHAP_PASSWORD=<password> | |
577 | iscsi://<host>/<target-iqn-name>/<lun> | |
578 | @end example | |
579 | ||
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. | |
583 | ||
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. | |
589 | ||
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 | |
594 | ||
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 | |
599 | ||
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 | |
609 | ||
610 | ||
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 | |
620 | ||
621 | ||
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" | |
630 | EOF | |
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 | 637 | How to set up a simple iSCSI target on loopback and access it via QEMU: |
78aa8aa0 SH |
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'. | |
642 | ||
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 | |
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 | ||
659 | GlusterFS is a user space distributed file system. | |
660 | ||
661 | You can boot from the GlusterFS disk image with the command: | |
662 | @example | |
663 | URI: | |
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 | ||
667 | JSON: | |
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 | |
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. | |
681 | ||
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. | |
687 | ||
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. | |
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 | |
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 | |
701 | ||
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. | |
705 | ||
706 | ||
707 | ||
708 | ||
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 | |
713 | ||
714 | Examples | |
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 | ||
740 | You can access disk images located on a remote ssh server | |
741 | by 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 | ||
747 | Alternative 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 | |
756 | username is tried. | |
757 | ||
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. | |
761 | ||
762 | @var{port} is the port number on which sshd is listening. By default | |
763 | the standard ssh port (22) is used. | |
764 | ||
765 | @var{path} is the path to the disk image. | |
766 | ||
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). | |
775 | ||
776 | Currently authentication must be done using ssh-agent. Other | |
777 | authentication methods may be supported in future. | |
778 | ||
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: | |
784 | ||
785 | warning: ssh server @code{ssh.example.com:22} does not support fsync | |
786 | ||
b10d49d7 | 787 | With sufficiently new versions of libssh and OpenSSH, @code{fsync} is |
78aa8aa0 SH |
788 | supported. |
789 | ||
e86de5e4 FZ |
790 | @node disk_images_nvme |
791 | @subsection NVMe disk images | |
792 | ||
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. | |
798 | ||
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. | |
802 | ||
803 | Before starting QEMU, bind the host NVMe controller to the host vfio-pci | |
804 | driver. For example: | |
805 | ||
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 | |
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 | ||
816 | Alternative 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 | |
823 | address 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 | ||
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. | |
835 | ||
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. | |
839 | ||
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. | |
845 | ||
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. | |
849 | ||
c1a4b6f9 FZ |
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. | |
855 | ||
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. | |
859 | ||
b1d1cb27 FZ |
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: | |
864 | ||
865 | @code{-blockdev driver=qcow2,file.filename=/path/to/image,file.locking=off,file.driver=file} | |
866 | ||
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. | |
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 | |
881 | The HTML documentation of QEMU for more precise information and Linux | |
882 | user mode emulator invocation. | |
883 | @c man end | |
884 | ||
885 | @c man begin AUTHOR | |
886 | Fabrice Bellard and the QEMU Project developers | |
887 | @c man end | |
888 | ||
889 | @end ignore |