Seagate SeaTools for Linux is a collection of tools that will check your hard drives for hardware problems (Seagate are the authors, but it works at some level with most drives, regardless of the manufacturer).
The program can check a drive's S.M.A.R.T. status, for instance, if it supports that technology. You're able to run a quick drive self-test, allowing it to report problems. Simple read tests allow you to confirm that a drive is still working correctly, and a Long Drive Self Test may also be able to repair damaged sectors.
These basic tests are (apart from the repair option) entirely non-destructive, so you can run them without worrying about data loss.
The program also provides an Advanced Test option, though, which may overwrite data, and so needs to be treated with much more care. It's not something you can run accidentally - choose the Advanced Tests option and you get a big warning message, and have to press [F8] to continue - but just bear this in mind, you need to read all SeaTools messages carefully so you know exactly what the program is going to do.
SeaTools carries out only limited tests, but it can recommend options that you might struggle to figure out for yourself - a drive needs a firmware update, say - so is still worth a try if you're suffering from hard drive issues