Merge pull request #4244 from abbradar/resume

Replace resumeDevice with autodetection of hibernation partition
This commit is contained in:
Eelco Dolstra 2014-09-24 18:05:53 +02:00
commit 38d57b4a94
2 changed files with 28 additions and 9 deletions

View File

@ -168,9 +168,24 @@ if test -e /sys/power/tuxonice/resume; then
fi
fi
if test -n "@resumeDevice@" -a -e /sys/power/resume -a -e /sys/power/disk; then
echo "@resumeDevice@" > /sys/power/resume 2> /dev/null || echo "failed to resume..."
echo shutdown > /sys/power/disk
if test -e /sys/power/resume -a -e /sys/power/disk; then
if test -n "@resumeDevice@"; then
resumeDev="@resumeDevice@"
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
resumeDev="$sd"
break
fi
done
fi
if test -n "$resumeDev"; then
echo "$resumeDev" > /sys/power/resume 2> /dev/null || echo "failed to resume..."
fi
fi

View File

@ -181,6 +181,9 @@ let
inherit (config.boot.initrd) checkJournalingFS
preLVMCommands postDeviceCommands postMountCommands kernelModules;
resumeDevices = map (sd: if sd ? device then sd.device else "/dev/disk/by-label/${sd.label}")
(filter (sd: sd ? label || hasPrefix "/dev/" sd.device) config.swapDevices);
fsInfo =
let f = fs: [ fs.mountPoint (if fs.device != null then fs.device else "/dev/disk/by-label/${fs.label}") fs.fsType fs.options ];
in pkgs.writeText "initrd-fsinfo" (concatStringsSep "\n" (concatMap f fileSystems));
@ -220,13 +223,14 @@ in
options = {
boot.resumeDevice = mkOption {
type = types.nullOr types.str;
default = null;
example = "8:2";
type = types.str;
default = "";
example = "/dev/sda3";
description = ''
Device for manual resume attempt during boot, specified using
the device's major and minor number as
<literal><replaceable>major</replaceable>:<replaceable>minor</replaceable></literal>.
Device for manual resume attempt during boot. This should be used primarily
if you want to resume from file. Specify here the device where the file
resides. You should also use <varname>boot.kernelParams</varname> to specify
<literal><replaceable>resume_offset</replaceable></literal>.
'';
};