LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Hardware (http://www.linuxquestions.org/questions/linux-hardware-18/)
-   -   USB hard drive writes corrupt data under linux (http://www.linuxquestions.org/questions/linux-hardware-18/usb-hard-drive-writes-corrupt-data-under-linux-4175435199/)

hpsmouse 11-02-2012 02:59 AM

USB hard drive writes corrupt data under linux
 
Hi,

I have a SATA hard drive in a USB HDD enclosure, which works well with Windows. Recently I started using it in Linux and something went wrong.

When I write a huge block of data into that drive, the writing process will report that everything is fine. But when I read it back, there is a data corruption about every several GBs, and sometimes even more. The kernel will report an I/O error and a USB disconnected event. The USB HDD enclosure then reconnects again, looks like it has restarted.

If I connect the hard drive to a internal SATA port and do the same read operation, I see a lot of SATA UNC errors.

I've done a lot of tests and here are my results:
-- If data is written while the hard drive is directly connected to an internal SATA port, there will be no data corruption.
-- If data is written while the hard drive is in the HDD enclosure, but under Windows, there will be no data corruption either.
-- Those sectors are not really physically broken. A correct overwrite operation (either with an internal SATA port, or under windows) will fix them.
-- This error is reproducible, although actual positions of broken sectors will be different. I can reproduce it with my debian laptop and Raspberry Pi. And data corruption happens regardless of whether writing is performed in a mounted ext4/NTFS filesystem or directly to the raw device.

I have no other HDD enclosures to test, and I'm not sure if it's a hardware problem or a driver bug.

Does anyone have experience with such problems before? What can I do to fix the problem? Or do I have to buy a new HDD enclosure?

H_TeXMeX_H 11-03-2012 06:04 AM

I would mount it internally using a SATA port and run a SMART long test.

Code:

smartctl -t long /dev/sda
Then wait and check it with:

Code:

smartctl -a /dev/sda
Also make sure to plug the drive in externally using the USB cable that it comes with, which is usually a Y-cable with one connector for data and the other for power.


All times are GMT -5. The time now is 07:01 AM.