#!/usr/bin/env bash # group: rw auto quick # # qemu-img measure sub-command tests on huge qcow2 files # # Copyright (C) 2017-2020 Red Hat, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # creator owner=eblake@redhat.com seq=`basename $0` echo "QA output created by $seq" status=1 # failure is the default! _cleanup() { _cleanup_test_img _rm_test_img "$TEST_IMG.converted" } trap "_cleanup; exit \$status" 0 1 2 3 15 # get standard environment, filters and checks . ./common.rc . ./common.filter . ./common.pattern # See 178 for more extensive tests across more formats _supported_fmt qcow2 _supported_proto file # compat=0.10 does not support bitmaps _unsupported_imgopts 'compat=0.10' echo "== Huge file without bitmaps ==" echo _make_test_img -o 'cluster_size=2M' 2T $QEMU_IMG measure -O raw -f qcow2 "$TEST_IMG" $QEMU_IMG measure -O qcow2 -o cluster_size=64k -f qcow2 "$TEST_IMG" $QEMU_IMG measure -O qcow2 -o cluster_size=2M -f qcow2 "$TEST_IMG" echo echo "== Huge file with bitmaps ==" echo $QEMU_IMG bitmap --add --granularity 512 -f qcow2 "$TEST_IMG" b1 $QEMU_IMG bitmap --add -g 2M -f qcow2 "$TEST_IMG" b2 # No bitmap without a source $QEMU_IMG measure -O qcow2 --size 10M # No bitmap output, since raw does not support it $QEMU_IMG measure -O raw -f qcow2 "$TEST_IMG" # No bitmap output, since no bitmaps on raw source. Munge required size, as # some filesystems store the qcow2 file with less sparseness than others $QEMU_IMG measure -O qcow2 -f raw "$TEST_IMG" | sed '/^required size:/ s/[0-9][0-9]*/SIZE/' # No bitmap output, since v2 does not support it $QEMU_IMG measure -O qcow2 -o compat=0.10 -f qcow2 "$TEST_IMG" # Compute expected output: bitmap clusters + bitmap tables + bitmaps directory echo val2T=$((2*1024*1024*1024*1024)) cluster=$((64*1024)) b1clusters=$(( (val2T/512/8 + cluster - 1) / cluster )) b2clusters=$(( (val2T/2/1024/1024/8 + cluster - 1) / cluster )) echo expected bitmap $((b1clusters * cluster + (b1clusters * 8 + cluster - 1) / cluster * cluster + b2clusters * cluster + (b2clusters * 8 + cluster - 1) / cluster * cluster + cluster)) $QEMU_IMG measure -O qcow2 -o cluster_size=64k -f qcow2 "$TEST_IMG" # Compute expected output: bitmap clusters + bitmap tables + bitmaps directory echo cluster=$((2*1024*1024)) b1clusters=$(( (val2T/512/8 + cluster - 1) / cluster )) b2clusters=$(( (val2T/2/1024/1024/8 + cluster - 1) / cluster )) echo expected bitmap $((b1clusters * cluster + (b1clusters * 8 + cluster - 1) / cluster * cluster + b2clusters * cluster + (b2clusters * 8 + cluster - 1) / cluster * cluster + cluster)) $QEMU_IMG measure --output=json -O qcow2 -o cluster_size=2M -f qcow2 "$TEST_IMG" # success, all done echo "*** done" rm -f $seq.full status=0