I have an external Western Digital HDD (1gig) which is running very slow, 0.5 - 1mb per second. This is on a Mac Pro running the latest OS with all the patches. The HDD is connected via USB directly to the computer (i.e. no hub or anything.) Also I ran a disk diagnostic on it which comes up clean. The deeper diagnostic takes too long to finish.

  • could it be a hardware problem in the HDD?
  • could I need a different cable?
  • any other diagnostic steps that you might suggest?
Additional info I got from the OS. Does that tell you anything (me not)
ext HDD 1021:

  Product ID:   0x1021
  Vendor ID:    0x1058  (Western Digital Technologies, Inc.)
  Version:  20.21
  Serial Number:    888881563550353537363230
  Speed:    Up to 480 Mb/sec
  Manufacturer: Western Digital
  Location ID:  0xfa200000 / 2
  Current Available (mA):   500
  Current Required (mA):    2
  Capacity: 1 TB (1,000,202,043,392 bytes)
  Removable Media:  Yes
  Detachable Drive: Yes
  BSD Name: disk2
  Partition Map Type:   GPT (GUID Partition Table)
  S.M.A.R.T. status:    Not Supported
  Volumes:
EFI:
  Capacity: 209.7 MB (209,715,200 bytes)
  BSD Name: disk2s1
  Content:  EFI
ExternalHD:
  Capacity: 999.86 GB (999,858,069,504 bytes)
  File System:  HFS+
  BSD Name: disk2s2
  Content:  Apple_HFS
  Volume UUID:  FFFFFEB2-42F8-3510-85F4-12632D99D19B
  • I'd remove it from the USB enclosure and connect it directly to the SATA port. Then run a S.M.A.R.T. tool to check the values for outliers and run a tool to test the performance (dd, iozone, bonnie++, etc.) If the results are worse than expected I'd replace the drive. – Marco Jan 12 '14 at 22:54
  • So you think a drive can fail just on speed (without data errors?) – pitosalas Jan 13 '14 at 0:27
  • Yes, it is possible. But from my experience I can tell that slow disks soon started to fail. The disk might be defective and already produces data errors which have been corrected by the error correction routines on the disk. Or maybe they were not corrected. Can you be sure there are no data errors? Furthermore your USB enclosure prevents you from reading the SMART values. As I said, do a performance test (sequential reads + latency should be sufficient) on the directly conntected disk. Then you know if it's the disk or the enclosure/cable. – Marco Jan 13 '14 at 0:47

sounds like USB 1.x speed :)

USB 1.x spec:
- at Full Speed 12 Mbit/s = 1,5 MB/s
- at Low Speed 1,5 Mbit/s = 0,1875 MB/s

Maybe it is not able to drain enough power from the USB socket and it is working in the lowest speed possible.

try "lsusb -v" maybe You will get some details about the power.

  • Do you think ti could be cable related? The disk came with and inside the enclosure from Western Digital by the way. – pitosalas Jan 13 '14 at 0:29
  • I would test with another computer first. Then swap cable, Then as @Marco suggest do a SMART test - maybe the drive is just defective. – Bartłomiej Zarzecki Jan 13 '14 at 0:37
  • Tried it on a new mac air. It is as slow, with the same cable as well as with another cable. I assume there's no way to tell whether a cable is USB2 vs. USB1? – pitosalas Jan 13 '14 at 23:36
  • @pitosalas check the port spec – Bartłomiej Zarzecki Jan 13 '14 at 23:52
  • @bartlomei I don't know what a port spec is, can you say more? – pitosalas Jan 14 '14 at 4:00

The drive may become slow because of unstable sectors (that's sectors that the drive cannot currently read, but may become readable after being overwritten or reallocated). I observed this in an external drive myself. In my case, the unstable sectors caused I/O errors in a frequently used part of the filesystem. While no file appeared to fail, the transfer rate spuriously dropped down to about 100 kB/s.

A rough but easy attempt to repair this would be to erase the disk with Disk Utility using the secure erase option Zero Out Data. This may either fix the unstable sectors or reallocate them to a small spare section of the drive.

I'll instruct you here how to find and possibly correct read errors from the command line (Terminal application). You must have administrator rights and give your account password to do this. Before you start, you should backup your data. And in either case, you should inspect the drive's health with a S.M.A.R.T. tool after you are finished.

First identify the device corresponding to your drive with diskutil:

$ diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *256.1 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Internal HD             255.7 GB   disk0s2
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *3.0 TB     disk1
   1:                  Apple_HFS External HD             3.0 TB     disk1s1
$

In this case, the external drive is /dev/disk1. Now do a raw copy of this drive to 'nowhere', using the dd command.

$ sudo dd if=/dev/rdisk1 of=/dev/null bs=65536
Password: 

(notice the use of rdisk1 instead of disk1 here, this turns off buffering and speeds up dd).

Even for a healthy disk connected via USB2, this command takes roughly 9 h/TB. To check its progress, hit ctrl-t while it is executing.

In case of a read error, dd will exit with a notification like this:

dd: reading '/dev/rdisk1': Input/output error
11233976+0 records in
11233976+0 records out
736229851136 bytes transferred in 23179.173766 seconds (3176255 bytes/sec)

The records in/out numbers indicate where on disk the error occured. Multiply by 128 to obtain the offending LBA address (this is because I chose bs=65536 for dd, blocksize 65536 bytes, which is 128 sectors).

You should backup your data now if you haven't already done so.

Try to overwrite the offending segment with zeroes (use the records in/out number as the skip argument). Note that this step may destroy data that is yet intact.

$ sudo dd if=/dev/zero of=/dev/rdisk1 bs=65536 skip=11233976 count=1
Password:
1+0 records in
1+0 records out
65536 bytes transferred in 0.001996 secs (32833004 bytes/sec)

Then continue reading, starting with the freshly written segment (again, use the records in/out number as the skip argument).

$ sudo dd if=/dev/rdisk1 of=/dev/null bs=65536 skip=11233976

Once you don't run into any further read errors, the drive is ready for erasing. Since you overwrote the erroneous segments by hand, you need not choose Zero Out Data now.

Remember to inspect the drive's health with a S.M.A.R.T. toll after you finished.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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