qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

190 (3517B)


      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
     23 owner=eblake@redhat.com
     24 
     25 seq=`basename $0`
     26 echo "QA output created by $seq"
     27 
     28 status=1    # failure is the default!
     29 
     30 _cleanup()
     31 {
     32     _cleanup_test_img
     33     _rm_test_img "$TEST_IMG.converted"
     34 }
     35 trap "_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 
     48 echo "== Huge file without bitmaps =="
     49 echo
     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 
     57 echo
     58 echo "== Huge file with bitmaps =="
     59 echo
     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
     76 echo
     77 val2T=$((2*1024*1024*1024*1024))
     78 cluster=$((64*1024))
     79 b1clusters=$(( (val2T/512/8 + cluster - 1) / cluster ))
     80 b2clusters=$(( (val2T/2/1024/1024/8 + cluster - 1) / cluster ))
     81 echo 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
     89 echo
     90 cluster=$((2*1024*1024))
     91 b1clusters=$(( (val2T/512/8 + cluster - 1) / cluster ))
     92 b2clusters=$(( (val2T/2/1024/1024/8 + cluster - 1) / cluster ))
     93 echo 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
    101 echo "*** done"
    102 rm -f $seq.full
    103 status=0