#!/bin/bash # # This file is part of util-linux. # # This file 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 file 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. # TS_TOPDIR="${0%/*}/../.." TS_DESC="resize" . $TS_TOPDIR/functions.sh ts_init "$*" ts_check_test_command "$TS_CMD_SFDISK" ts_check_test_command "$TS_CMD_WIPEFS" ts_skip_nonroot # set global variable TS_DEVICE ts_scsi_debug_init dev_size_mb=100 sector_size=512 declare -a COMM declare -a NAME COMM[0]="3000," NAME[0]="move-up-absolute" COMM[1]="2048," NAME[1]="move-down-absolute" COMM[2]="+1M," NAME[2]="move-up-relative" COMM[3]="-1M," NAME[3]="move-down-relative" COMM[4]="-,15M" NAME[4]="enlarge-absolute" COMM[5]=",5M," NAME[5]="reduce-absolute" COMM[6]=", +10M" NAME[6]="enlarge-relative" NAME[7]="reduce-relative" COMM[7]=", -10M" NAME[8]="enlarge-all" COMM[8]=",+" NAME[9]="up-preduce" COMM[9]="+10M,-10M" NAME[10]="down-enlarge" COMM[10]="-10M,+10M,,*" NAME[11]="absolute-move-resize" COMM[11]="2048,10M,L" function test_label_resize { local label="$1" $TS_CMD_WIPEFS -a ${TS_DEVICE} &> /dev/null udevadm settle # create a partition echo ',10M,L' | $TS_CMD_SFDISK --no-reread --label ${label} ${TS_DEVICE} &> /dev/null udevadm settle for idx in $(seq 0 $(( ${#COMM[*]} - 1 ))); do cmd=${COMM[$idx]} name=${NAME[$idx]} ts_init_subtest "$label-$idx-$name" echo -e "$cmd\n" >> $TS_OUTPUT echo "$cmd" | $TS_CMD_SFDISK --no-reread -N1 ${TS_DEVICE} >> $TS_OUTPUT 2>&1 ts_fdisk_clean $TS_DEVICE udevadm settle ts_finalize_subtest done echo ',10M,L' | $TS_CMD_SFDISK --no-reread --append ${TS_DEVICE} &> /dev/null udevadm settle echo ',10M,L' | $TS_CMD_SFDISK --no-reread --append ${TS_DEVICE} &> /dev/null udevadm settle idx=$(( $idx + 1 )) ts_init_subtest "$label-$idx-reduce-midle" cmd=',-5M' echo -e "$cmd\n" >> $TS_OUTPUT echo "$cmd" | $TS_CMD_SFDISK --no-reread -N2 ${TS_DEVICE} >> $TS_OUTPUT 2>&1 ts_fdisk_clean $TS_DEVICE udevadm settle ts_finalize_subtest idx=$(( $idx + 1 )) ts_init_subtest "$label-$idx-max-last" cmd='-5M,+' echo -e "$cmd\n" >> $TS_OUTPUT echo $cmd | $TS_CMD_SFDISK --no-reread -N3 ${TS_DEVICE} >> $TS_OUTPUT 2>&1 ts_fdisk_clean $TS_DEVICE udevadm settle ts_finalize_subtest } # MBR test_label_resize dos # GPT test_label_resize gpt $TS_CMD_WIPEFS -a ${TS_DEVICE} &> /dev/null udevadm settle ts_init_subtest "dos-unsorted" # create layout where partition #4 is the last on disk (by offset) # and there is freespace at the end of the disk. Note that #4 is not the last # partno on the disk. The libfdisk has to be able to check for the free space # independently on the partno, only offset+size matters. $TS_CMD_SFDISK --no-reread ${TS_DEVICE} >> $TS_OUTPUT 2>&1 <> $TS_OUTPUT 2>&1 ts_fdisk_clean $TS_DEVICE udevadm settle ts_finalize_subtest ts_finalize