Using Openrsync
OpenRsync is OpenBSD's rewrite of rsync. openrsync is designed to be lightweight and simple. It may, however, be a little buggy.
WARNING: If your filesystem is being actively written to, data corruption may occur.
OpenRsync Primer
To back up the file /path/to/file on example.com with username to the current directory:
$ openrsync -a username@example.com:/path/to/file ./
This table explains the most common options:
|| border=1 width=100%25 class="sortable simpletable"
||# Option ||# Purpose ||
|| a || (a)rchive mode, shorthand for Dgloprt ||
|| D || Transfers (D)evice and special files ||
|| g || Sets (g)roup to match the source ||
|| l || Transfers symbolic (l)inks ||
|| o || Sets (o)wner to match the source (needs root) ||
|| p || Synchronizes (p)ermissions ||
|| r || (r)ecursive ||
|| t || Synchronize (t)imestamps ||
|| v || Increase (v)erbosity ||
If you have multiple files, you can use the shorthand of :/path/to/second/file:
$ openrsync -a username@example.com:/path/to/file :/path/to/second/file ./
This copies both /path/to/file and /path/to/second/file from example.com to your current local directory.
openrsync can also copy folders recursively. To see each file copied, turn on verbosity with -v
. In the next example, we copy from /path/to/folder on the local system to /path/to/destination in example.com
:
$ openrsync -av /path/to/folder username@example.com:/path/to/destination/
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%25 /
/dev/sd0k 192G 28.7G 153G 16%25 /home
/dev/sd0d 3.9G 22.1M 3.7G 1%25 /tmp
/dev/sd0f 12.3G 7.3G 4.4G 63%25 /usr
/dev/sd0e 14.7G 41.2M 14.0G 0%25 /var
Backing up /home will require at least 28.7G of space.
$ openrsync -av username@example.com:/home/username /dest/path/
This will copy everything in /home/username on example.com
into /dest/path/.
(:if false:)
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 example.com
(:ifend:)