标题: Windows中查看磁盘物理大小 创建: 2026-01-15 08:38 更新: 链接: https://scz.617.cn/windows/202601150838.txt -------------------------------------------------------------------------- 目录: ☆ 背景介绍 ☆ diskmgmt.msc ☆ msinfo32 1) 总扇区数 vs 磁盘容量 ☆ diskpart 1) 默认GPT布局 2) 分区末端偏移 2.1) 分区末端偏移之前的扇区数 vs 总扇区数 ☆ PowerShell ☆ GPT 1) WinHex 1.1) LastUsableLBA+1 vs 磁盘容量 1.2) LastUsableLBA+1 vs 总扇区数 1.3) 可用于分区的总LBA数 vs 总扇区数 1.4) 用BackupLBA+1计算磁盘物理大小 1.5) 厂商标称 2) DiskGenius 2.1) MSR分区 ☆ 小结 -------------------------------------------------------------------------- ☆ 背景介绍 有块厂商标称3TB的磁盘,在Win10中用diskmgmt.msc划分了5个NTFS分区,它们的布 局是"1000000M+500000M*3+Remanent"。创建完,diskmgmt.msc看到的磁盘容量是 2794.50G,分区容量是"976.56+488.28*3+353.10"。查看各分区属性,容量会精确到 字节,分别是"1048575995904+524287995904*3+379134668800",资源管理器看到的 分区容量也是这种。 diskmgmt.msc查看整个磁盘的属性(不是单个分区的属性),在"卷"中看到此盘用GPT, 容量2861572M,未分配空间1M,分区容量是"1000000M+500000M*3+361571M"。资源管 理器看不到整个磁盘容量,只能看各分区容量。 想知道这些数字是否自洽。 ☆ diskmgmt.msc Win10的diskmgmt.msc新建简单卷时,只能用MB单位,无法切换至GB或其他单位。 1000000M=1000000*1024*1024=1048576000000 (精确) 1048576000000-1048575995904=4096=4K 1000000/1024=976.5625G 500000M=500000*1024*1024=524288000000 (精确) 524288000000-524287995904=4096=4K 500000/1024=488.28125G 361571M=361571*1024*1024=379134672896 (精确) 379134672896-379134668800=4096=4K 361571/1024=353.0966796875G 每个分区都有4K未计入容量,可能是NTFS不占用最后1个cluster(4K)所致。 所有分区累计容量: 976.56+488.28*3+353.10=2794.50G (近似) 这种两位小数是四舍五入过的近似值。 1048576000000+524288000000*3+379134672896=3000574672896 (精确) 3000574672896/1024/1024/1024=2794.5029296875G 1000000+500000*3+361571=2861571M (精确) 2861572-2861571=1M 此即前述未分配空间1M。 2861572*1024*1024=3000575721472 3000575721472/1024/1024/1024/1024=2.729007720947266T 3000575721472/512=5860499456扇区 这是diskmgmt.msc得到的磁盘容量。 ☆ msinfo32 msinfo32-组件-存储-磁盘,可看到磁盘的柱面、磁道、扇区信息。 -------------------------------------------------------------------------- 磁道/柱面 255 扇区/磁道 63 字节/扇区 512 总柱面数 364801 总磁道数 93024255 总扇区数 5860528065 分区 5 磁盘大小 2.73T (3000590369280) 分区0偏移 16777216 分区0大小 976.56G (1048576000000) 分区1偏移 1048592777216 分区1大小 488.28G (524288000000) 分区2偏移 1572880777216 分区2大小 488.28G (524288000000) 分区3偏移 2097168777216 分区3大小 488.28G (524288000000) 分区4偏移 2621456777216 分区4大小 353.10G (379134672896) -------------------------------------------------------------------------- 364801*255=93024255 93024255*63=5860528065 5860528065*512=3000590369280 3000590369280/1024/1024/1024/1024=2.729021043051034T msinfo32显示的总扇区数与磁盘大小相符。 msinfo32显示的分区偏移、分区大小都是精确值,包含diskmgmt.msc未计入分区容量 的4K。 1048592777216-16777216=1048576000000 1572880777216-1048592777216=524288000000 2097168777216-1572880777216=524288000000 2621456777216-2097168777216=524288000000 分区偏移与分区大小是自洽的。 1) 总扇区数 vs 磁盘容量 msinfo32的总扇区数,5860528065。diskmgmt.msc的磁盘容量,5860499456扇区。 5860528065-5860499456=28609扇区 28609*512/1024/1024=13.96923828125M 如何解释28609扇区的差值?这与MSR分区大小(32734扇区)不符,此差值无法用MSR分 区解释。 怀疑msinfo32的统计逻辑有历史遗迹,显示的总扇区数无法与其他数字逻辑相容。下 面是一些垂死挣扎: MSR分区起始扇区 34 第一个1M边界的扇区 1024*1024/512=2048 分区末端偏移 5860530176 磁盘容量右边界 5860532224 LastUsableLBA+1 5860533135 msinfo32的总扇区数 5860528065 5860530176-34=5860530142 5860532224-34=5860532190 5860533135-34=5860533101 5860530176-2048=5860528128 // 分区末端偏移-第一个1M边界的扇区 5860532224-2048=5860530176 5860533135-2048=5860531087 5860528128-5860528065=63 msinfo32认为有63个隐藏扇区需要刨除? ☆ diskpart diskpart无法直接得到分区精确大小,但能得到分区精确偏移,据此可推算部分分区 大小(最后一个分区除外)。 diskpart list disk select disk 0 list partition select partition 2 detail partition DISKPART> list partition Partition ### Type Size Offset ------------- ---------------- ------- ------- ----- Partition 1 Reserved 15 MB 17 KB 17408 Partition 2 Primary 976 GB 16 MB 16777216 Partition 3 Primary 488 GB 976 GB 1048592777216 Partition 4 Primary 488 GB 1464 GB 1572880777216 Partition 5 Primary 488 GB 1953 GB 2097168777216 Partition 6 Primary 353 GB 2441 GB 2621456777216 "list part"显示的分区偏移近似值,"detail part"可取分区偏移精确值,手工增补 到上图最后一列。 磁盘前部有个保留分区(Partition 1),是GPT强制创建的MSR(Microsoft Reserved) 分区。diskpart可查看MSR分区,diskmgmt.msc、msinfo32均未显示MSR分区信息。 Partition 2-6均对齐在1M边界上: 16777216/1024/1024=16 Partition 1(MSR分区)未对齐在1M边界上,对之可能无此要求。 17408/1024=17K 17408/512=34扇区 MSR分区大小要确保Partition 2对齐在1M边界上: 16777216-17408=16759808 16759808/512=32734扇区 16759808/1024/1024=15.9833984375M 猜测diskmgmt.msc统计磁盘容量时,起点是Partition 2,不含MSR分区,未分配空间 1M在分区末端偏移之后。 1) 默认GPT布局 LBA 0 Protective MBR,保护性MBR,1个扇区(512) LBA 1 GPT Header,主GPT头,1个扇区(512) LBA 2-33 Partition Entry Array[32],GPT分区表项,32个扇区(16384) 1+1+32=34扇区 34*512=17408 17408/1024=17K MSR分区偏移是(17K、17408),MSR分区紧接在GPT之后。 2) 分区末端偏移 16777216+1048576000000+524288000000*3+379134672896=3000591450112 2621456777216+379134672896=3000591450112 分区末端偏移之前的扇区数 3000591450112/512=5860530176 2.1) 分区末端偏移之前的扇区数 vs 总扇区数 分区末端偏移之前的扇区数大于msinfo32的总扇区数 5860530176-5860528065=2111扇区 如何解释2111扇区的差值,为什么msinfo32的总扇区数无法涵盖分区末端偏移的左侧? 只有一种解释,msinfo32统计总扇区数时,起点不是LBA 0,可起点是哪儿呢? ☆ PowerShell 在管理员级PowerShell中执行 Get-CimInstance Win32_DiskDrive -Filter "Index=0" | Format-List * Get-CimInstance Win32_DiskDrive -Filter "Index=0" | Select-Object ` DeviceID, ` TracksPerCylinder, ` SectorsPerTrack, ` BytesPerSector, ` TotalCylinders, ` TotalTracks, ` TotalHeads, ` TotalSectors, ` Partitions, ` @{Name="Size(Bytes)"; Expression={$_.Size}} 得到 DeviceID : \\.\PHYSICALDRIVE0 TracksPerCylinder : 255 SectorsPerTrack : 63 BytesPerSector : 512 TotalCylinders : 364801 TotalTracks : 93024255 TotalHeads : 255 TotalSectors : 5860528065 Partitions : 5 Size(Bytes) : 3000590369280 PowerShell所获信息与msinfo32一致。 ☆ GPT 3T大盘一般用GPT 1) WinHex 用WinHex打开目标磁盘(F9),Navigation->Go To Sector (Ctrl-G)->1,跳到LBA 1, 这是主GPT Header所在。此扇区首部8字节应该是: 000000200 45 46 49 20 50 41 52 54 EFI PART 此扇区内偏移: 0x20 BackupLBA (8字节) 备用GPT Header所在LBA 0x28 FirstUsableLBA (8字节) 可用于分区的第一个LBA,一般对应MSR分区 0x30 LastUsableLBA (8字节) 可用于分区的最后一个LBA 磁盘最后几个扇区布局如下: -------------------------------------------------------------------------- LastUsableLBA LastUsableLBA+1 Backup Partition Entry Array[0],正序排列 LastUsableLBA+2 ... LastUsableLBA+32 Backup Partition Entry Array[31] BackupLBA Backup GPT Header BackupLBA+1 磁盘物理大小的右边界 -------------------------------------------------------------------------- 本例在主GPT Header中依次取到: BackupLBA 0x000000015d50a3af=5860533167 FirstUsableLBA 0x22=34 LastUsableLBA 0x000000015d50a38e=5860533134 34*512=17408 FirstUsableLBA与MSR分区偏移相符。 (BackupLBA+1)-(LastUsableLBA+1)=5860533167+1-(5860533134+1)=33扇区 1.1) LastUsableLBA+1 vs 磁盘容量 LastUsableLBA+1=5860533134+1=5860533135 Partition 2之前的扇区数: 16777216/512=32768扇区 计算diskmgmt.msc的磁盘容量右边界的扇区号: 32768+5860499456=5860532224 计算差值: 5860533135-5860532224=911扇区 911*512/1024=455.5K 这911扇区目前无主,已去掉物理尾部的Backup GPT,可能就是正常缝隙。 diskmgmt.msc的未分配空间1M在哪里标定的?GPT中无此信息。怀疑diskmgmt.msc的 统计逻辑固定宣称未分配空间1M,反正分区末端偏移与LastUsableLBA+1之间有1.44M 的未分配空间。 5860533134+1-5860530176=2959扇区 2959*512/1024/1024=1.44482421875M 1.2) LastUsableLBA+1 vs 总扇区数 5860533135-5860528065=5070扇区 5070*512/1024/1024=2.4755859375M 如何解释5070扇区的差值? 1.3) 可用于分区的总LBA数 vs 总扇区数 可用于分区的总LBA数包含MSR分区 LastUsableLBA+1-FirstUsableLBA=5860533134+1-34=5860533101 此值大于msinfo32的总扇区数 5860533101-5860528065=5036扇区 5036*512/1024/1024=2.458984375M 如何解释5036扇区的差值?这与前问是一回事。 34+5036=5070 无论如何,msinfo32的总扇区数必定包含部分MSR分区,没有其他空间了。 1.4) 用BackupLBA+1计算磁盘物理大小 磁盘物理大小应该是 (BackupLBA+1)*512=(5860533167+1)*512=3000592982016 3000592982016/1024/1024/1024/1024=2.729023419320583T 此值只能靠BackupLBA计算获取。 1.5) 厂商标称 磁盘厂商用1000进制,不是1024进制。厂商通过这种1000进制虚标磁盘容量,显得容 量更大。计算所得磁盘物理大小小于厂商标称3T。 3*1000*1000*1000*1000=3000000000000 2) DiskGenius Partition Table Style GPT Cylinders 364801 Heads 255 Sectors per track 63 Sector Size 512 Physical Sector Size 4096 Total Sectors 5860533168 // BackupLBA+1 Totol Bytes 3000592982016 Capacity 2.7T DiskGenius的Total Sectors即BackupLBA+1,Totol Bytes即磁盘物理大小。 2.1) MSR分区 DiskGenius获取MSR分区信息如下 Sector Size 512 Starting Sector 34 Total Sectors 32734 Totol Bytes 16759808 (精确) Capacity 16.0M (近似) 32734*512=16759808 16759808/1024/1024=15.9833984375M DiskGenius认为MSR分区与下一分区之间没有填充。 ☆ 小结 1. diskmgmt.msc查看整个磁盘的属性,在"卷"中可看到创建各分区时指定的精确值 2. msinfo32可查看分区偏移、分区大小,均为精确值 3. diskpart查看分区偏移,可推算部分分区大小,包括MSR分区 4. PowerShell所获信息与msinfo32一致 5. 为获取磁盘物理大小,只能设法获取BackupLBA,比如用WinHex、DiskGenius 纯黑盒分析,始终未搞清楚msinfo32的总扇区数的物理意义,就这样吧。