I was going to do some experiments with Windows the other day. I do not use it much so I'm fine with complete reinstall. But after reinstalling it from CD, installing all updates, and tuning some settings I realized that it may be a good idea to look for another way of having a "clean" system set up and running. The obvious solution: use a "dd" command from your favorite *nix to copy raw partition on an external disk and then copy it back when you need it. The only problem: my Windows partition is 150GB and it almost empty (just installed and updated system), so the idea of wasting 150GB of my drive did not excite me. Of course I may try to compress that image but the blocks from unused space will most likely contain some random data (that partition was approx. 30GB before I started my experiments) and the compression may not be very efficient at this point. So the next step is to try to find a utility that will clean up partition by writing some simple pattern into all unused blocks. After a little googling I found an excellent solution: Eraser (http://www.heidi.ie/eraser/).
So I installed it but it needs an administrator account to write to empty blocks. At first I could not find a way to log in as administrator but Google was very helpful as usual: I had to start a command shell and run the following command
Important: do not forget to set up a password after you log in as administrator or anyone who have physical access to your computer will be able to log in as administrator without password.
After the administrator account was set up I proceeded with "Eraser" utility... just to find out that all built-in writing methods use random data because this utility was designed for security, not for optimizing data compression. At this point I had to read manual and the solution was found! Click on "Setting" link
scroll that window to the very bottom and right-click on "Default Erasure Methods and PRNGs" to open a settings window:
Then click on "Custom Erasure Method" tab and click "Add Method" button:
In a new window type a name for a new method, click the "Add" button to add a pass and in a pass settings select "Text" and in a text field just type a single space:
Close all windows but the last one by clicking the "Ok" button. In the main window scroll back up and click the "Save Settings" button. You may also want to set "Spaces" as default method like you may see it in the first screenshot.
Now go to the "Erase Schedule" and click the small triangle arrow to click a "New Task" menu item:
In a "Task Properties" window click an "Add Data" button:
and in a "Select Data to Erase" make sure to select a new "Spaces (1 pass)" method and "Unused disk space - Local Disk C:" option:
Now you may run that task. It will take a while and after that you may reboot into your favorite *nix to make backup.
Here is how my hard drive looks like:
I do not show remaining partitions as they are not important. Also I've already mounted an external hard drive into "/mnt/backups", so I may execute commands:
"/dev/sda1" is a small boot partition so I do not care about it. Now let's look what we have:
So the ~150GB partition was packed into a less than 10GB file. Looks good to me
Now let's make sure it works:
So about 45 minutes to restore and Windows started flawlessly after that.
If you look for a similar utility for another OS then "Wipe Free Space" (http://wipefreespace.sourceforge.net/) is probably what you want (but I have not tried it).