Using Ubuntu 12.04, I booted into maintenance mode and selected fsck from the menu. This ran a filesystem check on all my volumes (all ext2), mounting them read/write by default. After the tests completed it said there were bad blocks detected and that the filesystem had been written to. I immediately rebooted and ran smartmon tools (full tests) on the disk. The SMART information showed the drive to be perfectly healthy (no re-allocated sectors, no pending re-allocations). I then ran the badblocks utility on all my volumes with absolutely no errors. What is going on?
Google published a report about 5 years ago basically stating that the SMART attributes in modern hard drives were not generally predictive of drive failure or useful for diagnostics. Which is unfortunate, because we generally want this kind of thing to be useful.
I suggest using the -c switch twice on fsck to force a read-write test of the sectors. This invokes the badblocks program. It it accomplishes roughly the same thing that GRC's SpinRite does. (SpinRite will work on any linux formatted drive, btw.) Example fsck invocation:
fsck.ext2 -fycc /dev/sdb1
I have seen ext2 formatted drives with errors rapidly decay into trashed filesystems when plied with fsck, so before invoking badblocks on the disk, if you can still mount the partition, back it up. When running the check, make sure you have good ventilation across your disk(s) because this will turn up the heat.