Linux Mintでハイバネーション機能を有効化する

Linux

ハイバネーション(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であれば10242GBであれば20484GBであれば40968GBであれば819216GBであれば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

参考にさせていただいたサイト様

How to Enable Hibernate Function in Ubuntu 24.04 & 22.04 LTS | UbuntuHandbook
How to Enable Hibernate Option in Linux Mint 20.x & 21 - FOSTips
Contents: Verify if hibernate works: Enable Hibernate in Linux Mint 20/21 Add Hibernate Option in Shutdown menu Want to ...
ubuntuでサスペンド、ハイバネートが勝手に復帰する現象の対策(linux mint、xubuntu、lubuntu)
ubuntuでサスペンド、ハイバネートが勝手に復帰される現象の対策(linux mint、xubuntu、lubuntu)

コメント