Shutterbug splits a large collection of photos into a series of DVD-sized folders for burning to disc, and provides a mechanism to go from these disc backups back to the original directory structure.
Shutterbug is paranoid about data loss and corruption, and has some coping strategies:
- It maintains a 1-1 mappings so that 1 input file = 1 file on a disc. This means if a file becomes corrupted, you lose one image. Other approaches which do not respect file boundaries lead to losing multiple images in one go.
- It randomizes the order of the files on the discs so that if a disc is lost, you end up with lots of tiny gaps in your photo library, not one big one.
- It validates your files after restoring from backup, so you have a warning of data corruption. Note this does not prevent data loss, only discovers it. The best way to prevent irrecoverable data loss is to make more copies of your data to begin with.
- Python 3.
$ pip3 install shutterbug
Archiving to disc
To backup your photo library in
~/Pictures/2016 to 4.7GB DVDs, split the folder into "chunks" using shutterbug:
$ mkdir ~/chunks && cd ~/chunks $ shutterbug ~/Pictures/2016 --gzip chunk_001/ae3d47f87af176b74e1ec30599a7b31a.jpg.gz 4.93MB -> 4.90MB chunk_001/631600d1e11339794e81d75f104e9f19.jpg.gz 7.40MB -> 7.38MB chunk_001/130c52fe396237a59500a61b8101ff55.jpg.gz 6.79MB -> 6.77MB chunk_001/27fc10914e18b0e1b303c05a800c299d.jpg.gz 5.73MB -> 5.70MB ... Wrote chunk_001/MANIFEST.txt Wrote chunk_001/README.txt chunk_001 has 723 files, size 4662.40 MB (99.2% of maximum size) chunk_002/5c9ce3b8071207ab702766ac2be76f10.jpg.gz 6.13MB -> 6.11MB chunk_002/bc17480a318e7ba9a3e4e2e57538917d.jpg.gz 9.63MB -> 9.60MB ...
Burn each of the resulting folders in
~/chunks to DVDs.
Restoring from disc
Copy each chunk from your DVDs back to disc, e.g.
~/import/chunk_002 etc. Restore the original file structure by running
shutterbug from the output directory:
$ mkdir ~/Pictures/2016 && cd ~/Pictures/2016 $ shutterbug --unpack ~/import/chunk_* $ ~/Pictures/mkbackup.py ../compressed/* -u ~/import/chunk_001/ae3d47f87af176b74e1ec30599a7b31a.jpg.gz -> ./2016-12 NYC (2434 of 5025).jpg ~/import/chunk_001/631600d1e11339794e81d75f104e9f19.jpg.gz -> ./2016-12 NYC (4411 of 5025).jpg ~/import/chunk_001/130c52fe396237a59500a61b8101ff55.jpg.gz -> ./2016-12 NYC (301 of 5025).jpg ...
Shutterbug will print warnings for files in case the size or contents have changed.