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

Dav*_* C. 8 usb hard-drive sata

我最近将自制的外置硬盘从 1TB 升级到 3TB。在这样做时,我了解到它的桥接板不支持大于 2TB 的驱动器。我必须得到一个更新的案例才能支持这个驱动器。

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

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

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

我认为这可能只是芯片制造商变得懒惰的情况,将 32 位整数用于真正需要支持 48 位值的应用程序。真的那么简单(和 IMO,不可原谅)还是我还缺少其他东西?

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

Dav*_* C. 8

好的,我在 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 千兆字节)。

在这一点上,我认为答案是明确的。最初的芯片没有实现 64 位地址的调用,认为没有意义。然后当 3TB 驱动器可用时,它们得到增强以支持 64 位地址调用。

  • 许多 RAID 控制器都有同样的情况。由于同样的限制,大量更便宜/较旧的设备只能支持 2TB 卷。 (2认同)