Juerg Haefliger 0c00cdf
From 1895d10a7539d055a4e0206af1e7a9e5ea32a4f7 Mon Sep 17 00:00:00 2001
Juerg Haefliger 0c00cdf
From: Juerg Haefliger <juerg.haefliger@hp.com>
Juerg Haefliger 0c00cdf
Date: Wed, 25 Mar 2015 13:59:20 +0100
Juerg Haefliger 0c00cdf
Subject: [PATCH] Support new sfdisk version 2.26
Juerg Haefliger 0c00cdf
Juerg Haefliger 0c00cdf
The sfdisk usage with version 2.26 changed. Specifically, the option
Juerg Haefliger 0c00cdf
--show-pt-geometry and functionality for CHS have been removed.
Juerg Haefliger 0c00cdf
Also, restoring a backup MBR now needs to be done using dd.
Juerg Haefliger 0c00cdf
---
Juerg Haefliger 0c00cdf
 bin/growpart | 28 ++++++++++------------------
Juerg Haefliger 0c00cdf
 1 file changed, 10 insertions(+), 18 deletions(-)
Juerg Haefliger 0c00cdf
Juerg Haefliger 0c00cdf
diff --git a/bin/growpart b/bin/growpart
Juerg Haefliger 0c00cdf
index 595c40b..d4c995b 100755
Juerg Haefliger 0c00cdf
--- a/bin/growpart
Juerg Haefliger 0c00cdf
+++ b/bin/growpart
Juerg Haefliger 0c00cdf
@@ -28,7 +28,6 @@ PART=""
Juerg Haefliger 0c00cdf
 PT_UPDATE=false
Juerg Haefliger 0c00cdf
 DRY_RUN=0
Juerg Haefliger 0c00cdf
 
Juerg Haefliger 0c00cdf
-MBR_CHS=""
Juerg Haefliger 0c00cdf
 MBR_BACKUP=""
Juerg Haefliger 0c00cdf
 GPT_BACKUP=""
Juerg Haefliger 0c00cdf
 _capture=""
Juerg Haefliger 0c00cdf
@@ -133,7 +132,8 @@ bad_Usage() {
Juerg Haefliger 0c00cdf
 }
Juerg Haefliger 0c00cdf
 
Juerg Haefliger 0c00cdf
 mbr_restore() {
Juerg Haefliger 0c00cdf
-	sfdisk --no-reread "${DISK}" ${MBR_CHS} -I "${MBR_BACKUP}"
Juerg Haefliger 0c00cdf
+	dd if="${MBR_BACKUP}-${DISK#/dev/}-0x00000000.bak" of="${DISK}" bs=1 \
Juerg Haefliger 0c00cdf
+		conv=notrunc
Juerg Haefliger 0c00cdf
 }
Juerg Haefliger 0c00cdf
 
