LVM 卷解除**挂载和激活状态**并重建LUKS加密卷

LVM 卷(lv_storagelv_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**

  1. 在已解锁的根分区创建一个安全的密钥文件:
    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
    
  2. 将这个密钥文件添加到 vdb 的 LUKS 密钥槽中(会要求你输入一次 vdb 当前的加密密码):
    sudo cryptsetup luksAddKey /dev/vdb /etc/luks-keys/vdb_key
    
  3. 配置 /etc/crypttab 让系统启动时自动读取该文件:
    # <target name>  <source device>         			<key file>               <options>
    vdb_crypt        /dev/vdb或者UUID=你的vdb_UUID       /etc/luks-keys/vdb_key     luks
    
  4. /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才表明已经完成加密。

:warning: 如果你的服务器环境复杂,建议用uuid代替/etc/crypttab里的/dev/vdb

blkid /dev/vdb

复制uuid,填入/etc/crypttab里替代/dev/vdb

第六步 启用 查看

systemctl daemon-reload
mount -a
touch /data/test
ls /data

如果没有错误,应该可以看到新建的文件。

:light_bulb: 核心建议

强烈建议这个在已加密分区放置密钥的方案。如果需要配置成两次输入密码,可搜索其他关于luks的教程。
需要注意输错密码,可能容易导致 initramfs 超时而彻底卡死,需要再进vnc救砖。
使用cryptsetup luksOpen 敲入密码,挂载硬盘,然后键入 exit 让系统继续启动。
原因:
手动输入vdb密码的方案会修改 /etc/crypttab ,给 vdb 加了 initramfs 参数,这修改了规则,是告诉 initramfs:“你不仅要解密根盘,还必须把数据盘也解密了,才能交接控制权。大约90-120秒超时过后,安全机制会触发,采取默认的故障处理动作:中断当前所有的启动脚本,并将系统抛入一个本地的紧急恢复环境(Emergency Shell 或 BusyBox 提示符)。并杀掉网络。

而使用密钥只要保护好根分区的安全,数据盘的安全性是同等级的。