|
|
1.1 ! root 1: #!/bin/bash ! 2: # ! 3: # Rebasing COW images ! 4: # ! 5: # Copyright (C) 2009 Red Hat, Inc. ! 6: # ! 7: # This program is free software; you can redistribute it and/or modify ! 8: # it under the terms of the GNU General Public License as published by ! 9: # the Free Software Foundation; either version 2 of the License, or ! 10: # (at your option) any later version. ! 11: # ! 12: # This program is distributed in the hope that it will be useful, ! 13: # but WITHOUT ANY WARRANTY; without even the implied warranty of ! 14: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 15: # GNU General Public License for more details. ! 16: # ! 17: # You should have received a copy of the GNU General Public License ! 18: # along with this program. If not, see <http://www.gnu.org/licenses/>. ! 19: # ! 20: ! 21: # creator ! 22: [email protected] ! 23: ! 24: seq=`basename $0` ! 25: echo "QA output created by $seq" ! 26: ! 27: here=`pwd` ! 28: tmp=/tmp/$$ ! 29: status=1 # failure is the default! ! 30: ! 31: _cleanup() ! 32: { ! 33: _cleanup_test_img ! 34: rm -f $TEST_DIR/t.$IMGFMT.base_old ! 35: rm -f $TEST_DIR/t.$IMGFMT.base_new ! 36: } ! 37: trap "_cleanup; exit \$status" 0 1 2 3 15 ! 38: ! 39: # get standard environment, filters and checks ! 40: . ./common.rc ! 41: . ./common.filter ! 42: . ./common.pattern ! 43: ! 44: # Currently only qcow2 and qed support rebasing ! 45: _supported_fmt qcow2 qed ! 46: _supported_proto generic ! 47: _supported_os Linux ! 48: ! 49: CLUSTER_SIZE=65536 ! 50: ! 51: # Cluster allocations to be tested: ! 52: # ! 53: # Backing (old) 11 -- 11 -- 11 -- 11 -- ! 54: # Backing (new) 22 22 -- -- 22 22 -- -- ! 55: # COW image 33 33 33 33 -- -- -- -- ! 56: # ! 57: # The pattern is written twice to have both an alloc -> non-alloc and a ! 58: # non-alloc -> alloc transition in the COW image. ! 59: ! 60: echo "Creating backing file" ! 61: echo ! 62: ! 63: _make_test_img 1G ! 64: io_pattern writev 0 $CLUSTER_SIZE $((2 * CLUSTER_SIZE)) 8 0x11 ! 65: mv $TEST_IMG $TEST_IMG.base_old ! 66: ! 67: echo "Creating new backing file" ! 68: echo ! 69: ! 70: _make_test_img 1G ! 71: io_pattern writev 0 $((2 * CLUSTER_SIZE)) $((4 * CLUSTER_SIZE)) 4 0x22 ! 72: mv $TEST_IMG $TEST_IMG.base_new ! 73: ! 74: echo "Creating COW image" ! 75: echo ! 76: ! 77: _make_test_img -b $TEST_IMG.base_old 1G ! 78: io_pattern writev 0 $((4 * CLUSTER_SIZE)) 0 1 0x33 ! 79: io_pattern writev $((8 * CLUSTER_SIZE)) $((4 * CLUSTER_SIZE)) 0 1 0x33 ! 80: ! 81: echo "Read before the rebase to make sure everything is set up correctly" ! 82: echo ! 83: io_pattern readv $((0 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 84: io_pattern readv $((1 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 85: io_pattern readv $((2 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 86: io_pattern readv $((3 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 87: io_pattern readv $((4 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11 ! 88: io_pattern readv $((5 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00 ! 89: io_pattern readv $((6 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11 ! 90: io_pattern readv $((7 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00 ! 91: io_pattern readv $((8 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 92: io_pattern readv $((9 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 93: io_pattern readv $((10 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 94: io_pattern readv $((11 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 95: io_pattern readv $((12 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11 ! 96: io_pattern readv $((13 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00 ! 97: io_pattern readv $((14 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11 ! 98: io_pattern readv $((15 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00 ! 99: ! 100: echo ! 101: echo Rebase and test again ! 102: echo ! 103: $QEMU_IMG rebase -b $TEST_IMG.base_new $TEST_IMG ! 104: io_pattern readv $((0 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 105: io_pattern readv $((1 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 106: io_pattern readv $((2 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 107: io_pattern readv $((3 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 108: io_pattern readv $((4 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11 ! 109: io_pattern readv $((5 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00 ! 110: io_pattern readv $((6 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11 ! 111: io_pattern readv $((7 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00 ! 112: io_pattern readv $((8 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 113: io_pattern readv $((9 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 114: io_pattern readv $((10 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 115: io_pattern readv $((11 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33 ! 116: io_pattern readv $((12 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11 ! 117: io_pattern readv $((13 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00 ! 118: io_pattern readv $((14 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11 ! 119: io_pattern readv $((15 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00 ! 120: ! 121: ! 122: # success, all done ! 123: echo "*** done" ! 124: rm -f $seq.full ! 125: status=0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.