从 Proxmox VE 迁移 Windows 11 虚拟机到物理机

从 Proxmox VE 迁移 Windows 11 虚拟机到物理机

适用场景:使用 Proxmox VE 运行 Windows 11 虚拟机,现在希望彻底弃用 PVE,将 Win11 直接作为宿主机系统运行,并保留原有数据盘内容。


🧩 环境说明

  • 磁盘 A(/dev/sda:512GB SSD
    • 安装了 Proxmox VE 系统(基于 LVM)
    • 所有虚拟机(包括 Win11 和 Ubuntu)的磁盘文件都存储在此盘的 LVM 卷中
  • 磁盘 B(/dev/sdb:4TB HDD
    • 作为 LVM 物理卷(PV),挂载为 Ubuntu 虚拟机的数据盘,存有重要用户文件
  • 磁盘 C(/dev/sdc:3TB HDD
    • 同样是 LVM PV,但当前为空,计划用作临时中转盘

💡 目标:

  1. 将 PVE 中的 Win11 虚拟机迁移到 /dev/sda,使其成为可直接启动的物理系统
  2. 保留 /dev/sdb 上的所有数据
  3. 最终将 /dev/sdb 格式化为 NTFS,供 Win11 使用
  4. 利用 /dev/sdc 作为临时备份盘(格式化为 NTFS)

⚠️ 重要前提

  • 所有操作必须在 PVE 系统仍在运行时完成——一旦覆盖 /dev/sda,PVE 将永久消失。
  • 务必提前备份关键数据!本文虽力求安全,但磁盘操作有风险。
  • 建议准备:
    • Clonezilla Live USB(用于镜像写入)
    • Windows 11 安装 U 盘(用于引导修复)

✅ 完整操作步骤

步骤 1:关闭 Win11 虚拟机

在 PVE Web UI 或终端中关闭目标虚拟机(假设 VM ID = 100):

1
qm stop 100

步骤 2:释放 C 盘(/dev/sdc)为裸盘并格式化为 NTFS

C 盘当前是空的 LVM PV,需先清除 LVM 元数据,再格式化为 NTFS 以便 Windows 识别。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 清除 LVM 标记
sudo pvremove /dev/sdc
sudo wipefs -a /dev/sdc

# 可选:清空前 100MB 防止残留
sudo dd if=/dev/zero of=/dev/sdc bs=1M count=100

# 安装 parted 工具

# 创建 GPT 分区表 + 单一分区
sudo parted /dev/sdc mklabel gpt
sudo parted /dev/sdc mkpart primary ntfs 0% 100%

# 格式化为 NTFS(需安装 ntfs-3g)
sudo apt install ntfs-3g -y
sudo mkfs.ntfs -f /dev/sdc1

✅ 此时 /dev/sdc1 是一个标准 NTFS 分区,Windows 可直接读写。


步骤 3:挂载 C 盘并备份 B 盘数据

激活 B 盘的 LVM 并挂载

1
2
3
4
5
6
7
# 扫描并激活卷组(假设 VG 名为 vg_data)
sudo vgscan
sudo vgchange -ay vg_data

# 挂载逻辑卷(假设 LV 为 lv_b)
sudo mkdir -p /mnt/b_data
sudo mount /dev/vg_data/lv_b /mnt/b_data

挂载 C 盘并复制数据

1
2
3
4
5
6
7
8
sudo mkdir -p /mnt/c_backup
sudo mount /dev/sdc1 /mnt/c_backup

# 使用 rsync 复制所有文件
rsync -avh --progress /mnt/b_data/. /mnt/c_backup/

# 验证
ls /mnt/c_backup/

💡 使用 cp -a 可保留符号链接、时间戳等,比 rsync 更适合跨文件系统备份。

完成后卸载:

1
sudo umount /mnt/b_data /mnt/c_backup

步骤 4:导出 Win11 虚拟磁盘为 RAW 镜像

1
2
3
4
5
6
7
8
9
10
11
1. 找到快照对应的磁盘路径

# 列出虚拟机磁盘
qm config 100

📊 磁盘配置分析
磁盘 用途 大小 必须导出?
virtio0 = vm-100-disk-2 Windows 主系统盘(C: 盘) 300 GB 必须导出
efidisk0 = vm-100-disk-0 UEFI 引导分区 4 MB 建议导出(引导用,不导出的需要自己划分一个100M的分区在硬盘头部,然后恢复,则可跳过步骤6)
tpmstate0 = vm-100-disk-1 TPM 虚拟芯片状态 4 MB 无需导出(物理机不需要)

🔔 注意:确保 /tmp 有足够空间(或改用其他临时目录)。


步骤 5:用 Clonezilla 将 Win11 镜像写入 A 盘(/dev/sda

⚠️ 此操作将彻底覆盖 PVE 系统!

  1. 制作 Clonezilla Live USB
  2. 重启服务器,从 USB 启动
  3. 选择:
    • Language → English
    • Keyboard → Don’t touch
    • Mode → device-image
    • Action → restoredisk
  4. 选择镜像源:从本地磁盘加载 /tmp/win11.raw(可通过 SSH 或挂载临时分区访问)
  5. 选择目标磁盘:/dev/sda
  6. 确认执行,等待完成

✅ 完成后,A 盘已成为一个完整的 Windows 11 物理系统盘。


步骤 6:修复 Windows 引导

由于虚拟机使用模拟硬件,物理机启动可能失败。使用 Win11 安装 U 盘修复:

  1. 从 Win11 安装 U 盘启动
  2. 选择“修复计算机” → “疑难解答” → “命令提示符”
  3. 执行以下命令:
1
2
3
4
5
6
7
8
9
diskpart
list disk
select disk 0
list partition
select partition X ← 选择 EFI 系统分区(通常 100300MB,FAT32)
assign letter=S
exit

bcdboot C:\Windows /s S: /f UEFI
  1. 重启,应能正常进入 Windows 11

💡 若遇蓝屏(如 INACCESSIBLE_BOOT_DEVICE),需提前在虚拟机中安装通用 NVMe/AHCI 驱动,或使用 Sysprep 泛化系统。实测:不是报错 Bitlocker 开启就是提醒我有更新挂起,放弃了


步骤 7:初始化 B 盘为 NTFS 并恢复数据

  1. 进入 Windows 11
  2. 打开“磁盘管理”
  3. 找到 磁盘 1(即原 B 盘 /dev/sdb
  4. 初始化为 GPT
  5. 创建新简单卷 → 格式化为 NTFS → 分配盘符(如 D:
  6. 将 C 盘(/dev/sdc)接入 Windows(通过 SATA/USB)
  7. 从 C 盘复制 ubuntu_data 文件夹到 D:\

✅ 完成!你现在拥有一台纯净的 Windows 11 物理机,且保留了所有历史数据。


🧹 后续清理(可选)

  • C 盘:可保留作为备份盘,或重新加入其他系统
  • B 盘 LVM 元数据:已被 NTFS 覆盖,无需额外清理

🔚 总结

步骤 关键操作 注意事项
1 关闭 Win11 VM 确保数据一致性
2 C 盘格式化为 NTFS 必须清除 LVM 标记
3 备份 B 盘数据到 C 盘 使用 cp -a 保留文件属性
4 导出 Win11 为 raw 镜像 确认磁盘格式(qcow2/raw)
5 Clonezilla 写入 A 盘 PVE 将被销毁!
6 修复 Windows 引导 几乎必做
7 B 盘转 NTFS + 恢复数据 在 Windows 中操作

💬 最后建议

  • 如果 Win11 虚拟机未安装通用驱动,强烈建议在迁移前运行 Sysprep
    1
    C:\Windows\System32\Sysprep\sysprep.exe /generalize /shutdown /oobe
  • 实测:不是报错 Bitlocker 开启就是提醒我有更新挂起,放弃了
  • 此方案适用于任何 Linux 虚拟化平台(如 KVM、oVirt),不仅限于 PVE。

🌟 成功的关键:在 PVE 消失前,把所有数据和镜像准备好!

希望这篇指南能帮你顺利完成迁移。

写作说明:以上部分内容来自 AI 生成,经过全部实测后补充了内容。


从 Proxmox VE 迁移 Windows 11 虚拟机到物理机
https://enldm.cyou/2025/12/从Proxmox VE 迁移 Windows 11 虚拟机到物理机/
作者
ENLDM
发布于
2025年12月10日
许可协议