ubuntu 20.04でハイバーネーション

ubuntuをノートPCで使っているのですがハイバーネーション(古い?)に相当する機能が見たありません。ほぼAC電源につなげて使ってはいますが、スタンバイだけだとバッテリが切れたときに落ちてしまうのでは・・・。というわけでハイバネーションを有効にする作業をしてみました。

https://gihyo.jp/admin/serial/01/ubuntu-recipe/0637?page=2

https://askubuntu.com/questions/1240123/how-to-enable-the-hibernate-option-in-ubuntu-20-04
確認

 

ハイバネーションをサポートするためには、kernelの起動パラメーターにswap情報を追加する必要があるそうです。

  1. スワップパーティションのUUID指定する
  2. スワップファイル名を指定する
  3. スワップファイルのUUIDを指定する
  4. スワップファイルの存在するパーティションのUUIDとスワップファイルのオフセットを指定する

どれがサポートされているかは環境に依存するようです。私の環境で/etc/fstabファイルを覗いてもスワップパティションはありませんでした。2,3,4をいろいろためしたところ、4にてうまく行くようになりました。

スワップファイルの再作成

$ sudo swapoff -a
$ sudo fallocate -l 8g /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile

swap-offset swap-offset swap-offset
(8GBのスワップファイルを作成する場合)

kernel起動パラメーターの調査

$findmnt -no UUID -T /swapfile && sudo swap-offset /swapfile
03430175-b7a6-4847-b678-c6413e36e2ae
resume offset = 57939968
(swap-offsetが使えない場合のresumeの確認)
$sudo filefrag -v /swapfile |grep " 0:"| awk '{print $4}'
34816..

kernel起動パラメーター修正

$sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

を以下のように修正

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=371b1a95-d91b-49f8-aa4a-da51cbf780b2 resume_offset=23888916"

その後、grubの起動ファイルを更新してから一度再起動します。

&sudo update-grub

hibernateの動作確認

$sudo systemctl hibernate

ハイバネーションしてPCの電源が切れます。
その後電源をいれてkernel起動パラメーターがうまく反映されれば、作業環境が元通りになります。私は上記2,3,4をいろいろ試しましたが。


(2023/3/30追記)
これより以下の操作は方法は推奨されていないみたいです。

https://github.com/systemd/systemd/issues/25269

> Looks like you are messing manually with your systemd there thinking
> I wouldn’t suggest messing like that before you absolutely know what your’re doing…

Ubuntu 22.04を再構築しようとしているのでそこで動作を見てみたいと思います

(追記ここまで)

スリープ後一定時間でバイバネーションに移行

swap-offset
毎回ハイバネーションをさせると起動までに時間がかかりますし、SSDの寿命を縮めてしまいます。suspend-then-hibernateという仕組みを有効にします。

$sudo vi /etc/systemd/sleep.conf

#HibernateDelaySec=180minの部分をコメントを外して適当な時間を設定します。

sudo ln -s /usr/lib/systemd/system/systemd-suspend-then-hibernate.service \
/etc/systemd/system/systemd-suspend.service

あとはスリープの動作をsuspend-then-hibernateの置換します。

 

これでWindowsノートPCと比較しても違和感なく使えるようになります。

コメントを残す


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。