Home

Awesome

Shell script for burn-in and testing of drives

Purpose

disk-burnin.sh is a POSIX-compliant shell script I wrote to simplify the process of burning-in disks. It is intended for use only on disks which do not contain data, such as new disks or disks which are being tested or re-purposed. I was inspired by the "How To: Hard Drive Burn-In Testing" thread on the FreeNAS forum and I want to give full props to the good folks who contributed to that thread.

Warnings

Be warned that:

Tests

Performs these steps:

  1. Run SMART short test
  2. Run badblocks
  3. Run SMART extended test

The script calls sleep after starting each SMART test, using a duration based on the polling interval reported by the disk, after which it polls for test completion.

Full SMART information is pulled after each SMART test. All output except for the sleep command is echoed to both the screen and log file.

You should periodically monitor the burn-in progress and check for errors, particularly any errors reported by badblocks, or these SMART errors:

IDAttribute Name
5Reallocated_Sector_Ct
196Reallocated_Event_Count
197Current_Pending_Sector
198Offline_Uncorrectable

These indicate possible problems with the drive. You therefore may wish to abort the remaining tests and proceed with an RMA exchange for new drives or discard old ones. Also please note that this list is not exhaustive.

The script extracts the drive model and serial number and creates a log filename of the form burnin-[model]_[serial number].log.

badblocks Options

badblocks is invoked with the following options:

Usage

./disk-burnin.sh [-h] [-e] [-b <block_size>] [-c <num_blocks>] [-f] [-o <directory>] [-x] <disk>

Options

Examples

Dry-Run Mode

The script runs in dry-run mode by default, so you can check the sleep durations and insure that the sequence of commands suits your needs. In dry-run mode the script does not actually perform any SMART tests or invoke the sleep or badblocks programs.

In order to perform tests on drives, you will need to provide the -f option.

smartctl Device Type

Some users with atypical hardware environments may need to modify the script and specify the smartctl command device type explictly with the -d option. User bcmryan reports success using -d sat with a Western Digital MyBook 8TB external drive enclosure.

FreeBSD / FreeNAS Notes

Before using the script on FreeBSD systems (including FreeNAS) you must first execute this sysctl command to alter the kernel's geometry debug flags. This allows badblocks to write to the entire disk:

sysctl kern.geom.debugflags=0x10

Also note that badblocks may issue the following warning under FreeBSD / FreeNAS, which can safely be ignored as it has no effect on testing:

set_o_direct: Inappropiate ioctl for device

Operating System Compatibility

Tested under:

Drive Models Tested

The script should run successfully on any SAS or SATA disk with SMART capabilities, which includes just about all modern drives. It has been tested on these particular devices:

Prerequisites

smartmontools, available at www.smartmontools.org

Uses: grep, awk, sed, sleep, badblocks, smartctl

Tested with the static analysis tool at www.shellcheck.net to insure that the code is POSIX-compliant and free of issues.

Author

Original author: Keith Nash, March 2017. Modified on 19 February 2021.