f93e65ee51
As the previous commit changes the logic of "qemu-img rebase" (it's using write alignment now), let's add a couple more test cases which would ensure it works correctly. In particular, the following scenarios: 024: add test case for rebase within one backing chain when the overlay cluster size > backings cluster size; 271: add test case for rebase images that contain subclusters. Check that no extra allocations are being made. Signed-off-by: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com> Reviewed-by: Hanna Czenczek <hreitz@redhat.com> Message-ID: <20230919165804.439110-7-andrey.drobyshev@virtuozzo.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
248 lines
9.4 KiB
Plaintext
248 lines
9.4 KiB
Plaintext
QA output created by 024
|
|
Creating backing file
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT.base_old', fmt=IMGFMT size=1073741824
|
|
=== IO: pattern 0x11
|
|
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 131072
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 65536/65536 bytes at offset 262144
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 65536/65536 bytes at offset 393216
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 65536/65536 bytes at offset 524288
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 65536/65536 bytes at offset 655360
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 65536/65536 bytes at offset 786432
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 65536/65536 bytes at offset 917504
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
Creating new backing file
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT.base_new', fmt=IMGFMT size=1073741824
|
|
=== IO: pattern 0x22
|
|
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 262144
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 131072/131072 bytes at offset 524288
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 131072/131072 bytes at offset 786432
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
Creating COW image
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 backing_file=TEST_DIR/t.IMGFMT.base_old backing_fmt=IMGFMT
|
|
=== IO: pattern 0x33
|
|
wrote 262144/262144 bytes at offset 0
|
|
256 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
wrote 262144/262144 bytes at offset 524288
|
|
256 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
Read before the rebase to make sure everything is set up correctly
|
|
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 0
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 65536
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 131072
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 196608
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x11
|
|
read 65536/65536 bytes at offset 262144
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x00
|
|
read 65536/65536 bytes at offset 327680
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x11
|
|
read 65536/65536 bytes at offset 393216
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x00
|
|
read 65536/65536 bytes at offset 458752
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 524288
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 589824
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 655360
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 720896
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x11
|
|
read 65536/65536 bytes at offset 786432
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x00
|
|
read 65536/65536 bytes at offset 851968
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x11
|
|
read 65536/65536 bytes at offset 917504
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x00
|
|
read 65536/65536 bytes at offset 983040
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
Rebase and test again
|
|
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 0
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 65536
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 131072
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 196608
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x11
|
|
read 65536/65536 bytes at offset 262144
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x00
|
|
read 65536/65536 bytes at offset 327680
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x11
|
|
read 65536/65536 bytes at offset 393216
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x00
|
|
read 65536/65536 bytes at offset 458752
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 524288
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 589824
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 655360
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x33
|
|
read 65536/65536 bytes at offset 720896
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x11
|
|
read 65536/65536 bytes at offset 786432
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x00
|
|
read 65536/65536 bytes at offset 851968
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x11
|
|
read 65536/65536 bytes at offset 917504
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
=== IO: pattern 0x00
|
|
read 65536/65536 bytes at offset 983040
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
=== Test rebase in a subdirectory of the working directory ===
|
|
|
|
Formatting 'TEST_DIR/subdir/t.IMGFMT.base_old', fmt=IMGFMT size=1048576
|
|
Formatting 'TEST_DIR/subdir/t.IMGFMT.base_new', fmt=IMGFMT size=1048576
|
|
Formatting 'TEST_DIR/subdir/t.IMGFMT', fmt=IMGFMT size=1048576 backing_file=t.IMGFMT.base_old backing_fmt=IMGFMT
|
|
|
|
wrote 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 196608
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 131072/131072 bytes at offset 65536
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 65536/65536 bytes at offset 196608
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
backing file: t.IMGFMT.base_new (actual path: TEST_DIR/subdir/t.IMGFMT.base_new)
|
|
|
|
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)
|
|
read 65536/65536 bytes at offset 131072
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 65536/65536 bytes at offset 196608
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
Offset Length File
|
|
0 0x30000 TEST_DIR/subdir/t.IMGFMT
|
|
0x30000 0x10000 TEST_DIR/subdir/t.IMGFMT.base_new
|
|
|
|
=== Test rebase within one backing chain ===
|
|
|
|
Creating backing chain
|
|
|
|
Formatting 'TEST_DIR/subdir/t.IMGFMT.base_new', fmt=IMGFMT size=327680
|
|
Formatting 'TEST_DIR/subdir/t.IMGFMT.base_old', fmt=IMGFMT size=262144 backing_file=TEST_DIR/subdir/t.IMGFMT.base_new backing_fmt=IMGFMT
|
|
Formatting 'TEST_DIR/subdir/t.IMGFMT', fmt=IMGFMT size=327680 backing_file=TEST_DIR/subdir/t.IMGFMT.base_old backing_fmt=IMGFMT
|
|
|
|
Fill backing files with data
|
|
|
|
wrote 327680/327680 bytes at offset 0
|
|
320 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 262144/262144 bytes at offset 0
|
|
256 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
Check the last cluster is zeroed in overlay before the rebase
|
|
|
|
read 65536/65536 bytes at offset 262144
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
Rebase onto another image in the same chain
|
|
|
|
Verify that data is read the same before and after rebase
|
|
|
|
read 262144/262144 bytes at offset 0
|
|
256 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 65536/65536 bytes at offset 262144
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
|
|
=== Test rebase with different cluster sizes ===
|
|
|
|
Creating backing chain
|
|
|
|
Formatting 'TEST_DIR/subdir/t.IMGFMT.base_new', fmt=IMGFMT size=393216
|
|
Formatting 'TEST_DIR/subdir/t.IMGFMT.base_old', fmt=IMGFMT size=393216 backing_file=TEST_DIR/subdir/t.IMGFMT.base_new backing_fmt=IMGFMT
|
|
Formatting 'TEST_DIR/subdir/t.IMGFMT', fmt=IMGFMT size=393216 backing_file=TEST_DIR/subdir/t.IMGFMT.base_old backing_fmt=IMGFMT
|
|
image: TEST_DIR/subdir/t.IMGFMT
|
|
file format: IMGFMT
|
|
virtual size: 384 KiB (393216 bytes)
|
|
cluster_size: 131072
|
|
backing file: TEST_DIR/subdir/t.IMGFMT.base_old
|
|
backing file format: IMGFMT
|
|
|
|
Fill backing files with data
|
|
|
|
wrote 65536/65536 bytes at offset 65536
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 65536/65536 bytes at offset 262144
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
Rebase onto another image in the same chain
|
|
|
|
Verify that data is read the same before and after rebase
|
|
|
|
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)
|
|
read 131072/131072 bytes at offset 131072
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 65536/65536 bytes at offset 262144
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 65536/65536 bytes at offset 327680
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
Verify that untouched cluster remains unallocated
|
|
|
|
Offset Length File
|
|
0 0x20000 TEST_DIR/subdir/t.IMGFMT
|
|
0x40000 0x20000 TEST_DIR/subdir/t.IMGFMT
|
|
|
|
*** done
|