This page contains obsolete and deprecated information. It is only made available for historical reasons.
Rather than zeroing freed blocks manually it might be better to have the guest kernel zero blocks when they're freed. My original inspiration was the ext2fs privacy (i.e. secure deletion) patch described in a Linux kernel mailing list thread. I've also made use of a later patch for ext3 entitled Secure Deletion Functionality in ext3 from the linux-fsdevel mailing list. (See also the authors' paper on Secure Deletion File Systems.) I've modified the patches to make them more suitable for the present purpose.
zerofreeoption (added by these patches) all the blocks freed when a file is deleted are filled with zeroes. Remember, this extra work will hurt disk performance. Note that the ext3 patch doesn't support data journalling mode, so deleted metadata isn't zeroed. It also hasn't been tested as thoroughly as the patch for ext2. And neither has been maintained for a very long time.
As an alternative method of making files sparse I wrote a utility which can make any specified files on an ext2 filesystem sparse, sparsify.c. This doesn't require any additional disk space to work its magic, but it does require that the filesystem containing the filesystem image is unmounted, which is just a different sort of inconvenience.
As an example, suppose we have an unmounted filesystem
fs.image, in the directory
/data, which is the
root of the
/dev/hda2 filesystem. We can reclaim deleted
blocks and make it sparse like so:
zerofree /data/fs.image umount /data sparsify /dev/hda2 /fs.image mount /data
Better alternatives to
sparsify exist and it should not be used.