If you boot a Linux live CD or USB, and open a terminal, I'd run something like (as root):
Code:
smartctl -a /dev/sdx > smart1.txt &&
badblocks -w -v /dev/sdx &&
smartclt -a /dev/sdx > smart2.txt
where
sdx is whatever Linux calls the dodgy disk.
badblocks will write various bit-sequences to the drive designed to confuse it and catch bad blocks (this takes a while), and will scrub any viruses (
and everything else!) off the disk. (Actually a simple "cp /dev/null /dev/sd
x" will wipe the disk and give every block a write if you're less paranoid.)
smartctl queries the disk's firmware for hardware failures and the like. Running it twice (before and after
badblocks stresses each block) and comparing the output (in smart1.txt and smart2.txt) will detect if the disk is actually in the process of failing.