PostgreSQLサーバー用ディレクトリを暗号化ファイルシステムに置き換えてみる~論理ボリューム作成編
前置き
やりたいことは、前に書いた
と同じなのだが、
- HDDを追加せずに、論理ボリュームlv_rootを分割して、片方を論理ボリュームlv_pgsqlとして暗号化ファイルシステムにする
という制約を課す(というか、元々やりたかったのはこっち)。
事前確認
lv_rootの情報を確認しておく。
# df -m Filesystem 1M-blocks Used Available Use% Mounted on /dev/mapper/VolGroup-lv_root 14023 1005 12300 8% / tmpfs 372 0 372 0% /dev/shm /dev/sda1 477 57 395 13% /boot # lvdisplay --units m /dev/mapper/VolGroup-lv_root --- Logical volume --- LV Path /dev/VolGroup/lv_root LV Name lv_root VG Name VolGroup LV UUID SHPvKC-d2fE-Rb2D-5lpT-eqly-QWAB-rGLf3z LV Write Access read/write LV Creation host, time localhost.localdomain, 2015-11-07 11:53:33 +0900 LV Status available # open 1 LV Size 14376.00 MiB Current LE 3594 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 #
下準備
いずれにしてもPostgreSQLサーバーは一旦止めないといけないし、lv_rootを分割するにはOSを停止しないといけないので、以下を実行する。
# chkconfig postgresql off # sync;sync;sync;shutdown -h now
OSをシャットダウンしたら、lv_rootを分割するために、インストールメディアを挿入してRescueモードで再起動する。
起動したら、以下の手順でシェルを起動する。
Rescue installed system
を選択してEnterキーを押すChoose a Language
⇒English
Keyboard Type
⇒jp106
Setup Networking
⇒No
Rescue
⇒Skip
shell Start shell
を選択
lv_rootの分割
bash-4.1# lvm vgchange -a y 2 logical volume(s) in volume group "VolGroup" now active bash-4.1# fsck.ext4 -f /dev/mapper/VolGroup-lv_root e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes blocks, and sizes (略) bash-4.1# resize2fs /dev/mapper/VolGroup-lv_root 6184M resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/VolGroup-lv_root to 1583104 (4k) blocks. The filesystem on /dev/mapper/VolGroup-lv_root is now 1583104 blocks long. bash-4.1# lvm lvreduce -L6184M /dev/mapper/VolGroup-lv_root WARNING: Reducing active logical volume to 6.04GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you realy want to reduce lv_root? [y/n]: y Size of logical volume VolGroup/lv_root changed from 14.04 GiB (3594 extents) to 6.04 GiB (1546 extends). Logical volume lv_root successfully resized bash-4.1# exit
メニューに戻ったら、インストールメディアを抜いた後、reboot
を選択して再起動する。
空き領域の確認
ちゃんと空き領域が確保できたかどうかを確認する。
# lvdisplay --units m /dev/mapper/VolGroup-lv_root --- Logical volume --- LV Path /dev/VolGroup/lv_root LV Name lv_root VG Name VolGroup LV UUID SHPvKC-d2fE-Rb2D-5lpT-eqly-QWAB-rGLf3z LV Write Access read/write LV Creation host, time localhost.localdomain, 2015-11-07 11:53:33 +0900 LV Status available # open 1 LV Size 6184.00 MiB Current LE 1546 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 # vgdisplay --units m --- Volume group --- VG Name VolGroup System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 15880.00 MiB PE Size 4.00 MiB Total PE 3970 Alloc PE / Size 1922 / 7688.00 MiB Free PE / Size 2048 / 8192.00 MiB VG UUID n0127i-W87x-Y9GI-CAT9-60yD-1ZQz-J9KQ9b #
lv_rootが縮小され、8GiBの空き領域が確保された事が確認できる。
暗号化ファイルシステムの作成と自動接続
論理ボリュームの作成
PostgreSQL用のデータディレクトリなので、lv_pgsqlとして論理ボリュームを作成する。
# lvcreate -L 8192M -n lv_pgsql VolGroup Logical volume "lv_pgsql" created. # lvdisplay --units m --- Logical volume --- LV Path /dev/VolGroup/lv_root LV Name lv_root VG Name VolGroup LV UUID SHPvKC-d2fE-Rb2D-5lpT-eqly-QWAB-rGLf3z LV Write Access read/write LV Creation host, time localhost.localdomain, 2015-11-07 11:53:33 +0900 LV Status available # open 1 LV Size 6184.00 MiB Current LE 1546 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 --- Logical volume --- LV Path /dev/VolGroup/lv_swap LV Name lv_swap VG Name VolGroup LV UUID 221tmz-bcIA-Tafg-kUvM-xxwv-8uID-qiJSpr LV Write Access read/write LV Creation host, time localhost.localdomain, 2015-11-07 11:53:40 +0900 LV Status available # open 1 LV Size 1504.00 MiB Current LE 376 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 --- Logical volume --- LV Path /dev/VolGroup/lv_pgsql LV Name lv_pgsql VG Name VolGroup LV UUID WrnmIg-daJ1-Xlnr-AJ0e-ciCZ-QeXT-GxaZSq LV Write Access read/write LV Creation host, time CentOS6, 2015-11-07 13:54:04 +0900 LV Status available # open 0 LV Size 8192.00 MiB Current LE 2048 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2 #
暗号化ファイルシステムの作成
前回とほぼ同じだが再掲。
# cryptsetup luksFormat -h sha256 /dev/mapper/VolGroup-lv_pgsql WARNING! ======== This will overwrite data on /dev/mapper/VolGroup-lv_pgsql irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: Verify passphrase: # cryptsetup luksOpen /dev/mapper/VolGroup-lv_pgsql lv_pgsql_crypt Enter passphrase for /dev/mapper/VolGroup-lv_pgsql: # mkfs -t ext4 /dev/mapper/lv_pgsql_crypt mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 524288 inodes, 2096640 blocks 104832 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2147483648 64 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 30 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. # cryptsetup luksClose lv_pgsql_crypt #
試しにマウント
# cryptsetup luksOpen /dev/mapper/VolGroup-lv_pgsql lv_pgsql_crypt Enter passphrase for /dev/mapper/VolGroup-lv_pgsql: # mount /dev/mapper/lv_pgsql_crypt /mnt/ # ls /mnt lost+found # umount /mnt # cryptsetup luksClose lv_pgsql_crypt #
自動接続の設定
前回とほぼ同じだが再掲。
# dd if=/dev/random of=/etc/lvm/lvm.seckey bs=1 count=32 32+0 records in 32+0 records out 32 bytes (32 B) copied, 0.0398393 s, 0.8 kB/s # chmod 400 /etc/lvm/lvm.seckey # cryptsetup luksAddKey /dev/mapper/VolGroup-lv_pgsql /etc/lvm/lvm.seckey Enter any passphrase: # cryptsetup --key-file /etc/lvm/lvm.seckey luksOpen /dev/mapper/VolGroup-lv_pgsql lv_pgsql_crypt # cryptsetup luksDump /dev/mapper/VolGroup-lv_pgsql (中略) UUID: 6069746a-025f-4158-963b-c729fe047281 (中略) # vi /etc/crypttab + lv_pgsql_crypt UUID=6069746a-025f-4158-963b-c729fe047281 /etc/lvm/lvm.seckey luks # vi /etc/fstab + /dev/mapper/lv_pgsql_crypt /var/lib/pgsql ext4 defaults 1 1 #
PostgreSQL用ディレクトリの移行
# mv /var/lib/pgsql /var/lib/pgsql_original.yyyy-mm-dd # mkdir /var/lib/pgsql # mount /var/lib/pgsql # chown postgres:postgres /var/lib/pgsql # chmod go-rwx /var/lib/pgsql # ( cd /var/lib/pgsql_original.yyyy-mm-dd ; tar czf - . ) | ( cd /var/lib/pgsql ; tar xzf - )
PostgreSQLサーバーの起動
# service postgresql start # chkconfig postgresql on