先日パソコンを買ったわけだがこれは SSD 120GB + HDD 2TB というストレージ構成。普通に考えて SSD に OS をインストールするわけだが Debian を最小の手作業かつ汎用的な手段でセットアップするという記事でも書いた通り個人的に自分のデータを置くあらゆるストレージは必ず暗号化するというポリシーがある。そこで SSD には GNU/Linux に備わっている暗号化 LVM を有効にしてインストールする。さてここで問題になるのが HDD であり、これも暗号化した上で LVM に追加しなければならない。この記事では既存の暗号化済み LVM に新しくストレージを暗号化して追加させる方法について記述する。なお新しいストレージは /dev/sdb として認識されている前提で書く。

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

これは基本的にこちらの記事の通りである。

まずはボリュームを乱数で埋める。これは他にもやり方があるし、だいたい元のストレージが以前から暗号化されているなら読み取り不可なのでそのまま使えるということも有り得る。

shred -n 1 -v /dev/sdb

次に鍵を生成する。 256 ビット長なので 32 バイトを指定。生成した鍵は root だけ読み取れるようにしておく。

dd if=/dev/random of=/etc/lvm/lvm.seckey bs=1 count=32
chmod 400 /etc/lvm/lvm.seckey

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

cryptsetup --cipher aes-cbc-essiv:sha256 --key-size 256 luksFormat /dev/sdb
# 大文字で YES を回答する
# パスフレーズを 2 回入力する
cryptsetup luksAddKey /dev/sdb /etc/lvm/lvm.seckey
# パスフレーズを 1 回入力する

これで暗号化されたパーティションが作成された。次のように確認する。 UUID を確認しておく。

# cryptsetup luksDump /dev/sdb
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 と揃えてわかりやすくすると良いだろう。

cryptsetup --key-file /etc/lvm/lvm.seckey luksOpen /dev/sdb sdb_crypt

LVM への追加とファイルシステムの作成

これも基本的にはこちらの記事の通り。

dm-crypt デバイスに PV を作成する。

pvcreate /dev/mapper/sdb_crypt

作成した PV を既存の VG に参加させる。

vgextend raytrek-vg /dev/mapper/sdb_crypt

成功したら vgscan や pvscan で状況を確認する。

# vgscan
  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 で拡張可能なエクステント数を確認しておく。

# 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 を作成する。領域の無駄のないようにエクステント数を引数に指定するのが推奨である。

lvcreate -l 476931 --name data raytrek-vg

これで LV ができたので、 LV 上にファイルシステムを作成する。

mkfs -t ext4 /dev/raytrek-vg/data

mount コマンドを発行してマウントができることを確認する。

mkdir /data
mount /dev/raytrek-vg/data /data
df -T -h

成功したなら一旦 umount しておく。

自動マウントの設定

最後に起動時に自動マウントされるよう各種ファイルを編集する。デバイス名はなるべく UUID で指定するのが推奨である。

まず /etc/fstab を編集する。

/dev/mapper/raytrek--vg-root /               ext4    relatime,errors=remount-ro 0       1
/dev/mapper/raytrek--vg-data /data               ext4    relatime,errors=remount-ro 0       1

また /etc/crypttab に次の一行を追加する。

sdb_crypt UUID=8553a6e4-4f0f-4230-8ddb-ec2f4b68e4eb /etc/lvm/lvm.seckey luks

mount -a すれば自動的にマウントされることが確認できるはずである。

# 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 をデータ領域として自由に利用できるようになった。

投稿日: 作成者: 774