The badblocks utility in Linux performs a non-destructive read-only test by default, verifying data integrity on existing blocks without overwriting them. To ensure drive health and confirm that stored data matches what is retrieved, you must use the -s flag for progress reporting or rely on the default behavior while avoiding write-specific flags like -w. This approach allows administrators to validate sectors safely before any potential migration or repair operations.
Understanding Non-Destructive Testing Modes
When assessing the physical health of a hard drive or solid-state drive, it is crucial to distinguish between destructive and non-destructive testing methods. Thebadblocks command offers several modes, but only specific ones are suitable for verifying existing data integrity. By default, running badblocks without flags executes a non-destructive read-only test. This mode reads every block from the device and compares the returned data against itself. If the data matches, the block is considered good; if not, it is marked as bad. This process does not alter the contents of the drive, making it safe for production systems where data loss is unacceptable.
In contrast, using the -w flag initiates a write test, which writes patterns to every block and then reads them back. While this can detect latent defects more thoroughly, it destroys all existing data on the target volume. Therefore, for the purpose of verifying data integrity during transfers or routine health checks, the read-only mode is the correct choice. It ensures that the bits currently stored on the platters or NAND cells are readable and consistent. For further context on handling large data movements safely, see Optimizing Large File Transfers on Linux: A Concatenation Approach, which discusses strategies for maintaining data consistency during bulk operations.
Executing the Read-Only Test Safely
To perform a safe verification of your storage devices, you must identify the correct device node and execute the command with appropriate parameters. First, ensure the target drive is unmounted. Running a badblocks test on a mounted filesystem can lead to race conditions, corrupted data, or inaccurate results because the operating system may write new data to blocks while they are being tested. Use theumount command to detach the filesystem from the mount point.
Once unmounted, invoke badblocks specifying the device path, such as /dev/sdb or /dev/nvme0n1. Add the -s flag to display the percentage of blocks checked and an estimated time remaining. This provides visibility into the progress of the long-running operation. The basic syntax looks like this:
sudo badblocks -s /dev/sdX
This command starts a non-destructive read-only scan. It will iterate through every logical block address (LBA) on the drive. If errors are found, badblocks prints the block numbers to standard error. These numbers can be saved to a file for later use with filesystem check tools. Note that modern SSDs handle wear leveling differently than HDDs, so LBA-based tests might not map directly to physical cell locations, but they remain effective for detecting controller-level read failures.
Interpreting the Output
The output of a successful read-only test typically shows no errors. If bad blocks are detected, the tool lists their addresses. You should redirect these errors to a text file for record-keeping. Use the following command structure to capture bad block lists:sudo badblocks -s /dev/sdX 2> bad_blocks.txt
This creates a file named bad_blocks.txt containing the list of faulty sectors. You can then use this list with e2fsck or other filesystem utilities to mark these areas as unusable, preventing future data writes to compromised regions. Understanding how the kernel maps these logical addresses can help in diagnosing deeper hardware issues, as discussed in Interpreting LBA Numbers and Forcing Relocation of Bad Sectors in Linux.
Comparing Read-Only vs. Write Tests
Administrators often confuse the capabilities of differentbadblocks modes. A write test (-w) is more aggressive and can uncover intermittent faults that a simple read might miss, but it requires a complete backup of the data beforehand. Since the goal here is data integrity verification, we avoid this mode unless the drive is already wiped or backed up.
Another option is the non-destructive write test (-n), which writes patterns but restores original data after checking. However, this still modifies the disk surface temporarily and takes significantly longer than the read-only test. For most users concerned with validating data transferred via SSH or SCP, the initial read-only pass is sufficient to confirm that the destination drive is physically capable of storing data correctly. If you suspect transfer issues due to network interruptions rather than disk failure, refer to SSH/SCP Stop Working: Large Quantity of Data Copied to Apple AirLaptop from Linux Host for troubleshooting connectivity-related data corruption.
Post-Test Actions and Recommendations
After completing the read-only test, remount your filesystems. Check the generated log files for any reported bad blocks. If none are found, your drive health is likely stable regarding read errors. If bad blocks appear, consider replacing the drive, especially if the count is high or increasing. Regularly monitoring drive health using SMART data alongsidebadblocks scans provides a comprehensive view of storage reliability. Always maintain current backups before performing any low-level disk diagnostics, as unexpected hardware failures can occur during intensive I/O operations.
Frequently Asked Questions
Can badblocks corrupt my data if I use the wrong flag?
Yes, using the -w flag will overwrite all data on the drive with test patterns, effectively destroying your files. Always verify you are using the default read-only mode or explicitly specify non-destructive options before running the command on important volumes.
How long does a badblocks read test take?
The duration depends entirely on the size of the drive and its speed. A small SSD might finish in minutes, while a large multi-terabyte HDD could take many hours. Using the -s flag helps estimate the remaining time based on the current throughput.
What should I do if badblocks reports errors?
If errors are found, save the block numbers to a file and use e2fsck with the -l flag to mark those blocks as bad within the filesystem. This prevents the OS from writing new data to those defective sectors, though the drive may need replacement soon.
Is it safe to run badblocks on a mounted drive?
No, running badblocks on a mounted drive is unsafe and can lead to inconsistent results or filesystem corruption. The operating system may modify blocks concurrently with the test, causing false positives or missed errors. Always unmount the filesystem first.
Does badblocks work on NVMe drives?
Yes, badblocks can test NVMe devices just like SATA drives, provided you specify the correct device node (e.g., /dev/nvme0n1). However, due to wear leveling and internal management in NVMe controllers, the mapping between logical blocks and physical media is abstracted, meaning tests may behave differently than on traditional spinning disks.