123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- disktest - Hard Disk (HDD), Solid State Disk (SSD), USB Stick, Memory Card (e.g. SD-Card) tester
- ================================================================================================
- `https://bues.ch/h/disktest <https://bues.ch/h/disktest>`_
- Disktest is a tool to check Hard Disks, Solid State Disks, USB sticks, SD cards or similar 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 expected 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.
- * ... probably lots of other tasks.
- The random number stream is a concatenation of hashes generated by the following algorithm:
- ::
- S = PBKDF2(SEED | THREAD_ID)
- HASH_DATA = SHA512(S | PREVIOUS_HASH_DATA | MONOTONIC_INC_COUNTER)
- If more than one thread is used, then each thread generates such a hash stream, which are then interleaved in a regular
- pattern.
- The algorithm can also be switched to a CRC based algorithm, that is much faster, but *not* cryptographically secure. However CRC is sufficient to find physical disk errors. Disktest defaults to the secure SHA512 based algorithm.
- Dependencies
- ============
- * `Rust (edition 2018) <https://www.rust-lang.org/>`_ or later.
- * Crate dependencies will automatically be downloaded by cargo.
- Running without installing
- ==========================
- Build and run disktest in place without installing it:
- .. code:: sh
- cargo run --release -- DISKTEST_OPTIONS_HERE
- See below for a description of the available `disktest` options.
- Installing
- ==========
- Build disktest and install it to `$HOME/.cargo/bin`:
- .. code:: sh
- cargo install --path .
- Disktest command line options
- =============================
- Please run either of the following commands to show more information about the available command line options.
- .. code:: sh
- 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 -j6 -w /dev/null SHA512 AMD Phenom II X6 1090T; 6 cores 3.2 GHz 675 MiB/s
- disktest -j6 -ACRC -w /dev/null CRC AMD Phenom II X6 1090T; 6 cores 3.2 GHz 4.6 GiB/s
- disktest -j4 -w /dev/null SHA512 Intel i5-3320M; 2+2 cores 2.6 GHz 250 MiB/s
- disktest -j4 -ACRC -w /dev/null CRC Intel i5-3320M; 2+2 cores 2.6 GHz 3.4 GiB/s
- disktest -j4 -w /dev/null SHA512 Raspberry Pi 4; 4 cores 1.5 GHz 75 MiB/s
- disktest -j4 -ACRC -w /dev/null CRC Raspberry Pi 4; 4 cores 1.5 GHz 605 MiB/s
- =============================== ========= ======================================= =================
- The read data rates are similar, because the algorithm used is exactly the same.
- Note: The default rust compiler shipped with Raspberry Pi OS is too old to compile Disktest. A newer Rust compiler must be used on Raspberry Pi.
- License
- =======
- Copyright (c) 2020 Michael Buesch <m@bues.ch>
- Licensed under the terms of the GNU General Public License version 2, or (at your option) any later version.
|