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

Nat*_*ers 13 usb hard-drive sata external-hard-drive

我有一个 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)
Run Code Online (Sandbox Code Playgroud)

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

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

我唯一可以通过 Web 搜索找到的这种情况,其中 USB 存储设备注册了 4k 逻辑扇区。我认为他们在 512e 上模拟 4k,因此允许使用 MBR 分区表,以便大型驱动器可以在仅支持 MBR+FAT32 USB 大容量存储的传统/嵌入式设备(智能电视等)上使用。

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

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

Ada*_*ber 3

我在硬盘验证行业见过一些 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
Run Code Online (Sandbox Code Playgroud)

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