PVE 踩坑笔记:在线迁移 VM 提示迁移失败,日志报 storage is not available on target n

举报
Auunes 发表于 2026/10/22 09:01:59 2026/10/22
【摘要】 一、故障表现集群状态正常,pvecm status 所有节点正常,quorum 满足源节点、目标节点 Web 面板都能看到对应存储,存储状态绿色正常虚拟机磁盘放在该存储上,启动运行正常发起在线迁移,任务日志直接报错:storage is not available on target node离线迁移、复制磁盘同样失败;新建虚拟机选择该存储在两个节点单独创建却正常存储本身读写正常,PBS 备...

一、故障表现

  • 集群状态正常,pvecm status 所有节点正常,quorum 满足
  • 源节点、目标节点 Web 面板都能看到对应存储,存储状态绿色正常
  • 虚拟机磁盘放在该存储上,启动运行正常
  • 发起在线迁移,任务日志直接报错:storage is not available on target node
  • 离线迁移、复制磁盘同样失败;新建虚拟机选择该存储在两个节点单独创建却正常
  • 存储本身读写正常,PBS 备份也能正常写入该存储

典型特征:存储在两个节点都存在,但集群层面识别不认为是同一个存储,这是集群迁移高频踩坑点。

二、原理简单说明

PVE 集群里,存储有一个唯一的存储 ID(Storage ID,比如 local-lvm、ceph-01)。 虚拟机配置里记录的磁盘路径,绑定的是这个存储 ID。 在线迁移的时候,PVE 会校验:目标节点上必须存在同名、同类型、同配置的存储 ID。 下面几种情况都会出现 “两边都看得见,但不是同一个”:

  1. 两个节点各自创建了同名存储,但底层是两套独立存储;
  2. 存储 ID 名字一样,但是存储配置参数不一致(比如内容类型、块设备、共享标记);
  3. 共享存储在目标节点配置缺失、被注释,或者只在单节点生效;
  4. 本地存储(local、local-lvm)本身就不是共享存储,不支持跨节点迁移。

重点区分:共享存储 vs 本地存储。本地存储只属于当前节点,天生不支持在线迁移。

三、排查顺序

  1. 先查看虚拟机配置,确认磁盘使用的存储 ID
# 替换100为你的VMID
qm config 100

找到类似 scsi0: local-lvm:vm-100-disk-0,size=32G,冒号前面 local-lvm 就是存储 ID。

  1. 在源节点、目标节点分别查看存储列表
pvesm status

对比两边:是否都有这个存储 ID,并且类型一致。

  1. 查看该存储详细配置
# 查看存储配置文件
cat /etc/pve/storage.cfg

/etc/pve/storage.cfg 是集群分布式配置,正常集群所有节点内容应该同步一致。

  1. 检查存储的共享标记、内容类型
pvesm config local-lvm

重点看 shared 标记、content 配置项。

  1. 查看迁移任务详细日志
# 替换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 理论上是集群分布式文件,所有节点自动同步。 如果集群同步异常、手动在单节点修改存储配置,会出现配置不一致。

修复:

  1. 核对所有节点 /etc/pve/storage.cfg,确保同一个存储 ID 配置完全一致;
  2. 检查存储 shared 1 标记:共享存储必须配置 shared 1;
  3. 检查 content 选项,必须包含 images,否则无法存放虚拟机磁盘:
content images,rootdir
  1. 配置修改完成后,重启 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 即为修复成功。

六、高频踩坑点

  1. 误以为只要两个节点都叫 local-lvm,就是同一个存储,直接在线迁移,反复报错;
  2. 不知道 /etc/pve/storage.cfg 是集群分布式文件,单独在某一个节点改存储配置;
  3. 共享存储忘记加上 shared 1 参数,PVE 仍然当成节点本地存储处理;
  4. Ceph/NFS 存储只是 Web 页面显示正常,忽略底层挂载、密钥连通性校验;
  5. 分不清两种迁移:仅迁移虚拟机(共享存储) 和 迁移虚拟机 + 磁盘(本地存储)。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。