1#!/usr/bin/env bash 2# group: rw auto quick 3# 4# qemu-img measure sub-command tests on huge qcow2 files 5# 6# Copyright (C) 2017-2020 Red Hat, Inc. 7# 8# This program is free software; you can redistribute it and/or modify 9# it under the terms of the GNU General Public License as published by 10# the Free Software Foundation; either version 2 of the License, or 11# (at your option) any later version. 12# 13# This program is distributed in the hope that it will be useful, 14# but WITHOUT ANY WARRANTY; without even the implied warranty of 15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16# GNU General Public License for more details. 17# 18# You should have received a copy of the GNU General Public License 19# along with this program. If not, see <http://www.gnu.org/licenses/>. 20# 21 22# creator 23owner=eblake@redhat.com 24 25seq=`basename $0` 26echo "QA output created by $seq" 27 28status=1 # failure is the default! 29 30_cleanup() 31{ 32 _cleanup_test_img 33 _rm_test_img "$TEST_IMG.converted" 34} 35trap "_cleanup; exit \$status" 0 1 2 3 15 36 37# get standard environment, filters and checks 38. ./common.rc 39. ./common.filter 40. ./common.pattern 41 42# See 178 for more extensive tests across more formats 43_supported_fmt qcow2 44_supported_proto file 45# compat=0.10 does not support bitmaps 46_unsupported_imgopts 'compat=0.10' 47 48echo "== Huge file without bitmaps ==" 49echo 50 51_make_test_img -o 'cluster_size=2M' 2T 52 53$QEMU_IMG measure -O raw -f qcow2 "$TEST_IMG" 54$QEMU_IMG measure -O qcow2 -o cluster_size=64k -f qcow2 "$TEST_IMG" 55$QEMU_IMG measure -O qcow2 -o cluster_size=2M -f qcow2 "$TEST_IMG" 56 57echo 58echo "== Huge file with bitmaps ==" 59echo 60 61$QEMU_IMG bitmap --add --granularity 512 -f qcow2 "$TEST_IMG" b1 62$QEMU_IMG bitmap --add -g 2M -f qcow2 "$TEST_IMG" b2 63 64# No bitmap without a source 65$QEMU_IMG measure -O qcow2 --size 10M 66# No bitmap output, since raw does not support it 67$QEMU_IMG measure -O raw -f qcow2 "$TEST_IMG" 68# No bitmap output, since no bitmaps on raw source. Munge required size, as 69# some filesystems store the qcow2 file with less sparseness than others 70$QEMU_IMG measure -O qcow2 -f raw "$TEST_IMG" | 71 sed '/^required size:/ s/[0-9][0-9]*/SIZE/' 72# No bitmap output, since v2 does not support it 73$QEMU_IMG measure -O qcow2 -o compat=0.10 -f qcow2 "$TEST_IMG" 74 75# Compute expected output: bitmap clusters + bitmap tables + bitmaps directory 76echo 77val2T=$((2*1024*1024*1024*1024)) 78cluster=$((64*1024)) 79b1clusters=$(( (val2T/512/8 + cluster - 1) / cluster )) 80b2clusters=$(( (val2T/2/1024/1024/8 + cluster - 1) / cluster )) 81echo expected bitmap $((b1clusters * cluster + 82 (b1clusters * 8 + cluster - 1) / cluster * cluster + 83 b2clusters * cluster + 84 (b2clusters * 8 + cluster - 1) / cluster * cluster + 85 cluster)) 86$QEMU_IMG measure -O qcow2 -o cluster_size=64k -f qcow2 "$TEST_IMG" 87 88# Compute expected output: bitmap clusters + bitmap tables + bitmaps directory 89echo 90cluster=$((2*1024*1024)) 91b1clusters=$(( (val2T/512/8 + cluster - 1) / cluster )) 92b2clusters=$(( (val2T/2/1024/1024/8 + cluster - 1) / cluster )) 93echo expected bitmap $((b1clusters * cluster + 94 (b1clusters * 8 + cluster - 1) / cluster * cluster + 95 b2clusters * cluster + 96 (b2clusters * 8 + cluster - 1) / cluster * cluster + 97 cluster)) 98$QEMU_IMG measure --output=json -O qcow2 -o cluster_size=2M -f qcow2 "$TEST_IMG" 99 100# success, all done 101echo "*** done" 102rm -f $seq.full 103status=0 104