Xubuntuをインストールした後にSSDを暗号化したくなった

やること

Xubuntuをインストールして使っていたけど、後からディスク(SSD)全体を暗号化したくなったときにやること。 同じSSDを使って暗号化するため、一度データは全部消す。システムを動かしたまま暗号化はできない。

この手順は、実機でやる前にKVM上のXubuntu 19.10でやった。

暗号化後に必要なものを、暗号化前のシステムでインストールしておく

sudo apt install lvm2 cryptsetup-initramfs

バックアップとパーティション作成

これは、USBからXubuntuを起動して行う。

まずは、バックアップ

sudo mkdir /backup
sudo mount -t ext4 /dev/vdb1 /backup
sudo mount -t ext4 -o ro /dev/vda2 /mnt
sudo apt install dump
sudo dump -0 -z -f /backup/root.dump /mnt
sudo umount /mnt
sudo umount /backup

次にパーティションを作成する。

sudo cgdisk /dev/vda

ここまで終わったら、システムを再起動する。 再起動しないで進めたら、cryptsetupの時にパーティションの容量が何故か少なくなった。 cgdiskの終了時にも警告が出るが、多分、カーネルが古いパーティションテーブルをキャッシュしているからだと思う。

暗号化パーティション作成

再起動が終わったら、パーティションを暗号化する。

sudo cryptsetup luksFormat /dev/vda3
sudo cryptsetup open /dev/vda3 vda3_crypt
sudo cryptsetup status vda3_crypt

暗号化したパーティション状にLVMのボリュームを作る。

sudo pvcreate /dev/mapper/vda3_crypt
sudo pvdisplay
sudo vgcreate vgxubuntu /dev/mapper/vda3_crypt
sudo vgdisplay
sudo lvcreate --size 1024m vgxubuntu -n swap
sudo lvcreate -l 100%FREE vgxubuntu -n root
sudo lvdisplay

作ったら、ext4でフォーマットする。

sudo mkfs -t ext4 -L boot /dev/vda2
sudo mkfs -t ext4 -L root /dev/mapper/vgxubuntu-root

swapも。

sudo mkswap /dev/mapper/vgxubuntu-swap

リストア

バックアップを元に戻す。

sudo mount -t ext4 -o noatime /dev/mapper/vgxubuntu-root /mnt
Sudo mkdir /backup
sudo mount -t ext4 -o ro /dev/vdb1 /backup
cd /mnt
sudo mkdir boot
sudo mount -t ext4 -o noatime /dev/vda2 /mnt/boot
sudo apt install dump
sudo restore -v -r -f /backup/root.dump
cd
sudo umount /backup /mnt/boot /mnt

crypttab, fstab, grub

起動できるように設定する。 マウントしてから設定する。

sudo mount -t ext4 -o noatime /dev/mapper/vgxubuntu-root /mnt
sudo mount -t ext4 -o noatime /dev/vda2 /mnt/boot
sudo mount -t vfat -o noatime /dev/vda1 /mnt/boot/efi

マウントしたら、crypttab, fstabを書き換える。 crypttabにはvda3をマウントするように設定しておく、 fstabは/に/dev/mapper/vgxubuntu-rootをマウントするようにする。 そのほか、swapなども忘れずに設定する。

最後に、grubとinitramfs。

sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mkdir /mnt/run/udev
sudo mount --bind /run/udev /mnt/run/udev

sudo chroot /mnt grub-install --efi-directory=/boot/efi --boot-directory=/boot --target=x86_64-efi --removable --recheck
sudo chroot /mnt update-initramfs -k all -u
sudo chroot /mnt update-grub 

これで終わり。

sudo umount /mnt/dev /mnt/proc /mnt/sys /mnt/run/udev /mnt/boot/efi /mnt/boot /mnt

再起動して、パスワードを入力すると、起動できる。