群晖文件备份到 Ubuntu:rsnapshot 主动拉取与硬链接快照教程

介绍让 Ubuntu 以只读方式主动拉取群晖共享文件夹,并用 rsnapshot 建立 daily、weekly、monthly 硬链接快照的配置、验证、恢复与排错方法。

如果目标是“简单、可靠、历史文件能直接打开”,很适合让 Ubuntu 主动拉取群晖共享文件夹,再用 rsnapshot 做本地快照。群晖只提供只读数据,Ubuntu 负责定时、日志、版本轮换和备份硬盘;群晖误删文件后,也可以从昨天、上周或上月的目录直接复制回来。

rsnapshot 基于 rsync 和硬链接工作。每个快照目录看起来像一份完整文件副本,但未变化的文件不会反复占用磁盘空间。照片、视频、PDF、DOCX 等仍是普通文件,不依赖专用恢复软件或备份数据库。

推荐架构

1
2
3
4
5
6
7
群晖共享文件夹
photo / 工作文件 / 个人文件 / 其他共享文件夹
        ↓ 只读 SMB、NFS,或 rsync/SSH
Ubuntu:rsnapshot 定时拉取
Ubuntu 备份硬盘(ext4、XFS 等)
daily.0 / daily.1 / weekly.0 / monthly.0

这不是“群晖把文件推送到 Ubuntu”的方案。Ubuntu 对群晖进行只读访问,群晖无需保存 Ubuntu 备份盘的写入密码。这个权限隔离通常更稳妥:群晖被误操作、勒索软件影响或某个套件账号被滥用时,攻击面不直接延伸到 Ubuntu 的历史快照。该判断基于权限隔离,而不是替代离线盘、异地副本或恢复演练。

适用范围和边界

这套方式尤其适合:

  • 照片、视频、文档、项目资料等普通共享文件夹;
  • 希望保留多个时间点,又不想学习专用恢复工具;
  • Ubuntu 上已有一块专用备份硬盘;
  • 只想挑选几个共享文件夹,而不是整机镜像。

它主要备份文件本身,不等同于完整恢复 DSM、套件配置、数据库服务状态或所有系统级元数据。需要完整灾难恢复时,仍应保留 Hyper Backup、应用导出、数据库备份或其他针对性方案。

在群晖端创建只读备份账户

先在 DSM 创建一个专用账号,例如 backup-reader

  1. 只授予需要备份的共享文件夹读取权限;
  2. 不授予管理权限、写入权限和不必要的应用权限;
  3. 使用独立的高强度密码;
  4. 仅允许 Ubuntu 的固定 IP 访问相关 SMB/NFS 服务。

不要直接复用日常管理员账户。这样即使 Ubuntu 上用于挂载的凭据泄露,影响范围也只限于被授权读取的目录。

Ubuntu 挂载群晖共享文件夹

推荐把各共享文件夹分别挂到固定目录:

1
2
3
sudo mkdir -p /mnt/synology/photo
sudo mkdir -p /mnt/synology/files
sudo mkdir -p /mnt/synology/documents

SMB 和 NFS 都可以。选择一种你已在群晖开启并熟悉的协议即可;对普通家庭或小团队网络,SMB 较容易排查权限,NFS 则更接近 Linux 的权限模型。

SMB/CIFS 只读挂载示例

先安装工具并创建只允许 root 读取的凭据文件:

1
2
3
4
5
sudo apt update
sudo apt install -y cifs-utils rsync rsnapshot

sudo install -m 600 /dev/null /root/.smb-synology-credentials
sudo nano /root/.smb-synology-credentials

凭据文件内容:

1
2
username=backup-reader
password=替换为专用密码

/etc/fstab 中加入示例。把群晖 IP、共享名称替换为实际值:

1
2
3
//192.168.8.100/photo     /mnt/synology/photo      cifs  ro,credentials=/root/.smb-synology-credentials,vers=3.0,_netdev,nofail  0  0
//192.168.8.100/files     /mnt/synology/files      cifs  ro,credentials=/root/.smb-synology-credentials,vers=3.0,_netdev,nofail  0  0
//192.168.8.100/documents /mnt/synology/documents  cifs  ro,credentials=/root/.smb-synology-credentials,vers=3.0,_netdev,nofail  0  0

测试挂载并确认目录可读:

1
2
3
sudo mount -a
findmnt /mnt/synology/photo
ls -la /mnt/synology/photo | head

ro 是关键选项。若 mount -a 报认证、协议版本或共享不存在,不要先配置 rsnapshot;先把单个挂载点读通。

NFS 只读挂载示例

若已在 DSM 启用 NFS,并且共享文件夹已允许 Ubuntu 的 IP 以只读方式挂载,可以使用:

1
2
sudo apt install -y nfs-common rsync rsnapshot
sudo mount -t nfs -o ro 192.168.8.100:/volume1/photo /mnt/synology/photo

NFS 导出路径因群晖共享名称和卷而异,先在 DSM 的共享文件夹 NFS 权限页确认。确认可读后,再将实际导出路径写入 /etc/fstab

准备 Ubuntu 备份硬盘

快照根目录应位于 Ubuntu 的专用备份盘,例如:

1
2
sudo mkdir -p /srv/backup/rsnapshot
df -Th /srv/backup/rsnapshot

