zcav - program to test raw hard drive throughput.
zcav [-b block-size[:chunk-size]] [-c count] [-r
[first-block]:last-block] [-w] [-s skip-rate] [-u
uid-to-use:gid-to-use] [-g gid-to-use] [-l log-file] [-f] file-name
[-l log-file [-f] file-name]...
This manual page documents briefly the zcav
Modern hard drives have a constant rotational speed but have varying numbers of
sectors per track (outside tracks are longer and have more sectors). This is
referred to as Zoned Constant Angular Velocity (or ZCAV). The outer tracks
will have a higher data transfer rate due to having more sectors per track,
these tracks generally have the lower track/sector numbers.
This program tests the ZCAV performance of a hard drive, by reading the entire
data on it a specified number of times. The file name given as the first
parameter, it can be specified as -
, for standard input. This file will
be opened as read-only and in usual operation it will be /dev/hdX
depending on whether you use
devfs or not (NB operating systems other than Linux will have different device
The output should be able to be easily graphed with gnuplot
which is what
I use to view the results.
- the size (in Meg) of the blocks to read/write (default
512M), optionally followed by a ':' and the chunk size for read/write
operations (default 1M). Note that the chunk size must be less than or
equal to the block size and must also be significantly less than the size
of the RAM in the machine. Also note that for the write test there will be
a fsync() after writing every chunk.
- the number of times to read/write the entire disk.
- the range of data (in Meg) to read/write on each pass
(default the entire device). Useful if you want to quickly test part of a
large drive. If a single number is given then that is the last block to
read, if two numbers then it's the start and end of a range. Values are in
megs, but they are rounded down to the block size.
- skip rate. The option -s 10 will cause it to read every
10th block and skip the rest. Accepts values from 2 to 20.
- the file-name for the input data. This isn't needed on well
configured systems that have a recent Glibc where you can specify the file
name without the -f flag.
- user-id to use. When running as root specify the UID to run
the tests as, it is not recommended to use root, so if you want to run as
root use -u root. Also if you want to specify the group to run as
then use the user:group format. If you specify a user by name but
no group then the primary group of that user will be chosen. If you
specify a user by number and no group then the group will be
- group-id to use. Same as using :group for the
-u parameter, just a different way to specify it for compatibility
with other programs.
- write zero blocks to the disk instead of reading from the
disk - will destroy data!
This program, it's manual page, and the Debian package were written by Russell
The source is available from http://www.coker.com.au/bonnie++ .
See http://etbe.coker.com.au/category/benchmark for further information.