Zerotools are a set of tools to aid keeping virtual disks clean.
Version: 0.1.2Zerotools project contains a set of tools to aid keeping virtual disks clean (by filling binary zero to those regions which are no longer in "use"). This is done on-the-fly or manually, depending on which tool suits the needs best.
Operating System: Linux
In technical terms the on-the-fly mechanism uses LD_PRELOAD to wrap the unlink library call and zerounlink-wrapper provides a symlink based mechanism to target individual programs so that they will be run using the unlink wrapper. For comparison against other tools, please see the "Other solutions" section.
Please note that zerotools don't compete with various tools that rewrite file contents with "random" data in order to make data retrieval close to impossible. Do not use zerotools for this, or claim that they are good tools for this. They're not. (This text was added for people who only read introductions.)
Zerotools are Linux specific, implemented using C and licensed under GNU General Public License (v2). The tools are provided without a warranty of any kind, in the understanding that software bugs do exist and bad things can happen.
Bugs and limitations
There are no known bugs. Known to me at least. Bugs will be fixed based on intelligent reporting by end users or automatically if I have extra time. My email address is at the start of each source file should you feel the need to send patches.
Thread-protection is not yet tested properly. Neither is LFS-requirement (which means that zerotools might not be able to handle files over 2 GiB size on 32-bit architectures). Building or running zerotools on older Linux systems has not been attempted (but will be done as soon as older systems are installed in test environment). User participation in testing is also appreciated.
Testing has been done on many Linux distributions running kernels (2.4 and 2.6) and with glibc versions (2.3.2 to 2.5.3, with vendor patches, so this is advisory information only). Architectures that were tested are x86, x86_64, ia_64, and ppc (32-bit). Other architecture test results are welcome.
zerounlink and zerounlink-wrapper do not work with statically linked executables. This is a limitation in the technique and there are no workarounds (known to me).
One mis-feature exists in zerounlink: when checking whether a file should be zeroed or not, zerounlink doesn't take into account sparse files. If the file is sparse, it would make sense to overwrite only the parts of file which have non-zero content.
This means that zerounlink would have to read through all of the original file and search for the non-zero content first. This would also mean that instead of only writing to the unlinked file, zerounlink would have to read it in as well. This would cause extra I/O operations. Not sure whether special sparse-file support is worth the extra effort and complexity so this feature has not been implemented.
Drop me a note if you think you need it. (The reason for having this feature is to do with how most dynamic virtual disks are implemented. They will allocate real space when any data is written to an vdisk area, even if the writes consist of only binary zeroes. It's a bit silly, but that's how most of them work. This is the same reason why filling the filesystem with a file containing only binary zeroes (with dd or other tool) is not really a good solution to clean up the vdisk.)
When reporting bugs about listings on this web page, please include the listing number and line number of the problematic bit to speed up fixes. For other web-related fixes, try to include two to three word phrase which can be grepped with. Do not send diffs against xhtml.