首页/云/云平台与虚拟化速查/virsh blockcopy 在线搬盘
虚拟化操作94 条

virsh blockcopy 在线搬盘

blockcopy 在域运行中把一块磁盘复制到新目标(可跨存储后端):复制完成后用 blockjob --pivot 切换,实现不停机的盘位迁移。

云平台与虚拟化速查云更新于 2026-10-13

virsh blockcopy 是什么

blockcopy 在域运行中把一块磁盘复制到新目标,复制完成后用 blockjob 的 pivot 操作把虚机切换到新盘上,整个过程不需要停机。它既能换存储位置(比如从本地盘挪到共享存储),也能换存储类型与格式(文件盘与块设备之间互相搬)。代价是复制期间会持续占用磁盘与网络带宽,大容量盘的窗口需要提前规划。

基本信息

适用平台使用 libvirt 与 QEMU 的 Linux 宿主,需对域有管理权限
启动复制virsh blockcopy <域> <盘> <目标> --format qcow2 --wait --verbose
查看进度virsh blockjob <域> <盘> --info
切换virsh blockjob <域> <盘> --pivot
取消virsh blockjob <域> <盘> --abort
典型场景换存储、换磁盘格式、把数据盘从本地迁到共享存储
注意事项复制期间不要手工改动目标文件,否则指纹不一致导致切换失败

典型使用场景

  • 存储在线迁移:把虚机磁盘挪到新存储阵列而不影响业务
  • 从本地盘迁到共享存储,为后续热迁移做准备
  • 磁盘格式统一:把裸设备盘转成 qcow2 以便使用快照能力
  • 性能调优验证:把热数据盘挪到更高性能的存储后端
  • 容量整理:把分散在多个存储池的盘集中到统一存储池
  • 维护窗口外的小步操作:用在线搬盘替代计划性停机

完整操作流程

完整操作流程
df -h /data/new && ls -ld /data/new                    # 先确认目标目录可用空间与权限
virsh domblklist vm1                                    # 确认要搬的盘名,例如 vda 或 vdb
virsh blockcopy vm1 vda /data/new/disk.qcow2 --format qcow2 --wait --verbose  # 启动复制并等待
virsh blockjob vm1 vda --info                           # 另开窗口看进度与剩余时间
virsh blockjob vm1 vda --pivot                          # 复制完成后切换,虚机使用新盘运行
virsh domblklist vm1                                    # 核对域定义已指向新盘
# 观察一段时间再删除旧盘文件,保留回退余地

操作与结果对照

动作时机结果与风险
启动 blockcopy虚机运行中随时开始复制,占用 IO 与带宽,业务性能可能受影响
查看 info复制期间反复查看只读操作,用于判断剩余时间
pivot 切换复制到达 100% 后切换生效,失败则虚机继续使用旧盘
abort 取消复制中途停止复制并清理目标文件,虚机不受影响
删除旧盘切换后观察一段时间删除不可恢复,确认无回退需求再执行
格式指定启动时用 --format格式与目标文件名不一致会导致后续使用异常
复制时间与已用数据量和存储带宽相关:开始前先用 domblkinfo 看实际分配量,据此估算窗口,别按虚机标记容量估。
切换成功前不要删除或手工修改目标文件:指纹不一致会让 pivot 失败,也会让回退变得复杂。

易错点

  • 复制期间手工改动目标文件:镜像指纹不一致导致 pivot 失败
  • 大容量盘复制未做限速与窗口规划:长时间占用带宽,影响同宿主其他业务
  • 切换后立即删除旧盘:观察期内若需回退,已无旧盘可用
  • 目标目录空间不足:复制中途失败,需清理后重来,白耗一个窗口
  • --format 与实际目标不匹配:后续虚机启动或快照操作异常

数据来源与参考

  • libvirt 文档:Block copy(live storage migration)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