Borg (Borg Backup) is a FOSS project that provides a space efficient (via dedpulication, and compression) and secure backup solution. The best part is that it is scriptable, and you can run an hourly cron to make sure that you have hourly backups of your data.
One thing that the current version was missing, is a way to easily view how much space each Archive takes within a particular repository. It does provide two commands that can be combine in a simple bash script to give us the needed results.
borg list gives us a list of Archives within a repository.
borg list /path/to/repo
Will give us this output:
... Laptop-2017-11-18-1400 Sat, 2017-11-18 14:00:01 Laptop-2017-11-18-1500 Sat, 2017-11-18 15:00:02 Laptop-2017-11-18-1600 Sat, 2017-11-18 16:00:02 Laptop-2017-11-18-1700 Sat, 2017-11-18 17:00:01 Laptop-2017-11-18-1800 Sat, 2017-11-18 18:00:02 ...
It is basically a list of all the archives, with their name and the date/time of their creation.
But we only need name, which be easily acheaved by adding the –short argument as such:
borg list --short /path/to/repo
So now we have the following:
... Laptop-2017-11-18-1400 Laptop-2017-11-18-1500 Laptop-2017-11-18-1600 Laptop-2017-11-18-1700 Laptop-2017-11-18-1800 ...
Each of the above lines we can feed to the borg info command as following:
borg info /path/to/repo::Laptop-2017-11-18-1400
Wich will give us an output as such:
Name: Laptop-2017-11-18-1400 Fingerprint: [Redacted] Hostname: [Redacted] Username: max Time (start): Sat, 2017-11-18 14:00:01 Time (end): Sat, 2017-11-18 14:00:34 Command line: /usr/bin/borg create --stats -v --compress zlib,6 [Redacted] Number of files: 182284 Original size Compressed size Deduplicated size This archive: 15.78 GB 10.15 GB 12.80 MB All archives: 1.91 TB 1.28 TB 41.11 GB Unique chunks Total chunks Chunk index: 631558 29090226
From the above we are only interested in the line showing us the name of the archive, and the actual line showing us the space used by said archive. So I just use grep “Name:|This” to filter out the unneeded lines, as such:
borg info /path/to/repo::Laptop-2017-11-18-1400 | grep "Name:\|This"
Name: Laptop-2017-11-18-1400 This archive: 15.78 GB 10.15 GB 12.80 MB
So we now can use these two simple commands (with some bash glue) to have the following little script GetBackupDetails.sh:
#/bin/bash borg list --short $1 | while read line; do borg info $1::$line | grep "Name:\|This" ; done
We can save it to a folder that is defined within the current user’s or system’s path, and we will be able to call it from any directory as such:
It uses borg list –short to generate the list of archives, which are then passed line by line (1 archive per line) to borg info, and cleaned up using grep. Giving us the following result:
.... Name: Laptop-2017-11-18-1100 This archive: 15.79 GB 10.16 GB 28.48 MB Name: Laptop-2017-11-18-1200 This archive: 15.78 GB 10.15 GB 20.38 MB Name: Laptop-2017-11-18-1300 This archive: 15.78 GB 10.15 GB 13.47 MB Name: Laptop-2017-11-18-1400 This archive: 15.78 GB 10.15 GB 12.80 MB Name: Laptop-2017-11-18-1500 This archive: 15.78 GB 10.15 GB 23.78 MB ....
The above can be outputed to the terminal, or preferably to a file or to less for easier viewing.
GetBackupDetails.sh /path/to/repo | less