ハイバネーション(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 といった具合です。自分の環境だと実装メモリが64GBなので2倍の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
SIZEの項目が指定したswapファイル容量になっていれば大丈夫です。自分の場合は、さっきの手順で128GBに設定したので128GBと表示されています。

ルートパーティションの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
$ sudo reboot
これでハイバネーション機能の有効化は完了です。
ハイバネーションのシャットダウンメニューへの追加と削除
シャットダウンメニューに「ハイバーネート (H)」の項目が出現しない場合は、以下の手順で追加することができます。
ハイバネーションをシャットダウンメニューに追加
まず polkitd-pkla をインストールします。
$ sudo apt -y install polkitd-pkla
万が一 /etc/polkit-1/localauthority/50-local.d ディレクトリが存在しない場合は、以下のように作成します。
$ sudo mkdir -p /etc/polkit-1/localauthority/50-local.d
以下のコマンドを実行して /etc/polkit-1/localauthority/50-local.d ディレクトリに enable-hibernate.pkla を作成します。
$ echo '[Enable hibernate]'$'\n''Identity=unix-user:*'$'\n''Action=org.freedesktop.upower.hibernate;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'$'\n''ResultActive=yes'$'\n' | sudo tee /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
[Ctrl] + [Alt] + [Del] を押してシャットダウンメニューを開き、左から2番目に「ハイバーネート(H)」が追加されていることを確認します。

ハイバネーションをシャットダウンメニューから削除
もしシャットダウンメニューから「ハイバーネート(H)」を消したくなった場合は、先程の enable-hibernate.pkla ファイルを以下のように削除すれば大丈夫です。(ハイバネーション機能は無効になりません。)
$ sudo rm /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
ハイバネーションの動作確認
最後に以下のコマンドを実行してシステムがハイバーネートするか確かめます (シャットダウンメニューの「ハイバーネート(H)」をクリックしてもOK)。
$ sudo systemctl hibernate
無事にハイバーネートされれば、作業は完了となります。
ハイバネーション機能の有効化と無効化の切り替え
一度上記の作業をすれば、systemctlコマンド一発で簡単にハイバネーション機能を有効化・無効化ができます。
### ハイバネーション機能の有効化 ###
$ sudo systemctl unmask hibernate.target
### ハイバネーション機能の無効化 ###
$ sudo systemctl mask hibernate.target
参考にさせていただいたサイト様


コメント