From b8020184823194a1853b000ef9aeb8e4d12d733f Mon Sep 17 00:00:00 2001 From: Nikolay Amiantov Date: Thu, 5 Mar 2015 18:06:51 +0300 Subject: [PATCH] stage-1: fix hibernation (close #6675) Fixes #6617. --- nixos/modules/system/boot/stage-1-init.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/nixos/modules/system/boot/stage-1-init.sh b/nixos/modules/system/boot/stage-1-init.sh index a34a1360265..5af644279e5 100644 --- a/nixos/modules/system/boot/stage-1-init.sh +++ b/nixos/modules/system/boot/stage-1-init.sh @@ -177,20 +177,24 @@ fi if test -e /sys/power/resume -a -e /sys/power/disk; then if test -n "@resumeDevice@"; then resumeDev="@resumeDevice@" + resumeInfo="$(udevadm info -q property "$resumeDev" )" else for sd in @resumeDevices@; do # Try to detect resume device. According to Ubuntu bug: # https://bugs.launchpad.net/ubuntu/+source/pm-utils/+bug/923326/comments/1 # When there are multiple swap devices, we can't know where will hibernate # image reside. We can check all of them for swsuspend blkid. - if [ "$(udevadm info -q property "$sd" | sed -n 's/^ID_FS_TYPE=//p')" = "swsuspend" ]; then + resumeInfo="$(udevadm info -q property "$sd" )" + if [ "$(echo "$resumeInfo" | sed -n 's/^ID_FS_TYPE=//p')" = "swsuspend" ]; then resumeDev="$sd" break fi done fi - if test -n "$resumeDev"; then - readlink -f "$resumeDev" > /sys/power/resume 2> /dev/null || echo "failed to resume..." + if test -e "$resumeDev"; then + resumeMajor="$(echo "$resumeInfo" | sed -n 's/^MAJOR=//p')" + resumeMinor="$(echo "$resumeInfo" | sed -n 's/^MINOR=//p')" + echo "$resumeMajor:$resumeMinor" > /sys/power/resume 2> /dev/null || echo "failed to resume..." fi fi