Badblocks

badblocks is a Linux utility to check for bad sectors on a disk drive. It creates a list of these sectors that can be used with other programs, like mkfs, so that they are not used in the future and thus do not cause corruption of data. It is part of the e2fsprogs project, and a port is available for BSD operating systems.
When run as a standalone program, badblocks gives a list of blocks with problems, if any. This makes it a good option for checking whether the disk drive is healthy, independent of SMART data and file system checks.
e2fsck's "-c" option.
A more common use case is the invocation of badblocks as part of e2fsck when passing the option codice_1 to scan for bad blocks and prevent data from being stored on these blocks. This is done by adding the list of found bad blocks to the bad block inode to prevent the affected sectors from being allocated to a file or directory. The test can be done using a read-only (codice_1) or non-destructive read–write (codice_3) test method.
dumpe2fs.
Running codice_4 will display the list of bad blocks recorded by codice_5 or codice_6.
Examples.
 badblocks -nvs /dev/sdb
This would check the drive "sdb" in non-destructive read–write mode and display progress by writing out the block numbers as they are checked.
 badblocks -wvs /dev/sdb6
This would check the sixth partition of the drive "sdb", in destructive read–write mode (-w = write-mode), which writes 4 different patterns on the whole partition and verifies each by reading back. It displays progress by writing out the block numbers as they are checked (-s = show, -v = verbose). All data on the partition will be overwritten at the block level.
 badblocks -wvsb 4096 /dev/sdb
This does the same as above, but to the entire drive, with a block size of 4096. This destroys MBRs, partitions and data alike. Modern disk drives will probably not show any defective sectors because they silently remap bad sectors to spare tracks, but running the program with a new drive for several days will test the whole surface, and when reading it afterwards S.M.A.R.T. data will eventually show reallocated sectors.
Using the codice_7 option on a device containing an existing file system erases the data on that device.