View Full Version : Automated Sparse Image Shrinking?

03-09-2007, 12:10 AM

Is there a way to shrink my sparse image file automatically every time after updating it with SuperDuper?
At the moment, after using SD! I always shrink it manually with the "hdiutil compact " command in the Terminal.

Could I make a script and include it in the backup/updating process of SD?
And how would this script have to look like? :rolleyes:

Or will this soon be an easy-to-use checkbox option included in SD? (Still hoping for it!) :) (If so, I would also appreciate an additional option to shrink it only every xx-th backup. ;) )

Thanks for your answers!

03-09-2007, 10:46 AM
You could try to do this, parabel, but it's not a really good idea to over-compact. How about writing yourself a little AppleScript that you can schedule in iCal ever few weeks?

If you really must do this in SD!, you'd want to use a shell script like:

nohup /bin/bash -c "sleep 30;hdiutil compact $6" &

Basically, this put a background process in place that waits 30 seconds, then compacts the image. We wait 30 seconds (and go into the background) because SD! isn't done with the image when the after copy script runs. So, we wait 30 seconds to try to give it a chance to complete. $6 is the 6th parameter to the script, which is the name of the image file being processed. See the User's Guide for more information...

03-10-2007, 12:14 PM
What is your reserve when you write: “but it's not a really good idea to over-compact”?

I am not familiar with the process of scripts. I would like such a script carry out by iCal or SD using the option “Run shell script after copy completes”.

I sought well in iCal and SD guide, but I do not reach that point. Could you be more specific with the steps to be followed?

Thank you very much

03-10-2007, 12:16 PM
You know, if you're not terribly familiar with shell scripting, etc, it might not be a good idea to take these steps, since it requires a certain amount of familiarity with Unix... you sure you want to avoid doing this manually every so often?

03-10-2007, 01:27 PM
I have every intention of familiarize me with the writing of scripts, not only for SD. I seek references on the subject.
The option “Run Shell script after Copy” could be enabled, only when needed, without having to repeat each time the operations in Terminal.

03-10-2007, 02:13 PM
There are many books on Shell Scripting, including a number of well known ones from O'Reilly. I think there are even online versions of those books that can be accessed, perhaps even for free...

03-10-2007, 03:00 PM
I start to work immediately...

03-17-2007, 01:28 PM

I do not know, Dave, if you will approve?

Here is an AppleScript which I make run by SD via the option “Run Shell after Copy complete”
We can enable the option as need or leave it always enabled.

tell application "Finder" to eject disk "MyBackup"
-- wait for it
repeat until (list disks) does not contain "MyBackup"
delay 2
end repeat
delay 30
set diskImage to POSIX path of "/Volumes/MyDisk/BackupFolder/MyBackup.sparseimage"
do shell script "/usr/bin/hdiutil compact " & quoted form of diskImage

I used AppleScript editor to write and compile this script and I saved it as application (Compact.app) in Saved Setting. Obviously, if there are several scenarios of backups, each one must have its own adapted script. :)

03-17-2007, 02:40 PM
Well... there can definitely be issues there, because SD! doesn't expect the volume to vanish during the "After" script...

03-18-2007, 12:07 AM
However, i certify that this script works perfectly. I tested it.

It ejects volume “MyBackup” and thus releases the image disc “MyBackup.sparseimage”.
The operation hdiutil compact can then be carried out.

And SuperDuper! finish its operations all gently, normally, as it should be.
No problem, no message of error.

I admit not too well understand how the last instruction “unmount MyBackup” can be carried out, but it's done. I'm merely stating a fact.

03-18-2007, 12:15 AM
Oh, I believe you: I'm just saying that we don't expect that script to eject the image, so I can't guarantee it'll continue working...

03-18-2007, 09:30 PM
For the skeptics, there is also this freelance version.

choose file with prompt "Compact this sparse disk image:" without invisibles
set diskImage to POSIX path of result
do shell script "/usr/bin/hdiutil compact " & quoted form of diskImage
display dialog diskImage & "
-- Compresssing process completed -- "

It makes more user-friendly the hdiutil of Terminal and can be used when needed.

This script must be written, compiled and be saved in the same way that the precedent, but used then like any application.