群暉檔案備份到 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 設計