あんパン

こしあん派

Windows 10とUbuntu 16.10 on LVM on LUKSを1つのマシンに同居させる

これの続き。

前回はrootとswapを別のパーティションに作成したため、起動時にパスワードを2回入れる必要があった。まあこれでも良いのだが、煩雑なので1回で済ませられるようにしたい。そこで、LVM on LUKSを試してみることにした。暗号化した1つのパーティション上にLVMで複数の論理ボリュームを作成し、rootとswapを割り当てる。

参考にしたのは以下。

www.youtube.com

上記動画ではUEFIブートを前提としていないので若干手順が異なる。


前回と同様にWindowsのディスク管理でCドライブを縮小しLinuxのインストール領域を作る。unetbootinでUbuntu Desktop 16.10のインストールディスクを作っておく。

一旦シャットダウンしてインストールディスクから起動し、GPartedで未割り当ての領域に以下のようにパーティションを作る。

  • /boot用のパーティション: ext2, 500MiB (ここでは/dev/sda5)
  • /用のパーティション: ext4, 残り領域すべて (ここでは/dev/sda6)

このとき、/用のパーティションにはlvmフラグを立てておく。

端末を開いて以下のコマンドを順番に実行する

$ sudo -i
# cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 2000 /dev/sda6
# cryptsetup luksOpen /dev/sda6 sda6-crypt
# pvcreate /dev/mapper/sda6-crypt
# vgcreate UbuntuVG /dev/mapper/sda6-crypt
# lvcreate -C y -L 16G -n swap UbuntuVG
# lvcreate -C n -l 100%FREE -n root UbuntuVG

やっていることは以下の通り

  • cryptsetup luksFormat/dev/sda6を暗号化
  • cryptsetup luksOpen/dev/mapper/sda6-cryptにマウント
  • pvcreateでLVMの物理ボリュームを初期化
  • vgcreateで物理ボリューム上にボリュームグループを作成
  • lvcreateでボリュームグループ上に論理ボリュームを2つ作成
    • -Cオプションは論理ボリュームを隣接させるかどうかのオプション
    • -Lオプションはボリュームのサイズを指定するオプションで、16Gなど数値で明示的に指定する
    • -lオプションはボリュームのサイズを指定するオプションで、100%FREEのように割合で指定できる

ここまで実行したら、インストーラを起動して通常通りインストールする。なお、ここではサードパーティのアプリケーション等をインストールしない。

インストール先の選択では「それ以外」を選んで

  • /dev/UbuntuVG/rootをext4で初期化して/をマウントポイントに指定
  • /dev/UbuntuVG/swapをswap領域に指定
  • /dev/sda5をext2で初期化して/bootをマウントポイントに指定
  • ブートローダのインストール先を/dev/sdaに指定

を行い、インストールを続ける。一通り実行したら、再起動せずにUbuntuの試用を続ける。

再び端末を開いて以下を行う

$ sudo -i
# mount /dev/mapper/UbuntuVG-root /mnt
# mount /dev/sda5 /mnt/boot
# mount /dev/sda2 /mnt/boot/efi
# cd /mnt
# mount --rbind /dev dev
# mount --rbind /sys sys
# mount --rbind /run run
# mount --bind /proc proc
# chroot . /bin/bash -l
(chroot)# echo "sda6-crypt UUID=/dev/sda6のUUID none luks,discard" > /etc/crypttab
(chroot)# update-initramfs -u
(chroot)# grub-install --recheck /dev/sda
(chroot)# grub-mkconfig -o /boot/grub/grub.cfg
(chroot)# exit
# cd 
# umount -l /mnt
# sync
# reboot

やっていることは以下の通り

  • mount/mnt以下に作成したパーティションたちをマウントする
    • Windows Boot Managerの/dev/sda2/mnt/boot/efiにマウントしておかないとgrub-install --recheck /dev/sdaで弾かれる
  • /etc/crypttabを作成する
    • 各項目はタブ区切り
    • sda6-cryptは先程luksOpenで使った名前をそのまま使う
    • UUIDは、別の端末を開いてsudo cryptsetup luksOpen /dev/sda6すると表示される
      • sudo blkid/dev/sda6のものを探しても良い
    • noneは鍵の場所指定。今回は鍵がないのでnoneとする
    • luks,discardはオプション。discardはSSDの場合のみつける
      • SSDのパフォーマンスを維持するためTRIMコマンドを使うかどうかの指定
  • grub-mkconfig -o /boot/grub/grub.cfgでブートメニューを更新

あとはchroot環境を抜けてマウントしてたパーティションをアンマウントし再起動する。Ubuntuを起動するとsda6-cryptのパスワードを1回だけ求められ、入力すると起動できる。


これでUbuntu 16.10 on LVM on LUKSの環境を整えられた。Windows側の領域をBitLockerで暗号化している場合は、これらの作業を終えたあとにWindowsを起動する時、初回のみBitLockerの回復キーを入力して起動する必要がある。