Proxmox 导入 VHDX
Proxmox 导入 VHDX
Proxmox 支持导入 VHDX,但无法在创建 VM 时直接选择 VHDX 格式,需先转换为 Proxmox 支持的磁盘格式(raw 或 qcow2)。
TL;DR
- 推荐直接用
qm importdisk,会根据存储类型自动转换(local → qcow2,local-lvm → raw)。- 大文件转换务必加
-p看进度。- 来自 Hyper-V 的 VHDX 必须先删检查点、卸载 Hyper-V 集成服务,否则导入后启动会出问题。
导入前准备
导入前先确认 VHDX 状态:
1 | # 检查完整性(修复/报错后不要继续) |
如果 VHDX 有 Hyper-V 检查点(checkpoint/snapshot),必须先在 Hyper-V 里合并或删除,否则只会导入父盘。
方法一:qm importdisk(推荐,PVE 7/8)
假设:
- VM ID:
100 - VHDX 文件:
/root/windows.vhdx - 存储:
local-lvm
1. 创建一个空 VM
1 | qm create 100 \ |
先不要创建硬盘。
2. 导入 VHDX
1 | qm importdisk 100 /root/windows.vhdx local-lvm |
qm importdisk 走的是 Proxmox Storage API,底层会调用 qemu-img convert,转换行为取决于目标存储:
| 目标存储 | 目标格式 | 文件位置 |
|---|---|---|
local |
qcow2 | /var/lib/vz/images/100/... |
local-lvm |
raw | /dev/pve/vm-100-disk-0 |
| 其他存储 | 由插件决定 | — |
完成后会提示类似:
1 | Successfully imported disk as unused0 |
3. 挂载硬盘
Web UI 路径:
1 | VM |
或者命令:
1 | qm config 100 |
看到类似:
1 | unused0: local-lvm:vm-100-disk-0 |
挂载:
1 | qm set 100 --scsi0 local-lvm:vm-100-disk-0 |
4. 设置启动盘
1 | qm set 100 --boot order=scsi0 |
方法二:先转换再导入
如果 qm importdisk 不支持你的 VHDX(例如某些老旧或损坏格式),可手动转换:
1 | qemu-img convert -p -f vhdx -O qcow2 windows.vhdx windows.qcow2 |
-p显示转换进度,大文件必备。
再导入:
1 | qm importdisk 100 windows.qcow2 local-lvm |
不同存储类型下的差异
| 存储 | 格式 | 导入命令 | 结果 |
|---|---|---|---|
local(目录) |
qcow2 | qm importdisk 100 windows.vhdx local |
生成 vm-100-disk-0.qcow2 |
local-lvm(默认) |
raw | qm importdisk 100 windows.vhdx local-lvm |
落在 /dev/pve/vm-100-disk-0 |
ceph / nfs 等 |
由插件 | qm importdisk 100 windows.vhdx <storage> |
视存储后端而定 |
Hyper-V 的 Windows 迁移注意事项
这是最容易踩坑的部分。
0. 导入前的清理
- 删除所有 Hyper-V 检查点,合并到父盘。
- 卸载 Hyper-V Integration Services(控制面板 → 程序 → 卸载),避免和 VirtIO 冲突。
- 关闭 Windows,导出 VHDX(不要导出运行中的虚机)。
1. 选择 BIOS 模式
| 源虚机 | PVE BIOS | 备注 |
|---|---|---|
| Generation 2 | OVMF (UEFI) | Proxmox 会自动创建 EFI Disk |
| Generation 1 | SeaBIOS | 传统 BIOS |
如果源虚机是 GPT 分区 + UEFI,必须用 OVMF;否则启动会卡在 No bootable device。
2. 磁盘控制器与 VirtIO 驱动
初次启动务必先用 SATA 或 LSI 530/501 SCSI,不要直接用 VirtIO。
原因是 Windows 默认没有 VirtIO 磁盘/网卡驱动,直接挂 VirtIO 会出现:
INACCESSIBLE BOOT DEVICE蓝屏- 启动卡住看不到磁盘
正确流程:
- 先用 IDE/SATA 启动进入系统。
- 挂载 VirtIO ISO:
virtio-win-XX.iso(Proxmox 主机已有,也可下载最新版)。 - 打开设备管理器,对带黄色叹号的设备「更新驱动」指向 ISO。
- 重启关机 → 把磁盘改到 VirtIO SCSI / 网卡改到 VirtIO。
- 再次启动,享受性能提升。
3. Secure Boot
如果启用 Secure Boot,需使用签名版的 VirtIO 驱动(viostor / NetKVM 在较新版本已签名)。最省事的做法是先关闭 Secure Boot 装好驱动,再按需开启。
4. 验证 VirtIO 驱动已安装
1 | Get-WindowsDriver -Online -DriverClass DiskDrive |
应该能看到 vioscsi、viostor、NetKVM。
常见问题
qm importdisk 报 I/O error
通常是 VHDX 文件损坏或带检查点。先 qemu-img check windows.vhdx 排查。
磁盘在 Web UI 显示但启动找不到
- 检查 BIOS 模式是否匹配(UEFI ↔ Legacy)。
qm config 100看--boot order是否正确。- OVMF 下确认 EFI Disk 已创建并被识别。
启动后蓝屏 INACCESSIBLE BOOT DEVICE
未装 VirtIO 驱动却用了 VirtIO 磁盘控制器。切回 SATA/IDE 启动再补驱动。
磁盘没出现在 Unused Disk
1 | qm rescan 100 |
或在 Web UI 刷新。LVM-Thin 下偶尔需要 lvscan。
导入后磁盘空间「变大」
VHDX 是稀疏格式,导入到 LVM-Thin (raw) 后会按虚拟大小占用。如果空间紧张,导入后可在 Windows 内压缩卷或扩容到合适大小。
