PVE 踩坑笔记:在线迁移 VM 提示迁移失败,日志报 storage is not available on target n
一、故障表现
- 集群状态正常,
pvecm status所有节点正常,quorum 满足 - 源节点、目标节点 Web 面板都能看到对应存储,存储状态绿色正常
- 虚拟机磁盘放在该存储上,启动运行正常
- 发起在线迁移,任务日志直接报错:storage is not available on target node
- 离线迁移、复制磁盘同样失败;新建虚拟机选择该存储在两个节点单独创建却正常
- 存储本身读写正常,PBS 备份也能正常写入该存储
典型特征:存储在两个节点都存在,但集群层面识别不认为是同一个存储,这是集群迁移高频踩坑点。
二、原理简单说明
PVE 集群里,存储有一个唯一的存储 ID(Storage ID,比如 local-lvm、ceph-01)。 虚拟机配置里记录的磁盘路径,绑定的是这个存储 ID。 在线迁移的时候,PVE 会校验:目标节点上必须存在同名、同类型、同配置的存储 ID。 下面几种情况都会出现 “两边都看得见,但不是同一个”:
- 两个节点各自创建了同名存储,但底层是两套独立存储;
- 存储 ID 名字一样,但是存储配置参数不一致(比如内容类型、块设备、共享标记);
- 共享存储在目标节点配置缺失、被注释,或者只在单节点生效;
- 本地存储(local、local-lvm)本身就不是共享存储,不支持跨节点迁移。
重点区分:共享存储 vs 本地存储。本地存储只属于当前节点,天生不支持在线迁移。
三、排查顺序
- 先查看虚拟机配置,确认磁盘使用的存储 ID
# 替换100为你的VMID
qm config 100
找到类似 scsi0: local-lvm:vm-100-disk-0,size=32G,冒号前面 local-lvm 就是存储 ID。
- 在源节点、目标节点分别查看存储列表
pvesm status
对比两边:是否都有这个存储 ID,并且类型一致。
- 查看该存储详细配置
# 查看存储配置文件
cat /etc/pve/storage.cfg
/etc/pve/storage.cfg 是集群分布式配置,正常集群所有节点内容应该同步一致。
- 检查存储的共享标记、内容类型
pvesm config local-lvm
重点看 shared 标记、content 配置项。
- 查看迁移任务详细日志
# 替换taskid为迁移失败任务ID
pvesm log <taskid>
四、分场景修复方案
场景 1:使用本地存储(local /local-lvm)迁移(最高发)
local、local-lvm 属于节点本地存储,不是共享存储,每个节点的 local-lvm 互相独立。 哪怕两个节点都叫 local-lvm,底层是各自服务器本地 LVM,不能直接在线迁移。
两种处理方案: 方案 A:使用共享存储(Ceph、NFS、iSCSI 等),把虚拟机磁盘迁移到共享存储后,再做 VM 在线迁移; 方案 B:不使用共享存储,采用存储迁移(带存储迁移),迁移时勾选 “移动磁盘”,PVE 会在迁移过程中复制磁盘数据到目标节点本地存储。
注意:勾选移动磁盘迁移速度慢,取决于磁盘大小和网络带宽,迁移期间虚拟机业务短暂受影响。
场景 2:存储 ID 同名,但配置参数集群不同步
/etc/pve/storage.cfg 理论上是集群分布式文件,所有节点自动同步。 如果集群同步异常、手动在单节点修改存储配置,会出现配置不一致。
修复:
- 核对所有节点
/etc/pve/storage.cfg,确保同一个存储 ID 配置完全一致; - 检查存储
shared 1标记:共享存储必须配置 shared 1; - 检查 content 选项,必须包含
images,否则无法存放虚拟机磁盘:
content images,rootdir
- 配置修改完成后,重启 pvedaemon、pveproxy
systemctl restart pvedaemon pveproxy
场景 3:目标节点存储认证 / 挂载失败,Web 缓存显示正常
比如 NFS、iSCSI 存储,目标节点挂载失败、账号密码错误,但是 Web 界面缓存还显示绿色。 在目标节点单独测试挂载:
# NFS示例,替换为你的NFS地址和路径
mount -t nfs 192.168.1.100:/srv/pve /mnt
挂载失败就是存储本身在目标节点无法接入,需要修复存储连通、权限、防火墙。
场景 4:Ceph 存储,目标节点缺少 ceph.conf 或者 keyring
Ceph RBD 作为 PVE 共享存储时,如果目标节点缺少 ceph 配置文件、密钥文件,pvesm 看着有记录,但是底层无法访问 RBD 池。 在目标节点检查:
ls /etc/pve/ceph.conf
ls /etc/pve/ceph.client.admin.keyring
缺失文件需要从正常节点同步 Ceph 配置和密钥。
场景 5:存储被禁用(disable)标记
存储配置里有 disable 1,该存储在当前节点被禁用,pvesm status 里不会正常加载。 打开 storage.cfg,去掉 disable 1,保存后重载配置。
五、验证修复
修复后重新发起迁移:
- 如果是共享存储:不勾选移动磁盘,快速在线迁移;
- 如果是本地存储:勾选移动磁盘,执行存储迁移; 任务正常跑完,不再报 storage is not available on target node 即为修复成功。
六、高频踩坑点
- 误以为只要两个节点都叫 local-lvm,就是同一个存储,直接在线迁移,反复报错;
- 不知道
/etc/pve/storage.cfg是集群分布式文件,单独在某一个节点改存储配置; - 共享存储忘记加上
shared 1参数,PVE 仍然当成节点本地存储处理; - Ceph/NFS 存储只是 Web 页面显示正常,忽略底层挂载、密钥连通性校验;
- 分不清两种迁移:仅迁移虚拟机(共享存储) 和 迁移虚拟机 + 磁盘(本地存储)。
- 点赞
- 收藏
- 关注作者
评论(0)