Encrypted Swap (LUKS) を含むディスクを拡張する
Live With Linux::tips
- TOP
- Articles
- Live With Linux
- Encrypted Swap (LUKS) を含むディスクを拡張する
序
前提として、Manjaro Linuxの話である。
インストール時に暗号化し、かつswapを作成すると、ルートファイルシステムとswapのふたつのパーティションがLUKSパーティションとして作られるようになっている。 そして、このディスクを拡張しようとしたとき、swapパーティションのほうが後方にあるため、ルートファイルシステムの拡張ができない。
さりとて、移動させることもできないため、拡張を断念する人もいるだろう。
実質、swapを作り直す必要があるのだが、少し複雑な手順になっているため、難しい部分がある。 そこで、今回このようなディスクの拡張を解説する。
手順
ライブディスクでの作業
ここでは2つ内蔵ディスクの間でより大きなものへ複製し、拡張するものとする。
まずは、2つの内蔵ディスクを両方取り付けた上でライブディスクで起動する。 Manjaroのライブイメージが良いだろう。
仮に複製元ディスクが/dev/sda
、複製先ディスクが/dev/sdb
であるとする。
まずはディスクそのものを複製する。
# cat /dev/sda > dev/sdb
次にディスクレイアウトを修正し、パーティションを作成する。 すべきことは
- ディスクレイアウトを修正
- 後方のswapパーティションを削除
- ルートファイルシステム用パーティションを後方にswap分の領域を残して拡張
- ルートファイルシステム用パーティションの後方にswap用パーティションを作成
# gparted /dev/sdb
swapパーティションを再作成したことでswapパーティションのUUIDが変わることに注意だ。
swapパーティションを準備する。 ここで使用するパスフレーズは、ルートファイルシステムと同じ「いつものパスフレーズ」である。
# cryptsetup luksFormat /dev/sdb3
# cryptsetup luksOpen /dev/sdb3 newSwap
# mkswap /dev/mapper/newSwap
続いて/etc/crypttab
と/etc/fstab
を修正する。
そのためにルートファイルシステムをマウントする。
# cryptsetup luksOpen /dev/sdb2 newManjaro
# mount /dev/mapper/newManjaro /mnt
# xed /mnt/etc/crypttab /mnt/etc/fstab
もともとのスワップパーティションのUUIDを確認する必要がある。
blkid
を用いて、複製元の/dev/sda3
を確認しよう。
# blkid
そのパーティションのUUIDに一致する次のようなエントリがcrypttab
にある。
luks-aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa UUID=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa /crypto_keyfile.bin luks
これを新しいswapパーティションのUUIDに変える。
crypttab
とfstab
の該当するすべてのUUIDを変更してもいいが、crypttab
のUUID=
だけを変えても動作する。
ここまでやったら再起動する。起動できないとかなり面倒なので間違いがないかよく確認すること。 また、再起動といっても、一度シャットダウンし、複製元ディスクは除去する。
再起動してからの処理
再起動すると一応起動はできるのだが、swapパーティションの取り扱いに失敗し、パスフレーズをもう一度聞かれる。
この状態で起動しログインする。
まずは、ルートファイルシステムを拡張しよう。
Manjaroのインストーラは標準でEXT4にするため、resize2fs
を使う。
$ sudo resize2fs /dev/mapper/luks-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
crypttab
でnameを変更した場合は、/etc/default/grub
のGRUB_CMDLINE_LINUX_DEFAULT
のUUIDも修正する。
さらに、Manjaroの場合、起動時にLUKSパスフレーズを尋ねるが、これによって/crypto_keyfile.bin
を生成し、これを鍵ファイルとしてLUKSをオープンするようになっている。そして、この鍵ファイルはパスフレーズと同じものではない。
そのため、鍵ファイルで開けるようにしないとswapパーティションのオープンに失敗する。
再起動したシステムのswapパーティションが/dev/sda3
であるならば、
$ sudo cryptsetup luksAddKey /dev/sda3 /crypto_keyfile.bin
として鍵ファイルを追加しておく。
さらに、/etc/openswap.conf
のswap_device
のUUIDを修正し、nameを変更した場合はcrypt_swap_name
も修正する。
名前は維持し、crypttabでマッピングを変更した場合は以上で大丈夫だが、名前も合わせて変更した場合はさらに手順が必要となる。
まず、/etc/default/grub
のGRUB_CMDLINE_LINUX_DEFAULT
で指定されているresume
デバイスを変更する。
その上で
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
として新しい設定を生成する。
必要のない作業のはずだが、一応カーネルの生成もしておく。
$ sudo mkinitcpio -P
続いてGrubの生成。 (Manjaroでない場合はGrub生成手順は異なる)
$ sudo udpate-grub