TBCI is a C++ library which provides classes for Vectors, Matrices, etc., and defines operations on them such as additions, multiplications, etc. There are many Matrix classes providing specializations for different sparse matrices. They all feature a similar interface. TBCI comes with an extensive set of solvers for linear systems and an interface to lapack libraries. It uses the temporary base class idiom, which avoids unnecessary copying of data by having a notion of real and temporary objects which are treated differently with respect to assignment and copy c'tor.
scsidev builds a list of devices on your SCSI busses and creates device nodes to access them. The names are built based on their path, which is a 4-tuple consisting of the host adapter number, the channel number, the SCSI target ID, and the Logical Unit Number. Names build this way are much more persistent than the enumeration scheme used by the kernel (1st disk = sda, etc.). scsidev remembers the permissions of disappeared devices and restores the permissions properly when devices reappear. Optionally, it can create the devices as symbolic links to the main device nodes in /dev/, create missing device nodes, and handle missing permissions on the /dev/ nodes. You can assign alias names based on various pieces of information, such as vendor and model name. It also supports retrieving the serial number, the WWID, and the HSV OS ID and allows assigning names based on this information, thus providing a unique identification.
bonnie is a classic file system and storage device benchmark. It tests for linear character-based and block-based reads and writes, and the rewrite pattern. It also does a seek test. While other benchmarks do more sophisticated tests, bonnie is a very reliable and portable program that is suitable for basic testing. Optionally, you can test the operations with direct I/O (O_DIRECT on Linux).
dd_rescue copies data from one file or block device to another. It is intended for error recovery, so by default, it doesn't abort on errors and doesn't truncate the output file. It uses large block sizes to quicken the copying, but falls back to small blocks upon encountering errors. It produces reports that allow you to keep track of bad blocks. dd_rescue features a number of optimizations, such as sparse block detection, preallocation, and Linux zerocopy (splice). It supports data protection by (multi-pass) overwriting of files or partitions with good and fast random numbers.
Hmm, seems it was out of your own need -- just like when I started my project (Oct 1999).
Anything I should look at in particular to make dd_rescue more useful?
Re: Deją vue
> Yes, the size of the change is far
> larger than the program itself.
> It makes sense to contribute some
> hundred lines to a big project like gcc
> or linux. But Diaz's dd_rescue does the
> same job (with better integration) that
> Garloff's dd_rescue + dd_rhelp, and is
> one order of magnitude smaller.
> Would you accept such a change to your
> program and still call it _your_
OK, a new project makes sense then.