Skip to content

mbuesch/disktest

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 

disktest - Solid State Disk (SSD), Hard Disk (HDD), USB Stick, SD-Card tester

Homepage

Git repository

Github repository

crates.io site

Disktest is a tool to check Solid State Disks, Hard Disks, USB sticks, SD cards or other storage media for errors.

It does so by writing a pseudo random sequence to the device and then reading it back and verifying it to the same pseudo random sequence.

This tool can be used to:

  • Check disks for hardware errors (e.g. platter errors, flash errors, etc...).
  • Overwrite storage media with a cryptographically strong pseudo random stream. This can either be used to delete existing data on the disk, or to prepare the disk for encryption.
  • Test for tampered media that pretend to have more storage area than they physically actually have. Sometimes such media are sold by fraudulent sellers for cheap prices.
  • Measure read and write speed.
  • ... probably lots of other tasks.

The random number stream is generated by the following algorithm:

OUTPUT_DATA := CHACHA20(PBKDF2(SEED | THREAD_ID))

If more than one thread is used, then each thread generates such a random number stream, which are then interleaved in an alternating pattern.

Security

The default algorithm ChaCha20 is a cryptographically strong random number generator. That means if the seed is kept secret, then the random sequence cannot be predicted or reconstructed by anybody else.

See option --seed under --help for more details.

Example

The following disktest invocation will write a secure sequence to the disk device /dev/sdc and subsequently read back and verify the sequence from the disk device.

disktest --write --verify -j0 /dev/sdc

WARNING: This will irrevocably overwrite all data on the disk /dev/sdc! Be absolutely certain that the device path is correct before starting the command. Your data cannot be recovered.

You probably need root permissions to write to raw disk devices (/dev/sdX or /dev/mmcblkX).

The target device does not have to be an actual hardware device node. It can be any file path on any file system. For example you can mount an USB stick file system and write to a file on that file system. However, please note that this leaves a couple minor untested spots in the USB stick's memory, which are reserved to the file system. Also see the Windows section below.

Windows

On Windows disktest can write to any file on any mounted storage media.

If your storage media under test is drive D, then the following command would run a write + verify test on that device:

disktest --write --verify -j0 D:\testfile.img

Dependencies

  • Rust 1.65.0 or later.
  • Crate dependencies will automatically be downloaded by cargo.

Installing from crates.io

Download the latest version of disktest from crates.io and install it to $HOME/.cargo/bin:

cargo install disktest

Installing from source package

Build disktest and install it to $HOME/.cargo/bin:

cd path/to/source/package
cargo install --path .

Running from source package without installing

Build and run disktest in place without installing it:

cd path/to/source/package
cargo run --release --  DISKTEST_OPTIONS_HERE

See below for a description of the available disktest options.

Disktest command line options

Please run either of the following commands to show more information about the available command line options.

cargo run --release -- --help
cargo run --release -- -h
disktest --help
disktest -h

Speed

The following table shows some example speed measurements of disktest in various operation mode on different hardware.

These speed tests don't write to an actual disk, but only to the /dev/null device, which is a device that does nothing. So these speed test results do not include the speed limits of any actual disk hardware.

=====================================  =========  ===============================  =================
Command                                Algorithm  Hardware                         Data rate written
=====================================  =========  ===============================  =================
disktest -j12 -ACHACHA20 -w /dev/null  ChaCha20   AMD Ryzen 5 5500U; 6x2 cores     8.1 GiB/s
disktest -j12 -ACHACHA12 -w /dev/null  ChaCha12   AMD Ryzen 5 5500U; 6x2 cores     8.2 GiB/s
disktest -j12 -ACHACHA8 -w /dev/null   ChaCha8    AMD Ryzen 5 5500U; 6x2 cores     8.3 GiB/s
disktest -j12 -ACRC -w /dev/null       CRC        AMD Ryzen 5 5500U; 6x2 cores     8.4 GiB/s
disktest -j4 -ACHACHA20 -w /dev/null   ChaCha20   Intel i5-3320M; 2x2 cores        2.1 GiB/s
disktest -j4 -ACHACHA12 -w /dev/null   ChaCha12   Intel i5-3320M; 2x2 cores        3.2 GiB/s
disktest -j4 -ACHACHA8 -w /dev/null    ChaCha8    Intel i5-3320M; 2x2 cores        4.4 GiB/s
disktest -j4 -ACRC -w /dev/null        CRC        Intel i5-3320M; 2x2 cores        7.5 GiB/s
disktest -j4 -ACHACHA20 -w /dev/null   ChaCha20   Raspberry Pi 4; 4 cores 1.5 GHz  420 MiB/s
disktest -j4 -ACHACHA12 -w /dev/null   ChaCha12   Raspberry Pi 4; 4 cores 1.5 GHz  670 MiB/s
disktest -j4 -ACHACHA8 -w /dev/null    ChaCha8    Raspberry Pi 4; 4 cores 1.5 GHz  920 MiB/s
disktest -j4 -ACRC -w /dev/null        CRC        Raspberry Pi 4; 4 cores 1.5 GHz  2.5 GiB/s
=====================================  =========  ===============================  =================

The read data rates are similar, because the algorithm used is exactly the same.

License

Copyright (c) 2020-2022 Michael Büsch <m@bues.ch>

Licensed under the terms of the GNU General Public License version 2, or (at your option) any later version.

About

Hard Disk (HDD), Solid State Disk (SSD), USB Stick, SD-Card tester

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published