dd.exe
要使用 Windows 版 MSYS2克隆分区,我们需要 3 条信息。
- 物理驱动器名称
- 分区起始偏移量(以 MiB 为单位)
- 分区大小(以 MiB 为单位)
dd if=physical_drive_name of=backup.img bs=1M skip=starting_offset count=size status=progress
要列出可用的物理磁盘驱动器,我们可以使用以下命令:
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 驱动器很感兴趣,因此我将使用它的索引 ( 0
) 来查找需求 #1,即物理驱动器名称:
wmic diskdrive where "Index=0" get DeviceID,Partitions,Status,MediaLoaded
它输出:
DeviceID MediaLoaded Partitions Status
\\.\PHYSICALDRIVE0 TRUE 8 OK
另外两个要求是分区起始偏移量和分区大小。要列出分区及其属性,我将使用以下命令:
wmic partition where "DiskIndex=0" get Name,Index,Type,StartingOffset,BlockSize,NumberOfBlocks,Size
它输出:
BlockSize Index Name NumberOfBlocks Size StartingOffset Type
512 0 Disk #0, Partition #0 614400 314572800 1048576 GPT: System
512 1 Disk #0, Partition #1 727875584 372672299008 449839104 GPT: Basic Data
512 2 Disk #0, Partition #2 225282048 115344408576 373123186688 GPT: Basic Data
512 3 Disk #0, Partition #3 102400 52428800 488467595264 GPT: Basic Data
512 4 Disk #0, Partition #4 2123776 1087373312 488520024064 GPT: Unknown
512 5 Disk #0, Partition #5 2027520 1038090240 489609494528 GPT: Unknown
512 6 Disk #0, Partition #6 39032832 19984809984 490647584768 GPT: Unknown
512 7 Disk #0, Partition #7 2883584 1476395008 510633443328 GPT: Unknown
现在,我们可以使用dd.exe 来克隆所选分区的起始偏移量和大小。但是,此输出并未提示分区的内容。为此,我们需要列出卷,以便查看格式化分区的文件系统和标签:
wmic volume where "DriveType=3" get Label,DeviceID,DriveLetter,DriveType,SerialNumber,FileSystem,MaximumFileNameLength,BlockSize,Capacity,FreeSpace
它输出:
BlockSize Capacity DeviceID DriveLetter DriveType FileSystem FreeSpace Label MaximumFileNameLength SerialNumber
4096 372672294912 \\?\Volume{41d21340-a487-4021-9735-3e999ccfc734}\ C: 3 NTFS 232339791872 OS 255 3295242676
\\?\Volume{e5ffe5ea-3596-468c-832f-e5bcf2aeb39e}\ 3
512 48234496 \\?\Volume{5792630e-1c80-4d8a-a679-82ec4cd0ecdc}\ 3 FAT32 39666176 GRUBX64 255 716055397
4096 1087369216 \\?\Volume{19df495f-4e17-41fb-bcb0-d33d40588153}\ 3 NTFS 161165312 255 1445116501
4096 1038086144 \\?\Volume{9e1ca148-9cff-4576-ba37-cad1aab53ba1}\ 3 NTFS 501415936 WINRETOOLS 255 4141927052
4096 19984805888 \\?\Volume{0e8ffde2-0844-4d79-ada2-a3ea534dcc6b}\ 3 NTFS 136228864 Image 255 3940616972
4096 1476390912 \\?\Volume{a847a1f9-be5e-4f38-80ff-e5617868e2a1}\ 3 NTFS 505286656 DELLSUPPORT 255 1554162235
4096 310378496 \\?\Volume{9685da03-f3a8-4f89-88f2-1b9dafc3bd38}\ 3 FAT32 203812864 ESP 255 684405683
现在,如果我们可以确定我们感兴趣的卷的分区号,我们可以参考分区表来找到要使用的起始偏移量和大小dd.exe
,但是我们如何才能做到这一点呢?
可靠的(唯一)卷属性是serial number
,deviceID
和(label
如果drive letter
有的话)。大小通常是不可靠的,因为 2 个或更多分区可能具有相同的大小。
假设我们感兴趣的卷是DELLSUPPORT
,我们如何找到它的分区号,以便我们可以找到它的起始偏移量和大小dd.exe
?
我找到了一个使用 Powershell 的解决方案:
1-列出物理磁盘:
2-列出磁盘号 0 的分区:
3-列出磁盘号 0 分区上的卷:
4-分区表中包含卷属性
FileSystemType
:FriendlyName
要复制磁盘,
dd
您不需要物理驱动器名称。您需要指定源文件,但无论是物理驱动器名称、逻辑驱动器名称还是实际文件 - 都无关紧要。如果要备份分区,则需要为该分区指定逻辑名称。要获取它们,您需要使用标准工具
fdisk
:另一个错误的假设是
dd
:您不需要指定分区的起始和大小。如果您想要一个完整的分区 - 您只需要一个名称。如果您指定起始和大小 - 您将只获得该分区的一部分。因此,要备份启动分区,您只需要:dd
另外,混合使用工具链(来自 msys2,来自 Windows 管理)也不是一个好主意wmic
。有可能,但会导致很多混乱和不必要的数据转换。如果您开始使用msys2
工具 - 请使用它们。如果wmic
您更喜欢 - 使用 Windows 自己的备份工具。