8417e1378c
The recently-added NBD context qemu:allocation-depth is able to
distinguish between locally-present data (even when that data is
sparse) [shown as depth 1 over NBD], and data that could not be found
anywhere in the backing chain [shown as depth 0]; and the libnbd
project was recently patched to give the human-readable name "absent"
to an allocation-depth of 0. But qemu-img map --output=json predates
that addition, and has the unfortunate behavior that all portions of
the backing chain that resolve without finding a hit in any backing
layer report the same depth as the final backing layer. This makes it
harder to reconstruct a qcow2 backing chain using just 'qemu-img map'
output, especially when using "backing":null to artificially limit a
backing chain, because it is impossible to distinguish between a
QCOW2_CLUSTER_UNALLOCATED (which defers to a [missing] backing file)
and a QCOW2_CLUSTER_ZERO_PLAIN cluster (which would override any
backing file), since both types of clusters otherwise show as
"data":false,"zero":true" (but note that we can distinguish a
QCOW2_CLUSTER_ZERO_ALLOCATED, which would also have an "offset":
listing).
The task of reconstructing a qcow2 chain was made harder in commit
0da9856851
(nbd: server: Report holes for raw images), because prior
to that point, it was possible to abuse NBD's block status command to
see which portions of a qcow2 file resulted in BDRV_BLOCK_ALLOCATED
(showing up as NBD_STATE_ZERO in isolation) vs. missing from the chain
(showing up as NBD_STATE_ZERO|NBD_STATE_HOLE); but now qemu reports
more accurate sparseness information over NBD.
An obvious solution is to make 'qemu-img map --output=json' add an
additional "present":false designation to any cluster lacking an
allocation anywhere in the chain, without any change to the "depth"
parameter to avoid breaking existing clients. The iotests have
several examples where this distinction demonstrates the additional
accuracy.
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20210701190655.2131223-3-eblake@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
[eblake: fix more iotest fallout]
Signed-off-by: Eric Blake <eblake@redhat.com>
418 lines
25 KiB
Plaintext
418 lines
25 KiB
Plaintext
QA output created by 154
|
|
|
|
== backing file contains zeros ==
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 2048/2048 bytes at offset 0
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 10240
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 17408
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 27648
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 4096, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 4096, "length": 4096, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 8192, "length": 4096, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 12288, "length": 4096, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 16384, "length": 4096, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 20480, "length": 4096, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 24576, "length": 8192, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 32768, "length": 134184960, "depth": 1, "present": false, "zero": true, "data": false}]
|
|
|
|
== backing file contains non-zero data before write_zeroes ==
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 1024/1024 bytes at offset 32768
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 34816
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 32768
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 3072/3072 bytes at offset 33792
|
|
3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 66560
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 67584
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 66560
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 65536
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 2048/2048 bytes at offset 67584
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 32768, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 32768, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 36864, "length": 28672, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 65536, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 69632, "length": 134148096, "depth": 1, "present": false, "zero": true, "data": false}]
|
|
|
|
== backing file contains non-zero data after write_zeroes ==
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 1024/1024 bytes at offset 34816
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 33792
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 2048/2048 bytes at offset 32768
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 34816
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 35840
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 44032
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 41984
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 44032
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 3072/3072 bytes at offset 40960
|
|
3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 32768, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 32768, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 36864, "length": 4096, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 40960, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 45056, "length": 134172672, "depth": 1, "present": false, "zero": true, "data": false}]
|
|
|
|
== write_zeroes covers non-zero data ==
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 1024/1024 bytes at offset 5120
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 5120
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 4096/4096 bytes at offset 4096
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 14336
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 13312
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 4096/4096 bytes at offset 12288
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 21504
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 21504
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 4096/4096 bytes at offset 20480
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 30208
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 29696
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 4096/4096 bytes at offset 28672
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 4096, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 4096, "length": 4096, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 8192, "length": 4096, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 12288, "length": 4096, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 16384, "length": 4096, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 20480, "length": 4096, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 24576, "length": 4096, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 28672, "length": 4096, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 32768, "length": 134184960, "depth": 1, "present": false, "zero": true, "data": false}]
|
|
|
|
== spanning two clusters, non-zero before request ==
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 1024/1024 bytes at offset 32768
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 35840
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 32768
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 7168/7168 bytes at offset 33792
|
|
7 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 50176
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 52224
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 49152
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 50176
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 6144/6144 bytes at offset 51200
|
|
6 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 67584
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 68608
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 2048/2048 bytes at offset 65536
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 67584
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 5120/5120 bytes at offset 68608
|
|
5 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 32768, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 32768, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 36864, "length": 4096, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 40960, "length": 8192, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 49152, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 53248, "length": 4096, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 57344, "length": 8192, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 65536, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 69632, "length": 4096, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 73728, "length": 134144000, "depth": 1, "present": false, "zero": true, "data": false}]
|
|
|
|
== spanning two clusters, non-zero after request ==
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 1024/1024 bytes at offset 37888
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 35840
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 5120/5120 bytes at offset 32768
|
|
5 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 37888
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 2048/2048 bytes at offset 38912
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 55296
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 52224
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 6144/6144 bytes at offset 49152
|
|
6 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 55296
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 56320
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 72704
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 68608
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 7168/7168 bytes at offset 65536
|
|
7 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 72704
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 32768, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 32768, "length": 4096, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 36864, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 40960, "length": 8192, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 49152, "length": 4096, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 53248, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 57344, "length": 8192, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 65536, "length": 4096, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 69632, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 73728, "length": 134144000, "depth": 1, "present": false, "zero": true, "data": false}]
|
|
|
|
== spanning two clusters, partially overwriting backing file ==
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 4096/4096 bytes at offset 2048
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 2048/2048 bytes at offset 3072
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 2048/2048 bytes at offset 0
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 2048
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 2048/2048 bytes at offset 3072
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 5120
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 2048/2048 bytes at offset 6144
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 8192, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 8192, "length": 134209536, "depth": 1, "present": false, "zero": true, "data": false}]
|
|
|
|
== spanning multiple clusters, non-zero in first cluster ==
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 2048/2048 bytes at offset 65536
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 7168/7168 bytes at offset 67584
|
|
7 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 2048/2048 bytes at offset 65536
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 10240/10240 bytes at offset 67584
|
|
10 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 65536, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 65536, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 69632, "length": 8192, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 77824, "length": 134139904, "depth": 1, "present": false, "zero": true, "data": false}]
|
|
|
|
== spanning multiple clusters, non-zero in intermediate cluster ==
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 2048/2048 bytes at offset 70656
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 7168/7168 bytes at offset 67584
|
|
7 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 12288/12288 bytes at offset 65536
|
|
12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 65536, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 65536, "length": 12288, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 77824, "length": 134139904, "depth": 1, "present": false, "zero": true, "data": false}]
|
|
|
|
== spanning multiple clusters, non-zero in final cluster ==
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 2048/2048 bytes at offset 75776
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 7168/7168 bytes at offset 67584
|
|
7 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 10240/10240 bytes at offset 65536
|
|
10 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 2048/2048 bytes at offset 75776
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 65536, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 65536, "length": 8192, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 73728, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 77824, "length": 134139904, "depth": 1, "present": false, "zero": true, "data": false}]
|
|
|
|
== spanning multiple clusters, partially overwriting backing file ==
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 10240/10240 bytes at offset 66560
|
|
10 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 7168/7168 bytes at offset 67584
|
|
7 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 65536
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 66560
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 7168/7168 bytes at offset 67584
|
|
7 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 2048/2048 bytes at offset 74752
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 76800
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 65536, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 65536, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 69632, "length": 4096, "depth": 0, "present": true, "zero": true, "data": false},
|
|
{ "start": 73728, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET},
|
|
{ "start": 77824, "length": 134139904, "depth": 1, "present": false, "zero": true, "data": false}]
|
|
|
|
== unaligned image tail cluster, no allocation needed ==
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776
|
|
wrote 512/512 bytes at offset 134217728
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
2048/2048 bytes allocated at offset 128 MiB
|
|
[{ "start": 0, "length": 134217728, "depth": 0, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 2048, "depth": 0, "present": true, "zero": true, "data": false}]
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776
|
|
wrote 512/512 bytes at offset 134219264
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
2048/2048 bytes allocated at offset 128 MiB
|
|
[{ "start": 0, "length": 134217728, "depth": 0, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 2048, "depth": 0, "present": true, "zero": true, "data": false}]
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776
|
|
wrote 1024/1024 bytes at offset 134218240
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
2048/2048 bytes allocated at offset 128 MiB
|
|
[{ "start": 0, "length": 134217728, "depth": 0, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 2048, "depth": 0, "present": true, "zero": true, "data": false}]
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776
|
|
wrote 2048/2048 bytes at offset 134217728
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
2048/2048 bytes allocated at offset 128 MiB
|
|
[{ "start": 0, "length": 134217728, "depth": 0, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 2048, "depth": 0, "present": true, "zero": true, "data": false}]
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134218752
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 512/512 bytes at offset 134217728
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
2048/2048 bytes allocated at offset 128 MiB
|
|
[{ "start": 0, "length": 134217728, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 2048, "depth": 0, "present": true, "zero": true, "data": false}]
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 512/512 bytes at offset 134219264
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
2048/2048 bytes allocated at offset 128 MiB
|
|
[{ "start": 0, "length": 134217728, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 2048, "depth": 0, "present": true, "zero": true, "data": false}]
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 1024/1024 bytes at offset 134218240
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
2048/2048 bytes allocated at offset 128 MiB
|
|
[{ "start": 0, "length": 134217728, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 2048, "depth": 0, "present": true, "zero": true, "data": false}]
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 2048/2048 bytes at offset 134217728
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
2048/2048 bytes allocated at offset 128 MiB
|
|
[{ "start": 0, "length": 134217728, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 2048, "depth": 0, "present": true, "zero": true, "data": false}]
|
|
wrote 512/512 bytes at offset 134217728
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 512/512 bytes at offset 134217728
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
2048/2048 bytes allocated at offset 128 MiB
|
|
[{ "start": 0, "length": 134217728, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 2048, "depth": 0, "present": true, "zero": true, "data": false}]
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 512/512 bytes at offset 134219264
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
2048/2048 bytes allocated at offset 128 MiB
|
|
[{ "start": 0, "length": 134217728, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 2048, "depth": 0, "present": true, "zero": true, "data": false}]
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 1024/1024 bytes at offset 134218240
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
2048/2048 bytes allocated at offset 128 MiB
|
|
[{ "start": 0, "length": 134217728, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 2048, "depth": 0, "present": true, "zero": true, "data": false}]
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 2048/2048 bytes at offset 134217728
|
|
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
2048/2048 bytes allocated at offset 128 MiB
|
|
[{ "start": 0, "length": 134217728, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 2048, "depth": 0, "present": true, "zero": true, "data": false}]
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134218752
|
|
wrote 1024/1024 bytes at offset 134217728
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 512/512 bytes at offset 134218240
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 512/512 bytes at offset 134217728
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 512/512 bytes at offset 134218240
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
1024/1024 bytes allocated at offset 128 MiB
|
|
[{ "start": 0, "length": 134217728, "depth": 0, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 1024, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET}]
|
|
wrote 1024/1024 bytes at offset 134217728
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
1024/1024 bytes allocated at offset 128 MiB
|
|
read 1024/1024 bytes at offset 134217728
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 134217728, "depth": 0, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 1024, "depth": 0, "present": true, "zero": true, "data": false, "offset": OFFSET}]
|
|
|
|
== unaligned image tail cluster, allocation required ==
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134218752
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 512/512 bytes at offset 134217728
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 512/512 bytes at offset 134218752
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 512/512 bytes at offset 134217728
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1536/1536 bytes at offset 134218240
|
|
1.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 134217728, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 2048, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET}]
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134218752
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134219776 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
wrote 512/512 bytes at offset 134218240
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 512/512 bytes at offset 134217728
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 512/512 bytes at offset 134217728
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 512/512 bytes at offset 134218240
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 134218752
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 512/512 bytes at offset 134219264
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 512/512 bytes at offset 134217728
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 512/512 bytes at offset 134218240
|
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 134218752
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 134217728, "depth": 1, "present": false, "zero": true, "data": false},
|
|
{ "start": 134217728, "length": 2048, "depth": 0, "present": true, "zero": false, "data": true, "offset": OFFSET}]
|
|
*** done
|