I like badblocks and don't know a better more reliable way of checking the drive. If there are no errors from badblocks and dmesg doesn't produce any SATA related errors, the drive should be good (for now at least).
I also prefer to do read and write mode, yes it takes ages but it is really the best way of doing it. This gives me the most confidence in knowing that a drive, especially a new one is at least OK at the moment.
To test in read only mode
badblocks -v /dev/sdc
To test in non-destructive read-write mode (to preserve data):
badblocks -nv /dev/sdc
Checking for bad blocks in non-destructive read-write mode
To test in -destructive read-write mode (you will lose all data!)
*Warning again the method below will erase all data!
I used the option "-w" for write mode (only use this on a new drive or one where the data doesn't matter is it will wipe it out).
I alos used "v" for verbose to get a little more info.
*Warning again the method below will erase all data!
badblocks -wv /dev/sdc
Checking for bad blocks in read-write mode
From block 0 to 1953514584
Testing with pattern 0xaa:
badblocks, linux, verify, hdd, badi, reliable, errors, dmesg, doesn, sata, mode, ok, dev, sdc, destructive, preserve, nv, method, erase, quot, alos, verbose, info, wv, xaa,