磁盘迁移与扩容
磁盘迁移与扩容模块提供两项核心能力:
- 本机磁盘迁移:将虚拟机的磁盘文件从一个存储池迁移到另一个存储池,支持热迁移(运行中)和冷迁移(关机状态)
- 离线磁盘扩容:在克隆或模板创建时自动扩展客户机系统分区,支持 Windows(NTFS 文件系统)
功能概述
本机磁盘迁移
迁移模式
| 模式 | VM 状态 | 实现方式 | 适用场景 |
|---|---|---|---|
| 热迁移 | 运行中 | virsh blockcopy | 业务不中断 |
| 冷迁移 | 关机 | 稀疏复制 + rebase | 更安全可靠 |
迁移流程
前置校验
| 校验项 | 说明 | 失败处理 |
|---|---|---|
| VM 状态 | 必须 running 或 shut off | 提示用户开机或关机 |
| 外部快照 | 不能存在外部快照 | 提示先删除快照 |
| 目标空间 | 目标存储必须有足够空间 | 提示空间不足 |
| 磁盘类型 | 仅支持 file 类型 | 提示不支持 block 类型 |
链式磁盘处理
对于有 backing file 的磁盘(如模板克隆的 VM):
热迁移
- 预创建 overlay:
qemu-img create -b backing -F format -f qcow2 target.qcow2 - 执行 blockcopy:
virsh blockcopy --shallow --reuse-external --pivot - 更新 XML 中的磁盘路径
- 删除源文件
冷迁移
- 稀疏复制:
cp --sparse=always --reflink=auto source.qcow2 target.qcow2 - 修正 backing 路径:
qemu-img rebase -u -b backing -F format target.qcow2 - 更新 XML 中的磁盘路径
- 删除源文件
目标路径冲突处理
如果目标目录已存在同名文件,系统会自动添加时间戳后缀:
original.qcow2 → original_migrated_20260601120000.qcow2
离线磁盘扩容
Windows 磁盘扩容
Windows 使用 NTFS 文件系统,扩容流程更复杂:
注意
- 磁盘驱动器如果打开BitLocker加密的话,会导致
guestfish不到windows系统分区的分区类型。不过在加密状态下扩,会破坏加密与物理扇区的绑定关系的风险。
root@tingyu:# guestfish --ro -a /var/lib/libvirt/images/win11.qcow2
><fs> run
><fs> part-list /dev/sda
...
><fs> list-filesystems
/dev/sda1: vfat
><fs> vfs-type /dev/sda3
BitLocker
恢复分区处理
Windows 系统通常有一个恢复分区,如果它在系统分区后面:
- 备份恢复分区:
ntfsclone-out - 删除恢复分区
- 扩展系统分区
- 重新创建恢复分区
- 恢复数据:
ntfsclone-in - 修复 NTFS:
ntfsfix
guestfish 工具链
离线扩容使用 guestfish 工具操作磁盘分区和文件系统:
| 模式 | 命令 | 用途 |
|---|---|---|
| 只读 | guestfish --ro -a disk | 检测分区布局、文件系统类型 |
| 写入 | guestfish -a disk | 分区调整、文件系统扩展 |
常用命令
| 命令 | 说明 |
|---|---|
part-list | 列出分区 |
part-resize | 调整分区大小 |
part-expand-gpt | 扩展 GPT 分区表 |
e2fsck-f | ext 文件系统检查 |
resize2fs | ext 文件系统扩展 |
ntfsclone-out/in | NTFS 分区备份/恢复 |
ntfsresize | NTFS 文件系统扩展 |
故障排查
迁移问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| "虚拟机存在外部快照" | 快照阻止迁移 | 先删除所有外部快照 |
| "硬盘格式未知" | 磁盘格式无法识别 | 使用 qemu-img info 检查 |
| "目标存储可用空间不足" | 目标存储空间不够 | 清理目标存储或选择其他存储 |
扩容问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| "Windows 磁盘扩容超时" | NTFS 文件系统错误 | 先在模板中运行 chkdsk |
| 扩容未生效 | 末尾空间不足 | 检查磁盘总容量 |
最佳实践
迁移建议
- 备份数据:迁移前备份重要数据
- 删除快照:迁移前删除所有外部快照
- 选择时机:热迁移建议在业务低峰期进行
- 监控进度:大磁盘迁移耗时较长,关注任务进度
扩容建议
- 模板准备:确保模板已正常关机且文件系统无错误
- Windows 检查:Windows 模板建议先运行
chkdsk - 空间预留:创建 VM 时预留足够磁盘空间
- 自动扩容:利用自动扩容功能,无需手动调整分区
性能考虑
| 操作 | 耗时因素 | 优化建议 |
|---|---|---|
| 热迁移 | 磁盘大小、IO 性能 | 使用高性能存储、低峰期迁移 |
| 冷迁移 | 磁盘大小、复制速度 | 使用 CoW 文件系统加速 |
| 离线扩容 | 分区数量、文件系统大小 | 确保文件系统无错误 |