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