目的
Storage を 2個 使って、disk1 を System disk, disk2 を Data disk とする。ディスクはすべて LUKS 暗号化する。 disk2 は disk1 で os を起動途中に、LUKS 複合化され、自動マウントするように設定する。disk2 は 2,3 年で式年遷宮することを見越して手順を残す。
環境
key | value |
---|---|
ディストリビューション | Ubuntu Server 24.04 LTS |
disk1 | system disk |
disk2 | data disk |
/ |
disk1 |
/data |
disk2 |
いったん、パーティション分割はこんな感じにしておく
lvm と luks の設定
a. disk1 の設定
disk1 にはすでに Ubuntu Server がインストール済みで、LUKS 暗号化済みあること。
もし未設定の場合は、インストーラーの「暗号化ディスク」を選択してインストールすること。
b. disk2 の設定
1. データディスクの確認
接続されたディスクを確認する
lsblk
例として、/dev/sdb
と認識されたとする
2. データディスクを LUKS で暗号化
注意: 以下の操作はディスク上の全データを消去します。必要なデータはバックアップしてください。
sudo cryptsetup luksFormat /dev/sdb
プロンプトに従い、パスフレーズを設定します。
3. LUKS デバイスの開放
暗号化されたデータディスクを開放し、名前を付けます(例: data_disk
)。
sudo cryptsetup open /dev/sdb data_disk
4. LVM の設定
LVM を使用して柔軟なディスク管理を実現します。
sudo pvcreate /dev/mapper/data_disk sudo vgcreate data_vg /dev/mapper/data_disk sudo lvcreate -l 100%FREE -n data_lv data_vg
5. ファイルシステムの作成
例として ext4 を使用します。
sudo mkfs.ext4 /dev/data_vg/data_lv
2. データディスクの自動解除とマウント
システム起動時にデータディスクを自動的に解除(decrypt)し、マウントするための設定を行います。
a. 鍵ファイルの作成と設定
データディスクの自動解除には鍵ファイルを使用します。
1. 鍵ファイルの作成
# コマンドでパスフレーズを作る場合 sudo dd if=/dev/urandom of=/root/.data_disk_key bs=4096 count=1 # 主導でパスフレーズを作る場合 echo 'パスフレーズ' | sudo tee /root/.data_disk_key # 権限設定 sudo chmod 600 /root/.data_disk_key
2. 鍵ファイルを LUKS に追加
sudo cryptsetup luksAddKey /dev/sdb /root/.data_disk_key
プロンプトが表示されたら、現在のパスフレーズを入力します。
b. /etc/crypttab の編集
データディスクを自動的に解除するために、/etc/crypttab
ファイルにエントリを追加します。
1. データディスクにラベルを付ける
ディスクラベルを設定すると、UUID に依存せずラベルで管理できます。
sudo e2label /dev/data_vg/data_lv data_disk_label
2. /etc/crypttab
を編集
sudo vim /etc/crypttab
以下の行を追加します(UUID を実際の値に置き換えてください):
data_disk LABEL=data_disk_label /root/.data_disk_key luks
c. /etc/fstab の編集
データディスクを /data
にマウントするために、/etc/fstab
ファイルにエントリを追加します。
1. ファイルシステムのラベル設定(オプション)
ディスクラベルを設定すると、UUID に依存せずラベルで管理できます。
設定済みである場合はスキップ
sudo e2label /dev/data_vg/data_lv data_disk_label
2. /etc/fstab
を編集
sudo vim /etc/fstab
以下の行を追加します(ラベルを使用する場合):
LABEL=data_disk_label /data ext4 defaults 0 2
d. マウントポイントの作成
sudo mkdir /data sudo chmod 755 /data
e. 自動マウントの確認
設定が正しいか確認するために、以下のコマンドを実行します。
sudo mount -a
エラーが出なければ設定は正しいです。
f. システムの再起動と確認
システムを再起動し、自動的にデータディスクが解除・マウントされることを確認します。
sudo reboot
再起動後、以下のコマンドで確認します。
df -hT
3. データディスクの交換を容易にするための設定
データディスクを定期的に新しいディスクに交換する際、手間を最小限に抑えるための設定を行います。
a. ディスクラベルの設定
ディスクラベルを設定しておくと、ディスク交換時に UUID を変更せずに同じラベルを設定することで、crypttab
や fstab
の設定を変更する必要がありません。
sudo e2label /dev/data_vg/data_lv data_disk_label # /etc/crypttab data_disk LABEL=data_disk_label /root/.data_disk_key luks # /etc/fstab LABEL=data_disk_label /data ext4 defaults 0 2
b. ディスク交換手順
新しいディスクにデータをコピーし、交換を行う手順を以下に示します。
1. 新しいデータディスクの準備
新しいディスク(例: /dev/sdc
)を接続し、LUKS と LVM を設定します。
sudo cryptsetup luksFormat /dev/sdc sudo cryptsetup open /dev/sdc new_data_disk sudo pvcreate /dev/mapper/new_data_disk sudo vgcreate new_data_vg /dev/mapper/new_data_disk sudo lvcreate -l 100%FREE -n new_data_lv new_data_vg sudo mkfs.ext4 /dev/new_data_vg/new_data_lv sudo e2label /dev/new_data_vg/new_data_lv data_disk_label
2. 新しいディスクに鍵ファイルを追加
sudo cryptsetup luksAddKey /dev/sdc /root/.data_disk_key
3. 新しいディスクを一時的にマウント
sudo mkdir /mnt/new_data
sudo mount /dev/mapper/new_data_disk /mnt/new_data
4. rsync を使用してデータをコピー
sudo rsync -aAXv /data/ /mnt/new_data/
オプションの説明:
5. コピーの検証
ディレクトリ構造やファイル数、サイズを比較してコピーが正しく行われたことを確認します。
sudo diff -r /data /mnt/new_data
差異がないことを確認します。
6. 新しいディスクを /data に設定
既にラベルを設定している場合、/etc/crypttab と /etc/fstab の設定は変更不要です。
# 例: /etc/crypttab はラベル使用のため変更不要 # data_disk LABEL=data_disk_label /root/.data_disk_key luks # /etc/fstab もラベル使用のため変更不要 # LABEL=data_disk_label /data ext4 defaults 0 2
7. システムの再起動と確認
システムを再起動し、新しいディスクが正しくマウントされていることを確認します。
sudo reboot
再起動後、以下のコマンドで確認します。
df -hT
8. 旧ディスクの取り外し
新しいディスクが正しく動作していることを確認した後、旧ディスク(例: /dev/sdb
)を安全に取り外します。
shutdown して、取り外す
もし、live で取り外すなら以下
sudo cryptsetup close data_disk
sudo umount /data
# 物理的にディスクを取り外す
注意
本記事はほぼ ChatGPT o1-mini で書いており、筆者の手で加筆しております。