8

I recently upgraded a home-built external hard drive from 1TB to 3TB. In doing so, I learned that it's bridge board doesn't support drives larger than 2TB. I had to get a newer case in order to support this drive.

Does anyone know why this should be true?

From the standpoint of the SATA interface, there should be no problem. The LBA-28 system of identifying blocks imposed a 128GiB limit (assuming the usual 512 byte blocks), but that hasn't been a serious concern for over 10 years. Everything since then (including all SATA devices) supports LBA-48, which tops out at 128PiB and therefore should easily support 3TB.

I am aware of the MBR partition table issue with its 2TB limit, but that shouldn't affect a SATA-USB bridge chip, since it is (or should be) just translating disk blocks between two protocols.

I'm thinking that this might simply be a case of chip makers getting lazy, using 32-bit integers for an application that really needs to support 48-bit values. Is it really that simple (and IMO, inexcusable) or is there something else I'm missing?

Just curious, but I haven't been able to Google an answer from anywhere yet.

8

OK, I'm answering my own question 30 minutes later. I couldn't stop searching for a reason and I think I found it. It's not the ATA spec, which supports 48-bit block addresses. It's actually the USB spec.

According to Wikipedia (http://en.wikipedia.org/wiki/USB_mass_storage_device_class#Device_access) the USB mass storage class implements the SCSI transparent command set. Looking at the various SCSI Read commands (https://www.seagate.com/files/staticfiles/support/docs/manual/Interface%20manuals/100293068j.pdf, sections 3.15 through 3.19) I see that there are several different versions of the command:

  • READ(6) uses 21-bit block address, imposing a 1 GiB limit for devices with 512 byte blocks.
  • READ(10) and READ(12) use 32-bit block addresses, imposing a 2 TiB limit for devices with 512 byte blocks.
  • READ(16) and READ(32) use 64-bit block addresses, imposing an 8 ZiB limit (8 giga-terabytes).

At this point, I think the answer is clear. The original chips didn't implement the calls with 64-bit addresses, figuring that there was no point. Then when 3TB drives became available, they were enhanced to support the 64-bit address calls.

2
  • 1
    Same story with many many RAID controllers. An awful lot of cheaper/older ones can only support 2TB volumes because of the same limitation. Jul 22 '13 at 21:52
  • Your analysis is spot-on, but you are missing *a lot* of the nuance that can still happen behind (or despite?) this limitation. See the linux commits I linked here for quite the plot twist. Also.. Did "many many RAID controllers" really still miss this after more than 11 years?
    – mirh
    Jan 12 at 2:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.