2013-09-03 12:09:55 +04:00
|
|
|
QA output created by 061
|
|
|
|
|
|
|
|
=== Testing version downgrade with zero expansion ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
2013-09-03 12:09:55 +04:00
|
|
|
wrote 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
magic 0x514649fb
|
|
|
|
version 3
|
|
|
|
backing_file_offset 0x0
|
|
|
|
backing_file_size 0x0
|
|
|
|
cluster_bits 16
|
|
|
|
size 67108864
|
|
|
|
crypt_method 0
|
|
|
|
l1_size 1
|
|
|
|
l1_table_offset 0x30000
|
|
|
|
refcount_table_offset 0x10000
|
|
|
|
refcount_table_clusters 1
|
|
|
|
nb_snapshots 0
|
|
|
|
snapshot_offset 0x0
|
2019-11-07 19:36:49 +03:00
|
|
|
incompatible_features []
|
|
|
|
compatible_features [0]
|
|
|
|
autoclear_features []
|
2013-09-03 12:09:55 +04:00
|
|
|
refcount_order 4
|
qcow2: introduce compression type feature
The patch adds some preparation parts for incompatible compression type
feature to qcow2 allowing the use different compression methods for
image clusters (de)compressing.
It is implied that the compression type is set on the image creation and
can be changed only later by image conversion, thus compression type
defines the only compression algorithm used for the image, and thus,
for all image clusters.
The goal of the feature is to add support of other compression methods
to qcow2. For example, ZSTD which is more effective on compression than ZLIB.
The default compression is ZLIB. Images created with ZLIB compression type
are backward compatible with older qemu versions.
Adding of the compression type breaks a number of tests because now the
compression type is reported on image creation and there are some changes
in the qcow2 header in size and offsets.
The tests are fixed in the following ways:
* filter out compression_type for many tests
* fix header size, feature table size and backing file offset
affected tests: 031, 036, 061, 080
header_size +=8: 1 byte compression type
7 bytes padding
feature_table += 48: incompatible feature compression type
backing_file_offset += 56 (8 + 48 -> header_change + feature_table_change)
* add "compression type" for test output matching when it isn't filtered
affected tests: 049, 060, 061, 065, 082, 085, 144, 182, 185, 198, 206,
242, 255, 274, 280
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
QAPI part:
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200507082521.29210-2-dplotnikov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2020-05-07 11:25:18 +03:00
|
|
|
header_length 112
|
2013-09-03 12:09:55 +04:00
|
|
|
|
2015-12-02 20:34:39 +03:00
|
|
|
Header extension:
|
2020-06-06 11:18:05 +03:00
|
|
|
magic 0x6803f857 (Feature table)
|
2020-07-10 19:13:13 +03:00
|
|
|
length 384
|
2015-12-02 20:34:39 +03:00
|
|
|
data <binary>
|
|
|
|
|
2013-09-03 12:09:55 +04:00
|
|
|
magic 0x514649fb
|
|
|
|
version 2
|
|
|
|
backing_file_offset 0x0
|
|
|
|
backing_file_size 0x0
|
|
|
|
cluster_bits 16
|
|
|
|
size 67108864
|
|
|
|
crypt_method 0
|
|
|
|
l1_size 1
|
|
|
|
l1_table_offset 0x30000
|
|
|
|
refcount_table_offset 0x10000
|
|
|
|
refcount_table_clusters 1
|
|
|
|
nb_snapshots 0
|
|
|
|
snapshot_offset 0x0
|
2019-11-07 19:36:49 +03:00
|
|
|
incompatible_features []
|
|
|
|
compatible_features []
|
|
|
|
autoclear_features []
|
2013-09-03 12:09:55 +04:00
|
|
|
refcount_order 4
|
|
|
|
header_length 72
|
|
|
|
|
|
|
|
read 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
|
2018-02-05 17:33:38 +03:00
|
|
|
=== Testing version downgrade with zero expansion and 4K cache entries ===
|
|
|
|
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
|
|
|
wrote 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
wrote 131072/131072 bytes at offset 33554432
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
128 KiB (0x20000) bytes allocated at offset 0 bytes (0x0)
|
|
|
|
31.875 MiB (0x1fe0000) bytes not allocated at offset 128 KiB (0x20000)
|
|
|
|
128 KiB (0x20000) bytes allocated at offset 32 MiB (0x2000000)
|
|
|
|
31.875 MiB (0x1fe0000) bytes not allocated at offset 32.125 MiB (0x2020000)
|
|
|
|
magic 0x514649fb
|
|
|
|
version 3
|
|
|
|
backing_file_offset 0x0
|
|
|
|
backing_file_size 0x0
|
|
|
|
cluster_bits 16
|
|
|
|
size 67108864
|
|
|
|
crypt_method 0
|
|
|
|
l1_size 1
|
|
|
|
l1_table_offset 0x30000
|
|
|
|
refcount_table_offset 0x10000
|
|
|
|
refcount_table_clusters 1
|
|
|
|
nb_snapshots 0
|
|
|
|
snapshot_offset 0x0
|
2019-11-07 19:36:49 +03:00
|
|
|
incompatible_features []
|
|
|
|
compatible_features [0]
|
|
|
|
autoclear_features []
|
2018-02-05 17:33:38 +03:00
|
|
|
refcount_order 4
|
qcow2: introduce compression type feature
The patch adds some preparation parts for incompatible compression type
feature to qcow2 allowing the use different compression methods for
image clusters (de)compressing.
It is implied that the compression type is set on the image creation and
can be changed only later by image conversion, thus compression type
defines the only compression algorithm used for the image, and thus,
for all image clusters.
The goal of the feature is to add support of other compression methods
to qcow2. For example, ZSTD which is more effective on compression than ZLIB.
The default compression is ZLIB. Images created with ZLIB compression type
are backward compatible with older qemu versions.
Adding of the compression type breaks a number of tests because now the
compression type is reported on image creation and there are some changes
in the qcow2 header in size and offsets.
The tests are fixed in the following ways:
* filter out compression_type for many tests
* fix header size, feature table size and backing file offset
affected tests: 031, 036, 061, 080
header_size +=8: 1 byte compression type
7 bytes padding
feature_table += 48: incompatible feature compression type
backing_file_offset += 56 (8 + 48 -> header_change + feature_table_change)
* add "compression type" for test output matching when it isn't filtered
affected tests: 049, 060, 061, 065, 082, 085, 144, 182, 185, 198, 206,
242, 255, 274, 280
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
QAPI part:
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200507082521.29210-2-dplotnikov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2020-05-07 11:25:18 +03:00
|
|
|
header_length 112
|
2018-02-05 17:33:38 +03:00
|
|
|
|
|
|
|
Header extension:
|
2020-06-06 11:18:05 +03:00
|
|
|
magic 0x6803f857 (Feature table)
|
2020-07-10 19:13:13 +03:00
|
|
|
length 384
|
2018-02-05 17:33:38 +03:00
|
|
|
data <binary>
|
|
|
|
|
|
|
|
magic 0x514649fb
|
|
|
|
version 2
|
|
|
|
backing_file_offset 0x0
|
|
|
|
backing_file_size 0x0
|
|
|
|
cluster_bits 16
|
|
|
|
size 67108864
|
|
|
|
crypt_method 0
|
|
|
|
l1_size 1
|
|
|
|
l1_table_offset 0x30000
|
|
|
|
refcount_table_offset 0x10000
|
|
|
|
refcount_table_clusters 1
|
|
|
|
nb_snapshots 0
|
|
|
|
snapshot_offset 0x0
|
2019-11-07 19:36:49 +03:00
|
|
|
incompatible_features []
|
|
|
|
compatible_features []
|
|
|
|
autoclear_features []
|
2018-02-05 17:33:38 +03:00
|
|
|
refcount_order 4
|
|
|
|
header_length 72
|
|
|
|
|
|
|
|
read 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
read 131072/131072 bytes at offset 33554432
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
64 MiB (0x4000000) bytes not allocated at offset 0 bytes (0x0)
|
|
|
|
No errors were found on the image.
|
|
|
|
|
2013-09-03 12:09:55 +04:00
|
|
|
=== Testing dirty version downgrade ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
2013-09-03 12:09:55 +04:00
|
|
|
wrote 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
2019-09-04 12:11:19 +03:00
|
|
|
./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}" _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
|
2013-09-03 12:09:55 +04:00
|
|
|
magic 0x514649fb
|
|
|
|
version 3
|
|
|
|
backing_file_offset 0x0
|
|
|
|
backing_file_size 0x0
|
|
|
|
cluster_bits 16
|
|
|
|
size 67108864
|
|
|
|
crypt_method 0
|
|
|
|
l1_size 1
|
|
|
|
l1_table_offset 0x30000
|
|
|
|
refcount_table_offset 0x10000
|
|
|
|
refcount_table_clusters 1
|
|
|
|
nb_snapshots 0
|
|
|
|
snapshot_offset 0x0
|
2019-11-07 19:36:49 +03:00
|
|
|
incompatible_features [0]
|
|
|
|
compatible_features [0]
|
|
|
|
autoclear_features []
|
2013-09-03 12:09:55 +04:00
|
|
|
refcount_order 4
|
qcow2: introduce compression type feature
The patch adds some preparation parts for incompatible compression type
feature to qcow2 allowing the use different compression methods for
image clusters (de)compressing.
It is implied that the compression type is set on the image creation and
can be changed only later by image conversion, thus compression type
defines the only compression algorithm used for the image, and thus,
for all image clusters.
The goal of the feature is to add support of other compression methods
to qcow2. For example, ZSTD which is more effective on compression than ZLIB.
The default compression is ZLIB. Images created with ZLIB compression type
are backward compatible with older qemu versions.
Adding of the compression type breaks a number of tests because now the
compression type is reported on image creation and there are some changes
in the qcow2 header in size and offsets.
The tests are fixed in the following ways:
* filter out compression_type for many tests
* fix header size, feature table size and backing file offset
affected tests: 031, 036, 061, 080
header_size +=8: 1 byte compression type
7 bytes padding
feature_table += 48: incompatible feature compression type
backing_file_offset += 56 (8 + 48 -> header_change + feature_table_change)
* add "compression type" for test output matching when it isn't filtered
affected tests: 049, 060, 061, 065, 082, 085, 144, 182, 185, 198, 206,
242, 255, 274, 280
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
QAPI part:
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200507082521.29210-2-dplotnikov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2020-05-07 11:25:18 +03:00
|
|
|
header_length 112
|
2013-09-03 12:09:55 +04:00
|
|
|
|
2015-12-02 20:34:39 +03:00
|
|
|
Header extension:
|
2020-06-06 11:18:05 +03:00
|
|
|
magic 0x6803f857 (Feature table)
|
2020-07-10 19:13:13 +03:00
|
|
|
length 384
|
2015-12-02 20:34:39 +03:00
|
|
|
data <binary>
|
|
|
|
|
2014-10-22 16:09:42 +04:00
|
|
|
ERROR cluster 5 refcount=0 reference=1
|
|
|
|
ERROR cluster 6 refcount=0 reference=1
|
|
|
|
Rebuilding refcount structure
|
|
|
|
Repairing cluster 1 refcount=1 reference=0
|
|
|
|
Repairing cluster 2 refcount=1 reference=0
|
2013-09-03 12:09:55 +04:00
|
|
|
magic 0x514649fb
|
|
|
|
version 2
|
|
|
|
backing_file_offset 0x0
|
|
|
|
backing_file_size 0x0
|
|
|
|
cluster_bits 16
|
|
|
|
size 67108864
|
|
|
|
crypt_method 0
|
|
|
|
l1_size 1
|
|
|
|
l1_table_offset 0x30000
|
2014-10-22 16:09:42 +04:00
|
|
|
refcount_table_offset 0x80000
|
2013-09-03 12:09:55 +04:00
|
|
|
refcount_table_clusters 1
|
|
|
|
nb_snapshots 0
|
|
|
|
snapshot_offset 0x0
|
2019-11-07 19:36:49 +03:00
|
|
|
incompatible_features []
|
|
|
|
compatible_features []
|
|
|
|
autoclear_features []
|
2013-09-03 12:09:55 +04:00
|
|
|
refcount_order 4
|
|
|
|
header_length 72
|
|
|
|
|
|
|
|
read 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
|
|
|
|
=== Testing version downgrade with unknown compat/autoclear flags ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
2013-09-03 12:09:55 +04:00
|
|
|
magic 0x514649fb
|
|
|
|
version 3
|
|
|
|
backing_file_offset 0x0
|
|
|
|
backing_file_size 0x0
|
|
|
|
cluster_bits 16
|
|
|
|
size 67108864
|
|
|
|
crypt_method 0
|
|
|
|
l1_size 1
|
|
|
|
l1_table_offset 0x30000
|
|
|
|
refcount_table_offset 0x10000
|
|
|
|
refcount_table_clusters 1
|
|
|
|
nb_snapshots 0
|
|
|
|
snapshot_offset 0x0
|
2019-11-07 19:36:49 +03:00
|
|
|
incompatible_features []
|
|
|
|
compatible_features [42]
|
|
|
|
autoclear_features [42]
|
2013-09-03 12:09:55 +04:00
|
|
|
refcount_order 4
|
qcow2: introduce compression type feature
The patch adds some preparation parts for incompatible compression type
feature to qcow2 allowing the use different compression methods for
image clusters (de)compressing.
It is implied that the compression type is set on the image creation and
can be changed only later by image conversion, thus compression type
defines the only compression algorithm used for the image, and thus,
for all image clusters.
The goal of the feature is to add support of other compression methods
to qcow2. For example, ZSTD which is more effective on compression than ZLIB.
The default compression is ZLIB. Images created with ZLIB compression type
are backward compatible with older qemu versions.
Adding of the compression type breaks a number of tests because now the
compression type is reported on image creation and there are some changes
in the qcow2 header in size and offsets.
The tests are fixed in the following ways:
* filter out compression_type for many tests
* fix header size, feature table size and backing file offset
affected tests: 031, 036, 061, 080
header_size +=8: 1 byte compression type
7 bytes padding
feature_table += 48: incompatible feature compression type
backing_file_offset += 56 (8 + 48 -> header_change + feature_table_change)
* add "compression type" for test output matching when it isn't filtered
affected tests: 049, 060, 061, 065, 082, 085, 144, 182, 185, 198, 206,
242, 255, 274, 280
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
QAPI part:
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200507082521.29210-2-dplotnikov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2020-05-07 11:25:18 +03:00
|
|
|
header_length 112
|
2013-09-03 12:09:55 +04:00
|
|
|
|
2015-12-02 20:34:39 +03:00
|
|
|
Header extension:
|
2020-06-06 11:18:05 +03:00
|
|
|
magic 0x6803f857 (Feature table)
|
2020-07-10 19:13:13 +03:00
|
|
|
length 384
|
2015-12-02 20:34:39 +03:00
|
|
|
data <binary>
|
|
|
|
|
2013-09-03 12:09:55 +04:00
|
|
|
magic 0x514649fb
|
|
|
|
version 2
|
|
|
|
backing_file_offset 0x0
|
|
|
|
backing_file_size 0x0
|
|
|
|
cluster_bits 16
|
|
|
|
size 67108864
|
|
|
|
crypt_method 0
|
|
|
|
l1_size 1
|
|
|
|
l1_table_offset 0x30000
|
|
|
|
refcount_table_offset 0x10000
|
|
|
|
refcount_table_clusters 1
|
|
|
|
nb_snapshots 0
|
|
|
|
snapshot_offset 0x0
|
2019-11-07 19:36:49 +03:00
|
|
|
incompatible_features []
|
|
|
|
compatible_features []
|
|
|
|
autoclear_features []
|
2013-09-03 12:09:55 +04:00
|
|
|
refcount_order 4
|
|
|
|
header_length 72
|
|
|
|
|
|
|
|
No errors were found on the image.
|
|
|
|
|
|
|
|
=== Testing version upgrade and resize ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
2013-09-03 12:09:55 +04:00
|
|
|
wrote 65536/65536 bytes at offset 44040192
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
magic 0x514649fb
|
|
|
|
version 2
|
|
|
|
backing_file_offset 0x0
|
|
|
|
backing_file_size 0x0
|
|
|
|
cluster_bits 16
|
|
|
|
size 67108864
|
|
|
|
crypt_method 0
|
|
|
|
l1_size 1
|
|
|
|
l1_table_offset 0x30000
|
|
|
|
refcount_table_offset 0x10000
|
|
|
|
refcount_table_clusters 1
|
|
|
|
nb_snapshots 0
|
|
|
|
snapshot_offset 0x0
|
2019-11-07 19:36:49 +03:00
|
|
|
incompatible_features []
|
|
|
|
compatible_features []
|
|
|
|
autoclear_features []
|
2013-09-03 12:09:55 +04:00
|
|
|
refcount_order 4
|
|
|
|
header_length 72
|
|
|
|
|
|
|
|
magic 0x514649fb
|
|
|
|
version 3
|
|
|
|
backing_file_offset 0x0
|
|
|
|
backing_file_size 0x0
|
|
|
|
cluster_bits 16
|
|
|
|
size 134217728
|
|
|
|
crypt_method 0
|
|
|
|
l1_size 1
|
|
|
|
l1_table_offset 0x30000
|
|
|
|
refcount_table_offset 0x10000
|
|
|
|
refcount_table_clusters 1
|
|
|
|
nb_snapshots 0
|
|
|
|
snapshot_offset 0x0
|
2019-11-07 19:36:49 +03:00
|
|
|
incompatible_features []
|
|
|
|
compatible_features [0]
|
|
|
|
autoclear_features []
|
2013-09-03 12:09:55 +04:00
|
|
|
refcount_order 4
|
qcow2: introduce compression type feature
The patch adds some preparation parts for incompatible compression type
feature to qcow2 allowing the use different compression methods for
image clusters (de)compressing.
It is implied that the compression type is set on the image creation and
can be changed only later by image conversion, thus compression type
defines the only compression algorithm used for the image, and thus,
for all image clusters.
The goal of the feature is to add support of other compression methods
to qcow2. For example, ZSTD which is more effective on compression than ZLIB.
The default compression is ZLIB. Images created with ZLIB compression type
are backward compatible with older qemu versions.
Adding of the compression type breaks a number of tests because now the
compression type is reported on image creation and there are some changes
in the qcow2 header in size and offsets.
The tests are fixed in the following ways:
* filter out compression_type for many tests
* fix header size, feature table size and backing file offset
affected tests: 031, 036, 061, 080
header_size +=8: 1 byte compression type
7 bytes padding
feature_table += 48: incompatible feature compression type
backing_file_offset += 56 (8 + 48 -> header_change + feature_table_change)
* add "compression type" for test output matching when it isn't filtered
affected tests: 049, 060, 061, 065, 082, 085, 144, 182, 185, 198, 206,
242, 255, 274, 280
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
QAPI part:
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200507082521.29210-2-dplotnikov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2020-05-07 11:25:18 +03:00
|
|
|
header_length 112
|
2013-09-03 12:09:55 +04:00
|
|
|
|
|
|
|
Header extension:
|
2020-06-06 11:18:05 +03:00
|
|
|
magic 0x6803f857 (Feature table)
|
2020-07-10 19:13:13 +03:00
|
|
|
length 384
|
2013-09-03 12:09:55 +04:00
|
|
|
data <binary>
|
|
|
|
|
|
|
|
read 65536/65536 bytes at offset 44040192
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
|
qcow2: Allow resize of images with internal snapshots
We originally refused to allow resize of images with internal
snapshots because the v2 image format did not require the tracking of
snapshot size, making it impossible to safely revert to a snapshot
with a different size than the current view of the image. But the
snapshot size tracking was rectified in v3, and our recent fixes to
qemu-img amend (see 0a85af35) guarantee that we always have a valid
snapshot size. Thus, we no longer need to artificially limit image
resizes, but it does become one more thing that would prevent a
downgrade back to v2. And now that we support different-sized
snapshots, it's also easy to fix reverting to a snapshot to apply the
new size.
Upgrade iotest 61 to cover this (we previously had NO coverage of
refusal to resize while snapshots exist). Note that the amend process
can fail but still have effects: in particular, since we break things
into upgrade, resize, downgrade, a failure during resize does not roll
back changes made during upgrade, nor does failure in downgrade roll
back a resize. But this situation is pre-existing even without this
patch; and without journaling, the best we could do is minimize the
chance of partial failure by collecting all changes prior to doing any
writes - which adds a lot of complexity but could still fail with EIO.
On the other hand, we are careful that even if we have partial
modification but then fail, the image is left viable (that is, we are
careful to sequence things so that after each successful cluster
write, there may be transient leaked clusters but no corrupt
metadata). And complicating the code to make it more transaction-like
is not worth the effort: a user can always request multiple 'qemu-img
amend' changing one thing each, if they need finer-grained control
over detecting the first failure than what they get by letting qemu
decide how to sequence multiple changes.
Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Message-Id: <20200428192648.749066-3-eblake@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2020-04-28 22:26:47 +03:00
|
|
|
=== Testing resize with snapshots ===
|
|
|
|
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=33554432
|
|
|
|
wrote 65536/65536 bytes at offset 25165824
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
qemu-img: Can't resize a v2 image which has snapshots
|
|
|
|
version 2
|
|
|
|
size 33554432
|
|
|
|
nb_snapshots 1
|
|
|
|
version 3
|
|
|
|
size 134217728
|
|
|
|
nb_snapshots 1
|
|
|
|
Image resized.
|
|
|
|
version 3
|
|
|
|
size 67108864
|
|
|
|
nb_snapshots 2
|
|
|
|
qemu-img: Internal snapshots prevent downgrade of image
|
|
|
|
version 3
|
|
|
|
size 33554432
|
|
|
|
nb_snapshots 2
|
|
|
|
version 3
|
|
|
|
size 134217728
|
|
|
|
nb_snapshots 2
|
|
|
|
version 2
|
|
|
|
size 33554432
|
|
|
|
nb_snapshots 1
|
|
|
|
No errors were found on the image.
|
|
|
|
|
2013-09-03 12:09:55 +04:00
|
|
|
=== Testing dirty lazy_refcounts=off ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
2013-09-03 12:09:55 +04:00
|
|
|
wrote 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
2019-09-04 12:11:19 +03:00
|
|
|
./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}" _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
|
2013-09-03 12:09:55 +04:00
|
|
|
magic 0x514649fb
|
|
|
|
version 3
|
|
|
|
backing_file_offset 0x0
|
|
|
|
backing_file_size 0x0
|
|
|
|
cluster_bits 16
|
|
|
|
size 67108864
|
|
|
|
crypt_method 0
|
|
|
|
l1_size 1
|
|
|
|
l1_table_offset 0x30000
|
|
|
|
refcount_table_offset 0x10000
|
|
|
|
refcount_table_clusters 1
|
|
|
|
nb_snapshots 0
|
|
|
|
snapshot_offset 0x0
|
2019-11-07 19:36:49 +03:00
|
|
|
incompatible_features [0]
|
|
|
|
compatible_features [0]
|
|
|
|
autoclear_features []
|
2013-09-03 12:09:55 +04:00
|
|
|
refcount_order 4
|
qcow2: introduce compression type feature
The patch adds some preparation parts for incompatible compression type
feature to qcow2 allowing the use different compression methods for
image clusters (de)compressing.
It is implied that the compression type is set on the image creation and
can be changed only later by image conversion, thus compression type
defines the only compression algorithm used for the image, and thus,
for all image clusters.
The goal of the feature is to add support of other compression methods
to qcow2. For example, ZSTD which is more effective on compression than ZLIB.
The default compression is ZLIB. Images created with ZLIB compression type
are backward compatible with older qemu versions.
Adding of the compression type breaks a number of tests because now the
compression type is reported on image creation and there are some changes
in the qcow2 header in size and offsets.
The tests are fixed in the following ways:
* filter out compression_type for many tests
* fix header size, feature table size and backing file offset
affected tests: 031, 036, 061, 080
header_size +=8: 1 byte compression type
7 bytes padding
feature_table += 48: incompatible feature compression type
backing_file_offset += 56 (8 + 48 -> header_change + feature_table_change)
* add "compression type" for test output matching when it isn't filtered
affected tests: 049, 060, 061, 065, 082, 085, 144, 182, 185, 198, 206,
242, 255, 274, 280
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
QAPI part:
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200507082521.29210-2-dplotnikov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2020-05-07 11:25:18 +03:00
|
|
|
header_length 112
|
2013-09-03 12:09:55 +04:00
|
|
|
|
2015-12-02 20:34:39 +03:00
|
|
|
Header extension:
|
2020-06-06 11:18:05 +03:00
|
|
|
magic 0x6803f857 (Feature table)
|
2020-07-10 19:13:13 +03:00
|
|
|
length 384
|
2015-12-02 20:34:39 +03:00
|
|
|
data <binary>
|
|
|
|
|
2014-10-22 16:09:42 +04:00
|
|
|
ERROR cluster 5 refcount=0 reference=1
|
|
|
|
ERROR cluster 6 refcount=0 reference=1
|
|
|
|
Rebuilding refcount structure
|
|
|
|
Repairing cluster 1 refcount=1 reference=0
|
|
|
|
Repairing cluster 2 refcount=1 reference=0
|
2013-09-03 12:09:55 +04:00
|
|
|
magic 0x514649fb
|
|
|
|
version 3
|
|
|
|
backing_file_offset 0x0
|
|
|
|
backing_file_size 0x0
|
|
|
|
cluster_bits 16
|
|
|
|
size 67108864
|
|
|
|
crypt_method 0
|
|
|
|
l1_size 1
|
|
|
|
l1_table_offset 0x30000
|
2014-10-22 16:09:42 +04:00
|
|
|
refcount_table_offset 0x80000
|
2013-09-03 12:09:55 +04:00
|
|
|
refcount_table_clusters 1
|
|
|
|
nb_snapshots 0
|
|
|
|
snapshot_offset 0x0
|
2019-11-07 19:36:49 +03:00
|
|
|
incompatible_features []
|
|
|
|
compatible_features []
|
|
|
|
autoclear_features []
|
2013-09-03 12:09:55 +04:00
|
|
|
refcount_order 4
|
qcow2: introduce compression type feature
The patch adds some preparation parts for incompatible compression type
feature to qcow2 allowing the use different compression methods for
image clusters (de)compressing.
It is implied that the compression type is set on the image creation and
can be changed only later by image conversion, thus compression type
defines the only compression algorithm used for the image, and thus,
for all image clusters.
The goal of the feature is to add support of other compression methods
to qcow2. For example, ZSTD which is more effective on compression than ZLIB.
The default compression is ZLIB. Images created with ZLIB compression type
are backward compatible with older qemu versions.
Adding of the compression type breaks a number of tests because now the
compression type is reported on image creation and there are some changes
in the qcow2 header in size and offsets.
The tests are fixed in the following ways:
* filter out compression_type for many tests
* fix header size, feature table size and backing file offset
affected tests: 031, 036, 061, 080
header_size +=8: 1 byte compression type
7 bytes padding
feature_table += 48: incompatible feature compression type
backing_file_offset += 56 (8 + 48 -> header_change + feature_table_change)
* add "compression type" for test output matching when it isn't filtered
affected tests: 049, 060, 061, 065, 082, 085, 144, 182, 185, 198, 206,
242, 255, 274, 280
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
QAPI part:
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200507082521.29210-2-dplotnikov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2020-05-07 11:25:18 +03:00
|
|
|
header_length 112
|
2013-09-03 12:09:55 +04:00
|
|
|
|
|
|
|
Header extension:
|
2020-06-06 11:18:05 +03:00
|
|
|
magic 0x6803f857 (Feature table)
|
2020-07-10 19:13:13 +03:00
|
|
|
length 384
|
2013-09-03 12:09:55 +04:00
|
|
|
data <binary>
|
|
|
|
|
|
|
|
read 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
|
|
|
|
=== Testing backing file ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
|
2013-09-03 12:09:55 +04:00
|
|
|
wrote 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
read 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
qcow2: Deprecate use of qemu-img amend to change backing file
The use of 'qemu-img amend' to change qcow2 backing files is not
tested very well. In particular, our implementation has a bug where
if a new backing file is provided without a format, then the prior
format is blindly reused, even if this results in data corruption, but
this is not caught by iotests.
There are also situations where amending other options needs access to
the original backing file (for example, on a downgrade to a v2 image,
knowing whether a v3 zero cluster must be allocated or may be left
unallocated depends on knowing whether the backing file already reads
as zero), but the command line does not have a nice way to tell us
both the backing file to use for opening the image as well as the
backing file to install after the operation is complete.
Even if we do allow changing the backing file, it is redundant with
the existing ability to change backing files via 'qemu-img rebase -u'.
It is time to deprecate this support (leaving the existing behavior
intact, even if it is buggy), and at a point in the future, require
the use of only 'qemu-img rebase' for adjusting backing chain
relations, saving 'qemu-img amend' for changes unrelated to the
backing chain.
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20200706203954.341758-8-eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2020-07-06 23:39:51 +03:00
|
|
|
qemu-img: warning: Deprecated use of amend to alter the backing file; use qemu-img rebase instead
|
2013-09-03 12:09:55 +04:00
|
|
|
read 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
|
|
|
|
=== Testing invalid configurations ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
2015-07-27 18:51:33 +03:00
|
|
|
qemu-img: Lazy refcounts only supported with compatibility level 1.1 and above (use compat=1.1 or greater)
|
|
|
|
qemu-img: Lazy refcounts only supported with compatibility level 1.1 and above (use compat=1.1 or greater)
|
|
|
|
qemu-img: Unknown compatibility level 0.42
|
2014-06-05 13:20:51 +04:00
|
|
|
qemu-img: Invalid parameter 'foo'
|
2020-06-25 15:55:40 +03:00
|
|
|
qemu-img: Invalid parameter 'cluster_size'
|
|
|
|
This option is only supported for image creation
|
|
|
|
qemu-img: Invalid parameter 'encryption'
|
|
|
|
This option is only supported for image creation
|
|
|
|
qemu-img: Invalid parameter 'preallocation'
|
|
|
|
This option is only supported for image creation
|
2013-09-03 12:09:55 +04:00
|
|
|
|
|
|
|
=== Testing correct handling of unset value ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
2013-09-03 12:09:55 +04:00
|
|
|
Should work:
|
|
|
|
Should not work:
|
2020-06-25 15:55:40 +03:00
|
|
|
qemu-img: Invalid parameter 'cluster_size'
|
|
|
|
This option is only supported for image creation
|
2013-09-03 12:09:55 +04:00
|
|
|
|
|
|
|
=== Testing zero expansion on inactive clusters ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
2013-09-03 12:09:55 +04:00
|
|
|
wrote 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
wrote 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
read 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
read 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
|
2013-09-05 12:55:54 +04:00
|
|
|
=== Testing zero expansion on shared L2 table ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
2013-09-05 12:55:54 +04:00
|
|
|
wrote 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
read 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
read 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
|
2013-09-03 12:09:55 +04:00
|
|
|
=== Testing zero expansion on backed image ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
|
2013-09-03 12:09:55 +04:00
|
|
|
wrote 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
iotests: Specify explicit backing format where sensible
There are many existing qcow2 images that specify a backing file but
no format. This has been the source of CVEs in the past, but has
become more prominent of a problem now that libvirt has switched to
-blockdev. With older -drive, at least the probing was always done by
qemu (so the only risk of a changed format between successive boots of
a guest was if qemu was upgraded and probed differently). But with
newer -blockdev, libvirt must specify a format; if libvirt guesses raw
where the image was formatted, this results in data corruption visible
to the guest; conversely, if libvirt guesses qcow2 where qemu was
using raw, this can result in potential security holes, so modern
libvirt instead refuses to use images without explicit backing format.
The change in libvirt to reject images without explicit backing format
has pointed out that a number of tools have been far too reliant on
probing in the past. It's time to set a better example in our own
iotests of properly setting this parameter.
iotest calls to create, rebase, and convert are all impacted to some
degree. It's a bit annoying that we are inconsistent on command line
- while all of those accept -o backing_file=...,backing_fmt=..., the
shortcuts are different: create and rebase have -b and -F, while
convert has -B but no -F. (amend has no shortcuts, but the previous
patch just deprecated the use of amend to change backing chains).
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20200706203954.341758-9-eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2020-07-06 23:39:52 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
2013-09-03 12:09:55 +04:00
|
|
|
read 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
wrote 65536/65536 bytes at offset 0
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
read 65536/65536 bytes at offset 0
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
read 65536/65536 bytes at offset 65536
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
|
|
|
|
=== Testing zero expansion on backed inactive clusters ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
|
2013-09-03 12:09:55 +04:00
|
|
|
wrote 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
iotests: Specify explicit backing format where sensible
There are many existing qcow2 images that specify a backing file but
no format. This has been the source of CVEs in the past, but has
become more prominent of a problem now that libvirt has switched to
-blockdev. With older -drive, at least the probing was always done by
qemu (so the only risk of a changed format between successive boots of
a guest was if qemu was upgraded and probed differently). But with
newer -blockdev, libvirt must specify a format; if libvirt guesses raw
where the image was formatted, this results in data corruption visible
to the guest; conversely, if libvirt guesses qcow2 where qemu was
using raw, this can result in potential security holes, so modern
libvirt instead refuses to use images without explicit backing format.
The change in libvirt to reject images without explicit backing format
has pointed out that a number of tools have been far too reliant on
probing in the past. It's time to set a better example in our own
iotests of properly setting this parameter.
iotest calls to create, rebase, and convert are all impacted to some
degree. It's a bit annoying that we are inconsistent on command line
- while all of those accept -o backing_file=...,backing_fmt=..., the
shortcuts are different: create and rebase have -b and -F, while
convert has -B but no -F. (amend has no shortcuts, but the previous
patch just deprecated the use of amend to change backing chains).
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20200706203954.341758-9-eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2020-07-06 23:39:52 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
2013-09-03 12:09:55 +04:00
|
|
|
wrote 65536/65536 bytes at offset 0
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
wrote 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
read 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
read 65536/65536 bytes at offset 0
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
read 65536/65536 bytes at offset 65536
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
2013-09-05 12:55:54 +04:00
|
|
|
|
|
|
|
=== Testing zero expansion on backed image with shared L2 table ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
|
2013-09-05 12:55:54 +04:00
|
|
|
wrote 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
iotests: Specify explicit backing format where sensible
There are many existing qcow2 images that specify a backing file but
no format. This has been the source of CVEs in the past, but has
become more prominent of a problem now that libvirt has switched to
-blockdev. With older -drive, at least the probing was always done by
qemu (so the only risk of a changed format between successive boots of
a guest was if qemu was upgraded and probed differently). But with
newer -blockdev, libvirt must specify a format; if libvirt guesses raw
where the image was formatted, this results in data corruption visible
to the guest; conversely, if libvirt guesses qcow2 where qemu was
using raw, this can result in potential security holes, so modern
libvirt instead refuses to use images without explicit backing format.
The change in libvirt to reject images without explicit backing format
has pointed out that a number of tools have been far too reliant on
probing in the past. It's time to set a better example in our own
iotests of properly setting this parameter.
iotest calls to create, rebase, and convert are all impacted to some
degree. It's a bit annoying that we are inconsistent on command line
- while all of those accept -o backing_file=...,backing_fmt=..., the
shortcuts are different: create and rebase have -b and -F, while
convert has -B but no -F. (amend has no shortcuts, but the previous
patch just deprecated the use of amend to change backing chains).
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20200706203954.341758-9-eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2020-07-06 23:39:52 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
2013-09-05 12:55:54 +04:00
|
|
|
wrote 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
read 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
read 131072/131072 bytes at offset 0
|
|
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
2013-09-25 14:07:23 +04:00
|
|
|
|
|
|
|
=== Testing preallocated zero expansion on full image ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
2013-09-25 14:07:23 +04:00
|
|
|
wrote 67108864/67108864 bytes at offset 0
|
|
|
|
64 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
wrote 67108864/67108864 bytes at offset 0
|
|
|
|
64 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
No errors were found on the image.
|
|
|
|
read 67108864/67108864 bytes at offset 0
|
|
|
|
64 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
2014-10-27 13:12:56 +03:00
|
|
|
|
|
|
|
=== Testing progress report without snapshot ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=4294967296
|
iotests: Specify explicit backing format where sensible
There are many existing qcow2 images that specify a backing file but
no format. This has been the source of CVEs in the past, but has
become more prominent of a problem now that libvirt has switched to
-blockdev. With older -drive, at least the probing was always done by
qemu (so the only risk of a changed format between successive boots of
a guest was if qemu was upgraded and probed differently). But with
newer -blockdev, libvirt must specify a format; if libvirt guesses raw
where the image was formatted, this results in data corruption visible
to the guest; conversely, if libvirt guesses qcow2 where qemu was
using raw, this can result in potential security holes, so modern
libvirt instead refuses to use images without explicit backing format.
The change in libvirt to reject images without explicit backing format
has pointed out that a number of tools have been far too reliant on
probing in the past. It's time to set a better example in our own
iotests of properly setting this parameter.
iotest calls to create, rebase, and convert are all impacted to some
degree. It's a bit annoying that we are inconsistent on command line
- while all of those accept -o backing_file=...,backing_fmt=..., the
shortcuts are different: create and rebase have -b and -F, while
convert has -B but no -F. (amend has no shortcuts, but the previous
patch just deprecated the use of amend to change backing chains).
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20200706203954.341758-9-eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2020-07-06 23:39:52 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4294967296 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
2014-10-27 13:12:56 +03:00
|
|
|
wrote 65536/65536 bytes at offset 0
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
wrote 65536/65536 bytes at offset 1073741824
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
wrote 65536/65536 bytes at offset 2147483648
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
wrote 65536/65536 bytes at offset 3221225472
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
(0.00/100%)
(12.50/100%)
(25.00/100%)
(37.50/100%)
(50.00/100%)
(62.50/100%)
(75.00/100%)
(87.50/100%)
(100.00/100%)
(100.00/100%)
|
|
|
|
No errors were found on the image.
|
|
|
|
|
|
|
|
=== Testing progress report with snapshot ===
|
|
|
|
|
2014-12-09 10:38:03 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=4294967296
|
iotests: Specify explicit backing format where sensible
There are many existing qcow2 images that specify a backing file but
no format. This has been the source of CVEs in the past, but has
become more prominent of a problem now that libvirt has switched to
-blockdev. With older -drive, at least the probing was always done by
qemu (so the only risk of a changed format between successive boots of
a guest was if qemu was upgraded and probed differently). But with
newer -blockdev, libvirt must specify a format; if libvirt guesses raw
where the image was formatted, this results in data corruption visible
to the guest; conversely, if libvirt guesses qcow2 where qemu was
using raw, this can result in potential security holes, so modern
libvirt instead refuses to use images without explicit backing format.
The change in libvirt to reject images without explicit backing format
has pointed out that a number of tools have been far too reliant on
probing in the past. It's time to set a better example in our own
iotests of properly setting this parameter.
iotest calls to create, rebase, and convert are all impacted to some
degree. It's a bit annoying that we are inconsistent on command line
- while all of those accept -o backing_file=...,backing_fmt=..., the
shortcuts are different: create and rebase have -b and -F, while
convert has -B but no -F. (amend has no shortcuts, but the previous
patch just deprecated the use of amend to change backing chains).
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20200706203954.341758-9-eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2020-07-06 23:39:52 +03:00
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4294967296 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
2014-10-27 13:12:56 +03:00
|
|
|
wrote 65536/65536 bytes at offset 0
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
wrote 65536/65536 bytes at offset 1073741824
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
wrote 65536/65536 bytes at offset 2147483648
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
wrote 65536/65536 bytes at offset 3221225472
|
|
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
(0.00/100%)
(6.25/100%)
(12.50/100%)
(18.75/100%)
(25.00/100%)
(31.25/100%)
(37.50/100%)
(43.75/100%)
(50.00/100%)
(56.25/100%)
(62.50/100%)
(68.75/100%)
(75.00/100%)
(81.25/100%)
(87.50/100%)
(93.75/100%)
(100.00/100%)
(100.00/100%)
|
|
|
|
No errors were found on the image.
|
2019-02-26 17:00:29 +03:00
|
|
|
|
|
|
|
=== Testing version downgrade with external data file ===
|
|
|
|
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 data_file=TEST_DIR/t.IMGFMT.data
|
|
|
|
qemu-img: Cannot downgrade an image with a data file
|
|
|
|
image: TEST_DIR/t.IMGFMT
|
|
|
|
file format: IMGFMT
|
2019-04-17 20:11:01 +03:00
|
|
|
virtual size: 64 MiB (67108864 bytes)
|
2019-02-26 17:00:29 +03:00
|
|
|
cluster_size: 65536
|
|
|
|
Format specific information:
|
|
|
|
compat: 1.1
|
qcow2: introduce compression type feature
The patch adds some preparation parts for incompatible compression type
feature to qcow2 allowing the use different compression methods for
image clusters (de)compressing.
It is implied that the compression type is set on the image creation and
can be changed only later by image conversion, thus compression type
defines the only compression algorithm used for the image, and thus,
for all image clusters.
The goal of the feature is to add support of other compression methods
to qcow2. For example, ZSTD which is more effective on compression than ZLIB.
The default compression is ZLIB. Images created with ZLIB compression type
are backward compatible with older qemu versions.
Adding of the compression type breaks a number of tests because now the
compression type is reported on image creation and there are some changes
in the qcow2 header in size and offsets.
The tests are fixed in the following ways:
* filter out compression_type for many tests
* fix header size, feature table size and backing file offset
affected tests: 031, 036, 061, 080
header_size +=8: 1 byte compression type
7 bytes padding
feature_table += 48: incompatible feature compression type
backing_file_offset += 56 (8 + 48 -> header_change + feature_table_change)
* add "compression type" for test output matching when it isn't filtered
affected tests: 049, 060, 061, 065, 082, 085, 144, 182, 185, 198, 206,
242, 255, 274, 280
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
QAPI part:
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200507082521.29210-2-dplotnikov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2020-05-07 11:25:18 +03:00
|
|
|
compression type: zlib
|
2019-02-26 17:00:29 +03:00
|
|
|
lazy refcounts: false
|
|
|
|
refcount bits: 16
|
|
|
|
data file: TEST_DIR/t.IMGFMT.data
|
|
|
|
data file raw: false
|
|
|
|
corrupt: false
|
2020-07-10 19:13:13 +03:00
|
|
|
extended l2: false
|
2019-02-26 17:00:29 +03:00
|
|
|
No errors were found on the image.
|
|
|
|
|
2020-07-10 19:13:15 +03:00
|
|
|
=== Testing version downgrade with extended L2 entries ===
|
|
|
|
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
|
|
|
qemu-img: Cannot downgrade an image with incompatible features 0x10 set
|
|
|
|
|
2019-02-26 17:00:29 +03:00
|
|
|
=== Try changing the external data file ===
|
|
|
|
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
|
|
|
qemu-img: data-file can only be set for images that use an external data file
|
|
|
|
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 data_file=TEST_DIR/t.IMGFMT.data
|
|
|
|
qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Could not open 'foo': No such file or directory
|
|
|
|
image: TEST_DIR/t.IMGFMT
|
|
|
|
file format: IMGFMT
|
2019-04-17 20:11:01 +03:00
|
|
|
virtual size: 64 MiB (67108864 bytes)
|
2019-02-26 17:00:29 +03:00
|
|
|
cluster_size: 65536
|
|
|
|
Format specific information:
|
|
|
|
compat: 1.1
|
qcow2: introduce compression type feature
The patch adds some preparation parts for incompatible compression type
feature to qcow2 allowing the use different compression methods for
image clusters (de)compressing.
It is implied that the compression type is set on the image creation and
can be changed only later by image conversion, thus compression type
defines the only compression algorithm used for the image, and thus,
for all image clusters.
The goal of the feature is to add support of other compression methods
to qcow2. For example, ZSTD which is more effective on compression than ZLIB.
The default compression is ZLIB. Images created with ZLIB compression type
are backward compatible with older qemu versions.
Adding of the compression type breaks a number of tests because now the
compression type is reported on image creation and there are some changes
in the qcow2 header in size and offsets.
The tests are fixed in the following ways:
* filter out compression_type for many tests
* fix header size, feature table size and backing file offset
affected tests: 031, 036, 061, 080
header_size +=8: 1 byte compression type
7 bytes padding
feature_table += 48: incompatible feature compression type
backing_file_offset += 56 (8 + 48 -> header_change + feature_table_change)
* add "compression type" for test output matching when it isn't filtered
affected tests: 049, 060, 061, 065, 082, 085, 144, 182, 185, 198, 206,
242, 255, 274, 280
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
QAPI part:
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200507082521.29210-2-dplotnikov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2020-05-07 11:25:18 +03:00
|
|
|
compression type: zlib
|
2019-02-26 17:00:29 +03:00
|
|
|
lazy refcounts: false
|
|
|
|
refcount bits: 16
|
|
|
|
data file: foo
|
|
|
|
data file raw: false
|
|
|
|
corrupt: false
|
2020-07-10 19:13:13 +03:00
|
|
|
extended l2: false
|
2019-02-26 17:00:29 +03:00
|
|
|
|
|
|
|
qemu-img: Could not open 'TEST_DIR/t.IMGFMT': 'data-file' is required for this image
|
|
|
|
image: TEST_DIR/t.IMGFMT
|
|
|
|
file format: IMGFMT
|
2019-04-17 20:11:01 +03:00
|
|
|
virtual size: 64 MiB (67108864 bytes)
|
2019-02-26 17:00:29 +03:00
|
|
|
cluster_size: 65536
|
|
|
|
Format specific information:
|
|
|
|
compat: 1.1
|
qcow2: introduce compression type feature
The patch adds some preparation parts for incompatible compression type
feature to qcow2 allowing the use different compression methods for
image clusters (de)compressing.
It is implied that the compression type is set on the image creation and
can be changed only later by image conversion, thus compression type
defines the only compression algorithm used for the image, and thus,
for all image clusters.
The goal of the feature is to add support of other compression methods
to qcow2. For example, ZSTD which is more effective on compression than ZLIB.
The default compression is ZLIB. Images created with ZLIB compression type
are backward compatible with older qemu versions.
Adding of the compression type breaks a number of tests because now the
compression type is reported on image creation and there are some changes
in the qcow2 header in size and offsets.
The tests are fixed in the following ways:
* filter out compression_type for many tests
* fix header size, feature table size and backing file offset
affected tests: 031, 036, 061, 080
header_size +=8: 1 byte compression type
7 bytes padding
feature_table += 48: incompatible feature compression type
backing_file_offset += 56 (8 + 48 -> header_change + feature_table_change)
* add "compression type" for test output matching when it isn't filtered
affected tests: 049, 060, 061, 065, 082, 085, 144, 182, 185, 198, 206,
242, 255, 274, 280
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
QAPI part:
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200507082521.29210-2-dplotnikov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2020-05-07 11:25:18 +03:00
|
|
|
compression type: zlib
|
2019-02-26 17:00:29 +03:00
|
|
|
lazy refcounts: false
|
|
|
|
refcount bits: 16
|
|
|
|
data file raw: false
|
|
|
|
corrupt: false
|
2020-07-10 19:13:13 +03:00
|
|
|
extended l2: false
|
2019-02-26 17:00:29 +03:00
|
|
|
|
|
|
|
=== Clearing and setting data-file-raw ===
|
|
|
|
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 data_file=TEST_DIR/t.IMGFMT.data data_file_raw=on
|
|
|
|
image: TEST_DIR/t.IMGFMT
|
|
|
|
file format: IMGFMT
|
2019-04-17 20:11:01 +03:00
|
|
|
virtual size: 64 MiB (67108864 bytes)
|
2019-02-26 17:00:29 +03:00
|
|
|
cluster_size: 65536
|
|
|
|
Format specific information:
|
|
|
|
compat: 1.1
|
qcow2: introduce compression type feature
The patch adds some preparation parts for incompatible compression type
feature to qcow2 allowing the use different compression methods for
image clusters (de)compressing.
It is implied that the compression type is set on the image creation and
can be changed only later by image conversion, thus compression type
defines the only compression algorithm used for the image, and thus,
for all image clusters.
The goal of the feature is to add support of other compression methods
to qcow2. For example, ZSTD which is more effective on compression than ZLIB.
The default compression is ZLIB. Images created with ZLIB compression type
are backward compatible with older qemu versions.
Adding of the compression type breaks a number of tests because now the
compression type is reported on image creation and there are some changes
in the qcow2 header in size and offsets.
The tests are fixed in the following ways:
* filter out compression_type for many tests
* fix header size, feature table size and backing file offset
affected tests: 031, 036, 061, 080
header_size +=8: 1 byte compression type
7 bytes padding
feature_table += 48: incompatible feature compression type
backing_file_offset += 56 (8 + 48 -> header_change + feature_table_change)
* add "compression type" for test output matching when it isn't filtered
affected tests: 049, 060, 061, 065, 082, 085, 144, 182, 185, 198, 206,
242, 255, 274, 280
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
QAPI part:
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200507082521.29210-2-dplotnikov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2020-05-07 11:25:18 +03:00
|
|
|
compression type: zlib
|
2019-02-26 17:00:29 +03:00
|
|
|
lazy refcounts: false
|
|
|
|
refcount bits: 16
|
|
|
|
data file: TEST_DIR/t.IMGFMT.data
|
|
|
|
data file raw: true
|
|
|
|
corrupt: false
|
2020-07-10 19:13:13 +03:00
|
|
|
extended l2: false
|
2019-02-26 17:00:29 +03:00
|
|
|
No errors were found on the image.
|
|
|
|
image: TEST_DIR/t.IMGFMT
|
|
|
|
file format: IMGFMT
|
2019-04-17 20:11:01 +03:00
|
|
|
virtual size: 64 MiB (67108864 bytes)
|
2019-02-26 17:00:29 +03:00
|
|
|
cluster_size: 65536
|
|
|
|
Format specific information:
|
|
|
|
compat: 1.1
|
qcow2: introduce compression type feature
The patch adds some preparation parts for incompatible compression type
feature to qcow2 allowing the use different compression methods for
image clusters (de)compressing.
It is implied that the compression type is set on the image creation and
can be changed only later by image conversion, thus compression type
defines the only compression algorithm used for the image, and thus,
for all image clusters.
The goal of the feature is to add support of other compression methods
to qcow2. For example, ZSTD which is more effective on compression than ZLIB.
The default compression is ZLIB. Images created with ZLIB compression type
are backward compatible with older qemu versions.
Adding of the compression type breaks a number of tests because now the
compression type is reported on image creation and there are some changes
in the qcow2 header in size and offsets.
The tests are fixed in the following ways:
* filter out compression_type for many tests
* fix header size, feature table size and backing file offset
affected tests: 031, 036, 061, 080
header_size +=8: 1 byte compression type
7 bytes padding
feature_table += 48: incompatible feature compression type
backing_file_offset += 56 (8 + 48 -> header_change + feature_table_change)
* add "compression type" for test output matching when it isn't filtered
affected tests: 049, 060, 061, 065, 082, 085, 144, 182, 185, 198, 206,
242, 255, 274, 280
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
QAPI part:
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200507082521.29210-2-dplotnikov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2020-05-07 11:25:18 +03:00
|
|
|
compression type: zlib
|
2019-02-26 17:00:29 +03:00
|
|
|
lazy refcounts: false
|
|
|
|
refcount bits: 16
|
|
|
|
data file: TEST_DIR/t.IMGFMT.data
|
|
|
|
data file raw: false
|
|
|
|
corrupt: false
|
2020-07-10 19:13:13 +03:00
|
|
|
extended l2: false
|
2019-02-26 17:00:29 +03:00
|
|
|
No errors were found on the image.
|
|
|
|
qemu-img: data-file-raw cannot be set on existing images
|
|
|
|
image: TEST_DIR/t.IMGFMT
|
|
|
|
file format: IMGFMT
|
2019-04-17 20:11:01 +03:00
|
|
|
virtual size: 64 MiB (67108864 bytes)
|
2019-02-26 17:00:29 +03:00
|
|
|
cluster_size: 65536
|
|
|
|
Format specific information:
|
|
|
|
compat: 1.1
|
qcow2: introduce compression type feature
The patch adds some preparation parts for incompatible compression type
feature to qcow2 allowing the use different compression methods for
image clusters (de)compressing.
It is implied that the compression type is set on the image creation and
can be changed only later by image conversion, thus compression type
defines the only compression algorithm used for the image, and thus,
for all image clusters.
The goal of the feature is to add support of other compression methods
to qcow2. For example, ZSTD which is more effective on compression than ZLIB.
The default compression is ZLIB. Images created with ZLIB compression type
are backward compatible with older qemu versions.
Adding of the compression type breaks a number of tests because now the
compression type is reported on image creation and there are some changes
in the qcow2 header in size and offsets.
The tests are fixed in the following ways:
* filter out compression_type for many tests
* fix header size, feature table size and backing file offset
affected tests: 031, 036, 061, 080
header_size +=8: 1 byte compression type
7 bytes padding
feature_table += 48: incompatible feature compression type
backing_file_offset += 56 (8 + 48 -> header_change + feature_table_change)
* add "compression type" for test output matching when it isn't filtered
affected tests: 049, 060, 061, 065, 082, 085, 144, 182, 185, 198, 206,
242, 255, 274, 280
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
QAPI part:
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200507082521.29210-2-dplotnikov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2020-05-07 11:25:18 +03:00
|
|
|
compression type: zlib
|
2019-02-26 17:00:29 +03:00
|
|
|
lazy refcounts: false
|
|
|
|
refcount bits: 16
|
|
|
|
data file: TEST_DIR/t.IMGFMT.data
|
|
|
|
data file raw: false
|
|
|
|
corrupt: false
|
2020-07-10 19:13:13 +03:00
|
|
|
extended l2: false
|
2019-02-26 17:00:29 +03:00
|
|
|
No errors were found on the image.
|
2013-09-03 12:09:55 +04:00
|
|
|
*** done
|