Each night rsync copies into a new dated directory with --link-dest pointing at the previous one, so unchanged files cost nothing.
A short script keeps 7 dailies, 4 weeklies and 12 monthlies. Once a quarter I restore a random directory to make sure the whole thing is not an expensive illusion.