.. title: BorgBackup
.. date: 2020-01-30
.. slug: borgbackup
.. updated: 2020-01-30
.. status: published
.. tags: backup, borgbackup, borg
.. category: backup
.. authors: Elia el Lazkani
.. description: It has been called the Holy Grail of backup! BorgBackup is coming to town.
.. type: text

I usually lurk around **Freenode** in a few projects that I use, can learn from and/or help with.
This is a great opportunity to learn new things *all the time*.

This story is familiar in that manner, but that's where similarities diverge.
Someone asked around ``#Weechat`` a question that caught my attention because it was, sort of, out of topic. The question was around how do you backup your stuff ?

.. TEASER_END

I mean if I were asked that, I would've mentioned revision controlled off-site repositories for the code that I have.
For the personal stuff on the other hand, I would've admitted simple rudimentary solutions like ``rsync``, ``tar`` and external drives.
So I was sort of happy with my backup solution, it has worked. Plain and simple.

I have to admit that, by modern standards it might not offer the ability to go back in time to a certain point.
But I use *file systems* that offer *snapshot* capabilities. I can recover from previous snapshots and send them somewhere safe.
Archiving and encrypting those is not a simple process, wish it was. That limits storage possibilities if you care to keep your data private.

But if you know me, you'd know that I'm always open to new ways of doing things.

I can't remember exactly the conversation but the name **BorgBackup** was mentioned (thank you however you are). That's when things changed.


BorgBackup
==========

`Borg <https://www.borgbackup.org/>`_ is defined as a

    Deduplicating archiver with compression and encryption

Although this is a very accurate and encompassing definition, it doesn't really show you how *AWESOME* this thing is.

I had to go to the docs first before I stumbled upon this video.

.. raw:: html

    <div class="custom-center" style="
         width: 50%;
         margin: 0 auto;
    ">
    <script id="asciicast-133292" src="https://asciinema.org/a/133292.js" async></script>
    </div>

It can be a bit difficult to follow the video, I understand.

This is why I decided to write this post, to sort of explain to you how **Borg** can backup your stuff.

Encryption
==========

Oh yeah, that's the **first** thing I look at when I consider any suggested backup solution.
**Borg** offers built-in *encryption* and *authentication*.
You can read about it in details in the `docs <https://borgbackup.readthedocs.io/en/stable/usage/init.html#encryption-modes>`_.

So that's a check.

Compression
===========

This is another thing I look for in a suggested backup solution. And I'm happy to report that **Borg** has this under the belt as well.
**Borg** currently supports *LZ4*, *zlib*, *LZMA* and *zstd*. You can also tune the level of compression. Pretty neat !

Full Backup
===========

I've watched a few videos and read a bit of their documentation and they talk about **FULL BACKUP**.
Which means every time you run **Borg**, it will take a full backup of your stuff. A full backup at that point in time, don't forget.
The implication of this is that you have a versioned list of your backups, and you can go back in time to any of them.

Yes, you read that right. **Borg** does a full backup every time you run it. That's a pretty neat feature.

If you're a bit ahead of me, you were gonna say woooow there bud ! I have **Gigabytes** of data, what do you mean **FULL BACKUP**, you keep saying **FULL BACKUP**.

I mean **FULL BACKUP**, wait until you hear about the next feature.

Deduplication
=============

Booyah ! It has deduplication. Ain't that awesome. I've watched a presentation by the project's original maintainer explain this.
I have one thing to say. It's pretty good. How good, you may ask ?

My answer would be, good enough to fool me into thinking that it was taking snapshots of my data.

.. code:: text

   -----------------------------------------------------------------------------
                               Original size      Compressed size    Deduplicated size
   All archives:               34.59 GB           9.63 GB            1.28 GB
   Unique chunks               Total chunks
   Chunk index:                47772              469277


It wasn't until I dug in deeper into the matter that I understood that it was a full backup and the deduping taking care of the rest.

Check
=====

**Borg** offers a way to vefiry the consistency of the repository and the archives within.
This way, you can make sure that your backups haven't been corrupted.

This is a very good feature, and a must in my opinion from a backup solution. **Borg** has *YOU* covered.

Restore
=======

A backup solution is nothing if you can't get your data backup.
**Borg** has a few ways for you to get your data. You can either create an *archive* file out of a backup.
You can export a file, a directory or the whole directory tree from a backup.
You can also, if you like, mount a backup and get stuff out.

.. warning::

   Mounting a **Borg** backup is done using *fuse*

Conclusion
==========

**Borg** is a great tool for backup. It comes in an easily installable self-contained binary so you can use it, pretty much,
anywhere giving you no excuse *whatsoever* not to use it. Their documentation is very good, and **Borg** is easy to use.
It offers you all the features you need to do off-site and on-site backups of all your important data.

I'll be testing **Borg** moving forward for my data. I'll make sure to report back anything I find, in the future, related to the subject.
