Showing how rsync snapshots (--link-dest) work. This feature allows you to take incremental backups and still having a complete directory to copy over without taking additional diskspace for storing a copy of each file. It uses the notion of hardlinks off the filesystem. (having the same inodes ls -i).
#create a datadirectory, with data
$ mkdir data
$ > data/file1
#make the first backup
$ rsync -aP data/ backup-1
building file list ...
2 files to consider
created directory backup-1
./
file1
#do the second backup with nothing changed
$ rsync -aP --delete --link-dest=../backup-1 data/ backup-2
building file list ...
2 files to consider
created directory backup-2
./
#verify that file1 in backup-1 is linked with file1 in backup-2
$ ls -li backup-1
9651639 -rw-r--r-- 2 patrick staff 0 Nov 7 16:52 file1
$ ls -li backup-2
9651639 -rw-r--r-- 2 patrick staff 0 Nov 7 16:52 file1
#change file 1, but base ourselves on the previous (backup-2) snapshot
$ echo "change1" > data/file1
#backup the directory again
$ rsync -aP --delete --link-dest=../backup-2 data/ backup-3
building file list ...
2 files to consider
created directory backup-3
./
file1
#Verify inode has changed
$ ls -li backup-3/
total 8
9651657 -rw-r--r-- 1 patrick staff 8 Nov 7 16:53 file1
#backup again with nothing changed
$ rsync -aP --link-dest=../backup-3 data/ backup-4
building file list ...
2 files to consider
created directory backup-4
./
#Verify that inode is the same
$ ls -li backup-4
9651657 -rw-r--r-- 2 patrick staff 8 Nov 7 16:53 file1
#Change the permissions
$ chmod 777 data/file1
#backup again on previous snapshot
$ rsync -aP --delete --link-dest=../backup-4 data/ backup-5
building file list ...
2 files to consider
created directory backup-5
./
file1
#verify that change of permission triggered a new file
$ ls -li backup-5/file1
9651699 -rwxrwxrwx 1 patrick staff 8 Nov 7 16:53 backup-5/file1
$ ls -li backup-4/file1
9651657 -rw-r--r-- 2 patrick staff 8 Nov 7 16:53 backup-4/file1