In this post we’re going to look at Duplicacy, a tool that allows you to backup large amounts of data to any storage provider.
So what is Duplicacy?
Duplicacy is a backup/restore tool for servers. They have a free CLI version and a paid GUI version, but you probably only need the CLI tool unless you’re extremely scared of the terminal.
Big warning before we begin
- Duplicacy expects sole access to the backup destination. That means, if a backup is running and you issue a prune command on another server, it may result in a loss of ALL of your data! Always make sure that only one instance of Duplicacy is operating at a given moment.
- RAID is not a backup. If someone tells you they have a bulletproof backup solution with RAID only, you have the right to laugh in their face.
- Eggs in multiple baskets. If you have everything on Amazon Glacier and your home burns down, you probably won’t have the ridiculous download fees on hand in order to retrieve your data. (If you do, congratulations for being rich and nice priorities.) On the other hand, if you have a local backup on a hard drive, then yes, you can go watch that movie while sitting next to your smoldering
houseer, I mean ashes. At least you’ll have fresh popcorn.
Onto the guide!
Steps to install
Now, UnRAID boots off of USB drives, which means that if you just blindly copy your Duplicacy executable to a system folder, the changes will be lost on next boot. So we need to make Duplicacy persistent.
Navigate to your USB drive on your UnRAID server:
Download the Duplicacy executable:
Now it’s very certain that there is a new version by the time you are reading this article. Simply go to the releases tab on GitHub, right click on
xxx is the version number, and select “Copy link location” (may vary depending on browser). Then paste it after
wget -O duplicacy.
Then, make the necessary changes in your
go file to copy over the executable on every boot. Type the following two lines at the end of
This should symlink the executable to an executable location every time UnRAID starts up.
You’re done! Reboot the machine (or run
ln -s /boot/config/plugins/duplicacy /usr/local/bin/) and make sure you can run duplicacy -h in your terminal.
Setting up a Duplicacy “repository”
You need to get Duplicacy to
init a new “repository”. This means you’re marking what you want to back up. Duplicacy will create a new hidden folder called
.duplicacy in your current directory.
So what does this mean? Let’s go over this:
- Let’s say we’re currently in
/mnt/user, so we’re backing up everything underneath it. For example, Duplicacy will back up
/mnt/user/Music, and so on.
inittells Duplicacy we want to set up a repository here.
repositorynameis just a name you will give to the repository. Set it to whatever.
b2://is the protocol (Backblaze B2). You can use other protocls if you use different providers, such as
sftp://and so on.
servername-duplicacyis the bucket name you have in B2. You should already have this created before running the command!
-etells Duplicacy to encrypt the backups.
You can actually set up duplicacy in the root folder of your shares,
/mnt/user/*. This way,
duplicacy stores all the configuration and other details in
Stop Duplicacy asking for keys
The next step to automation is to get Duplicacy to stop asking for your application ID and password all the time. Otherwise, you will need to manage them yourself every time you back up, which will not work in an automated environment.
Caution: If you go through with these commands, then your application keys and encryption password will be stored as plain-text inside your
.duplicacy folder. Anyone with access to this folder will be able to see your keys. Only issue the following commands if you are certain that only you will have access to the server, at all times.
Run the following commands:
You may want to customize the filters file in
.duplicacy/ before running the backup. Personally, I have mine set to exclude Docker volume folders, VM folders, and the Docker image (since they can always be recreated with no loss).
For the full documentation, refer to the official documentation since I don’t know regular expressions yet.
Here is my UnRAID
filters file if you are interested:
You’re almost there! We need to automate backups with User Scripts, since we all know you won’t manually remote every day to issue the command.
Download User Scripts (plenty of guides online) on your UnRAID server. You can use Community Applications for it. Once you’re there, create a script with the following:
Let’s go over this line by line. On the first couple of lines, from the line that starts with
echo $$, we set up a lockfile. In case User Scripts mess up and run the script twice (again, two instances of Duplicacy running can seriously corrupt the backup), the
lockfile prevents the script from running.
Then the two lines after that start the backup, with 2 threads. Adjust to match your CPU.
-stats just shows you what it’s backing up at a given moment.
Save it with an appropriate name and description, set a schedule, and let it rip in the background! The backup is now completely automated!
Deleting old backups
By the way, Duplicacy will not automatically delete old backups. To do that, you must
prune your backup set.
Make another script in User Scripts:
Hmm, seems very similar to the first script, except we run
duplicacy prune here. This deletes any previous data backups older than 120 days. Adjust the date if necessary.
How do I restore?
I’m not sure because my server hasn’t crashed yet. (knock on wood)
If it ever does I will update this section. But it should just be a matter of running something like
duplicacy restore in the root directory after restoring your configuration files.
- Delete the executable over at
- Edit the go file over at
/boot/config/go. Remove the two lines that we added above.
- Delete configuration files if required. Go to your source directory (for me it’s
/mnt/user) and then type
rm -rf .duplicacy. (NOTE THAT THIS IS DESTRUCTIVE!)
- Remove the User Scripts.
Once that’s done, reboot your UnRAID server and you should be on your way!