LVM 卷(lv_storage 和 lv_swap)解除挂载和激活状态,重建LUKS加密卷。
Linux 为了保护数据,不允许你对正在使用的磁盘进行格式化。需要先“拆除”原LVM结构,再进行加密。请按照以下步骤操作:
第一步:清理当前的挂载和 LVM 状态
按顺序执行以下命令,解除对 vdb 的占用:
# 1. 卸载数据盘
umount /data
# 2. 停止 Swap
swapoff /dev/vg_data/lv_swap
# 3. 删除逻辑卷 (LV)
lvremove /dev/vg_data/lv_storage
lvremove /dev/vg_data/lv_swap
# 4. 删除卷组 (VG)
vgremove vg_data
# 5. 删除物理卷 (PV) 标签
pvremove /dev/vdb
第二步:重新进行 LUKS 加密
现在 vdb 应该是“干净”且未被占用的状态了,可以开始加密:
# 1. 格式化为 LUKS 加密卷
# 此时应该不会再报 "device in use" 了
cryptsetup luksFormat /dev/vdb
# 2. 开启加密卷,映射为 vdb_crypt
cryptsetup open /dev/vdb vdb_crypt
第三步:在加密卷之上重建 LVM
现在我们要把 LVM 建在加密层 /dev/mapper/vdb_crypt 之上,而不是直接建在 /dev/vdb 上:
# 1. 创建 PV
pvcreate /dev/mapper/vdb_crypt
# 2. 创建 VG
vgcreate vg_data /dev/mapper/vdb_crypt
# 3. 创建 LV (根据你的 lsblk,这里分配 8G 给 swap,剩余给存储)
lvcreate -L 8G -n lv_swap vg_data
lvcreate -l 100%FREE -n lv_storage vg_data
# 4. 格式化
mkswap /dev/vg_data/lv_swap
mkfs.ext4 /dev/vg_data/lv_storage
第四步:在已加密的/vda(根分区)里新建密钥文件以支持重启后自动解锁
使用 Keyfile 自动解锁 vdb**
- 在已解锁的根分区创建一个安全的密钥文件:
sudo mkdir -p /etc/luks-keys sudo dd if=/dev/urandom of=/etc/luks-keys/vdb_key bs=1024 count=4 sudo chmod 0400 /etc/luks-keys/vdb_key - 将这个密钥文件添加到
vdb的 LUKS 密钥槽中(会要求你输入一次vdb当前的加密密码):sudo cryptsetup luksAddKey /dev/vdb /etc/luks-keys/vdb_key - 配置
/etc/crypttab让系统启动时自动读取该文件:# <target name> <source device> <key file> <options> vdb_crypt /dev/vdb或者UUID=你的vdb_UUID /etc/luks-keys/vdb_key luks - 在
/etc/fstab中配置自动挂载/dev/mapper/vdb_crypt。
/dev/vg_data/lv_swap none swap sw 0 0
/dev/vg_data/lv_storage /data ext4 defaults 0 2
刷新 Initramfs
update-initramfs -u
使用体验: 重启后,使用SSH 进入 Dropbear,运行 cryptroot-unlock 并输入 sda 的密码。系统启动后会自动解锁并挂载 vdb。
第五步:验证。
执行
lsblk -f
查看输出的vdb信息里是否有crypt后缀。还可以
sudo cryptsetup isLuks /dev/vdb
echo $?
显示0才表明已经完成加密。
如果你的服务器环境复杂,建议用uuid代替/etc/crypttab里的/dev/vdb
blkid /dev/vdb
复制uuid,填入/etc/crypttab里替代/dev/vdb
第六步 启用 查看
systemctl daemon-reload
mount -a
touch /data/test
ls /data
如果没有错误,应该可以看到新建的文件。
核心建议
强烈建议这个在已加密分区放置密钥的方案。如果需要配置成两次输入密码,可搜索其他关于luks的教程。
需要注意输错密码,可能容易导致 initramfs 超时而彻底卡死,需要再进vnc救砖。
使用cryptsetup luksOpen 敲入密码,挂载硬盘,然后键入 exit 让系统继续启动。
原因:
手动输入vdb密码的方案会修改 /etc/crypttab ,给 vdb 加了 initramfs 参数,这修改了规则,是告诉 initramfs:“你不仅要解密根盘,还必须把数据盘也解密了,才能交接控制权。大约90-120秒超时过后,安全机制会触发,采取默认的故障处理动作:中断当前所有的启动脚本,并将系统抛入一个本地的紧急恢复环境(Emergency Shell 或 BusyBox 提示符)。并杀掉网络。
而使用密钥只要保护好根分区的安全,数据盘的安全性是同等级的。