目 录CONTENT

文章目录
Nas

NAS部署自动「3-2-1」备份

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

一、环境

  • 硬件:
    • CPU E3-1245 V2;
    • 内存 16G;
    • 硬盘:
      • 128G SSD 系统盘
      • 1TB SSD 虚拟机磁盘
      • 8TB备份盘
      • Raid5 Nas数据盘
  • 系统部署:
    • 主机PVE系统
    • 虚拟机-Ubuntu:数据盘直通,挂在到 /backup 目录
    • 虚拟机-飞牛/Nas:挂在Nas数据盘。
  • 云盘:阿里网盘

二、备份逻辑

家里的nas怎么做好数据备份

  • 3 份数据:Nas中一份、Ubuntu备份服中一份,阿里网盘中一份
  • 2 种不同介质:本地服务器、阿里网盘
  • 1 份一异地备份:阿里网盘
  • 本地冗余:Nas中Raid5硬盘做本地冗余。
  • 本地备份:虽然主机只有一台,但是二个独立的虚拟机加独立的硬盘直通,二台电脑互不干扰且硬盘独立,相当于本地外部备份了。

三、备份步骤

  • 在Nas中安装BorgBackup将Nas中的数据通过ssh备份快照到Ubuntu备份服中
  • Ubuntu中安装Openlist挂载阿里网盘,并提供Webdav共享。
  • Ubuntu中安装rclone将Nas中使用borg备份来的快照通过Webdav同步到阿里网盘

四、实现步骤

1. 部署BorgBackup

BorgBackup 原生支持通过 SSH 直接备份到远程服务器上的目录,为了防止Nas服务器被黑客入侵后直接删除或修改Ubuntu备份服上的快照,我们需要将给Nas borg使用的SSH用户权限做一些限制,只能使用borg 部分操作,禁止borg外的所有ssh命令,这样才能使得备份服务器不受Nas服务器破坏。

操作 是否允许
borg create ✅ 允许(追加新快照)
borg list ✅ 允许
borg extract ✅ 允许
borg delete ❌ 拒绝
borg prune ❌ 拒绝
修改仓库配置 ❌ 拒绝

在Ubuntu服务器中设置

  • 修改/etc/ssh/sshd_conf,禁用密码登录。
# 取消注释并将值改为 no
PasswordAuthentication no
  • 安装borg
sudo apt install borgbackup -y
  • 创建borgbackup用户,给Nas borg使用
sudo adduser --system --disabled-password --home /home/borgbackup --gecos "" borgbackup
  • 创建仓库目录,/backups 为直通硬盘挂在目录
sudo mkdir -p /backups/borg
sudo chown borgbackup:borgbackup /backups/borg
  • 设置主目录权限
sudo chown root:root /home/borgbackup
sudo chmod 755 /home/borgbackup
  • 配置 SSH 密钥
sudo mkdir -p /home/borgbackup/.ssh
  • 获取原始公钥,设置到PUBKEY环境变量中来。
    如果已有公钥直接将整个文件内容复制进来 如果没有可以在Nas服务器用ssh-keygen -t ed25519 -C "borg-backup-key"创建,并将id_ed25519.pub文件内容全复制过来。
PUBKEY="ssh-ed25519 AAAA..."
  • 重建 authorized_keys(使用标准空格)
echo "restrict,command=\"/usr/bin/borg serve --restrict-to-path=/backups/borg --append-only\",no-pty ${PUBKEY}" | sudo tee /home/borgbackup/.ssh/authorized_keys
  • 修复 .ssh 权限
sudo chown borgbackup:borgbackup /home/borgbackup/.ssh
sudo chmod 700 /home/borgbackup/.ssh
sudo chown borgbackup:borgbackup /home/borgbackup/.ssh/authorized_keys
sudo chmod 600 /home/borgbackup/.ssh/authorized_keys
  • 确认 borg 可执行
sudo -u borgbackup /usr/bin/borg --version
# 应该输出类似于这样的版本号, borg 1.2.8

在Nas中设置

  • 安装borg
# Debian / Ubuntu / Linux Mint 中
sudo apt update
sudo apt install borgbackup

# RHEL 8/9, CentOS Stream, Rocky, Alma
sudo dnf install epel-release -y
sudo dnf install borgbackup
  • 配置SSH免密登录,编辑~/.ssh/config
Host borg-server # ssh连接服务器名(自定义,后面连接直接用这个)
        HostName 192.168.1.100  # Ubuntu服务器IP
        User borgbackup  # 用户名
        IdentityFile ~/.ssh/id_ed25519 # 密钥文件所在路径
        IdentitiesOnly yes
  • 测试,命令挂起(borg serve 在等待数据),按回车或Ctrl+C退出,说明SSH免密配置成功。
ssh -T borg-server
  • 初始化远程仓库
# 设置强密码(建议存入文件)
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 ssh://borg-server/backups/borg/repo
unset BORG_PASSPHRASE
  • 自动同步仓库
#!/bin/bash
# borg_backup.sh - Borg 增量备份脚本

set -euo pipefail

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

export BORG_PASSPHRASE=$(cat "$PASS_FILE")

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

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

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

unset BORG_PASSPHRASE
echo "[$(date)] 备份完成"
  • 自动化(cron)
# 每天凌晨 3点 备份
echo "0 3 * * * root /home/backups/borg_backup.sh >> /var/log/borg-backup.log 2>&1" | sudo tee /etc/cron.d/borg-backup

BorgBackup部署完成

到此,borg部署完成了,每天3天会从Nas快照备份到Ubuntu服务器的 /backups/borg目录中了。由于Ubuntu账号设置了--append-only参数,不能执行borg prune清理,我们可以固定时间手动清理。

  • 清理方式1:在Ubuntu服务器中,使用相同的密码直接用borg prune清理对应仓库
  • 清理方式2:临时修改 authorized_keys 文件,删除 --append-only参数,再Nas中使用borg prune清理完后再添加回去。

2. 部署rclone + openlist

部署openlist

这个网上教程太多了,就不多复述了,假设openlist已经挂载了阿里网盘。

  • webdav:http://192.168.1.100/dav
  • 账号:backup
  • 密码:123456
  • 备份目录:/Backups

部署rclone

  • 安装rclone
# Debian/Ubuntu
sudo apt install rclone

# 或使用官方脚本(推荐,版本更新)
curl https://rclone.org/install.sh | sudo bash
  • 生成加密密码
rclone obscure "123456"
# 输出加密字符串,填入 下面的pass=
  • 配置~/.config/rclone/rclone.conf
[openlist]
type = webdav
url = http://192.168.1.100/dav
vendor = other
user = admin
pass = rclone obscure生成的密码字符串
  • 测试
rclone lsd openlist:
# 注意后面的`:`,连接成功应该输入根目录内在文件(夹),如 `Backups/`
  • 同步到Openlist中
rclone sync backups/borg/repo openlist:Backups\
  --checksum \
  --verbose \
  --transfers=2
  • 自动化(cron)
# 每天凌晨 4点 备份
echo "0 4 * * * root /home/backups/rclone_backup.sh >> /var/log/rclone-backup.log 2>&1" | sudo tee /etc/cron.d/rclone-backup
1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区