如何自动进行 borg 备份?

sgb*_*own 5 linux backup bash shell cron

背景

我想使用 Borg Backup 作为我的 Ubuntu 服务器的备份解决方案。他们提供了一个非常方便的sh 脚本,他们说你可以将其作为 cron 作业运行,但它对我不起作用。

问题

如何自动进行 borg 备份?如果最好的方法是使用 cron,那么我的执行有什么问题呢?

数据

Root 的 crontab:

# 5 2 * * * sh /home/***/Scripts/borgBackup_run.sh >/dev/null      # Back up the root partition daily (2:05a)
* * * * * sh /home/***/Scripts/borgBackup_run.sh >/dev/null      # Test the script
Run Code Online (Sandbox Code Playgroud)

borgBackup_run.sh:

对原始内容进行了非常简单的修改:

#!/bin/sh

echo 'Starting backup now...' >> 
/home/***/Logs/borgBackup_create.log

#/usr/bin/borg create --verbose --filter AME --list --stats --show-rc --compression lz4 --exclude-caches --one-file-system --exclude-from ~/Scripts/borgBackup_exclude.txt /mnt/RootBackup/borg::'{hostname}-{now:%Y-%m-%d}' /
/usr/bin/borg create /mnt/RootBackup/borg::cronTest /home/***/Logs/ # Backup a small folder as a test

echo 'Done.' >> /home/***/Logs/borgBackup_create.log
Run Code Online (Sandbox Code Playgroud)

“ls -l ~/Scripts/borgBackup_run.sh”

-rwxr-xr-x 1 root root 455 Sep 27 12:34 Scripts/borgBackup_run.sh
Run Code Online (Sandbox Code Playgroud)

笔记:

borgBackup_run.sh从命令行运行时,如:sudo Scripts/borgBackup_run.sh,脚本完美运行,在/mnt/RootBackup/borg.

此外,每分钟之后(当 cronjob 运行时),.log 文件都会/home/***/Logs/borgBackup_create.log显示Starting backup now...Done.,表明脚本已完全运行,但 borg 由于某种原因无法工作。

我尝试sh从 crontab 文件中删除,bash改为使用,并将 interobang 更改为#!/bin/bash而不是#!/bin/sh. 我也尝试过将线路包裹/user/bin/borg create ...borgBackup_run.shbash -c "..."

任何帮助将不胜感激!

sgb*_*own 6

我找出了问题所在,并发布了解决方案,以防将来有人遇到类似问题。

我将存储库设置为未加密,这导致borg尝试交互式运行(询问标准输出是否可以备份到未加密的存储库)。为了使 borg 以非交互方式运行,我必须在borgBackup_run.sh调用 之前在 中导出一个“自动应答器” borg create ...。脚本中的新行如下所示:

export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes
Run Code Online (Sandbox Code Playgroud)

该变量的名称可在man的页面中找到borg。页面中还可以找到许多其他“自动应答器” man,以确保 borg 在脚本中以非交互方式运行。


Gle*_*len 6

我刚刚创建了一个类似的 cron 脚本。其中包括将 borg 备份文件同步到 BackBlaze 的云存储平台(类似于亚马逊 s3,但更便宜)。希望这对那些寻求通过低成本异地备份实现 borg 自动化的人有用!

#!/bin/sh

echo "Starting backup for `date`\n"

# setup script variables
export BORG_PASSPHRASE="secret-passphrase-here!"
export BORG_REPO="/path/to/repo"
export BACKUP_TARGETS="/path1/to/backup /path2/to/backup"
export BACKUP_NAME="backup-and-remote-folder-name"

# create borg backup archive
cmd="borg create ::`date +%Y%m%d`-$BACKUP_NAME $BACKUP_TARGETS --stats"
$cmd

# prune old archives to keep disk space in check
borg prune -v --list --keep-daily=3 --keep-weekly=2

# sync backups to offsite storage
b2 authorize-account accountID applictionKey
b2 sync --delete --replaceNewer $BORG_REPO b2://bucket-name/$BACKUP_NAME

# all done!
echo "Backup complete at `date`\n";
Run Code Online (Sandbox Code Playgroud)

目前每天使用以下 crontab 运行一次

0 11 * * * /path/to/script/backup.sh >> /path/to/logfile/backup.log 2>&1
Run Code Online (Sandbox Code Playgroud)

需要 BackBlaze 帐户及其 CLI 工具CLI 安装