硬盘驱动器是否根据主机控制器的需要打开 512e(4k 扇区的 512 字节模拟)?

硬盘驱动器是否根据主机控制器的需要打开 512e(4k 扇区的 512 字节模拟)?

我有一个 4 TB 硬盘,其物理扇区大小为 4k(高级格式),我将其连接到两个 SATA 主控制器(一个内置,一个在 USB 外壳中)。在(较旧的,大约 2010 年)上,它的逻辑扇区大小为 512B,但报告其物理扇区为 4096 字节。在最近​​的 USB 外壳中,报告其逻辑和物理大小为 4096B:

# internal host controller
sd 4:0:0:0: [sdd] 7814037168 512-byte logical blocks: (4.00 TB/3.63 TiB)
sd 4:0:0:0: [sdd] 4096-byte physical blocks

# USB enclosure
sd 18:0:0:0: [sdd] 976754646 4096-byte logical blocks: (4.00 TB/3.63 TiB)

“内部”控制器表现出我以前见过的行为,通常称为“512e”,其中驱动器的固件模拟 512 扇区 LBA 寻址,即使它不会以这种方式物理写入扇区。操作系统(和管理员)可以确保分区对齐,以便(小)写入命令可以分组,这样磁盘就可以覆盖整个扇区,而不是退回到写入物理扇区的一部分,在那里它需要先读取剩余的内容。

然而,在驱动器(USB 外壳)上看到“4k 原生”行为对我来说是新鲜事,我最初的想法是外壳在驱动器模拟的 512B 模拟之上模拟 4096B 寻址。

我通过网络搜索发现的唯一这种情况是使用 4k 逻辑扇区注册的 USB 存储设备。我推测它们通过 512e 模拟 4k,因此允许使用 MBR 分区表,这样大型驱动器就可以在仅支持 MBR+FAT32 USB 大容量存储的传统/嵌入式设备(智能电视等)上使用。

联系制造商,他们声称该驱动器实际上是在非模拟(本机)4k 模式下运行的,USB SATA 控制器也根本没有进行任何模拟。这将需要驱动器的固件检测主机控制器是否支持(希望?)寻址 4KB 的扇区大小。我在 SATA 标准的公开文档中找不到有关此内容的任何信息。所以我问:

  • 有人在他们的 SATA 控制器上看到过“4096 字节逻辑块”吗?
  • 驱动器是否真的支持按需启用/禁用模拟?如果是,
    • 这一决定如何发挥作用?
    • 您可以通过标志在驱动器上覆盖它吗?
    • 您可以通过驱动程序/标志在主机控制器上覆盖它吗?

答案1

我见过一些 4Kn SATA 硬盘在硬盘验证行业中运行,但我不知道他们正在向客户运送任何硬盘,因为对它们的硬件和软件支持有限,而且缺乏客户需求。

物理扇区和逻辑扇区大小有两种相互竞争的映射。长逻辑扇区功能允许设备拥有超过 512B 的逻辑扇区(例如 4Kn),而长物理扇区功能允许设备每个物理扇区拥有多个逻辑扇区(例如 512e),尽管它们不一定是互斥的。如果制造商声称驱动器是 4Kn,那么较旧的控制器可能会为较旧的应用程序和硬件提供模拟层,如读取-修改-写入,因为较旧的系统根本不支持 4Kn 格式。

sg3_utils 包中的命令sg_sat_identify可能会为您提供所需的信息(检查字 106-108 以了解物理扇区大小/逻辑扇区大小信息)。

从本质上看,SATA 驱动器似乎无法支持按需仿真,但如果驱动器确实使用的是 512e 而不是 4Kn,则可以通过驱动程序(或可能是 USB SATA 控制器)将读/写限制在 4K 边界来最大化性能优化,例如,让传输从低 3 位为 0 的 LBA 开始,并在低 3 位为 1 的 LBA 上结束:

start_lba & 0x3 == 0
end_lba & 0x3 == 1

因此,基本上,没有“开关”可以告诉驱动器启动或停止模拟。从最终用户的角度来看,最好的办法可能是确保您的驱动器使用最适合驱动器使用的映射的文件系统,并确保其正确对齐。以下网站对常见文件系统及其在不同文件系统上的性能与块对齐的统计数据进行了很好的细分: http://www.ibm.com/developerworks/library/l-linux-on-4kb-sector-disks/index.html

相关内容