仅适用于VG中有足够空间可转移现有根分区和swap分区的情况。

不需要经历高风险的“缩小”步骤,也不需要进入救援模式(Rescue Mode)。你可以直接在系统正常运行的在线状态下,在旁边建好一个“加密的新房子”,把数据搬过去,然后直接重启切换。这是生产环境中最安全、停机时间最短的做法。

以下是为你量身定制的“新建与转移”完整步骤:

阶段一:准备新的加密卷 (在线操作)

1. 确认剩余空间
首先,确认你的 VG 确实有足够的空闲空间 (Free PE):

vgs

(你应该能看到 VFree 的大小。假设你的 VG 名字就叫 vg)

2. 创建新的逻辑卷 (LV)
利用空闲空间,创建两个新的 LV 用于替代原有的 root 和 swap。我们给新的 root 分配 25G,swap 5G。

lvcreate -L 25G -n root_crypt vg
lvcreate -L 5G -n swap_crypt vg

3. 对新卷进行 LUKS 加密
(在此过程中系统会提示你设置 LUKS 密码,请牢记)

cryptsetup luksFormat /dev/vg/root_crypt
cryptsetup luksFormat /dev/vg/swap_crypt

4. 打开加密卷

cryptsetup luksOpen /dev/vg/root_crypt crypt_root
cryptsetup luksOpen /dev/vg/swap_crypt crypt_swap

5. 格式化新卷

mkfs.ext4 /dev/mapper/crypt_root
mkswap /dev/mapper/crypt_swap

阶段二:数据克隆 (在线操作)

1. 挂载新的根目录

mount /dev/mapper/crypt_root /mnt

2. 同步数据 (第一次全量同步)
使用 rsync 将当前运行系统的数据克隆到新卷中。我们要排除掉虚拟文件系统和不需要同步的临时目录。
(建议:在执行此命令前,最好先停掉运行在机器上的高负载服务,如 Docker 容器、数据库等,以防数据在同步过程中发生变化)

rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt/

参数解释:-a 归档模式保留权限,-A 保留 ACL,-X 保留扩展属性,-v 显示过程。


阶段三:配置引导与解密环境 (关键步骤)

现在数据已经克隆过去了,我们需要告诉系统:下次启动时,去解密并挂载新的分区。

1. 挂载必要的目录并进入 chroot 环境
因为你的 /boot 是独立的 sda1 分区,需要把它挂载到新系统的对应位置。

mount /dev/sda1 /mnt/boot
for i in /dev /dev/pts /proc /sys /run; do mount --bind $i /mnt$i; done
chroot /mnt

(执行完 chroot 后,你现在的终端环境已经处于“新系统”中了)

2. 获取新底层 LV 的 UUID
你需要获取刚刚创建的底层逻辑卷(不是映射后的卷)的 UUID。

blkid /dev/vg/root_crypt
blkid /dev/vg/swap_crypt

(将这两个 UUID 复制到记事本备用)

3. 更新 /etc/crypttab
编辑 /etc/crypttab 文件,添加解密规则。替换为你刚刚复制的真实 UUID:

crypt_root UUID=<root_crypt的UUID> none luks,discard
crypt_swap UUID=<swap_crypt的UUID> none luks,discard

4. 更新 /etc/fstab
编辑 /etc/fstab,将根目录 / 和 swap 的挂载源修改为新的加密映射路径。
找到原来的 vg-root 和 vg-sp 那两行,修改为:

/dev/mapper/crypt_root  /       ext4    defaults,errors=remount-ro 0 1
/dev/mapper/crypt_swap  none    swap    sw              0 0

(保留 /boot 挂载 sda1 的那一行不变)

5. 确认 Dropbear 远程解锁配置 (极度重要)
因为这是 VPS,开机卡在 LUKS 密码输入界面时你无法通过 VNC 粘贴密码(通常不支持)。
由于你之前配置过 PVE 9.1 的远程解锁,请确保当前 /etc/dropbear/initramfs/authorized_keys 中有你的 SSH 公钥,并且网络配置正确。

6. 重新生成 Initramfs 和 GRUB
将新的 crypttab 和 dropbear 配置打包进启动镜像中:

update-initramfs -u -k all
update-grub

阶段四:重启与善后

1. 退出 chroot 并卸载

exit
umount /mnt/boot
umount /mnt/dev/pts /mnt/dev /mnt/proc /mnt/sys /mnt/run
umount /mnt

2. 重启

reboot

此时 VPS 重启。你需要通过 SSH 登录到 dropbear 的 initramfs 环境(例如 ssh root@你的IP -p 你设置的端口),输入 cryptroot-unlock 来解锁 crypt_root。

3. 善后清理 (确认无误后)
如果重启顺利,并且通过 lsblk 确认当前挂载的根目录是 /dev/mapper/crypt_root,那么恭喜你,迁移完美成功。

此时旧的明文数据依然安静地躺在 vg-root 里。你可以安全地将其删除以释放空间:

lvremove /dev/vg/root
lvremove /dev/vg/sp

这个方案容错率极高。即使在 rsync 或配置引导时出错了,你只要不删除旧的 vg-root,重启时系统依然会从原来的明文分区启动(只要你不破坏原有的 /boot 和引导记录)。