--- init.orig 2012-12-01 14:03:39.344538490 +0100 +++ init 2012-12-01 14:01:12.526373970 +0100 @@ -69,6 +69,7 @@ LUKSDEV=$(cat /luksdev) LUKSKEY=$(cat /lukskey) RESUMEDEV=$(cat /resumedev) +RESOFFSET=$(cat /resoffset) WAIT=$(cat /wait-for-root) KEYMAP=$(cat /keymap) INIT=/sbin/init @@ -269,18 +270,35 @@ umount -l /mountkey rmdir /mountkey 2>/dev/null fi - - # Resume state from swap - if [ "$RESUMEDEV" != "" ]; then - if ls -l $RESUMEDEV | grep -q "^l" ; then - #RESUMEDEV=$(ls -l $RESUMEDEV | awk '{ print $NF }') - RESUMEDEV=$(readlink -f $RESUMEDEV) - fi - echo "Trying to resume from $RESUMEDEV" - RESMAJMIN=$(ls -l $RESUMEDEV | tr , : | awk '{ print $5$6 }') - echo $RESMAJMIN > /sys/power/resume - fi - + +if [ "$RESUMEDEV" != "" ]; then + # be lvm aware + RESUMEDEV=$(readlink -f ${RESUMEDEV} | awk -F '/' '{ print $3 }') + if [ -r "/sys/class/block/${RESUMEDEV}/dev" ] ; then + # try sysfs + read RESMAJMIN < "/sys/class/block/${RESUMEDEV}/dev" + elif [ -r "/proc/partitions" ] ; then + # otherwise run through /proc/partitions + while read m n b d jnk ; do + if [ "$d" = "${RESUMEDEV}" ] ; then + RESMAJMIN="$m:$n" + break + fi + done < "/proc/partitions" + fi + if [ -z "${RESMAJMIN}" ] ; then + # Device does not exist (not found in /proc/partitions) + exit 99 + fi + + if [ -n "${RESOFFSET}" ]; then + echo "Try resume from ${RESMAJMIN}:${RESOFFSET}" + echo "${RESMAJMIN}:${RESOFFSET}" > /sys/power/resume + else + echo "${RESMAJMIN}" > /sys/power/resume + fi +fi +