PVE 双 NVMe 存储:系统/备份与 VM 镜像分离
单盘部署 PVE 时,系统、VM 镜像、备份挤在同一块盘上:既是性能瓶颈,也是单点故障(盘坏 = 全部丢失)。本文记录把两块 NVMe 按职责分离的迁移过程。
前提是 PVE 已装好,首次安装见 PVE: First setup。另外,如果你在看成品 NAS 而不是自建存储,先读 成品 NAS 的结构性转向 —— 模块化与本地所有权正在被成本削减和生态锁定取代,硬件长寿这个传统特征正在消失。
背景与问题
初始布局(单块 256G NVMe):
pve-root69G(ext4)— 系统 +local存储(ISO、vztmpl、vzdump 备份都在这)pve-data141G(lvmthin)— VM 镜像,thin 池实际只用了 17%
问题:
- 备份与系统同盘,VM 与系统同盘 — 盘坏全没
- VM 扩容需求(100G+)直接撞上 141G 池的天花板
- 第二块 500G NVMe 完全闲置
local 与 local-lvm 的区别
| local | local-lvm | |
|---|---|---|
| – | ——- | ———– |
| 类型 | dir(普通目录) | lvmthin(逻辑卷池) |
| 存储内容 | iso、vztmpl、backup(文件) | images、rootdir(VM 磁盘) |
| 数据形态 | 普通文件,可 ls/cp 直接操作 | 逻辑卷,PVE 管理 |
| 空间分配 | 立即占用 | thin 按需分配 |
| 能否放备份 | 能 | 不能(界面选项灰掉) |
关键认知:备份是"文件",只能进 dir 存储;VM 磁盘是"逻辑卷",进 lvmthin。备份挤在 root 分区里,是因为 local 就建在 root 上。
目标布局
| 盘 | 角色 | 布局 |
|---|---|---|
| —- | —— | —— |
| 256G(系统盘) | 系统 + 备份 | root 扩到 234G,local 存储(ISO/备份) |
| 500G(Samsung 980) | VM 镜像 | VG → 450G thin 池 → lvmthin 存储 |
原则:备份与 VM 镜像异盘;系统盘物理故障时不至于连 VM 备份一起丢(剩余风险:备份仍与系统同盘,需异地推送管道补足)。
迁移步骤
1. 新盘建存储
lsblk -f /dev/nvme1n1 # 确认空盘
pvcreate /dev/nvme1n1
vgcreate pve2 /dev/nvme1n1
lvcreate -L 450G -T pve2/thin # 留 ~15G 余量给元数据/快照
pvesm add lvmthin local-ssd --vgname pve2 --thinpool thin --content images,rootdir
2. 迁移 VM 磁盘(在线)
qm move-disk 102 scsi0 local-ssd --delete 1 # thin 池支持在线迁移,32G 约 30s
qm move-disk 102 ide2 local-ssd --delete 1 # cloudinit 盘(4M)
3. 迁移 LXC(必须停机)
pct stop 101
pct move-volume 101 rootfs local-ssd --delete 1
pct start 101
4. 扩容 VM
qm resize 102 scsi0 150G
# guest 内扩文件系统(Debian cloud-init 镜像):
growpart /dev/sda 1 && resize2fs /dev/sda1
5. 释放旧池,扩 root
lvs pve # 确认 data 池内已无卷
lvremove /dev/pve/data # 不可逆,先确认
lvextend -l +100%FREE /dev/pve/root
resize2fs /dev/pve/root # ext4 在线扩
pvesm remove local-lvm # 清理 storage.cfg 死条目
关键坑:cloudinit 盘迁移后旧卷 in use
qm move-disk 迁移 cloudinit 盘时,目标卷复制成功,但删除源卷报:
Logical volume pve/vm-102-cloudinit in use.
原因:运行中的 QEMU 进程持有旧卷 fd,move-disk 不热释放。必须重启 VM(qm reboot <vmid>)后 open 标志才消失(lvs 属性从 aotz → a-tz),此时才能 lvremove 清理残留,否则整个旧池删不掉。
验证
pvesm status # 只剩 local + local-ssd
qm config 102 | grep scsi0 # 指向 local-ssd
df -h / # root 234G,可用 177G
备份配置随之调整:keep-last 从 2 提到 3(root 空间充裕),并新增 LXC 的每周备份任务。