インストール時にディスク暗号化を施したUbuntu 22.04 LTSをパーティション上に休止(hibernate)させ、復帰させることができたのでメモ代わりに記しておきます。
作業は3ステップに分かれます。
- スワップ・パーティションの拡大
- カーネル・パラメータの変更
- ユーザー権限で休止できるようにする
Ubuntu 22.04を休止できるようにする設定記事はたくさんありますが、なぜかみなスワップ・ファイルです。私の手元ではインストーラがスワップ・パーティションを作るため、やり方を調べた次第です。
環境と必要なもの
- Ubuntu 22.04
- インストーラ(ubiquity)によってディスク暗号化している
- Kubuntu 22.04 LTSのインストール・ディスク
最後は書き間違いではありません。Kubuntuです。KubuntuのKDE Partition Managerは暗号化パーティションをいとも簡単にリサイズできます。この記事の根幹になるところです。
スワップパーティションの拡大
最初にスワップ・パーティションを拡大します。Linuxは休止する際に実メモリの内容をスワップ・パーティションの内部に保存します。ですので、スワップ・パーティションは実メモリよりも大きくなければなりません。
コンピュータを起動した状態でパーティションを変更するのは無理ですので、インストールDVDをレスキュー・ディスクとして使います。繰り返しますが、このDVDはKubuntuのインストール用のものです。私はUSB SSDにインストールしたUbuntuを使ってHyper-Vで実験したので、USB SSDをディスクとVMにマウントし、ISOイメージから起動しました。
KubuntuのDVDから起動したら、konsoleを開いてlsblkコマンドでブロック・デバイスの一覧を見ます。すると、SSDらしきデバイスが表示されます。私のシステムはUSB SSDにインストールしており、下の図ではそれがsda として表示されています。sr0とあるのはKubuntuのDVDです。
sdaの下にパーティションがいくつかありますが、このうちsda3が232.9GB中230.7GBも使用しており、これが暗号化されたパーティションだと見当をつけることができます。そこでcryptsetupコマンドで暗号を解除します。
sudo cryptsetup luksOpen /dev/sda3 sda3
/dev/sda3のところは自分のシステムのディスクに合わせます。その後ろのsda3は適当な名前でもかまいませんが、ディスク名と同じにするのが無難でしょう。
cryptsetupはディスクの暗号を解除するためにユーザーに入力を求めます。この暗号はUbuntuのインストール時に指定したディスク暗号化パスフレーズです。
cryptsetupがエラーメッセージ無しに実行できたら、もう一度lsblkコマンドを実行します。すると、暗号化されていると見当をつけていたパーティションが復号され、内部にvgubuntu-rootとvgubuntu-swap-1の二つのパーティションが現れます(下図)。
次にGUIメニューからKDE Partition Managerを起動します。
KDE Partition Managerの左側にはSSDやHDDのデバイス一覧が表示されます。一番上のSSDを選ぶと右側に詳細が表示されます。このデバイスは/dev/sdaとしてマウントされており、dev/sda3は暗号化パーティションであり、vgubuntuと名付けられていることがわかります。これは上での作業結果と一致します。
次に左側のデバイスからvgubuntuを選ぶと、先ほどの復号で現れたrootとswap_1が右側に現れます。これらはパーティションであり、右クリックして現れるメニューからResize/Moveすることができます。
リサイズの方法は簡単なので割愛します。このリサイズではスワップ・パーティションのサイズを実メモリサイズ以上にしてください。今時はSSDも大きいですし、細かい数字が面倒ならば実メモリの2, 3割増しくらいにしておけばいいでしょう。
カーネル・パラメータの変更
カーネル・パラメータを変更することで、レジューム時に正しいパーティションから保存データを引き出すことができるようになります。この作業は、対象ディスクで起動して行います。
まず、スワップ・パーティションのUUIDを調べます。前の節でも使ったlsblkコマンドに -o NAME,UUIDオプションをつけて呼び出します。
図でいえば、6c12458e-1171…の部分がスワップ・パーティションのUUIDです。これをコピーしておきます。
次に、GRUBの設定を変えてカーネル・パラメータを渡します。まず/etc/default/grubファイルを開きます。
sudo gedit /etc/default/grub
開いたら、GRUB_CMDLINE_LINUX_DEFAULTを定義している行を以下のように変更します。XXXXXXXX-XXXX…は、先ほど記録したスワップ・パーティションのUUIDです。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
変更を保存したら、GRUBをアップデートして再起動します。
sudo update-grub sudo reboot
再起動が完了したら、以下のコマンドで休止できることを確認してください。
sudo systemctl hibernate
ユーザー権限で休止できるようにする
休止するたびにいちいちsudoでパスワードを入力していられませんので、ユーザー権限で休止できるようにします。
この作業は一つだけで、/etc/polkit-1/localauthority/50-local.d/com.ubuntu.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
あとはGnomeの Settings -> Power で電源ボタンの動作にhibernateを割り当てれば、電源ボタンを押すだけで休止するようになります。
まとめ
ディスク暗号化を施したUbuntu 22.04で休止(hibernation)を行う方法を調べました。非常に面倒な作業が複数ステップありますが、とりわけ面倒なパーティション操作についてはKubuntuのツールを使うことで簡単になります。
最後に、以下のディレクトリを参考にしました。