Merge lp:~smoser/cloud-utils/trunk.1762748-gpt-big-disks into lp:cloud-utils

Proposed by Scott Moser
Status: Merged
Merged at revision: 323
Proposed branch: lp:~smoser/cloud-utils/trunk.1762748-gpt-big-disks
Merge into: lp:cloud-utils
Diff against target: 74 lines (+16/-11)
2 files modified
bin/growpart (+9/-7)
test/test-growpart (+7/-4)
To merge this branch: bzr merge lp:~smoser/cloud-utils/trunk.1762748-gpt-big-disks
Reviewer Review Type Date Requested Status
Registry Administrators Pending
Review via email: mp+343155@code.launchpad.net

Commit message

growpart: fix bug that stopped GPT disks from being grown past 2TB.

MBR max size was being applied to GPT partitioned disks.
The change here is to only apply the mbr max (and only WARN about the limit)
if the format is MBR.

To post a comment you must log in.
324. By Scott Moser

test/test-growpart: adjust to allow for reading sizes from environment.

this allows recreate and easier size/test with:
  sudo PATH=./bin:$PATH PT_TYPE=gpt \
     DISK_SIZE_NEW=5T DISK_SIZE_ORIG=1T ./test/test-growpart

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'bin/growpart'
--- bin/growpart 2016-09-01 17:46:40 +0000
+++ bin/growpart 2018-04-13 03:23:49 +0000
@@ -244,8 +244,6 @@
244 fi244 fi
245245
246 debug 1 "$sector_num sectors of $sector_size. total size=${disk_size} bytes"246 debug 1 "$sector_num sectors of $sector_size. total size=${disk_size} bytes"
247 [ $(($disk_size/512)) -gt $mbr_max_512 ] &&
248 debug 1 "WARN: disk is larger than 2TB. additional space will go unused."
249247
250 rqe sfd_dump sfdisk --unit=S --dump "${DISK}" >"${dump_out}" ||248 rqe sfd_dump sfdisk --unit=S --dump "${DISK}" >"${dump_out}" ||
251 fail "failed to dump sfdisk info for ${DISK}"249 fail "failed to dump sfdisk info for ${DISK}"
@@ -289,17 +287,21 @@
289 [ -n "${max_end}" ] ||287 [ -n "${max_end}" ] ||
290 fail "failed to get max_end for partition ${PART}"288 fail "failed to get max_end for partition ${PART}"
291289
292 mbr_max_sectors=$((mbr_max_512*$((sector_size/512))))
293 if [ "$max_end" -gt "$mbr_max_sectors" ]; then
294 max_end=$mbr_max_sectors
295 fi
296
297 if [ "$format" = "gpt" ]; then290 if [ "$format" = "gpt" ]; then
298 # sfdisk respects 'last-lba' in input, and complains about291 # sfdisk respects 'last-lba' in input, and complains about
299 # partitions that go past that. without it, it does the right thing.292 # partitions that go past that. without it, it does the right thing.
300 sed -i '/^last-lba:/d' "$dump_out" ||293 sed -i '/^last-lba:/d' "$dump_out" ||
301 fail "failed to remove last-lba from output"294 fail "failed to remove last-lba from output"
302 fi295 fi
296 if [ "$format" = "mbr" ]; then
297 mbr_max_sectors=$((mbr_max_512*$((sector_size/512))))
298 if [ "$max_end" -gt "$mbr_max_sectors" ]; then
299 max_end=$mbr_max_sectors
300 fi
301 [ $(($disk_size/512)) -gt $mbr_max_512 ] &&
302 debug 1 "WARN: disk is larger than 2TB." \
303 "additional space will go unused."
304 fi
303305
304 local gpt_second_size="33"306 local gpt_second_size="33"
305 if [ "${max_end}" -gt "$((${sector_num}-${gpt_second_size}))" ]; then307 if [ "${max_end}" -gt "$((${sector_num}-${gpt_second_size}))" ]; then
306308
=== modified file 'test/test-growpart'
--- test/test-growpart 2016-09-01 19:29:00 +0000
+++ test/test-growpart 2018-04-13 03:23:49 +0000
@@ -5,7 +5,10 @@
5[ "$(id -u)" = "0" ] ||5[ "$(id -u)" = "0" ] ||
6 { echo "sorry, must be root"; exit 1; }6 { echo "sorry, must be root"; exit 1; }
77
8PT_TYPE="${PT_TYPE:-dos}" # dos or gpt or sfdisk-gpt8PT_TYPE="${PT_TYPE:-dos}" # dos or gpt
9size=${DISK_SIZE_NEW:-1000M}
10osize=${DISK_SIZE_ORIG:-500M}
11
9MP=""12MP=""
10LODEV=""13LODEV=""
11TEMP_D=""14TEMP_D=""
@@ -43,15 +46,15 @@
43img="${TEMP_D}/disk.img"46img="${TEMP_D}/disk.img"
44mp="${TEMP_D}/mp"47mp="${TEMP_D}/mp"
4548
46size=1000M49echo "Partitioning $PT_TYPE orig_size=$osize grow_size=$size."
47osize=500M50echo "growpart is $(which growpart)"
48rm -f $img51rm -f $img
49[ ! -e $mp ] || rmdir $mp || { echo "failed rmdir $mp"; exit 1; }52[ ! -e $mp ] || rmdir $mp || { echo "failed rmdir $mp"; exit 1; }
50mkdir $mp53mkdir $mp
5154
52truncate --size $osize "$img"55truncate --size $osize "$img"
5356
54label_flag="--label=${PT_TYPE:-dos}"57label_flag="--label=${PT_TYPE}"
55echo "2048," | rq sfdisk $label_flag --force --unit=S "$img"58echo "2048," | rq sfdisk $label_flag --force --unit=S "$img"
5659
57truncate --size "$size" "$img"60truncate --size "$size" "$img"

Subscribers

People subscribed via source and target branches