Have you considered making the .fsa format use single instance storage. This would me that when storing an image fsarchiver would only store files once and duplicates of the file would be stored as pointers:
- Do a checksum on each file
- Perform a lookup to see if that checksum exists in the .fsa file already
- Store the file if it's checksum doesn't exist
- Store a pointer to the location in the .fsa archive of the duplicate file if the checksum already exists
- Store the file's metadata as usual (Just because file data is the same doesn't mean that metadata is the same, the files might even have different names)
Not to appeal to Microsoft but they have a format called .WIM which does a similar thing, but fsarchiver would be much more powerful because it supports all popular file formats and MS only supports NTFS.
I could point you to some info on the .WIM file format or provide more details on what I'm talking about if any of the above is confusing.
Let me know what you think.