有人知道为什么旧款 USB 驱动器盒有 2TB 的大小限制吗?

有人知道为什么旧款 USB 驱动器盒有 2TB 的大小限制吗?

我最近将自制的外置硬盘从 1TB 升级到了 3TB。升级过程中,我发现它的桥接板不支持大于 2TB 的硬盘。我不得不买一个更新的外壳来支持这个硬盘。

有谁知道为什么这是真的吗?

从 SATA 接口的角度来看,应该没有问题。LBA-28 识别块系统施加了 128GiB 的限制(假设通常为 512 字节块),但十多年来这一直不是一个严重的问题。从那时起,所有东西(包括所有 SATA 设备)都支持 LBA-48,最高可达 128PiB,因此应该很容易支持 3TB。

我知道 MBR 分区表存在 2TB 限制的问题,但这不应该影响 SATA-USB 桥接芯片,因为它(或应该)只是在两种协议之间转换磁盘块。

我认为这可能只是芯片制造商偷懒的一个例子,他们使用 32 位整数来处理真正需要支持 48 位值的应用程序。事情真的这么简单吗(在我看来,这是不可原谅的)还是我忽略了其他什么?

只是好奇,但我还无法通过谷歌从任何地方找到答案。

答案1

好的,30 分钟后,我开始回答自己的问题。我一直在寻找原因,我想我找到了。这不是支持 48 位块地址的 ATA 规范。实际上是 USB 规范。

根据维基百科 (http://en.wikipedia.org/wiki/USB_mass_storage_device_class#Device_access)USB 大容量存储类实现了 SCSI 透明命令集。查看各种 SCSI 读取命令(https://www.seagate.com/files/staticfiles/support/docs/manual/Interface%20manuals/100293068j.pdf,第 3.15 至 3.19 节)我看到该命令有几个不同的版本:

  • READ(6) 使用 21 位块地址,对具有 512 字节块的设备施加 1 GiB 的限制。
  • READ(10) 和 READ(12) 使用 32 位块地址,对具有 512 字节块的设备施加 2 TiB 的限制。
  • READ(16) 和 READ(32) 使用 64 位块地址,施加 8 ZiB 限制(8 GB)。

至此,我认为答案已经很清楚了。最初的芯片没有实现 64 位地址调用,认为这样做没有意义。然后,当 3TB 驱动器面世时,它们得到了增强,以支持 64 位地址调用。

相关内容