Juerg Haefliger 0c00cdf
 sfdisk_worked_but_blkrrpart_failed() {
Juerg Haefliger 0c00cdf
@@ -148,34 +148,26 @@ sfdisk_worked_but_blkrrpart_failed() {
Juerg Haefliger 0c00cdf
 
Juerg Haefliger 0c00cdf
 mbr_resize() {
Juerg Haefliger 0c00cdf
 	RESTORE_HUMAN="${TEMP_D}/recovery"
Juerg Haefliger 0c00cdf
-	MBR_BACKUP="${TEMP_D}/orig.save"
Juerg Haefliger 0c00cdf
+	MBR_BACKUP="${TEMP_D}/backup"
Juerg Haefliger 0c00cdf
 
Juerg Haefliger 0c00cdf
 	local change_out=${TEMP_D}/change.out
Juerg Haefliger 0c00cdf
 	local dump_out=${TEMP_D}/dump.out
Juerg Haefliger 0c00cdf
 	local new_out=${TEMP_D}/new.out
Juerg Haefliger 0c00cdf
 	local dump_mod=${TEMP_D}/dump.mod
Juerg Haefliger 0c00cdf
-	local tmp="${TEMP_D}/tmp.out"
Juerg Haefliger 0c00cdf
-	local err="${TEMP_D}/err.out"
Juerg Haefliger 0c00cdf
 
Juerg Haefliger 0c00cdf
-	local _devc cyl _w1 heads _w2 sectors _w3 tot dpart
Juerg Haefliger 0c00cdf
+	local tot dpart
Juerg Haefliger 0c00cdf
 	local pt_start pt_size pt_end max_end new_size change_info
Juerg Haefliger 0c00cdf
 
Juerg Haefliger 0c00cdf
-	# --show-pt-geometry outputs something like
Juerg Haefliger 0c00cdf
-	#     /dev/sda: 164352 cylinders, 4 heads, 32 sectors/track
Juerg Haefliger 0c00cdf
-	rqe sfd_geom sfdisk "${DISK}" --show-pt-geometry >"${tmp}" &&
Juerg Haefliger 0c00cdf
-		read _devc cyl _w1 heads _w2 sectors _w3 <"${tmp}" &&
Juerg Haefliger 0c00cdf
-		MBR_CHS="-C ${cyl} -H ${heads} -S ${sectors}" ||
Juerg Haefliger 0c00cdf
-		fail "failed to get CHS from ${DISK}"
Juerg Haefliger 0c00cdf
+	tot=$(sfdisk --list "${DISK}" | awk '{ print $(NF-1) ; exit }') ||
Juerg Haefliger 0c00cdf
+		fail "failed to get total number of sectors from ${DISK}"
Juerg Haefliger 0c00cdf
 
Juerg Haefliger 0c00cdf
-	tot=$((${cyl}*${heads}*${sectors}))
Juerg Haefliger 0c00cdf
+	debug 1 "total number of sectors of ${DISK} is ${tot}"
Juerg Haefliger 0c00cdf
 
Juerg Haefliger 0c00cdf
-	debug 1 "geometry is ${MBR_CHS}. total size=${tot}"
Juerg Haefliger 0c00cdf
-	rqe sfd_dump sfdisk ${MBR_CHS} --unit=S --dump "${DISK}" \
Juerg Haefliger 0c00cdf
+	rqe sfd_dump sfdisk --dump "${DISK}" \
Juerg Haefliger 0c00cdf
 		>"${dump_out}" ||
Juerg Haefliger 0c00cdf
 		fail "failed to dump sfdisk info for ${DISK}"
Juerg Haefliger 0c00cdf
-
Juerg Haefliger 0c00cdf
 	{
Juerg Haefliger 0c00cdf
-		echo "## sfdisk ${MBR_CHS} --unit=S --dump ${DISK}"
Juerg Haefliger 0c00cdf
+		echo "## sfdisk --dump ${DISK}"
Juerg Haefliger 0c00cdf
 		cat "${dump_out}"
Juerg Haefliger 0c00cdf
 	}  >"${RESTORE_HUMAN}"
Juerg Haefliger 0c00cdf
 	[ $? -eq 0 ] || fail "failed to save sfdisk -d output"
Juerg Haefliger 0c00cdf
@@ -237,7 +229,7 @@ mbr_resize() {
Juerg Haefliger 0c00cdf
 		exit 0
Juerg Haefliger 0c00cdf
 	fi
Juerg Haefliger 0c00cdf
 
Juerg Haefliger 0c00cdf
-	LANG=C sfdisk --no-reread "${DISK}" ${MBR_CHS} --force \
Juerg Haefliger 0c00cdf
+	LANG=C sfdisk --no-reread "${DISK}" --force \
Juerg Haefliger 0c00cdf
 		-O "${MBR_BACKUP}" <"${new_out}" >"${change_out}" 2>&1
Juerg Haefliger 0c00cdf
 	ret=$?
Juerg Haefliger 0c00cdf
 	[ $ret -eq 0 ] || RESTORE_FUNC="mbr_restore"
Juerg Haefliger 0c00cdf
-- 
Juerg Haefliger 0c00cdf
2.1.4
Juerg Haefliger 0c00cdf