You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Qemu选择性克隆Windows磁盘至qcow2镜像(仅保留引导分区与C盘)

如何使用Qemu选择性克隆Windows磁盘至qcow2镜像(仅保留引导分区与C盘)

当然可以实现!这种只克隆关键分区、跳过无关数据的需求太常见了——毕竟谁也不想把几十上百GB的游戏数据白白占用镜像空间对吧?下面我就一步步带你用Qemu工具链完成这个操作:

1. 确认原磁盘的分区信息

首先得搞清楚你要克隆的两个分区对应的设备路径。在Linux环境下,你可以用lsblk或者fdisk -l命令查看,比如原磁盘是/dev/sda的话,你会看到:

  • /dev/sda1:100MB的引导分区(通常是FAT32格式)
  • /dev/sda2:300GB的C盘(NTFS格式)
  • /dev/sda3:1.7TB的游戏分区(我们要跳过它)
    记好这两个要保留的分区路径,后面会用到。

2. 创建空的qcow2镜像文件

先创建一个大小刚好容纳引导分区+ C盘的空镜像,总大小设为300.1GB就够了:

qemu-img create -f qcow2 windows_clone.qcow2 300.1G

参数说明:-f qcow2指定镜像格式,后面的是镜像文件名和总大小。

3. 给空镜像创建匹配的分区表

接下来要给这个空镜像建立和原磁盘一致的分区表(比如GPT,现在Windows基本用GPT;如果原盘是MBR就改成msdos),并且创建对应大小的分区:
parted工具操作:

# 1. 初始化分区表为GPT
parted windows_clone.qcow2 mklabel gpt
# 2. 创建引导分区(和原盘100MB对应,起始1MiB到101MiB)
parted windows_clone.qcow2 mkpart primary fat32 1MiB 101MiB
# 3. 创建C盘分区(从101MiB到300.1GiB,对应原300GB空间)
parted windows_clone.qcow2 mkpart primary ntfs 101MiB 300.1GiB
# 4. 标记第一个分区为可引导(和原盘一致)
parted windows_clone.qcow2 set 1 boot on

注意:分区的起始、结束位置一定要和原盘对应,不然后续引导可能出问题。

4. 挂载qcow2镜像为块设备

我们需要把刚创建的qcow2镜像挂载成系统能识别的块设备,这样才能往里面克隆数据。这里用qemu-nbd工具:

# 先加载nbd内核模块(支持多分区)
modprobe nbd max_part=8
# 把镜像挂载到/dev/nbd0
qemu-nbd -c /dev/nbd0 windows_clone.qcow2

挂载后,你会看到/dev/nbd0p1(新的引导分区)和/dev/nbd0p2(新的C盘分区)这两个设备节点,就像物理磁盘的分区一样。

5. 克隆分区数据到镜像里

现在可以把原分区的数据克隆到新镜像的对应分区了:

  • 克隆引导分区:因为是FAT32格式,用dd直接复制就行:
dd if=/dev/sda1 of=/dev/nbd0p1 bs=4M status=progress

bs=4M是设置块大小提升复制速度,status=progress可以实时看克隆进度。

  • 克隆C盘分区:C盘是NTFS格式,用ntfsclonedd更高效——它只会复制分区里的有效数据,而不是整个空分区:
ntfsclone --save-image /dev/sda2 | ntfsclone --restore-image - /dev/nbd0p2

如果你的系统没有ntfsclone,可以先装ntfs-3g包(比如apt install ntfs-3g或者yum install ntfs-3g)。

6. 卸载镜像并修复引导

克隆完成后,先把nbd设备卸载:

qemu-nbd -d /dev/nbd0

这时候镜像里的分区数据已经克隆好了,但大概率引导还不能直接用——因为Windows的引导信息和磁盘UUID、分区位置绑定了。你需要用Qemu启动这个镜像,加载Windows安装介质(比如ISO文件),进入「修复计算机」模式,运行以下命令修复引导:

# 修复MBR(如果是MBR分区表)
bootrec /fixmbr
# 修复引导扇区
bootrec /fixboot
# 重建BCD引导配置
bootrec /rebuildbcd

如果是GPT的EFI引导,可能还需要进入EFI分区,重新复制EFI引导文件到对应位置,或者用bcdboot命令重建EFI引导:

bcdboot C:\Windows /s E: /f UEFI

这里的E:是你在PE里看到的EFI引导分区盘符。

一些注意事项

  • 克隆前最好在Windows PE环境下操作,或者把原磁盘的C盘和引导分区卸载,避免原分区被系统占用导致克隆失败。
  • 确保原磁盘没有坏道,否则克隆过程中会出现数据错误。
  • 如果原盘是MBR分区表,那创建镜像分区表时要把mklabel gpt改成mklabel msdos,对应调整分区的起始结束参数。

备注:内容来源于stack exchange,提问作者ojek

火山引擎 最新活动