This script may be useful to anyone needing to preserve hardlinks through duplicity. I wrote it so that I could use duplicity to make cold backups of a Zimbra mail server installation to S3. Zimbra makes extensive use of hardlinks.
This script works by scanning a directory tree and recording any hardlinks it finds to a file. The file it creates is then included in the backup and can be used after the backup is restored to recreate all the hardlinks using the same script.
It is possible to purge hardlinks before the backup is made if it will significantly reduce the backup size, though this is certainly not recommended if the directory being backed up has files that are in use. It also takes a long time to recover or purge hardlinks compared to simply scanning for them. I decided not to do this since in my case it is only the difference between 8GB and 9GB of backup for my particular application. Your milage may vary.