先日パソコンを買ったわけだがこれは SSD 120GB + HDD 2TB というストレージ構成。普通に考えて SSD に OS をインストールするわけだが Debian を最小の手作業かつ汎用的な手段でセットアップするという記事でも書いた通り個人的に自分のデータを置くあらゆるストレージは必ず暗号化するというポリシーがある。そこで SSD には GNU/Linux に備わっている暗号化 LVM を有効にしてインストールする。さてここで問題になるのが HDD であり、これも暗号化した上で LVM に追加しなければならない。この記事では既存の暗号化済み LVM に新しくストレージを暗号化して追加させる方法について記述する。なお新しいストレージは /dev/sdb として認識されている前提で書く。
暗号化パーティションの作成
これは基本的にこちらの記事の通りである。
まずはボリュームを乱数で埋める。これは他にもやり方があるし、だいたい元のストレージが以前から暗号化されているなら読み取り不可なのでそのまま使えるということも有り得る。
次に鍵を生成する。 256 ビット長なので 32 バイトを指定。生成した鍵は root だけ読み取れるようにしておく。
chmod 400 /etc/lvm/lvm.seckey
次に LUKS パーティションの作成をする。
# 大文字で YES を回答する
# パスフレーズを 2 回入力する
cryptsetup luksAddKey /dev/sdb /etc/lvm/lvm.seckey
# パスフレーズを 1 回入力する
これで暗号化されたパーティションが作成された。次のように確認する。 UUID を確認しておく。
LUKS header information for /dev/sdb
Version: 1
Cipher name: aes
Cipher mode: cbc-essiv:sha256
Hash spec: sha1
Payload offset: 4096
MK bits: 256
〜 省略 〜
MK iterations: 77500
UUID: 8553a6e4-4f0f-4230-8ddb-ec2f4b68e4eb
〜 省略 〜
Key Slot 0: ENABLED
〜 省略 〜
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
dm-crypt デバイスの作成をする。 sdb_crypt の部分は好きな名前で良い。既存の LVM と揃えてわかりやすくすると良いだろう。
LVM への追加とファイルシステムの作成
これも基本的にはこちらの記事の通り。
dm-crypt デバイスに PV を作成する。
作成した PV を既存の VG に参加させる。
成功したら vgscan や pvscan で状況を確認する。
Reading all physical volumes. This may take a while...
Found volume group "raytrek-vg" using metadata type lvm2
# pvscan
PV /dev/mapper/sda5_crypt VG raytrek-vg lvm2 [119.00 GiB / 0 free]
PV /dev/mapper/sdb_crypt VG raytrek-vg lvm2 [1.82 TiB / 0 free]
Total: 2 [1.94 TiB] / in use: 2 [1.94 TiB] / in no VG: 0 [0 ]
また pvdisplay で拡張可能なエクステント数を確認しておく。
--- Physical volume ---
PV Name /dev/mapper/sda5_crypt
VG Name raytrek-vg
PV Size 119.00 GiB / not usable 0
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 30464
Free PE 0
Allocated PE 30464
PV UUID Sho5wy-eiSd-TZEU-y7Xs-7vTY-JaX6-i3dwe1
--- Physical volume ---
PV Name /dev/mapper/sdb_crypt
VG Name raytrek-vg
PV Size 1.82 TiB / not usable 3.09 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 476931
Free PE 476931
Allocated PE 0
PV UUID YqLai4-8IS3-IH6J-AVhC-aT8J-K6Bx-NhsPYV
上の例では 476931 が拡張可能であるとわかる。これをもとに VG に追加された PV 上に LV を作成する。領域の無駄のないようにエクステント数を引数に指定するのが推奨である。
これで LV ができたので、 LV 上にファイルシステムを作成する。
mount コマンドを発行してマウントができることを確認する。
mount /dev/raytrek-vg/data /data
df -T -h
成功したなら一旦 umount しておく。
自動マウントの設定
最後に起動時に自動マウントされるよう各種ファイルを編集する。デバイス名はなるべく UUID で指定するのが推奨である。
まず /etc/fstab を編集する。
/dev/mapper/raytrek--vg-data /data ext4 relatime,errors=remount-ro 0 1
また /etc/crypttab に次の一行を追加する。
mount -a すれば自動的にマウントされることが確認できるはずである。
# df -T -h
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/raytrek--vg-root ext4 86G 49G 36G 58% /
none tmpfs 4.0K 0 4.0K 0% /sys/fs/cgroup
udev devtmpfs 16G 4.0K 16G 1% /dev
tmpfs tmpfs 3.2G 1.2M 3.2G 1% /run
none tmpfs 5.0M 0 5.0M 0% /run/lock
none tmpfs 16G 156K 16G 1% /run/shm
none tmpfs 100M 28K 100M 1% /run/user
/dev/sda1 ext4 232M 46M 180M 21% /boot
/dev/mapper/raytrek--vg-data ext4 1.8T 68M 1.7T 1% /data
これで /data をデータ領域として自由に利用できるようになった。