Proxmox VE 迁移 /var/lib/vz 到另一块硬盘的完整教程
为什么需要迁移 /var/lib/vz
装过 Proxmox VE 的朋友都知道,安装程序默认把 local 存储(挂载在 /var/lib/vz)放在系统盘上。如果系统盘是 NVMe 这样的高速硬盘,那就浪费了大好性能——因为 local 存储的设计用途是存放 ISO 镜像、容器模板和备份文件,这些都不需要太高的读写速度。
更合理的布局是:把 /var/lib/vz(仓库)放到 HDD 上,把 NVMe 全部释放出来做成 lvmthin 或 ZFS 存储池,给虚拟机用。这样各取所长,性能最大化。
下面就是迁移 /var/lib/vz 到 HDD 的详细步骤。
准备工作
确认硬盘设备名
先看清楚当前磁盘布局,这一步很重要,搞错设备名会丢数据:
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE输出示例:
NAME SIZE TYPE MOUNTPOINT FSTYPE
nvme0n1 447.1G disk
├─nvme0n1p1 1G part /boot/efi vfat
├─nvme0n1p2 1G part /boot ext4
└─nvme0n1p3 445G part LVM2_member
├─pve-root 100G lvm / ext4
├─pve-swap 8G lvm [SWAP] swap
└─pve-data 337G lvm ← local-lvm 用的空间
sda 1.8T disk ← 这就是你的 HDD
└─sda1 1.8T part ← 还没格式化确认 sda 是你的 HDD(看容量),nvme0n1 是高速盘。
第一步:格式化 HDD
如果 HDD 是全新盘或数据已备份,直接格式化:
mkfs.ext4 /dev/sda1第二步:复制现有数据
把当前 /var/lib/vz 下的所有内容(ISO 镜像、模板、备份等)复制到 HDD 上:
mkdir -p /mnt/temp_hdd
mount /dev/sda1 /mnt/temp_hdd
cp -a /var/lib/vz/* /mnt/temp_hdd/-a 参数会保留权限、时间戳、软链接等所有属性。复制完成后可以先验证一下:
find /var/lib/vz -type f | wc -l
find /mnt/temp_hdd -type f | wc -l两个数字应该一致。
第三步:配置永久挂载
卸载临时挂载点,把旧的 /var/lib/vz 备份一下,然后创建新的挂载目录:
umount /mnt/temp_hdd
mv /var/lib/vz /var/lib/vz.bak
mkdir -p /var/lib/vz然后用 HDD 挂载到 /var/lib/vz:
mount /dev/sda1 /var/lib/vz为了让系统重启后自动挂载,编辑 /etc/fstab:
nano /etc/fstab在文件末尾添加一行:
/dev/sda1 /var/lib/vz ext4 defaults 0 0验证 fstab 配置是否正确:
mount -a如果没有报错,说明配置没问题。
第四步:验证完整性
确认数据都在:
# 检查挂载情况
df -h /var/lib/vz
# 检查目录内容
ls -la /var/lib/vz/确认一切正常后,删除备份的旧数据:
rm -rf /var/lib/vz.bak第五步:重启验证
reboot重启后在 Web 管理界面检查 local 存储的可用空间,应该已经变为你的 HDD 容量(2TB 左右),ISO、模板等文件都正常可见。
第六步:释放 NVMe 空间创建虚拟机存储
迁移完成后,NVMe 上原本是 /var/lib/vz 占用的空间就释放了。现在可以去 Proxmox Web 界面:
- 进入 节点 -> 磁盘 -> LVM-Thin(也可以用 ZFS)
- 在 NVMe 的剩余空间上创建新的存储池,命名为
nvme-vm - 以后创建虚拟机时,系统盘选择
nvme-vm
这样布局就更合理了:
| 用途 | 存储介质 | 挂载点/池名 |
|---|---|---|
| PVE 系统 | NVMe | /(pve-root) |
| 仓库(ISO、模板、备份) | HDD | /var/lib/vz(local) |
| 虚拟机磁盘 | NVMe | nvme-vm(lvmthin) |
延伸:安装时就规划好
如果你还没安装 PVE,或者打算重装,可以安装时直接在专家模式里规划好分区:
- 在安装界面按
Ctrl + Alt + F2进入 shell - 输入
debug后按Ctrl + Alt + F1切回图形界面 - 此时会出现 "专家模式" 选项
- NVMe 只分 50-100G 给根目录
- HDD 分一个分区挂载到 /var/lib/vz
这样从一开始就是最优布局,不用后期折腾迁移。
注意事项
- 备份重要数据:操作前一定备份 /var/lib/vz 下你需要保留的 ISO、模板、备份文件
- 核对设备名:命令中的 /dev/sda1 必须替换为你的实际设备名,格式化错了就是数据全丢
- PVE 服务中断:操作完成后建议重启一次 PVE,确保所有服务识别到新路径
- 如果使用 ZFS:步骤类似,但文件系统要用 ZFS 而非 ext4