Compare commits

..

No commits in common. "master" and "1.0.0" have entirely different histories.

2 changed files with 10 additions and 45 deletions

View file

@ -25,7 +25,7 @@ The script calls `sleep` after starting each SMART test, using a duration based
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. 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: You should periodically monitor the burn-in progress and check for errors, particularly any errors reported by `badblocks`, or these SMART errors:
|ID|Attribute Name| |ID|Attribute Name|
|---:|---| |---:|---|
| 5|Reallocated_Sector_Ct| | 5|Reallocated_Sector_Ct|
@ -41,10 +41,8 @@ The script extracts the drive model and serial number and creates a log filename
`badblocks` is invoked with the following options: `badblocks` is invoked with the following options:
* `-b 8192` : Use a block size of 8192 (override this setting with the `-b` option below) * `-b 4096` : Use a block size of 4096
* `-c 64` : Number of concurrent blocks to check (override this setting with the `-c` option below, but beware of memory use with high values)
* `-e 1` : Abort the `badblocks` test immediately if an error is found (override this setting with the `-x` option below) * `-e 1` : Abort the `badblocks` test immediately if an error is found (override this setting with the `-x` option below)
* `-p 0` : number of consecutive scans without bad blocks required (override this setting with the `-p` option below, but beware of execution time with high values)
* `-v` : Verbose mode * `-v` : Verbose mode
* `-o` : Write list of bad blocks found (if any) to a file named `burnin-[model]_[serial number].bb` * `-o` : Write list of bad blocks found (if any) to a file named `burnin-[model]_[serial number].bb`
* `-s` : Show progress * `-s` : Show progress
@ -52,17 +50,14 @@ The script extracts the drive model and serial number and creates a log filename
## Usage ## Usage
`./disk-burnin.sh [-h] [-e] [-b <block_size>] [-c <num_blocks>] [-f] [-o <directory>] [-p <num_passes>] [-x] <disk>` `./disk-burnin.sh [-h] [-e] [-f] [-o <directory>] [-x] <disk>`
### Options ### Options
* `-h`: show help text * `-h`: show help text
* `-e`: show extended help text * `-e`: show extended help text
* `-b`: block size (default: 8192)
* `-c`: number of concurrent blocks to check (default: 64). Higher values will use more memory.
* `-f`: run a full, destructive test. Disables the default 'dry-run mode'. **ALL DATA ON THE DISK WILL BE LOST!** * `-f`: run a full, destructive test. Disables the default 'dry-run mode'. **ALL DATA ON THE DISK WILL BE LOST!**
* `-o <directory>`: write log files to `<directory>` (default: working directory `$(pwd)`) * `-o <directory>`: write log files to `<directory>` (default: working directory `$(pwd)`)
* `-p <num_passes>`: number of consecutive scans without bad blocks required (default: 0)
* `-x`: perform a full pass of `badblocks`, using the `-e 0` option. * `-x`: perform a full pass of `badblocks`, using the `-e 0` option.
* `<disk>`: disk to burn-in (`/dev/` may be omitted) * `<disk>`: disk to burn-in (`/dev/` may be omitted)
@ -102,7 +97,6 @@ Tested under:
* Ubuntu Server 16.04.2 LTS * Ubuntu Server 16.04.2 LTS
* CentOS 7.0 * CentOS 7.0
* Tiny Core Linux 11.1 * Tiny Core Linux 11.1
* Fedora 33 Workstation
## Drive Models Tested ## Drive Models Tested
@ -122,10 +116,8 @@ The script should run successfully on any SAS or SATA disk with SMART capabiliti
* Re (WD4000FYYZ) * Re (WD4000FYYZ)
* Green * Green
* Red * Red
* WD140EDFZ
* Seagate * Seagate
* IronWolf NAS HDD 12TB (ST12000VN0008) * IronWolf NAS HDD 12TB (ST12000VN0008)
* IronWolf NAS HDD 8TB (ST8000NE001-2M7101)
## Prerequisites ## Prerequisites
@ -138,4 +130,4 @@ Tested with the static analysis tool at [www.shellcheck.net](https://www.shellch
## Author ## Author
Original author: Keith Nash, March 2017. Original author: Keith Nash, March 2017.
Modified on 19 February 2021. Modified on 5 October 2020.

View file

@ -29,7 +29,7 @@ readonly USAGE=\
$(basename "$0") -- disk burn-in program $(basename "$0") -- disk burn-in program
SYNOPSIS SYNOPSIS
$(basename "$0") [-h] [-b <block_size>] [-c <num_blocks>] [-e] [-f] [-o <directory>] [-p <num_passes>] [-x] <disk> $(basename "$0") [-h] [-e] [-f] [-o <directory>] [-x] <disk>
DESCRIPTION DESCRIPTION
A script to simplify the process of burning-in disks. Only intended for use A script to simplify the process of burning-in disks. Only intended for use
@ -46,12 +46,9 @@ DESCRIPTION
OPTIONS OPTIONS
-h Show help text -h Show help text
-e Show extended help text -e Show extended help text
-b <block_size> Override block size (default is 8192)
-c <num_blocks> Override concurrent number of blocks tested (default is 64)
-f Force script to run in destructive mode -f Force script to run in destructive mode
ALL DATA ON THE DISK WILL BE LOST! ALL DATA ON THE DISK WILL BE LOST!
-o <directory> Write log files to <directory> (default: $(pwd)) -o <directory> Write log files to <directory> (default: $(pwd))
-p <num_passes> Override number of consecutive scans without bad blocks required (default is 0)
-x Run full pass of badblocks instead of exiting on first error -x Run full pass of badblocks instead of exiting on first error
<disk> Disk to burn-in (/dev/ may be omitted) <disk> Disk to burn-in (/dev/ may be omitted)
@ -122,7 +119,7 @@ NOTES
The script extracts the drive model and serial number and forms a log file- The script extracts the drive model and serial number and forms a log file-
name of the form 'burnin-[model]_[serial number].log'. name of the form 'burnin-[model]_[serial number].log'.
badblocks is invoked with a block size of 8192, the -wsv options, and the badblocks is invoked with a block size of 4096, the -wsv options, and the
-o option to instruct it to write the list of bad blocks found (if any) to -o option to instruct it to write the list of bad blocks found (if any) to
a file named 'burnin-[model]_[serial number].bb'. a file named 'burnin-[model]_[serial number].bb'.
@ -221,28 +218,13 @@ VERSIONS
Changed disk type detection so that we assume all drives are mechanical drives Changed disk type detection so that we assume all drives are mechanical drives
unless they explicitly return 'Solid State Drive' for Rotational Rate. unless they explicitly return 'Solid State Drive' for Rotational Rate.
Removed datestamp from every line of log output, only emitting it in log headers. Removed datestamp from every line of log output, only emitting it in log headers.
Minor reformatting. Minor reformatting."
KY, 30 May 2022
Added -b & -c options to control respective badblocks options.
MH, 28 Jul 2026
Added -p option to control corresponding badblocks option."
# badblocks default -e option is 1, stop testing if a single error occurs # badblocks default -e option is 1, stop testing if a single error occurs
BB_E_ARG=1 BB_E_ARG=1
# badblocks default -b option is 1024, but we default to 8192. This allows overriding if desired.
BB_B_ARG=8192
# badblocks default -c option is 64. This allows overriding if desired.
BB_C_ARG=64
# badblocks default -p option is 0. This allows overriding if desired.
BB_P_ARG=0
# parse options # parse options
while getopts ':hefo:b:c:p:x' option; do while getopts ':hefo:x' option; do
case "${option}" in case "${option}" in
h) echo "${USAGE}" h) echo "${USAGE}"
exit exit
@ -255,13 +237,7 @@ while getopts ':hefo:b:c:p:x' option; do
;; ;;
o) LOG_DIR="${OPTARG}" o) LOG_DIR="${OPTARG}"
;; ;;
b) BB_B_ARG="${OPTARG}" x) BB_E_ARG=0
;;
c) BB_C_ARG="${OPTARG}"
;;
p) BB_P_ARG="${OPTARG}"
;;
x) BB_E_ARG=0
;; ;;
:) printf 'Missing argument for -%s\n' "${OPTARG}" >&2 :) printf 'Missing argument for -%s\n' "${OPTARG}" >&2
echo "${USAGE}" >&2 echo "${USAGE}" >&2
@ -286,9 +262,6 @@ fi
################################################################################ ################################################################################
readonly BB_E_ARG readonly BB_E_ARG
readonly BB_B_ARG
readonly BB_C_ARG
readonly BB_P_ARG
# Drive to burn-in # Drive to burn-in
DRIVE="$1" DRIVE="$1"
@ -586,7 +559,7 @@ run_smart_test() {
run_badblocks_test() { run_badblocks_test() {
log_header "Running badblocks test" log_header "Running badblocks test"
if [ "${DISK_TYPE}" != "SSD" ]; then if [ "${DISK_TYPE}" != "SSD" ]; then
dry_run_wrapper "badblocks -b ${BB_B_ARG} -wsv -c ${BB_C_ARG} -e ${BB_E_ARG} -o \"${BB_File}\" -p ${BB_P_ARG} \"${DRIVE}\"" dry_run_wrapper "badblocks -b 4096 -wsv -e ${BB_E_ARG} -o \"${BB_File}\" \"${DRIVE}\""
else else
log_info "SKIPPED: badblocks for ${DISK_TYPE} device" log_info "SKIPPED: badblocks for ${DISK_TYPE} device"
fi fi