Rsync is a very useful tool for backing up files. It can be used remotely.

WARNING: If your filesystem is being actively written to, data corruption may occur.

Rsync Primer

OpenBSD includes its own rewrite of rsync called openrsync. It seems to be a bit buggy so I am going to use rsync instead. The commands below, however, will work with either openrsync or rsync.

Here's how to back up the file /path/to/file on with username to the current directory:

$ rsync -a ./

We add the option -a for archive mode.

If you have multiple files, you can use the shorthand of :/path/to/second/file:

$ rsync -a :/path/to/second/file ./

This copies both /path/to/file and /path/to/second/file from to your current local directory.

$ rsync -a :/path/to/second/file ./

We add -v options to turn on verbosity (it will display each file copied).

$ rsync ./

Quick Check

Before you backup your files, make sure you have enough disk space. To see how much space it will take, and how much you have available, run:

$ df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/sd0a     1005M    111M    844M    12%    /
/dev/sd0k      192G   28.7G    153G    16%    /home
/dev/sd0d      3.9G   22.1M    3.7G     1%    /tmp
/dev/sd0f     12.3G    7.3G    4.4G    63%    /usr
/dev/sd0e     14.7G   41.2M   14.0G     0%    /var

Backing up /home will require at least 28.7G of space.

$ rsync --rsync-path="doas rsync" -av /dest/path/

This will copy everything in /home into /dest/path/. -a specifies this is an archive, -v tells rsync to be more verbose (show files).

Complete Functions

Put the following functions at the end of ~/.profile:

rsync-all () {
        echo "Backing up in $PWD: type ctrl+c to abort, enter to continue"
        read $cancel
        ssh $1 "doas dump -0 -a -u -h 0 -f - /" > root.dmp
        ssh $1 "doas dump -0 -a -u -h 0 -f - /home" > home.dmp
        ssh $1 "doas dump -0 -a -u -h 0 -f - /home/vmm" > vmm.dmp
        ssh $1 "doas dump -0 -a -u -h 0 -f - /mnt" > mnt.dmp
        ssh $1 "doas dump -0 -a -u -h 0 -f - /var" > var.dmp
        ssh $1 "doas dump -0 -a -u -h 0 -f - /var/www/htdocs" > htdocs.dmp
        ssh $1 "doas dump -0 -a -u -h 0 -f - /usr" > usr.dmp
        date > date
        md5 root.dmp home.dmp vmm.dmp mnt.dmp var.dmp htdocs.dmp usr.dmp date > md5sum

@@rsync-all@@ will make a complete backup of the remote system you specify.

Source it, then call it on the server:

$ . .profile
$ rsync-all