Debian Linuxのノートパソコンでハイバネート

 Linuxカーネルには、スワップ領域にメモリの内容を書き出してハイバネートする機能がある。 必要な要件等は以下の通り。

  • 十分な大きさのスワップデバイスまたはファイルを用意する。(メモリ容量と同じくらいあれば良いが、そこまでなくても良いという情報もある。)
  • カーネル起動オプションresume=デバイス名を加えカーネルを起動。
  • uswsuspを利用することもできるが、利用しなくても良い。その場合initrdをいじる必要は無い。

参考文献

以下、実際の設定

/etc/fstab (該当部分のみ)

#/dev/nvme0n1p7	swap    swap    defaults  0 0
/swapfile	swap	swap	defaults  0 0

デバイスをスワップとして使う場合と、ファイル(/swapfile)をスワップとして使う場合とで必要なカーネルパラメータが異なる。 後者の場合はresume_offsetも必要。オフセット値は以下のように確認可能。この場合86093824がオフセット値。

sudo filefrag -v /swapfile

Filesystem type is: ef53
File size of /swapfile is 17179869184 (4194304 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..    2047:   86093824..  86095871:   2048:            
   1:     2048..    4095:   86167552..  86169599:   2048:   86095872:
   2:     4096..    8191:   86155264..  86159359:   4096:   86169600:
以下略

/boot/grub/grub.cfg (該当部分のみ)

menuentry "Debian Linux resume-test1" {
linux /boot/vmlinuz root=/dev/nvme0n1p6 vga=0x305 panic=10 net.ifnames=0 biosdevname=0 resume=/dev/nvme0n1p7 
}
menuentry "Debian Linux resume-test2" {
linux /boot/vmlinuz root=/dev/nvme0n1p6 vga=0x305 panic=10 net.ifnames=0 biosdevname=0 resume=/dev/nvme0n1p6 resume_offset=86093824
}

ノートパソコンのディスプレイを閉じたときにhibernateする設定

/etc/acpi/events/lid_down

event=button[ /]lid 
action=/etc/acpi/lid_down.sh 

/etc/acpi/lid_down.sh

#!/bin/sh

grep -q closed /proc/acpi/button/lid/*/state
if [ $? -eq 0 ]
then
	echo platform > /sys/power/disk ; echo disk > /sys/power/state
fi

exit 0

以上で、ハイバネートできることを確認した。

Comments