I'm looking for software that runs on Linux that can back up my important files. I'm not really talking about system-level backups, since I can always reinstall the operating system. I use Fedora, and therefore reinstall at least every year or so anyway. I'm more interested in backup software that can backup my data files: music, movies, and especially photos, plus other documents and such in my home directory. Ideally, this backup software would intelligently handle external drives that are only connected intermittently (so I can have disconnected backups). It would be nice to have redundancy so that I could have multiple copies of the important data on different areas of the file system. I also think it would be ideal for this software to handle corrupted files intelligently: if a file gets corrupted on one of the copies it would be detected and restored from one of the other copies. I'd also be able to write backups to bluray media so files could be read directly from the media.

  • 1
    Speaking about redundancy and disconnected "storage": maybe git-annex is worth looking at. I have that on my list for years but still found no time, hence just a comment as hint…
    – Izzy
    Commented May 19, 2021 at 7:22
  • This is the first hit on SE-software-req for this Linux backup retention which is my primary requirement. However, I'm looking for something with a incremental backup and smart retention, so I created a post here: softwarerecs.stackexchange.com/questions/84066/…
    – alchemy
    Commented Sep 22, 2022 at 2:21

4 Answers 4


BorgBackup is a really neat option that offers deduplication of your backups so each subsequent backup only stores what has changed since the last backup, allowing you to store terabytes worth of backups.

This does have the downside where if a particluar file in the backup gets corrupted/lost, its is lost in every backup, but if you run a new backup containing that file, it can restore itself.

Its fairly command-line focused but their documentation is pretty thorough and there's explanations for how to do all sorts of things like start a backup when a drive is connected


I would like to suggest BackInTime. It has the concept of snapshot, thus it will only back up changed data, relative to your reference backup. Not sure about Bluray disks, personally I use external hard drives encrypted with luks.


Most applications for Linux you will come across are just a frontend for rsync.

One I have been using for a while is luckyBackup. Its presentation may not be very sophisticated, but it does the job. It should be available in the Ubuntu repositories.


I simply rolled my own, based on rsync.
It keeps a full copy of the current files, and daily copies of anything that was changed or deleted.

It's not intended as a disaster backup (the data lives on the same disk, and the "exclude" list omits many large files that change frequently), but for when I have an "oops" and want to know what a file looked like yesterday or whenever.

#!/bin/bash -e
# Cron runs this as root at the end of each day.
#      50 23 * * * /home/ray/Log/Backup

# Daily incremental backups
(   echo ">>>>>>>>>>>>>>>>>>>>>>>" $(date "+%F %T %z %a")
    year=$(date +%Y)
    month=$(date +%m)
    day=$(date +%d)

    rsyncOpts="--archive --one-file-system --delete --backup --quiet"

    cd /data/Backup

    mkdir --parents $daily
    rsync $rsyncOpts --backup-dir="../../$daily/etc" "/etc/" "full/etc/"
    rsync $rsyncOpts --backup-dir="../../$daily/home" $exclude "/home/" "full/home/"

    mkdir --parents $monthly
    rsync --archive --ignore-existing $daily/ $monthly/

    sync .

    [ "$(ls -A $daily)" ] && du -s -k $daily/* || echo "no change"
    echo "<<<<<<<<<<<<<<<<<<<<<<<" $(date "+%F %T %z %a")
) &>>/home/ray/Log/Backup.out

exit 0

It could easily be modified to run hourly, or weekly, or on-demand.

The "monthly" parts were intended to merge all the "daily"s for each month so that they could be deleted to save space, but I've never needed them (most of my work is with small text files).

Three bash commands provide almost everything I've needed to use it:

function .backdown {
    for f in "$@" ; do
        p=$(realpath -m "$f")
        rsync -a "/data/Backup/full$p" "$p"

function .backdate {
    for f in "$@" ; do
        p=$(realpath -m "$f")
        touch -r "/data/Backup/full$p" "$p"

function .backdiff {
    for f in "$@" ; do
        p=$(realpath -m "$f")
        diff -r "/data/Backup/full$p" "$p"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.