0

I bought a USB 3.0 External 3.5" HDD Case.

It is based on the following chip: JMicron JMS567

I want to use it for attaching my internal HDD which has three partitions: swap and two ext4 partitions.

For testing purposes, I took my old 200 GB HDD, which had 2 partitions: first is a little NTFS partition, and the 2nd one is an ext4 partition.

My PC is running under Linux Mint 17.2, x86_64, kernel 4.4.

When I connected the HDD case to my PC, I could access the first NTFS partition, but it was impossible to access the 2nd ext4 partition! I also tried the USB case on Arch 2017.8 (VirtualBox). The same issue!

The following is what dmesg says on mount fail:

[288553.362536]  sdd: sdd1 sdd2
[288553.362593] sdd: p2 size 384428032 extends beyond EOD, enabling native capacity
[288553.366410]  sdd: sdd1 sdd2
[288553.366457] sdd: p2 size 384428032 extends beyond EOD, truncated
[288553.394656] sd 13:0:0:0: [sdd] Attached SCSI disk
[288554.138776] EXT4-fs (sdd2): bad geometry: block count 48053504 exceeds size of device (48053293 blocks)
[288555.667902] EXT4-fs (sdd2): bad geometry: block count 48053504 exceeds size of device (48053293 blocks)

I'm 100% sure that my disk has no errors! I tested it when it was connected to my PC as a regular SATA HDD!

The most funny is that under Windows 7 I installed ext2fsd driver which allows to access ext4 partitions under Windows. So, under Win 7 I can access the 2nd ext4 partition without any problems!

This is definitely a USB driver issue!

My 200 GB disk params when it was connected as a SATA drive (I set to bold those values which differ when the disk is connected via USB):

fdisk -l /dev/sdd

Disk /dev/sdd: 200.0 GB, 200049647616 bytes
255 heads, 63 sectors/track, 24321 cylinders, total 390721968 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe1751117

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1   *        2048     6293503     3145728    7  HPFS/NTFS/exFAT
/dev/sdd2         6293504   390721535   192214016   83  Linux


hdparm -I /dev/sdd

/dev/sdd:

ATA device, with non-removable media
        Model Number:       WDC WD2000JS-00MHB0                     
        Serial Number:      WD-WMANL1143240
        Firmware Revision:  02.01C03
Standards:
        Supported: 7 6 5 4 
        Likely used: 8
Configuration:
        Logical         max     current
        cylinders       16383   16383
        heads           16      16
        sectors/track   63      63
        --
        CHS current addressable sectors:   16514064
        LBA    user addressable sectors:  268435455
        LBA48  user addressable sectors:  390721968
        Logical/Physical Sector size:           512 bytes
        device size with M = 1024*1024:      190782 MBytes
        device size with M = 1000*1000:      200049 MBytes (200 GB)
        cache/buffer size  = 8192 KBytes

The same disk, but now connected via USB HDD case:

fdisk -l /dev/sdd

Disk /dev/sdd: 200.0 GB, 200048565760 bytes
255 heads, 63 sectors/track, 24321 cylinders, total 390719855 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
Disk identifier: 0xe1751117

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1   *        2048     6293503     3145728    7  HPFS/NTFS/exFAT
/dev/sdd2         6293504   390721535   192214016   83  Linux



hdparm -I /dev/sdd

/dev/sdd:

ATA device, with non-removable media
        Model Number:       WDC WD2000JS-00MHB0                     
        Serial Number:      WD-WMANL1143240
        Firmware Revision:  02.01C03
Standards:
        Supported: 7 6 5 4 
        Likely used: 8
Configuration:
        Logical         max     current
        cylinders       16383   16383
        heads           16      16
        sectors/track   63      63
        --
        CHS current addressable sectors:   16514064
        LBA    user addressable sectors:  268435455
        LBA48  user addressable sectors:  390719855
        Logical/Physical Sector size:           512 bytes
        device size with M = 1024*1024:      190781 MBytes
        device size with M = 1000*1000:      200048 MBytes (200 GB)
        cache/buffer size  = 8192 KBytes

As you can see the geometry is wrong, because sector size is wrong... Maybe, there's any param in mount options which allows to set block/sector size? Or any other solution?

Thank you!

P. S. Detailed USB chip description:

Bus 002 Device 004: ID 152d:2590 JMicron Technology Corp. / JMicron USA Technology Corp. Seatay ATA/ATAPI Bridge
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x152d JMicron Technology Corp. / JMicron USA Technology Corp.
  idProduct          0x2590 Seatay ATA/ATAPI Bridge
  bcdDevice           81.05
  iManufacturer           1 USB to ATA/ATAPI Brid
  iProduct                2 Generic USB Device
  iSerial                 3 00A12345AFC0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           85
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          4 USB Mass Storage
    bmAttributes         0xc0
      Self Powered
    MaxPower               30mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk-Only
      iInterface              6 MSC Bulk-Only Transport
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       1
      bNumEndpoints           4
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     98 
      iInterface             10 MSC USB Attached SCSI
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Command pipe (0x01)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Status pipe (0x02)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Data-in pipe (0x03)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Data-out pipe (0x04)
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength           22
  bNumDeviceCaps          2
  USB 2.0 Extension Device Capability:
    bLength                 7
    bDescriptorType        16
    bDevCapabilityType      2
    bmAttributes   0x00000002
      Link Power Management (LPM) Supported
  SuperSpeed USB Device Capability:
    bLength                10
    bDescriptorType        16
    bDevCapabilityType      3
    bmAttributes         0x00
    wSpeedsSupported   0x000e
      Device can operate at Full Speed (12Mbps)
      Device can operate at High Speed (480Mbps)
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   1
      Lowest fully-functional device speed is Full Speed (12Mbps)
    bU1DevExitLat          10 micro seconds
    bU2DevExitLat          32 micro seconds
Device Status:     0x0001
  Self Powered
  • I vaguely remember some issues with USB-to-SATA bridges for large drives not passing along some of the "large versions" of SCSI commands correctly. I wouldn't trust your FUSE solution not to corrupt data until you've figured out which commands fail and which work. But it's your data ... – dirkt Nov 30 '17 at 13:53
  • @dirkt Hmmm, so, what's wrong with FUSE solution? FUSE is working, regular mount isn't! – Exterminator13 Nov 30 '17 at 14:10
  • Unless you know which commands won't work, FUSE can happily read the wrong block (with a large LBA, which gets mapped to a smaller LBA), causing data corruption. You can e.g. use sg3-utils to test what goes wrong, but you need a working knowledge of SCSI commands. So FUSE may work (because it happens to use only SCSI commands that work), it may not (because it happens to use some that don't), but when you realize it screwed up your data, it's too late. – dirkt Nov 30 '17 at 14:51
0

During making this thread, I've finally found the solution!

Assume your disk is /dev/sdd, and it has 2 partitions: /dev/sdd1 and /dev/sdd2

The solution:

sudo apt-get install fuseext2

sudo fuseext2 -o rw+,sync_read /dev/sdd2 /mnt

Or, instead of the last command, you can write the mount command:

sudo mount -t fuse-ext2 -o rw+,sync_read /dev/sdd2 /mnt
0

Finally! I've found the solution which allows to use a regular mount command:

sudo resize2fs -f /dev/sdd2

That's an output:

Resizing the filesystem on /dev/sdd2 to 48053293 (4k) blocks. The filesystem on /dev/sdd2 is now 48053293 blocks long.

This command does not delete data which is very important!

After that I am able to open both partitions with standard filesystem tools!

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.