ハイバネーション(hibernation)、あるいは休止状態とは、作業途中の内容や今までの状態をHDDなどのストレージに保存して、電源を落とす機能です。再度電源を入れるとストレージから内容を読み込んで復元するので作業を途中から再開することができます。
ここでは、Linux Mint でハイバネーション機能を有効にする方法を備忘録として書き残しておきます。環境は Linux Mint 22 “Wilma” MATE Edition です。
ハイバネーション機能が有効かどうか確認する
まず最初に、ハイバネーション機能が動作するかどうかを確認します。
$ sudo systemctl hibernate
もしエラーが出たり正常に動作しなかった場合は、以下の手順を踏んで有効化させます。
swapファイル容量を増やす
ハイバネーション機能を使うには実装メモリの2倍以上のswap容量が必要になりますが、インストール直後のswapファイル容量は2GBしかありません。そこで以下の手順でswapファイルの容量を増やします。
swapファイルの無効化・削除
まず既存のswapファイルを無効化し削除します。
$ sudo swapoff /swapfile && sudo rm /swapfile
新しくswapファイルを作成
次に、新たなswapファイルを作成します。この時「count=」の部分にswapファイルの容量を指定します。1GBであれば1024、2GBであれば2048、4GBであれば4096、8GBであれば8192、16GBであれば16384 といった具合です。自分の環境だと実装メモリが32GBなので4倍の128GB(131072)を設定しています。
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=131072 status=progress
rootにのみ読み取り書き取り権限を付与
$ sudo chmod 600 /swapfile
ファイルをスワップとしてフォーマットし有効化
$ sudo mkswap /swapfile && sudo swapon /swapfile
swapファイルが自動起動するように設定
/etc/fstab に /swapfile が記述されているか確認します。
$ cat /etc/fstab | grep "/swapfile"
以下のようになっていれば大丈夫です。
/swapfile none swap sw 0 0
もし、/swapfile が /etc/fstab に記述されていなかったら、次のコマンドを実行して /etc/fstab に追記します。
$ echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
指定したswapファイル容量になっているか確認
$ sudo swapon --show
ルートパーティションのUUIDを確認
$ findmnt / -o UUID
自分の場合だとUUIDは「999576fb-7b16-4856-b546-de444387be73」でした。
swapファイルのオフセットを確認
次にswapファイルのオフセットを確認します。
$ sudo filefrag -v /swapfile | grep " 0:" | awk '{print $4}'
自分の場合、swapファイルのオフセットは「111626240」でした。
grubファイルを編集
/etc/default/grub を適当なテキストエディタで開きます。ここでは自分が使い慣れている nano を使います。
$ sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash” を以下のように書き換えて保存します。<UUID>と<OFFSET>は先程確認したものに置き換えてください。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=<UUID> resume_offset=<OFFSET>"
例として、自分の環境では以下のようになります。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=999576fb-7b16-4856-b546-de444387be73 resume_offset=111626240"
grubの設定を反映させます。
$ sudo update-grub
ハイバネーションをシャットダウンメニューに追加
まず polkitd-pkla をインストールします。
$ sudo apt -y install polkitd-pkla
テキストエディタで /etc/polkit-1/localauthority/50-local.d/com.linuxmint.enable-hibernate.pkla を開きます。ファイルやディレクトリが存在しない場合は、以下のように作成します。
$ sudo mkdir -p /etc/polkit-1/localauthority/50-local.d
$ sudo nano /etc/polkit-1/localauthority/50-local.d/com.linuxmint.enable-hibernate.pkla
以下をコピペして保存します。
[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes
[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes
最後にシステムを再起動させます。
$ sudo reboot
ハイバネーションの動作確認
システムが再起動したら [Ctrl] + [Alt] + [Del] を押してシャットダウンメニューを開き「ハイバネート(H)」が追加されていることを確認します。
最後に以下のコマンドを実行してシステムがハイバネートするか確かめます。
$ sudo systemctl hibernate
無事にハイバネートされれば、作業は完了となります。
コメント