ディスク暗号化したUbuntu 22.04をパーティションを使って休止させる

インストール時にディスク暗号化を施したUbuntu 22.04 LTSをパーティション上に休止(hibernate)させ、復帰させることができたのでメモ代わりに記しておきます。

作業は3ステップに分かれます。

  1. スワップ・パーティションの拡大
  2. カーネル・パラメータの変更
  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のインストール時に指定したディスク暗号化パスフレーズです。

lsblkコマンドでLUKSパーティションにあたりを付け、cryptsetup luksOpenコマンドで暗号を解除する

cryptsetupがエラーメッセージ無しに実行できたら、もう一度lsblkコマンドを実行します。すると、暗号化されていると見当をつけていたパーティションが復号され、内部にvgubuntu-rootとvgubuntu-swap-1の二つのパーティションが現れます(下図)。

暗号解除に成功すると、内部のパーティションが表示されるようになる

次にGUIメニューからKDE Partition Managerを起動します。

KDE Partition Managerの左側にはSSDやHDDのデバイス一覧が表示されます。一番上のSSDを選ぶと右側に詳細が表示されます。このデバイスは/dev/sdaとしてマウントされており、dev/sda3は暗号化パーティションであり、vgubuntuと名付けられていることがわかります。これは上での作業結果と一致します。

KDE Partion Managerでディスクを開くと、先ほどの/dev/sda3がvgubuntuにマウントされていると分かる

次に左側のデバイスからvgubuntuを選ぶと、先ほどの復号で現れたrootとswap_1が右側に現れます。これらはパーティションであり、右クリックして現れるメニューからResize/Moveすることができます。

vgubuntuを選択すると、rootとswap_1パーティションが見えるので、これらをリサイズする

リサイズの方法は簡単なので割愛します。このリサイズではスワップ・パーティションのサイズを実メモリサイズ以上にしてください。今時はSSDも大きいですし、細かい数字が面倒ならば実メモリの2, 3割増しくらいにしておけばいいでしょう。

カーネル・パラメータの変更

カーネル・パラメータを変更することで、レジューム時に正しいパーティションから保存データを引き出すことができるようになります。この作業は、対象ディスクで起動して行います。

まず、スワップ・パーティションのUUIDを調べます。前の節でも使ったlsblkコマンドに -o NAME,UUIDオプションをつけて呼び出します。

lsblk -o NAME,UUIDコマンドで、パーティションの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のツールを使うことで簡単になります。

最後に、以下のディレクトリを参考にしました。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください