如何确定 Windows 中的扇区大小?

Posted

技术标签:

【中文标题】如何确定 Windows 中的扇区大小?【英文标题】:How can I determine the sector size in windows? 【发布时间】:2012-03-16 22:50:08 【问题描述】:

如何确定 Windows 7 中的物理扇区大小(例如,如果我有一个具有 4,096 字节扇区的 Advanced Format 驱动器,而不是旧的 512 字节扇区)?

我知道通过单击文件并获取属性,我们可以找出 NTFS 集群大小,但这与硬盘驱动器的扇区大小不同。

注意:我们询问 Windows 7 是因为它(和 Windows Vista SP1)了解 4096 高级格式硬盘的存在。

【问题讨论】:

我将为 Windows 10 更新此内容,因为这是我搜索中出现的第一篇文章:使用 Powershell,“Get-Disk | Format-List”(但是,它没有t 显示我所有的磁盘...) Windows 10 的更好更新,“Get-PhysicalDisk | 选择物理扇区大小,友好名称”。正确显示我的所有物理磁盘及其扇区大小。 【参考方案1】:

你想要 fsutil。确保以管理员身份运行命令提示符。

C:\Windows\system32>fsutil fsinfo ntfsinfo c:
NTFS Volume Serial Number :       0xf4ca5d7cca5d3c54
Version :                         3.1
Number Sectors :                  0x00000000378fd7ff
Total Clusters :                  0x0000000006f1faff
Free Clusters  :                  0x00000000000e8821
Total Reserved :                  0x0000000000000910
Bytes Per Sector  :               512
Bytes Per Physical Sector :       512
Bytes Per Cluster :               4096
Bytes Per FileRecord Segment    : 1024
Clusters Per FileRecord Segment : 0
Mft Valid Data Length :           0x00000000196c0000
Mft Start Lcn  :                  0x00000000000c0000
Mft2 Start Lcn :                  0x000000000097ffff
Mft Zone Start :                  0x000000000051f920
Mft Zone End   :                  0x000000000051f9a0
RM Identifier:        0652C3D3-7AA9-11DA-ACAC-C80AA9F2FF32

【讨论】:

当属性 Bytes Per Physical Sector: 这意味着 512 @user2601995 你有那个来源吗? 什么是“文件记录段”?它是文件元数据的额外存储空间吗?【参考方案2】:

您可以在命令行中使用wmic:

C:\Windows\System32\wmic partition get BlockSize, StartingOffset, Name, Index

BlockSize  Index  Name                   StartingOffset
512        0      Disk #0, Partition #0  32256
512        1      Disk #0, Partition #1  370195176960

BlockSize 是驱动器的扇区大小。

【讨论】:

BlockSize逻辑 扇区大小,而不是fsutil fsinfo ntfsinfo c: 报告的物理大小。资料来源:我有一个 4,096 AF 驱动器,fsutil 报告为 4096,BlockSize 报告为 512。 第二个以上,这只报告逻辑扇区大小。 fsutil 报告正确。【参考方案3】:

我想扩展 Chris Gessler 的回答,并注意没有已知的方法可以使用 Windows Management Instrumentation (WMI) 获取驱动器的 物理 扇区,例如wmic.

鉴于我有一个高级格式驱动器(即它使用每个扇区 4,096 字节而不是 512 字节):

C:\Windows\system32>fsutil fsinfo ntfsinfo d:
NTFS Volume Serial Number :       0xa016d8a616d87eaa
Version :                         3.1
Number Sectors :                  0x00000000747057ff
Total Clusters :                  0x000000000e8e0aff
Free Clusters  :                  0x000000000e7b2813
Total Reserved :                  0x0000000000000000
Bytes Per Sector  :               512
Bytes Per Physical Sector :       4096

WMI 的DiskDrive:

wmic:root\cli>diskdrive
Availability  BytesPerSector  Capabilities  CapabilityDescriptions                                       Caption
              512             3, 4, 10    "Random Access", "Supports Writing", "SMART Notification"  ST1000DM003-9YN162 ATA Device

 

也不是Partition:

wmic:root\cli>partition get BlockSize, StartingOffset, Name, Index
BlockSize  Index  Name                   StartingOffset
512        0      Disk #0, Partition #0  1048576

可以报告基础物理扇区大小。当您意识到它们都报告 Windows 正在使用的扇区大小时,这是有道理的。它每个扇区 512 字节 - 驱动器恰好内部不同。

这是因为只有 Windows 8 支持使用 4k 扇区。 Windows 7 了解驱动器可能是 4k,并努力将其 4k 集群与硬盘驱动器的底层 4k 扇区

更新

wmic diskdrive 现在确实Bytes per Sector 中显示每个扇区的物理字节:

C:\Windows\system32>wmic
wmic:root\cli>diskdrive
Availability  BytesPerSector  Capabilities  CapabilityDescriptions                                       
              4096            3, 4        "Random Access", "Supports Writing"                        

虽然wmic partition 仍然是错误的。

Windows 10.0.19041.804

【讨论】:

这个答案已经严重过时了。 这些实用程序现在显示逻辑(模拟,几乎总是 512)和物理(实际,几乎总是 4096)扇区大小。查看其他答案。【参考方案4】:

如果你想以编程方式拥有它,你需要发送IOCTL_DISK_GET_DRIVE_GEOMETRY_EX并使用DISK_GEOMETRY_EX结构中的Geometry.BytesPerSector

【讨论】:

只报告逻辑扇区大小。从传递IOCTL_STORAGE_QUERY_PROPERTYDeviceIoControl 获取STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR 结构将获得逻辑和物理扇区大小。唯一的缺点是它不适用于外置硬盘 - DeviceIoControl 返回 ERROR_INVALID_FUNCTION(至少,我还没有找到使它适用于外置硬盘的方法)。【参考方案5】:
    在命令行中运行 msinfo32 会弹出一个名为 “系统信息” 在左侧窗格中选择“系统摘要->组件->存储->磁盘”。这应该会在右侧窗格中加载所有驱动器的信息 找到所需的驱动器并检查“字节/扇区”的值。它应该说“字节/扇区 4096”

【讨论】:

【参考方案6】:

Windows 10 更新:

现在有一个sectorInfo 子命令可以提供更好的信息:

C:\>fsutil fsinfo sectorInfo C:

LogicalBytesPerSector :                                 512
PhysicalBytesPerSectorForAtomicity :                    4096
PhysicalBytesPerSectorForPerformance :                  4096
FileSystemEffectivePhysicalBytesPerSectorForAtomicity : 4096
Device Alignment :                                      Aligned (0x000)
Partition alignment on device :                         Aligned (0x000)
Performs Normal Seeks
Trim Not Supported

【讨论】:

适用于 2012 R2 不适用于 Windows 7 Ultimate。【参考方案7】:

Powershell:

$wql = "SELECT Label, Blocksize, Name FROM Win32_Volume WHERE FileSystem='NTFS'"
Get-WmiObject -Query $wql -ComputerName '.' | Select-Object Label, Blocksize, Name

输出示例:

Label            Blocksize Name
-----            --------- ----
OSDisk                4096 C:\
Windows RE Tools      4096 \\?\Volumeb042c778-cd66-4381-9312-3f4311321675\
PS C:\>

【讨论】:

解释这个... msinfo32 全部报告为 512,此报告全部为 4096,我知道我都有,因为我无法设置镜像,但我不知道哪个磁盘是哪个...另外,这仅显示驱动器号,而不是磁盘。【参考方案8】:

如果您真的想以编程方式拥有它,您需要发送IOCTL_STORAGE_QUERY_PROPERTY 提供STORAGE_PROPERTY_QUERY 并将PropertyId 设置为StorageAccessAlignmentProperty。这给出了物理和逻辑扇区大小。

注意:这仅适用于 Windows Vista 及更高版本。

【讨论】:

以上是关于如何确定 Windows 中的扇区大小?的主要内容,如果未能解决你的问题,请参考以下文章

在linux内核级别,如何读取和写入一个硬[重复]的扇区

在 Linux 中确定扇区大小的便携式方法

使用HDTune规避硬盘上损坏的扇区

读取引导磁盘上的扇区

覆盖文件时写入的扇区?

如何计算给定中心和方位角的扇区点的坐标