1From 1895d10a7539d055a4e0206af1e7a9e5ea32a4f7 Mon Sep 17 00:00:00 2001
2From: Juerg Haefliger <juerg.haefliger@hp.com>
3Date: Wed, 25 Mar 2015 13:59:20 +0100
4Subject: [PATCH] Support new sfdisk version 2.26
5
6The sfdisk usage with version 2.26 changed. Specifically, the option
7--show-pt-geometry and functionality for CHS have been removed.
8Also, restoring a backup MBR now needs to be done using dd.
9---
10 bin/growpart | 28 ++++++++++------------------
11 1 file changed, 10 insertions(+), 18 deletions(-)
12
13diff --git a/bin/growpart b/bin/growpart
14index 595c40b..d4c995b 100755
15--- a/bin/growpart
16+++ b/bin/growpart
17@@ -28,7 +28,6 @@ PART=""
18 PT_UPDATE=false
19 DRY_RUN=0
20
21-MBR_CHS=""
22 MBR_BACKUP=""
23 GPT_BACKUP=""
24 _capture=""
25@@ -133,7 +132,8 @@ bad_Usage() {
26 }
27
28 mbr_restore() {
29- sfdisk --no-reread "${DISK}" ${MBR_CHS} -I "${MBR_BACKUP}"
30+ dd if="${MBR_BACKUP}-${DISK#/dev/}-0x00000000.bak" of="${DISK}" bs=1 \
31+ conv=notrunc
32 }
33
34 sfdisk_worked_but_blkrrpart_failed() {
35@@ -148,34 +148,26 @@ sfdisk_worked_but_blkrrpart_failed() {
36
37 mbr_resize() {
38 RESTORE_HUMAN="${TEMP_D}/recovery"
39- MBR_BACKUP="${TEMP_D}/orig.save"
40+ MBR_BACKUP="${TEMP_D}/backup"
41
42 local change_out=${TEMP_D}/change.out
43 local dump_out=${TEMP_D}/dump.out
44 local new_out=${TEMP_D}/new.out
45 local dump_mod=${TEMP_D}/dump.mod
46- local tmp="${TEMP_D}/tmp.out"
47- local err="${TEMP_D}/err.out"
48
49- local _devc cyl _w1 heads _w2 sectors _w3 tot dpart
50+ local tot dpart
51 local pt_start pt_size pt_end max_end new_size change_info
52
53- # --show-pt-geometry outputs something like
54- # /dev/sda: 164352 cylinders, 4 heads, 32 sectors/track
55- rqe sfd_geom sfdisk "${DISK}" --show-pt-geometry >"${tmp}" &&
56- read _devc cyl _w1 heads _w2 sectors _w3 <"${tmp}" &&
57- MBR_CHS="-C ${cyl} -H ${heads} -S ${sectors}" ||
58- fail "failed to get CHS from ${DISK}"
59+ tot=$(sfdisk --list "${DISK}" | awk '{ print $(NF-1) ; exit }') ||
60+ fail "failed to get total number of sectors from ${DISK}"
61
62- tot=$((${cyl}*${heads}*${sectors}))
63+ debug 1 "total number of sectors of ${DISK} is ${tot}"
64
65- debug 1 "geometry is ${MBR_CHS}. total size=${tot}"
66- rqe sfd_dump sfdisk ${MBR_CHS} --unit=S --dump "${DISK}" \
67+ rqe sfd_dump sfdisk --dump "${DISK}" \
68 >"${dump_out}" ||
69 fail "failed to dump sfdisk info for ${DISK}"
70-
71 {
72- echo "## sfdisk ${MBR_CHS} --unit=S --dump ${DISK}"
73+ echo "## sfdisk --dump ${DISK}"
74 cat "${dump_out}"
75 } >"${RESTORE_HUMAN}"
76 [ $? -eq 0 ] || fail "failed to save sfdisk -d output"
77@@ -237,7 +229,7 @@ mbr_resize() {
78 exit 0
79 fi
80
81- LANG=C sfdisk --no-reread "${DISK}" ${MBR_CHS} --force \
82+ LANG=C sfdisk --no-reread "${DISK}" --force \
83 -O "${MBR_BACKUP}" <"${new_out}" >"${change_out}" 2>&1
84 ret=$?
85 [ $ret -eq 0 ] || RESTORE_FUNC="mbr_restore"
86--
872.1.4
88