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
1=== modified file 'bin/growpart'
2--- bin/growpart 2016-09-01 17:46:40 +0000
3+++ bin/growpart 2018-04-13 03:23:49 +0000
4@@ -244,8 +244,6 @@
5 fi
6
7 debug 1 "$sector_num sectors of $sector_size. total size=${disk_size} bytes"
8- [ $(($disk_size/512)) -gt $mbr_max_512 ] &&
9- debug 1 "WARN: disk is larger than 2TB. additional space will go unused."
10
11 rqe sfd_dump sfdisk --unit=S --dump "${DISK}" >"${dump_out}" ||
12 fail "failed to dump sfdisk info for ${DISK}"
13@@ -289,17 +287,21 @@
14 [ -n "${max_end}" ] ||
15 fail "failed to get max_end for partition ${PART}"
16
17- mbr_max_sectors=$((mbr_max_512*$((sector_size/512))))
18- if [ "$max_end" -gt "$mbr_max_sectors" ]; then
19- max_end=$mbr_max_sectors
20- fi
21-
22 if [ "$format" = "gpt" ]; then
23 # sfdisk respects 'last-lba' in input, and complains about
24 # partitions that go past that. without it, it does the right thing.
25 sed -i '/^last-lba:/d' "$dump_out" ||
26 fail "failed to remove last-lba from output"
27 fi
28+ if [ "$format" = "mbr" ]; then
29+ mbr_max_sectors=$((mbr_max_512*$((sector_size/512))))
30+ if [ "$max_end" -gt "$mbr_max_sectors" ]; then
31+ max_end=$mbr_max_sectors
32+ fi
33+ [ $(($disk_size/512)) -gt $mbr_max_512 ] &&
34+ debug 1 "WARN: disk is larger than 2TB." \
35+ "additional space will go unused."
36+ fi
37
38 local gpt_second_size="33"
39 if [ "${max_end}" -gt "$((${sector_num}-${gpt_second_size}))" ]; then
40
41=== modified file 'test/test-growpart'
42--- test/test-growpart 2016-09-01 19:29:00 +0000
43+++ test/test-growpart 2018-04-13 03:23:49 +0000
44@@ -5,7 +5,10 @@
45 [ "$(id -u)" = "0" ] ||
46 { echo "sorry, must be root"; exit 1; }
47
48-PT_TYPE="${PT_TYPE:-dos}" # dos or gpt or sfdisk-gpt
49+PT_TYPE="${PT_TYPE:-dos}" # dos or gpt
50+size=${DISK_SIZE_NEW:-1000M}
51+osize=${DISK_SIZE_ORIG:-500M}
52+
53 MP=""
54 LODEV=""
55 TEMP_D=""
56@@ -43,15 +46,15 @@
57 img="${TEMP_D}/disk.img"
58 mp="${TEMP_D}/mp"
59
60-size=1000M
61-osize=500M
62+echo "Partitioning $PT_TYPE orig_size=$osize grow_size=$size."
63+echo "growpart is $(which growpart)"
64 rm -f $img
65 [ ! -e $mp ] || rmdir $mp || { echo "failed rmdir $mp"; exit 1; }
66 mkdir $mp
67
68 truncate --size $osize "$img"
69
70-label_flag="--label=${PT_TYPE:-dos}"
71+label_flag="--label=${PT_TYPE}"
72 echo "2048," | rq sfdisk $label_flag --force --unit=S "$img"
73
74 truncate --size "$size" "$img"

Subscribers

People subscribed via source and target branches