]> git.proxmox.com Git - mirror_qemu.git/blame - qemu-img.texi
qemu-img bench: Make start offset configurable
[mirror_qemu.git] / qemu-img.texi
CommitLineData
acd935ef
FB
1@example
2@c man begin SYNOPSIS
8485140f 3@command{qemu-img} @var{command} [@var{command} @var{options}]
acd935ef
FB
4@c man end
5@end example
6
48467328
KW
7@c man begin DESCRIPTION
8qemu-img allows you to create, convert and modify images offline. It can handle
9all image formats supported by QEMU.
10
11@b{Warning:} Never use qemu-img to modify images in use by a running virtual
12machine or any other process; this may destroy the image. Also, be aware that
13querying an image that is being modified by another process may encounter
14inconsistent state.
15@c man end
16
acd935ef
FB
17@c man begin OPTIONS
18
19The following commands are supported:
153859be
SB
20
21@include qemu-img-cmds.texi
acd935ef
FB
22
23Command parameters:
24@table @var
25@item filename
26 is a disk image filename
3babeb15
DB
27
28@item --object @var{objectdef}
29
30is a QEMU user creatable object definition. See the @code{qemu(1)} manual
31page for a description of the object properties. The most common object
32type is a @code{secret}, which is used to supply passwords and/or encryption
33keys.
34
eb769f74
DB
35@item --image-opts
36
37Indicates that the @var{filename} parameter is to be interpreted as a
38full option string, not a plain filename. This parameter is mutually
39exclusive with the @var{-f} and @var{-F} parameters.
40
5fafdf24 41@item fmt
f932c040
KW
42is the disk image format. It is guessed automatically in most cases. See below
43for a description of the supported disk formats.
acd935ef 44
e5357560
KC
45@item --backing-chain
46will enumerate information about backing files in a disk image chain. Refer
47below for further description.
48
5fafdf24 49@item size
eff44266
KW
50is the disk image size in bytes. Optional suffixes @code{k} or @code{K}
51(kilobyte, 1024) @code{M} (megabyte, 1024k) and @code{G} (gigabyte, 1024M)
52and T (terabyte, 1024G) are supported. @code{b} is ignored.
acd935ef
FB
53
54@item output_filename
5fafdf24 55is the destination disk image filename
acd935ef
FB
56
57@item output_fmt
58 is the destination format
eff44266
KW
59@item options
60is a comma separated list of format specific options in a
61name=value format. Use @code{-o ?} for an overview of the options supported
3e032364 62by the used format or see the format descriptions below for details.
ef80654d
WX
63@item snapshot_param
64is param used for internal snapshot, format is
65'snapshot.id=[ID],snapshot.name=[NAME]' or '[ID_OR_NAME]'
66@item snapshot_id_or_name
67is deprecated, use snapshot_param instead
acd935ef
FB
68
69@item -c
70indicates that target image must be compressed (qcow format only)
d2c639d6
BS
71@item -h
72with or without a command shows help and lists the supported formats
aaf55b47 73@item -p
0e3bd993
KW
74display progress bar (compare, convert and rebase commands only).
75If the @var{-p} option is not used for a command that supports it, the
76progress is reported when the process receives a @code{SIGUSR1} signal.
f382d43a
MR
77@item -q
78Quiet mode - do not print any output (except errors). There's no progress bar
79in case both @var{-q} and @var{-p} options are used.
a22f123c
KW
80@item -S @var{size}
81indicates the consecutive number of bytes that must contain only zeros
82for qemu-img to create a sparse image during conversion. This value is rounded
83down to the nearest 512 bytes. You may use the common size suffixes like
84@code{k} for kilobytes.
3763f26f
KW
85@item -t @var{cache}
86specifies the cache mode that should be used with the (destination) file. See
87the documentation of the emulator's @code{-drive cache=...} option for allowed
88values.
40055951 89@item -T @var{src_cache}
bb87fdf8
SH
90specifies the cache mode that should be used with the source file(s). See
91the documentation of the emulator's @code{-drive cache=...} option for allowed
92values.
d2c639d6
BS
93@end table
94
95Parameters to snapshot subcommand:
96
97@table @option
98
99@item snapshot
100is the name of the snapshot to create, apply or delete
101@item -a
102applies a snapshot (revert disk to saved state)
103@item -c
104creates a snapshot
105@item -d
106deletes a snapshot
107@item -l
108lists all snapshots in the given image
acd935ef
FB
109@end table
110
d14ed18c
MR
111Parameters to compare subcommand:
112
113@table @option
114
115@item -f
116First image format
117@item -F
118Second image format
119@item -s
b6af0975 120Strict mode - fail on different image size or sector allocation
d14ed18c
MR
121@end table
122
b2e10493
AD
123Parameters to convert subcommand:
124
125@table @option
126
127@item -n
128Skip the creation of the target volume
129@end table
130
acd935ef
FB
131Command description:
132
133@table @option
d3199a31 134@item bench [-c @var{count}] [-d @var{depth}] [-f @var{fmt}] [-n] [-o @var{offset}] [--pattern=@var{pattern}] [-q] [-s @var{buffer_size}] [-t @var{cache}] [-w] @var{filename}
b6133b8c 135
b6495fa8
KW
136Run a simple sequential I/O benchmark on the specified image. If @code{-w} is
137specified, a write test is performed, otherwise a read test is performed.
138
139A total number of @var{count} I/O requests is performed, each @var{buffer_size}
d3199a31
KW
140bytes in size, and with @var{depth} requests in parallel. The first request
141starts at the position given by @var{offset}.
b6133b8c
KW
142
143If @code{-n} is specified, the native AIO backend is used if possible. On
144Linux, this option only works if @code{-t none} or @code{-t directsync} is
145specified as well.
146
b6495fa8
KW
147For write tests, by default a buffer filled with zeros is written. This can be
148overridden with a pattern byte specified by @var{pattern}.
149
40055951 150@item check [-f @var{fmt}] [--output=@var{ofmt}] [-r [leaks | all]] [-T @var{src_cache}] @var{filename}
e6184690 151
8599ea4c
FS
152Perform a consistency check on the disk image @var{filename}. The command can
153output in the format @var{ofmt} which is either @code{human} or @code{json}.
e6184690 154
4534ff54
KW
155If @code{-r} is specified, qemu-img tries to repair any inconsistencies found
156during the check. @code{-r leaks} repairs only cluster leaks, whereas
157@code{-r all} fixes all kinds of errors, with a higher risk of choosing the
0546b8c2 158wrong fix or hiding corruption that has already occurred.
4534ff54 159
e6184690
KW
160Only the formats @code{qcow2}, @code{qed} and @code{vdi} support
161consistency checks.
162
d6635c4d
HR
163In case the image does not have any inconsistencies, check exits with @code{0}.
164Other exit codes indicate the kind of inconsistency found or if another error
165occurred. The following table summarizes all exit codes of the check subcommand:
166
167@table @option
168
169@item 0
170Check completed, the image is (now) consistent
171@item 1
172Check not completed because of internal errors
173@item 2
174Check completed, image is corrupted
175@item 3
176Check completed, image has leaked clusters, but is not corrupted
177@item 63
178Checks are not supported by the image format
179
180@end table
181
182If @code{-r} is specified, exit codes representing the image state refer to the
183state after (the attempt at) repairing it. That is, a successful @code{-r all}
184will yield the exit code 0, independently of the image state before.
185
8063d0fe 186@item create [-f @var{fmt}] [-o @var{options}] @var{filename} [@var{size}]
acd935ef
FB
187
188Create the new disk image @var{filename} of size @var{size} and format
8063d0fe
KW
189@var{fmt}. Depending on the file format, you can add one or more @var{options}
190that enable additional features of this format.
acd935ef 191
8063d0fe
KW
192If the option @var{backing_file} is specified, then the image will record
193only the differences from @var{backing_file}. No size needs to be specified in
194this case. @var{backing_file} will never be modified unless you use the
195@code{commit} monitor command (or qemu-img commit).
acd935ef 196
eff44266
KW
197The size can also be specified using the @var{size} option with @code{-o},
198it doesn't need to be specified separately in this case.
199
1b22bffd 200@item commit [-q] [-f @var{fmt}] [-t @var{cache}] [-b @var{base}] [-d] [-p] @var{filename}
acd935ef 201
37222900
JC
202Commit the changes recorded in @var{filename} in its base image or backing file.
203If the backing file is smaller than the snapshot, then the backing file will be
204resized to be the same size as the snapshot. If the snapshot is smaller than
205the backing file, the backing file will not be truncated. If you want the
206backing file to match the size of the smaller snapshot, you can safely truncate
207it yourself once the commit operation successfully completes.
acd935ef 208
9a86fe48
HR
209The image @var{filename} is emptied after the operation has succeeded. If you do
210not need @var{filename} afterwards and intend to drop it, you may skip emptying
211@var{filename} by specifying the @code{-d} flag.
212
1b22bffd
HR
213If the backing chain of the given image file @var{filename} has more than one
214layer, the backing file into which the changes will be committed may be
215specified as @var{base} (which has to be part of @var{filename}'s backing
216chain). If @var{base} is not specified, the immediate backing file of the top
217image (which is @var{filename}) will be used. For reasons of consistency,
218explicitly specifying @var{base} will always imply @code{-d} (since emptying an
219image after committing to an indirect backing file would lead to different data
220being read from the image due to content in the intermediate backing chain
221overruling the commit target).
222
40055951 223@item compare [-f @var{fmt}] [-F @var{fmt}] [-T @var{src_cache}] [-p] [-s] [-q] @var{filename1} @var{filename2}
d14ed18c
MR
224
225Check if two images have the same content. You can compare images with
226different format or settings.
227
228The format is probed unless you specify it by @var{-f} (used for
229@var{filename1}) and/or @var{-F} (used for @var{filename2}) option.
230
231By default, images with different size are considered identical if the larger
232image contains only unallocated and/or zeroed sectors in the area after the end
233of the other image. In addition, if any sector is not allocated in one image
234and contains only zero bytes in the second one, it is evaluated as equal. You
235can use Strict mode by specifying the @var{-s} option. When compare runs in
236Strict mode, it fails in case image size differs or a sector is allocated in
237one image and is not allocated in the second one.
238
239By default, compare prints out a result message. This message displays
240information that both images are same or the position of the first different
241byte. In addition, result message can report different image size in case
242Strict mode is used.
243
244Compare exits with @code{0} in case the images are equal and with @code{1}
245in case the images differ. Other exit codes mean an error occurred during
246execution and standard error output should contain an error message.
247The following table sumarizes all exit codes of the compare subcommand:
248
249@table @option
250
251@item 0
252Images are identical
253@item 1
254Images differ
255@item 2
256Error on opening an image
257@item 3
258Error on checking a sector allocation
259@item 4
260Error on reading data
261
262@end table
263
40055951 264@item convert [-c] [-p] [-n] [-f @var{fmt}] [-t @var{cache}] [-T @var{src_cache}] [-O @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_id_or_name}] [-l @var{snapshot_param}] [-S @var{sparse_size}] @var{filename} [@var{filename2} [...]] @var{output_filename}
acd935ef 265
ef80654d
WX
266Convert the disk image @var{filename} or a snapshot @var{snapshot_param}(@var{snapshot_id_or_name} is deprecated)
267to disk image @var{output_filename} using format @var{output_fmt}. It can be optionally compressed (@code{-c}
eff44266 268option) or use any format specific options like encryption (@code{-o} option).
acd935ef 269
8063d0fe 270Only the formats @code{qcow} and @code{qcow2} support compression. The
acd935ef
FB
271compression is read-only. It means that if a compressed sector is
272rewritten, then it is rewritten as uncompressed data.
273
acd935ef 274Image conversion is also useful to get smaller image when using a
550830f9
SH
275growable format such as @code{qcow}: the empty sectors are detected and
276suppressed from the destination image.
acd935ef 277
11b6699a
PL
278@var{sparse_size} indicates the consecutive number of bytes (defaults to 4k)
279that must contain only zeros for qemu-img to create a sparse image during
280conversion. If @var{sparse_size} is 0, the source will not be scanned for
281unallocated or zero sectors, and the destination image will always be
282fully allocated.
283
8063d0fe
KW
284You can use the @var{backing_file} option to force the output image to be
285created as a copy on write image of the specified base image; the
286@var{backing_file} should have the same content as the input's base image,
287however the path, image format, etc may differ.
288
b2e10493
AD
289If the @code{-n} option is specified, the target volume creation will be
290skipped. This is useful for formats such as @code{rbd} if the target
291volume has already been created with site specific options that cannot
292be supplied through qemu-img.
293
e5357560 294@item info [-f @var{fmt}] [--output=@var{ofmt}] [--backing-chain] @var{filename}
acd935ef
FB
295
296Give information about the disk image @var{filename}. Use it in
297particular to know the size reserved on disk which can be different
19d36792 298from the displayed size. If VM snapshots are stored in the disk image,
c054b3fd
BC
299they are displayed too. The command can output in the format @var{ofmt}
300which is either @code{human} or @code{json}.
d2c639d6 301
e5357560
KC
302If a disk image has a backing file chain, information about each disk image in
303the chain can be recursively enumerated by using the option @code{--backing-chain}.
304
305For instance, if you have an image chain like:
306
307@example
308base.qcow2 <- snap1.qcow2 <- snap2.qcow2
309@end example
310
311To enumerate information about each disk image in the above chain, starting from top to base, do:
312
313@example
314qemu-img info --backing-chain snap2.qcow2
315@end example
316
facd6e2b
PB
317@item map [-f @var{fmt}] [--output=@var{ofmt}] @var{filename}
318
319Dump the metadata of image @var{filename} and its backing file chain.
320In particular, this commands dumps the allocation state of every sector
321of @var{filename}, together with the topmost file that allocates it in
322the backing file chain.
323
324Two option formats are possible. The default format (@code{human})
325only dumps known-nonzero areas of the file. Known-zero parts of the
326file are omitted altogether, and likewise for parts that are not allocated
327throughout the chain. @command{qemu-img} output will identify a file
328from where the data can be read, and the offset in the file. Each line
329will include four fields, the first three of which are hexadecimal
330numbers. For example the first line of:
331@example
332Offset Length Mapped to File
3330 0x20000 0x50000 /tmp/overlay.qcow2
3340x100000 0x10000 0x95380000 /tmp/backing.qcow2
335@end example
336@noindent
337means that 0x20000 (131072) bytes starting at offset 0 in the image are
338available in /tmp/overlay.qcow2 (opened in @code{raw} format) starting
339at offset 0x50000 (327680). Data that is compressed, encrypted, or
340otherwise not available in raw format will cause an error if @code{human}
341format is in use. Note that file names can include newlines, thus it is
342not safe to parse this output format in scripts.
343
344The alternative format @code{json} will return an array of dictionaries
345in JSON format. It will include similar information in
346the @code{start}, @code{length}, @code{offset} fields;
347it will also include other more specific information:
348@itemize @minus
349@item
350whether the sectors contain actual data or not (boolean field @code{data};
351if false, the sectors are either unallocated or stored as optimized
352all-zero clusters);
353
354@item
355whether the data is known to read as zero (boolean field @code{zero});
356
357@item
358in order to make the output shorter, the target file is expressed as
359a @code{depth}; for example, a depth of 2 refers to the backing file
360of the backing file of @var{filename}.
361@end itemize
362
363In JSON format, the @code{offset} field is optional; it is absent in
364cases where @code{human} format would omit the entry or exit with an error.
365If @code{data} is false and the @code{offset} field is present, the
366corresponding sectors in the file are not yet in use, but they are
367preallocated.
368
369For more information, consult @file{include/block/block.h} in QEMU's
370source code.
371
d2c639d6
BS
372@item snapshot [-l | -a @var{snapshot} | -c @var{snapshot} | -d @var{snapshot} ] @var{filename}
373
374List, apply, create or delete snapshots in image @var{filename}.
ae6b0ed6 375
40055951 376@item rebase [-f @var{fmt}] [-t @var{cache}] [-T @var{src_cache}] [-p] [-u] -b @var{backing_file} [-F @var{backing_fmt}] @var{filename}
e6184690
KW
377
378Changes the backing file of an image. Only the formats @code{qcow2} and
379@code{qed} support changing the backing file.
380
381The backing file is changed to @var{backing_file} and (if the image format of
382@var{filename} supports this) the backing file format is changed to
a616673d
AB
383@var{backing_fmt}. If @var{backing_file} is specified as ``'' (the empty
384string), then the image is rebased onto no backing file (i.e. it will exist
385independently of any backing file).
e6184690 386
40055951 387@var{cache} specifies the cache mode to be used for @var{filename}, whereas
3ba6796d 388@var{src_cache} specifies the cache mode for reading backing files.
40055951 389
e6184690
KW
390There are two different modes in which @code{rebase} can operate:
391@table @option
392@item Safe mode
393This is the default mode and performs a real rebase operation. The new backing
394file may differ from the old one and qemu-img rebase will take care of keeping
395the guest-visible content of @var{filename} unchanged.
396
397In order to achieve this, any clusters that differ between @var{backing_file}
398and the old backing file of @var{filename} are merged into @var{filename}
399before actually changing the backing file.
400
401Note that the safe mode is an expensive operation, comparable to converting
402an image. It only works if the old backing file still exists.
403
404@item Unsafe mode
405qemu-img uses the unsafe mode if @code{-u} is specified. In this mode, only the
406backing file name and format of @var{filename} is changed without any checks
407on the file contents. The user must take care of specifying the correct new
408backing file, or the guest-visible content of the image will be corrupted.
409
410This mode is useful for renaming or moving the backing file to somewhere else.
411It can be used without an accessible old backing file, i.e. you can use it to
412fix an image whose backing file has already been moved/renamed.
413@end table
414
9fda6ab1
RJ
415You can use @code{rebase} to perform a ``diff'' operation on two
416disk images. This can be useful when you have copied or cloned
417a guest, and you want to get back to a thin image on top of a
418template or base image.
419
420Say that @code{base.img} has been cloned as @code{modified.img} by
421copying it, and that the @code{modified.img} guest has run so there
422are now some changes compared to @code{base.img}. To construct a thin
423image called @code{diff.qcow2} that contains just the differences, do:
424
425@example
426qemu-img create -f qcow2 -b modified.img diff.qcow2
427qemu-img rebase -b base.img diff.qcow2
428@end example
429
430At this point, @code{modified.img} can be discarded, since
431@code{base.img + diff.qcow2} contains the same information.
432
ae6b0ed6
SH
433@item resize @var{filename} [+ | -]@var{size}
434
435Change the disk image as if it had been created with @var{size}.
436
437Before using this command to shrink a disk image, you MUST use file system and
438partitioning tools inside the VM to reduce allocated file systems and partition
439sizes accordingly. Failure to do so will result in data loss!
440
441After using this command to grow a disk image, you must use file system and
442partitioning tools inside the VM to actually begin using the new space on the
443device.
6f176b48 444
76a3a34d 445@item amend [-p] [-f @var{fmt}] [-t @var{cache}] -o @var{options} @var{filename}
6f176b48
HR
446
447Amends the image format specific @var{options} for the image file
448@var{filename}. Not all file formats support this operation.
acd935ef 449@end table
d3067b02 450@c man end
acd935ef 451
d3067b02
KW
452@ignore
453@c man begin NOTES
f932c040
KW
454Supported image file formats:
455
456@table @option
457@item raw
458
459Raw disk image format (default). This format has the advantage of
460being simple and easily exportable to all other emulators. If your
461file system supports @emph{holes} (for example in ext2 or ext3 on
462Linux or NTFS on Windows), then only the written sectors will reserve
463space. Use @code{qemu-img info} to know the real size used by the
464image or @code{ls -ls} on Unix/Linux.
465
06247428
HT
466Supported options:
467@table @code
468@item preallocation
469Preallocation mode (allowed values: @code{off}, @code{falloc}, @code{full}).
470@code{falloc} mode preallocates space for image by calling posix_fallocate().
471@code{full} mode preallocates space for image by writing zeros to underlying
472storage.
473@end table
474
f932c040
KW
475@item qcow2
476QEMU image format, the most versatile format. Use it to have smaller
477images (useful if your filesystem does not supports holes, for example
478on Windows), optional AES encryption, zlib based compression and
479support of multiple VM snapshots.
8063d0fe 480
3e032364
KW
481Supported options:
482@table @code
d3067b02 483@item compat
7fa9e1f9
SH
484Determines the qcow2 version to use. @code{compat=0.10} uses the
485traditional image format that can be read by any QEMU since 0.10.
d3067b02 486@code{compat=1.1} enables image format extensions that only QEMU 1.1 and
7fa9e1f9
SH
487newer understand (this is the default). Amongst others, this includes zero
488clusters, which allow efficient copy-on-read for sparse images.
d3067b02 489
3e032364
KW
490@item backing_file
491File name of a base image (see @option{create} subcommand)
492@item backing_fmt
493Image format of the base image
494@item encryption
136cd19d 495If this option is set to @code{on}, the image is encrypted with 128-bit AES-CBC.
3e032364 496
136cd19d
DB
497The use of encryption in qcow and qcow2 images is considered to be flawed by
498modern cryptography standards, suffering from a number of design problems:
499
500@itemize @minus
501@item The AES-CBC cipher is used with predictable initialization vectors based
502on the sector number. This makes it vulnerable to chosen plaintext attacks
503which can reveal the existence of encrypted data.
504@item The user passphrase is directly used as the encryption key. A poorly
505chosen or short passphrase will compromise the security of the encryption.
506@item In the event of the passphrase being compromised there is no way to
507change the passphrase to protect data in any qcow images. The files must
508be cloned, using a different encryption passphrase in the new file. The
509original file must then be securely erased using a program like shred,
510though even this is ineffective with many modern storage technologies.
511@end itemize
512
513Use of qcow / qcow2 encryption is thus strongly discouraged. Users are
514recommended to use an alternative encryption technology such as the
515Linux dm-crypt / LUKS system.
3e032364
KW
516
517@item cluster_size
518Changes the qcow2 cluster size (must be between 512 and 2M). Smaller cluster
519sizes can improve the image file size whereas larger cluster sizes generally
520provide better performance.
521
522@item preallocation
0e4271b7
HT
523Preallocation mode (allowed values: @code{off}, @code{metadata}, @code{falloc},
524@code{full}). An image with preallocated metadata is initially larger but can
525improve performance when the image needs to grow. @code{falloc} and @code{full}
526preallocations are like the same options of @code{raw} format, but sets up
527metadata also.
3e032364 528
d3067b02
KW
529@item lazy_refcounts
530If this option is set to @code{on}, reference count updates are postponed with
531the goal of avoiding metadata I/O and improving performance. This is
532particularly interesting with @option{cache=writethrough} which doesn't batch
533metadata updates. The tradeoff is that after a host crash, the reference count
534tables must be rebuilt, i.e. on the next open an (automatic) @code{qemu-img
535check -r all} is required, which may take some time.
3e032364 536
d3067b02 537This option can only be enabled if @code{compat=1.1} is specified.
f085800e 538
4ab15590 539@item nocow
bc3a7f90 540If this option is set to @code{on}, it will turn off COW of the file. It's only
4ab15590
CL
541valid on btrfs, no effect on other file systems.
542
543Btrfs has low performance when hosting a VM image file, even more when the guest
544on the VM also using btrfs as file system. Turning off COW is a way to mitigate
545this bad performance. Generally there are two ways to turn off COW on btrfs:
546a) Disable it by mounting with nodatacow, then all newly created files will be
547NOCOW. b) For an empty file, add the NOCOW file attribute. That's what this option
548does.
549
550Note: this option is only valid to new or empty files. If there is an existing
551file which is COW and has data blocks already, it couldn't be changed to NOCOW
552by setting @code{nocow=on}. One can issue @code{lsattr filename} to check if
bc3a7f90 553the NOCOW flag is set or not (Capital 'C' is NOCOW flag).
4ab15590 554
f085800e 555@end table
3e032364 556
d3067b02
KW
557@item Other
558QEMU also supports various other image file formats for compatibility with
8282db1b
JC
559older QEMU versions or other hypervisors, including VMDK, VDI, VHD (vpc), VHDX,
560qcow1 and QED. For a full list of supported formats see @code{qemu-img --help}.
d3067b02
KW
561For a more detailed description of these formats, see the QEMU Emulation User
562Documentation.
3e032364 563
d3067b02
KW
564The main purpose of the block drivers for these formats is image conversion.
565For running VMs, it is recommended to convert the disk images to either raw or
566qcow2 in order to achieve good performance.
f932c040
KW
567@end table
568
569
acd935ef
FB
570@c man end
571
acd935ef
FB
572@setfilename qemu-img
573@settitle QEMU disk image utility
574
575@c man begin SEEALSO
576The HTML documentation of QEMU for more precise information and Linux
577user mode emulator invocation.
578@c man end
579
580@c man begin AUTHOR
581Fabrice Bellard
582@c man end
583
584@end ignore