如何通过卷属性查找分区编号或起始偏移量,并使用MSYS2的dd.exe克隆Windows分区
嘿,我来一步步教你搞定这个需求——通过卷属性找到分区的关键信息,再用MSYS2自带的dd.exe克隆Windows分区,跟着操作就行:
首先,用MSYS2的dd.exe克隆分区,必须先拿到三个核心信息:
- 目标物理驱动器的完整名称
- 要克隆的分区的起始偏移量(最后转成MiB单位)
- 该分区的大小(同样转成MiB单位)
最终用来执行克隆的dd命令模板是这样的:
dd if=physical_drive_name of=backup.img bs=1M skip=starting_offset count=size status=progress
接下来咱们一步步获取这些信息:
第一步:锁定目标物理驱动器
先看看系统里有哪些物理磁盘,运行这条Windows命令:
wmic diskdrive get Caption,Index,MediaType
举个我这边的输出例子:
Caption Index MediaType PC SN530 NVMe WDC 512GB 0 Fixed hard disk media PNY USB 3.0 FD USB Device 1 Removable Media
我要克隆的是NVMe硬盘,它的Index是0,接下来用这个索引拿到它的设备ID(也就是物理驱动器名称):
wmic diskdrive where "Index=0" get DeviceID,Partitions,Status,MediaLoaded
输出结果大概是这样:
DeviceID MediaLoaded Partitions Status \\.\PHYSICALDRIVE0 TRUE 8 OK
这里的\\.\PHYSICALDRIVE0就是咱们要找的物理驱动器名称,记下来。
第二步:通过卷/分区属性找起始偏移和大小
这一步是关键,咱们有两种实用方式获取:
方式一:通过磁盘索引直接查所有分区信息
用目标磁盘的Index(这里是0),列出它下面的所有分区关键参数:
wmic partition where "DiskIndex=0" get DeviceID,StartingOffset,Size,PartitionNumber
输出会类似这样:
DeviceID PartitionNumber Size StartingOffset \\.\PARTITION1 1 104857600 1048576 \\.\PARTITION2 2 16777216 105906176 ...
注意这里的StartingOffset和Size都是字节单位,要转成MiB(1MiB = 1048576字节)。比如上面的StartingOffset是1048576字节,转成MiB就是1,Size是104857600字节的话,就是100MiB。
方式二:通过驱动器号直接定位分区(更直观)
如果你的分区有驱动器号(比如C:、D:),可以直接通过驱动器号关联到分区信息:
先查驱动器对应的卷信息:
wmic logicaldisk where "DeviceID='C:'" get DeviceID,VolumeName,Size
再关联到分区的起始偏移和大小:
wmic logicaldisk where "DeviceID='C:'" ASSOC /RESULTCLASS:Win32_DiskPartition
这条命令会输出C盘对应的分区详情,里面就包含咱们需要的StartingOffset和Size了,同样记得转成MiB单位。
第三步:执行克隆操作
现在三个信息都齐了,就可以运行dd命令了。举个实际例子:
我的物理驱动器是\\.\PHYSICALDRIVE0,目标分区起始偏移是1MiB,大小是488386MiB,那克隆命令就是:
dd if=\\.\PHYSICALDRIVE0 of=c_drive_backup.img bs=1M skip=1 count=488386 status=progress
⚠️ 重要提醒:运行这个命令必须用管理员权限打开MSYS2终端,而且克隆过程中别对目标分区进行读写操作,不然可能导致备份损坏。
备注:内容来源于stack exchange,提问作者machine_1

