I have a NAS that runs NAS4Free. It has two hard drives (formatted as UFS), which run separately (so no RAID/JBOD).
On one hard drive, I want to backup my audio and video files, and on the other hard drive all my other files (text files, PDFs, images, etc.).

The files that have to be backed up all come from a single computer, running GNU/Linux. For this computer, I’m looking for a backup software (must be FLOSS) that, after configuration, automatically sends the files to my NAS (to the correct hard drive, depending on my initial configuration which folders should go to which drive).

My NAS does not necessarily run 24/7, so the backup software should be able to handle this. Being able to pause/cancel a current backup process would be useful.

Only files that were changed should be transferred (and ideally only the changes, not the whole files). Note that even my binary files might be changed, e.g., when tagging music.

On the NAS, I want to be able to access previous versions of the files, and ideally each backup on the NAS (e.g., in date-based folders) would consist of all files, by making use of hard links. So for (manually) backing up my backup, I could copy a specific date folder from the NAS to an external drive, and then have all my files (as from that date).

If I need to restore something, I’d like to be able to retrieve it manually (e.g., by SSH-ing into the NAS), so that I’m not bound to using this backup software. However, the backup software might also offer a more convenient way to access (or even rollback) files, as long as it’s optional.

I won’t use encryption (storage as well as transfer can be unencrypted).

  • Sounds like a perfect case for RSyncBackup (there are multiple implementations available, just try a Google Search). Not using it myself (ahem, own implementation in my case), so I cannot give a real answer. It's based on rsync (as the name suggests), and uses hardlinks for "generations" of files – so exactly what you describe. Might require a little "scripting" for initial setup, depending on the implementation chosen. Let me know if I shall convert that into an answer; though I have no own experience with the solutions around, I know about its reliability and usefulness :)
    – Izzy
    May 19, 2015 at 8:44
  • @Izzy: I’d welcome an answer, especially if you could point to a specific implementation (from a quick search, my impression is that several projects use this name for similar but not necessarily feature-same scripts, and the most prominent scripts seem to be targeted at Windows).
    – unor
    Jun 5, 2015 at 22:36
  • Exactly that's the trouble here. As I use my own implementation (not suited for public), I cannot say which is the real project. I rawly remember our German LinuxUser magazine introduced it years ago, but no details. That's why I hesitate here. Well, maybe I check a little when time permits; if I found the "most promising candidate", and there are still no answers here... Feel free to ping me in chat for that, it's better discussed there than here in the comments ;)
    – Izzy
    Jun 5, 2015 at 23:39

1 Answer 1


Note: I have not used any of the following products myself, and thus usually would be unsuited to write an answer. I do so only on special request of the OP.

I've done a little search and found e.g.

All three approaches make use of tools already available on a Linux machine, mainly rsync and, in some cases, the simple copy (cp) command. The idea behind this is easy:

  • rsync copies only changed files (minimizing overhead)
  • rsync --delete allows to remove files no longer existing
  • on the target, multiple "generations" are maintained using multiple directories
  • across generations, hard links are used for unchanged files, minimizing use of disk space

So this would match your requirements:

  • runs on Linux: yes
  • free and open-source: yes
  • covers unavailability (no 24/7): up to you to check the return codes. The Python variant e.g. tries the target machine via ping first, so your Cron script could e.g. start with something like (pseudo-code): "while [[ $(ping -c 1 nas) -ne 0 ]] { sleep 360; exit after 10th try }" – i.e. trying to ping the NAS 10 times in 5min intervals (or whatever you find suiting) to make sure it's available.
  • access previous backup generations: yes (you configure how many)
  • all files (using hard links): exactly :)
  • no special software for restore: nope, simply copy it via e.g. SSH

As written initially, I have not tested these specific setups. But from using this concept in some of my own scripts, I'm confident this is a solution suitable to you.

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.