From 1895d10a7539d055a4e0206af1e7a9e5ea32a4f7 Mon Sep 17 00:00:00 2001 From: Juerg Haefliger 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