154 lines
3.7 KiB
Bash
Executable file
154 lines
3.7 KiB
Bash
Executable file
#!/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>> $TS_ERRLOG
|
|
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>> $TS_ERRLOG
|
|
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>> $TS_ERRLOG
|
|
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>> $TS_ERRLOG <<EOF
|
|
label: dos
|
|
label-id: 0xda2e45ac
|
|
device: ${TS_DEVICE}
|
|
unit: sectors
|
|
|
|
${TS_DEVICE}1 : start= 2048, size= 2048, type=83
|
|
${TS_DEVICE}2 : start= 4096, size= 2048, type=83
|
|
${TS_DEVICE}3 : start= 6144, size= 102400, type=5
|
|
${TS_DEVICE}4 : start= 108544, size= 2048, type=83
|
|
${TS_DEVICE}5 : start= 8192, size= 2048, type=83
|
|
${TS_DEVICE}6 : start= 12288, size= 96256, type=83
|
|
EOF
|
|
udevadm settle
|
|
# enlarge to use all space behind partition #4
|
|
echo ',+,' | $TS_CMD_SFDISK --no-reread -N 4 ${TS_DEVICE} >> $TS_OUTPUT 2>> $TS_ERRLOG
|
|
ts_fdisk_clean $TS_DEVICE
|
|
udevadm settle
|
|
ts_finalize_subtest
|
|
|
|
ts_finalize
|