Off-Site Backup of UniFi Dream Machine Pro

Perhaps you’re asking yourself, what would I do if my Dream Machine Pro died? Aside from the issue of replacing the hardware and having your network down until you do, the UDM-Pro is a UniFi controller, so you’ll need a .unf file to restore from.

First, make sure you have Auto Backup configured.

https://help.ui.com/hc/en-us/articles/226218448-UniFi-How-to-Configure-Auto-Backup

Once that’s done, I like to take a simple approach. I’ll create a cron job on the UDM-Pro that runs rsync to copy the files to an instance I have set up for the purpose of housing backups. For me that’s a vm that has an nfs share from my freenas mounted, but a cloud instance would be fine.

Establish an SSH connection to your UDM-Pro.

ssh root@unifi

Establish a shell connection to unifi-os and switch to the home directory while we’ll keep our script.

unifi-os shell
cd ~

By default, there won’t be a public key associated with the private key. Let’s generate one.

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

Install vim and rsync. Replace vim with nano if you aren’t familiar with vim.

apt update
apt install vim rsync -y

Let’s try run our backup command. Replace root@unifi-backup with the username and hostname or IP address of your backup instance. Replace unifi-backup/ with the remote path where you want to rsync the backup files.

rsync -av /data/unifi/data/backup/autobackup/*.unf root@unifi-backup:unifi-backup/

That should have worked. Now let’s automate it.

Make a backup.sh file and make it executable.

touch backup.sh
chmod +x backup.sh

Edit the backup script. Replace vim with nano if you aren’t familiar with vim.

vim backup.sh

It should look a bit like this. Use the command that you previously tested with your replacements.

#!/bin/bash
rsync -av /data/unifi/data/backup/autobackup/*.unf root@unifi-backup:unifi-backup/

Test it.

./backup.sh

Make it a cron job.

crontab -e

Add a line to run the backup script. I’m going with hourly. It’s such a small job that it won’t hurt to run it often.

0 * * * * /root/backup.sh

Document the backup location so it’s readily available when you need it.