badblocks is a program to test storage devices for bad blocks.
In case of a HDD the whole sector should get retired. A sector is a subdivision of a track on a storage device and sectors that have become bad cannot be used because they have become permanently damaged (a bad sector can change a letter in a text file to causing a binary program to have a segmentation fault).
S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) is Hardware-featured in almost every HDD still in use nowadays and in some cases it can automatically retire defect HDD Sectors. Anyhow it only passively waits for errors while badblocks writes simple patterns to every block of a device and then reads and checks them searching for damaged areas. (Just like memtest86* does with RAM.)
This can be done in a destructive write-mode that effectively wipes the device (do Backup!) or in non-destructive read-write (Backup advisable as well!) and read-only modes.
- 1 Usage
- 2 Storage Device Fidelity
- 3 Comparisons with Other Programs
- 4 Testing for Bad Sectors
- 5 Have File System Incorporate Bad Sectors
- 6 References
badblocks is in
badblocks [ -svwnfBX ] [ -b block-size ] [ -c blocks_at_once ] [ -e max_bad_blocks ] [ -d read_delay_factor ] [ -i input_file ] [ -o output_file ] [ -p num_passes ] [ -t test_pattern ] device [ last-block ] [ first-block ]
Storage Device Fidelity
Although there is no firm rule has been set, it is common thinking that a new drive should have zero bad sectors. Over time, bad sectors will develop on a storage device and although they are able to be defined to the file system so that they are avoided, continual use of the drive will usually result in additional bad sectors forming and are usually the harbinger of death of a hard drive. Replacement of the device is recommended.
Comparisons with Other Programs
Typical recommended practice for testing a storage device for bad sectors is to use the manufacturer's testing program. Most manufacturers have programs that do this. The main reasoning for this is that manufacturers usually have their standards built into the test programs that will tell you if the drive needs to be replaced or not. The caveat here being is that some manufacturers testing programs do not print full test results and allow a certain number of bad sectors saying only if they pass or not. Manufacturer programs, however, are generally quicker than badblocks sometimes a fair amount so.
Testing for Bad Sectors
To test for bad sectors in Linux the program badblocks is typically used. badblocks had several different modes to be able to detect bad sectors.
This test is primarily for testing new drives and is a read-write test. As the pattern is written to every accesible block the device effectively gets wiped. Default is an extensive test with four passes using four different patterns: 0xaa, 0x55, 0xff, 0x00 (hexadecimal). On some devices this will take a couple days to complete.
# badblocks -wsv /dev/<device>
- do a destructive write test
- show progress-bar
- be "verbose" and output bad sectors detected to stdout
Additional options you might consider:
- -p <number>
- run <number> of consecutive passes
- -o </path/to/output-file>
- print bad sectors to <output-file> instead of stdout
- -t <test_pattern>
- Specify a pattern. See below.
define specific test pattern
Badblocks can be made to repeatedly write a single "random pattern" with the
-t random option.
read-write Test (non-destructive)
This test is designed for devices with data already on them. A non-destructive test writes a random pattern to a sector, reads the sector to verify the write, and then writes what was on the original sector. This is a single pass test and is useful as a general maintenance test.
# badblocks -nsv /dev/<device>
-n option signifies a non-destructive test.
Have File System Incorporate Bad Sectors
To not use bad sectors they have to be known by the filesystem.
During Filesystem Check
Incorporating bad sectors can be done using the filesystem check utility (
fsck can be told to use badblocks during a check. To do a read-write (non-destructive) test and have the bad sectors made known to the filesystem run:
# fsck -vcck /dev/<device-PARTITION>
-cc option tells run
fsck in non-destructive test mode, the
fsck to show its output, and the
-k option preserves old bad sectors that were detected.
To do a read-only test (not recommended):
# fsck -vck /dev/<device-PARTITION>
During Filesystem Creation
Alternately, this can be done at filesystem creation time by first finding the file systems block size. For example for ext# filesystems:
# dumpe2fs /dev/<device-PARTITION> | grep 'Block size'
feed this to badblocks and save its output:
# badblocks -b <block size> -ns -o badblocks.txt /dev/<device-PARTITION>
Then re-create the file system with the information:
# mkfs.<filesystem-type> -l badblocks.txt /dev/<device-PARTITION>