目 录CONTENT

文章目录

Linux中使用BorgBackup做增量备份

过客
2025-12-08 / 0 评论 / 0 点赞 / 1 阅读 / 0 字

Linux中文件增量备份有很多方式,如:rsync+硬链接、rdiff-backup、BorgBackup、Restic、Duplicity、tar增量等等。简单对比一下:

工具 增量方式 去重 加密 可远程 易用性 适用场景
rsync+硬链接 文件级 硬链接 简单 简单同步,版本不多
rdiff-backup 字节级 中等 文件服务器,版本管理
BorgBackup 块级 可选 中等 服务器备份,需加密
Restic 块级 强制 中等 云备份,安全要求高
Duplicity 文件级 强制 中等 需加密备份到云存储
tar增量 文件级 简单 简单本地备份

选择建议

  1. 个人电脑/简单需求​:rsync+硬链接或tar
  2. 服务器备份​:BorgBackup或Restic
  3. 需要加密​:Restic或Duplicity
  4. 文件服务器​:rdiff-backup
  5. 云端备份​:Restic(支持多种后端)
  6. 大文件/虚拟机​:文件系统快照+BorgBackup

我这里备份Nas中自己拍的照片和视频,所以选择用BorgBackup

BorgBackup部署方案

官网:https://borgbackup.readthedocs.io

🔧 1. 安装 Borg

# Ubuntu/Debian
sudo apt update && sudo apt install borgbackup -y

# CentOS/RHEL/Fedora
sudo dnf install borgbackup -y

# 验证
borg --version

📁 2. 目录结构

备份最好用一块独立的硬盘,即使系统坏了或原数据硬盘噶了也不影响。这里我们将新的硬盘挂载到 **/mnt/backups/**目录, 然后borg仓库也建这个目录中

/mnt/backups/
├── borg_repo/          # Borg 仓库(加密存储)
├── borg_backup.sh     # 备份脚本
└── borg_restore.sh     # 还原脚本

🔐 3. 初始化仓库(首次运行)

# 创建仓库目录
sudo mkdir -p /mnt/backups/borg_repo

# 设置强密码(建议存入文件)
echo "YourSuperStrongBorgPass123!" | sudo tee /etc/borg-pass.txt
sudo chmod 600 /etc/borg-pass.txt

# 初始化仓库(AES-256 加密)
export BORG_PASSPHRASE=$(cat /etc/borg-pass.txt)
borg init --encryption=repokey-blake2 /backups/borg_repo
unset BORG_PASSPHRASE

💡 repokey-blake2:密钥与仓库一起存储(方便恢复),使用 BLAKE2b 哈希,直接将整个仓库备份到云盘(云端),只要使用强密码不泄漏,可以在任意地点下载恢复切安全可靠。

🔄 4. 备份脚本:borg_backup.sh

#!/bin/bash
# borg_backup.sh - Borg 增量备份脚本

set -euo pipefail

REPO="/mnt/backups/borg_repo"
SOURCE_DIRS=(
    "/vol1/1000/Photos"
    "/vol1/1000/Video"
    # 添加更多目录...(以换行分割)
)
PASS_FILE="/etc/borg-pass.txt"

export BORG_PASSPHRASE=$(cat "$PASS_FILE")
export BORG_RSH="ssh -o StrictHostKeyChecking=no"  # 如需远程仓库

# 创建快照名(含日期和主机名)
SNAPSHOT="backup-$(hostname)-$(date +%Y-%m-%d-%H%M)"

echo "[$(date)] 开始备份到 $REPO :: $SNAPSHOT"

# === 进入源目录,然后备份 .(当前目录)===
cd "$SOURCE_DIR"

# 执行备份(自动去重+压缩)
borg create \
    --verbose \
    --filter AME \
    --list \
    --stats \
    --compression zstd,6 \
    --exclude-caches \
    --exclude '*/.cache/*' \  # 排除目录
    --exclude '*.tmp' \        # 排除文件
    "$REPO::$SNAPSHOT" \
    "${SOURCE_DIRS[@]}"

# 清理旧快照(保留:7天内每日、4周内每周、6月内每月)
borg prune \
    --list \
    --prefix "backup-$(hostname)-" \
    --keep-daily=7 \
    --keep-weekly=4 \
    --keep-monthly=6 \
    "$REPO"

unset BORG_PASSPHRASE
echo "[$(date)] 备份完成"

SOURCE_DIRS这里配置的是绝对路径,还原时也带绝对路径/vol1/1000/Photos,也可以配置相对路径,还原时也就是相对路径了。

🔓 5. 还原脚本:borg_restore.sh

#!/bin/bash
# borg_restore.sh - 修复版:正确还原指定快照

set -euo pipefail

REPO="/mnt/backups/borg_repo"
PASS_FILE="/etc/borg-pass.txt"

if [[ $# -lt 1 ]]; then
    echo "用法: $0 <快照名> [还原路径]"
    echo "可用快照列表:"
    export BORG_PASSPHRASE=$(cat "$PASS_FILE")
    borg list "$REPO"
    unset BORG_PASSPHRASE
    exit 1
fi

SNAPSHOT="$1"
TARGET="${2:-/restore}"  # 不传第二个路径参数时还原到 /restore

# 确保目标目录存在
mkdir -p "$TARGET"

# 设置密码
export BORG_PASSPHRASE=$(cat "$PASS_FILE")

echo "正在还原 $REPO::$SNAPSHOT 到 $TARGET ..."

# 关键修复:进入目标目录后执行 extract
cd "$TARGET"
borg extract --verbose "$REPO::$SNAPSHOT"

unset BORG_PASSPHRASE
echo "还原完成: 文件已解压到 $TARGET"

⏰ 6. 自动化(cron)

# 每天凌晨 3点 备份
echo "0 3 * * * root /mnt/backups/borg_backup.sh >> /var/log/borg-backup.log 2>&1" | sudo tee /etc/cron.d/borg-backup

🛡️7. 备份到云盘

用Openlist挂在云盘,然后将/mnt/backups/borg_repo目录实时同步到云盘就可以了,能实现云端备份,备份文件还是AES-256加密。

🔍8. 其他一些命令使用

删除备份

  • 删除整个repo:
borg delete /mnt/backups/borg_repo

这实际上和你直接打开/mnt/backups/,删除整个borg_repo目录是一样的

  • 删除某次备份:
borg delete /mnt/backups/borg_repo::backup-zngw-2025-12-08-0638

这个感觉比较鸡肋,因为有去重机制,删除某次备份并不能很好的腾出空间占用,如果觉得累积的备份比较占空间了,直接删除整个repo,再重新创建同名的repo,然后再备份一次即可。

挂载快照用法

  • 安装 FUSE(必要依赖)
# Ubuntu/Debian
sudo apt install fuse3 -y
sudo apt install python3-pyfuse3 -y

# CentOS/RHEL/Fedora
sudo dnf install fuse3
sudo dnf install python3-pyfuse3 -y

# 老版本的系统,如果没有系统包,可以用pip来安装
pip3 install --user pyfuse3
  • 挂载整个仓库
# 创建挂载点
mkdir /home/borg-all

# 挂载
borg mount /mnt/backups/borg_repo /home/borg-all

然后在/home/borg-all目录可以看到每个快照目录,如:

backup-1panel-2025-12-08-0638/
backup-1panel-2025-12-08-0726/
  • 挂载单个快照
# 创建挂载点
mkdir /home/borg-point

# 挂载
borg mount /backups/borg_repo::snapshot-name /home/borg-point
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区