I had this from a loose SATA cable. Wiggled it and all got better.
Also, if you are slightly linux literate boot a live-cd or your distro. Do a "dd if=/dev/drive of=/dev/null bs=4096 &" then watch "iostat -dxk 1" If you see 100% utilization and something like 40MB/s, the drive is probably good.
Also there's a s.m.a.r.t utility that lets you access the harddrive's built in diagnosis and error reporting.
Speaking of which, I'm going to check my drives...