优先使用 ext4XFS 等 Linux 文件系统。rsnapshot 依赖硬链接节省空间,因此不要把快照根目录放在 FAT、exFAT 等不支持 Unix 硬链接的文件系统上;也不要让备份目录跨不同文件系统拆分。

建议先确认备份硬盘的挂载稳定:系统重启后,/srv/backup/rsnapshot 必须仍然位于备份盘,而不是意外落到 Ubuntu 系统盘的空目录中。

配置 rsnapshot

编辑 /etc/rsnapshot.conf。该配置文件的“配置项”和“参数”通常要求使用 Tab 制表符 分隔,复制后若校验失败,优先检查是否被编辑器替换成了空格。

下面是与本文目录结构对应的核心配置:

1
2
3
4
5
6
7
8
9
snapshot_root	/srv/backup/rsnapshot/

retain	daily	7
retain	weekly	4
retain	monthly	12

backup	/mnt/synology/photo/	photo/
backup	/mnt/synology/files/	files/
backup	/mnt/synology/documents/	documents/

含义如下:

配置 作用
snapshot_root 保存所有快照的根目录
retain daily 7 保留 7 个日快照
retain weekly 4 保留 4 个周快照
retain monthly 12 保留 12 个月快照
backup 把只读挂载目录备份到快照中的对应子目录

先校验配置,再手工跑一次日快照:

1
2
sudo rsnapshot configtest
sudo rsnapshot daily

正常完成后,目录大致如下:

1
2
3
4
5
6
/srv/backup/rsnapshot/daily.0/photo/
/srv/backup/rsnapshot/daily.0/files/
/srv/backup/rsnapshot/daily.0/documents/

/srv/backup/rsnapshot/daily.1/photo/
/srv/backup/rsnapshot/weekly.0/photo/

daily.0 是最新一次成功快照。下一次运行后,旧快照向后轮换,超过 retain 数量的版本会被清理。

设置日、周、月定时任务

在确认手工快照正常后,创建 /etc/cron.d/rsnapshot

1
sudo nano /etc/cron.d/rsnapshot

示例内容如下:

1
2
3
0 2 * * * root /usr/bin/rsnapshot daily
30 2 * * 1 root /usr/bin/rsnapshot weekly
0 3 1 * * root /usr/bin/rsnapshot monthly

建议把任务放在群晖较空闲的时段。第一次备份会复制全部文件,耗时和磁盘占用都最大;后续运行主要传输变化部分。

定时任务前应确保挂载已成功。可以在 rsnapshot 前增加一个简单检查,或通过 systemd 挂载依赖实现;最重要的是不要在 /mnt/synology/* 未挂载时把空目录误当成源目录,导致产生“成功但内容为空”的快照。

如何确认硬链接确实节省空间

不要只看每个目录显示的逻辑大小。可以检查同一个未变化文件的 inode 和链接数:

1
2
ls -li /srv/backup/rsnapshot/daily.0/photo/某个文件.jpg
ls -li /srv/backup/rsnapshot/daily.1/photo/某个文件.jpg

若文件未变化,通常会看到相同 inode,且链接数大于 1。查看备份盘真实占用则使用:

1
2
du -sh /srv/backup/rsnapshot
df -h /srv/backup/rsnapshot

恢复文件的方法

恢复不需要 rsnapshot 命令。定位到合适的日期目录,直接复制目标文件即可:

1
cp -a /srv/backup/rsnapshot/daily.1/photo/2026/旅行.jpg /tmp/恢复文件/

恢复到群晖前,建议先复制到临时目录或更改文件名确认内容,避免覆盖仍在使用的新版本。若要恢复整个文件夹,也应先确认目标空间和覆盖范围。

常见问题

rsnapshot 显示成功,但快照目录为空

首先检查源挂载点是否真的挂载:

1
2
findmnt /mnt/synology/photo
mountpoint -q /mnt/synology/photo && echo mounted

单纯存在 /mnt/synology/photo 目录不代表网络共享已挂载。应停止定时任务,删除这次无效快照后,先修复 SMB/NFS 连通性再重跑。

配置检查提示语法错误

运行:

1
sudo rsnapshot configtest

重点检查 snapshot_root 是否以 / 结尾、backup 规则是否有源路径和目标子目录,以及配置项之间是否使用了 Tab。不要在未通过 configtest 时直接加入 cron。

快照占用突然很大

先看是否有大量文件被重命名、移动、重新编码或修改时间/权限导致 rsync 重新复制。硬链接只能复用内容和属性都未变化的历史文件;首次备份、批量整理照片库或应用导出目录频繁变化时,占用增长是正常现象。

能否直接备份整个群晖

可以技术上挂载更多共享文件夹,但不建议把系统目录、套件内部目录和所有卷无差别加入。优先从照片、文档、工作文件等用户数据开始,确认恢复流程后再逐步扩展;数据库和应用配置应按各自的导出或备份机制单独处理。

小结

Ubuntu 主动拉取 + rsnapshot 的流程很清楚:群晖提供只读共享,Ubuntu 将其挂载到 /mnt/synology/,rsnapshot 再写入专用备份盘的 dailyweeklymonthly 快照。历史版本是可直接浏览的普通文件,恢复就是复制文件;同时,群晖不需要持有 Ubuntu 备份盘的写入权限。这是一套很适合长期保存照片、文档和工作文件的实用方案。

记录并分享
使用 Hugo 构建
主题 StackJimmy 设计