Borgbackup: Difference between revisions
(14 intermediate revisions by the same user not shown) | |||
Line 17: | Line 17: | ||
# Create a repo without encryption | # Create a repo without encryption | ||
borg init --encryption=none ./testrepo | borg init --encryption=none ./testrepo | ||
# If you want encryption | # If you want encryption | ||
borg init --encryption=repokey ./testrepo | |||
</pre> | </pre> | ||
Line 26: | Line 27: | ||
The following will create a backup of <code>~/src</code> titled <code>Monday</code> to the repo <code>./testrepo</code>. | The following will create a backup of <code>~/src</code> titled <code>Monday</code> to the repo <code>./testrepo</code>. | ||
<pre> | <pre> | ||
borg create --stats ./testrepo::Monday ~/src | borg create --stats --progress ./testrepo::Monday ~/src | ||
</pre> | </pre> | ||
;Notes | ;Notes | ||
* Name placeholders: {now}, {utcnow}, {fqdn}, {hostname}, {user} | * Name placeholders: {now}, {utcnow}, {fqdn}, {hostname}, {user} | ||
* Progress shows (O, C, D, N) which correspond to original size, compressed size, deduplicated size, and number of files processed. | |||
** Deduplicated size is the additional size consumed on disk after compression and deduplication. | |||
{{hidden | Examples | | {{hidden | Examples | | ||
<pre> | <pre> | ||
borg create \ | borg create \ | ||
--stats --show-rc \ | --stats --progress --show-rc \ | ||
./testrepo::'{hostname}-daily-{utcnow}' \ | ./testrepo::'{hostname}-daily-{utcnow}' \ | ||
/src | /src | ||
Line 58: | Line 61: | ||
* Note that borgbackup <code>1.1.11</code> included in Ubuntu 20.04 has a memory leak when using <code>--progress</code> [https://github.com/borgbackup/borg/issues/5162 documented here]. Download a newer version of borgbackup. | * Note that borgbackup <code>1.1.11</code> included in Ubuntu 20.04 has a memory leak when using <code>--progress</code> [https://github.com/borgbackup/borg/issues/5162 documented here]. Download a newer version of borgbackup. | ||
* You should extract to an empty folder since borg does not delete existing files in the target folder. | * You should extract to an empty folder since borg does not delete existing files in the target folder. | ||
==Scheduling== | |||
===borgmatic=== | |||
See [https://torsion.org/borgmatic/ https://torsion.org/borgmatic/] | |||
===Bash Script=== | |||
Below is a bash script you can call from cron or systemd. | |||
{{hidden | backup.sh | | |||
<syntaxhighlight lang="bash"> | |||
#!/bin/bash | |||
REPOSITORY="my_server:~/Backups/my_backup" | |||
ARCHIVE_NAME="{hostname}-{utcnow}" | |||
SOURCE_DIR="/home/david/" | |||
BACKUP_DIRS=( | |||
"." | |||
) | |||
BORG_CREATE_FLAGS=( | |||
"--stats" | |||
"--progress" | |||
"-x" | |||
"--show-rc" | |||
) | |||
BORG_PRUNE_FLAGS=( | |||
"--keep-daily" | |||
"3" | |||
"--keep-weekly" | |||
"1" | |||
"--keep-monthly" | |||
"1" | |||
# "--stats" | |||
"--list" | |||
"--show-rc" | |||
) | |||
EXCLUSIONS=( | |||
"-e" "System Volume Information" | |||
"-e" "\$RECYCLE.BIN" | |||
) | |||
BORG_EXEC="borg" | |||
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes | |||
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes | |||
LOCKFILE=/tmp/backup_server.lockfile | |||
LOGFILE=/home/david/Documents/server-backup-scripts/my_backup.log | |||
exec {lock_fd}>$LOCKFILE || exit 1 | |||
flock -n "$lock_fd" || { | |||
echo "Another instance is running" >&2 | |||
exit 1 | |||
} | |||
function send_fail_email { | |||
{ | |||
echo From: [email protected] | |||
echo To: [email protected] | |||
echo Subject: my_backup failed | |||
echo | |||
echo my_backup failed | |||
} | /usr/lib/sendmail -t | |||
exit | |||
} | |||
if [ -d "${SOURCE_DIR}" ] | |||
then | |||
# shellcheck disable=SC2015 | |||
cd "${SOURCE_DIR}" && \ | |||
$BORG_EXEC create "${BORG_CREATE_FLAGS[@]}" "${EXCLUSIONS[@]}" "${REPOSITORY}"::"${ARCHIVE_NAME}" "${BACKUP_DIRS[@]}" 2>&1 | tee "$LOGFILE" && | |||
$BORG_EXEC prune "${BORG_PRUNE_FLAGS[@]}" "${REPOSITORY}" | tee -a "$LOGFILE" || | |||
send_fail_email | |||
fi | |||
</syntaxhighlight> | |||
}} | |||
==Borg vs Restic== | |||
Restic is a very similar piece of software which supports backing up to S3-compatible (e.g. S3, Minio, Backblaze B2) storage. | |||
==Hosted Services== | |||
See https://www.borgbackup.org/support/commercial.html | |||
==Resources== | ==Resources== | ||
* [https://practical-admin.com/blog/backups-using-borg/ practical-admin backups using borg] | * [https://practical-admin.com/blog/backups-using-borg/ practical-admin backups using borg] |
Latest revision as of 02:25, 14 August 2023
borgbackup is a deduplicating backup software
Installation
sudo apt install borgbackup
If you want the latest version, you can download a static build from releases or use this backport repo.
Usage
Create a repo
# Create a repo without encryption borg init --encryption=none ./testrepo # If you want encryption borg init --encryption=repokey ./testrepo
Create a backup
The following will create a backup of ~/src
titled Monday
to the repo ./testrepo
.
borg create --stats --progress ./testrepo::Monday ~/src
- Notes
- Name placeholders: {now}, {utcnow}, {fqdn}, {hostname}, {user}
- Progress shows (O, C, D, N) which correspond to original size, compressed size, deduplicated size, and number of files processed.
- Deduplicated size is the additional size consumed on disk after compression and deduplication.
Examples
borg create \ --stats --progress --show-rc \ ./testrepo::'{hostname}-daily-{utcnow}' \ /src
Pruning backups
If you're scripting daily, weekly, or monthly backups, you'll probably want to prune old backups.
The command below will keep one backup from today, one backup from last week, and one backup from one month.
borg prune --keep-daily 1 --keep-weekly 1 --keep-monthly 1 remote:~/my_backup
Extract
See extract
borg extract --progress <archive>
- Note that borgbackup
1.1.11
included in Ubuntu 20.04 has a memory leak when using--progress
documented here. Download a newer version of borgbackup. - You should extract to an empty folder since borg does not delete existing files in the target folder.
Scheduling
borgmatic
See https://torsion.org/borgmatic/
Bash Script
Below is a bash script you can call from cron or systemd.
backup.sh
#!/bin/bash
REPOSITORY="my_server:~/Backups/my_backup"
ARCHIVE_NAME="{hostname}-{utcnow}"
SOURCE_DIR="/home/david/"
BACKUP_DIRS=(
"."
)
BORG_CREATE_FLAGS=(
"--stats"
"--progress"
"-x"
"--show-rc"
)
BORG_PRUNE_FLAGS=(
"--keep-daily"
"3"
"--keep-weekly"
"1"
"--keep-monthly"
"1"
# "--stats"
"--list"
"--show-rc"
)
EXCLUSIONS=(
"-e" "System Volume Information"
"-e" "\$RECYCLE.BIN"
)
BORG_EXEC="borg"
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
LOCKFILE=/tmp/backup_server.lockfile
LOGFILE=/home/david/Documents/server-backup-scripts/my_backup.log
exec {lock_fd}>$LOCKFILE || exit 1
flock -n "$lock_fd" || {
echo "Another instance is running" >&2
exit 1
}
function send_fail_email {
{
echo From: [email protected]
echo To: [email protected]
echo Subject: my_backup failed
echo
echo my_backup failed
} | /usr/lib/sendmail -t
exit
}
if [ -d "${SOURCE_DIR}" ]
then
# shellcheck disable=SC2015
cd "${SOURCE_DIR}" && \
$BORG_EXEC create "${BORG_CREATE_FLAGS[@]}" "${EXCLUSIONS[@]}" "${REPOSITORY}"::"${ARCHIVE_NAME}" "${BACKUP_DIRS[@]}" 2>&1 | tee "$LOGFILE" &&
$BORG_EXEC prune "${BORG_PRUNE_FLAGS[@]}" "${REPOSITORY}" | tee -a "$LOGFILE" ||
send_fail_email
fi
Borg vs Restic
Restic is a very similar piece of software which supports backing up to S3-compatible (e.g. S3, Minio, Backblaze B2) storage.
Hosted Services
See https://www.borgbackup.org/support/commercial.html