2020年1月24日 星期五

[Synology NAS] 使用rsync進行遠端備份


這篇是把 Synology NAS 上的資料透過  rsync 方式備份到遠端 rsync server 的記錄




[ 基本準備 ]

clinet 端 :Synology NAS DS918+
  • IP: 192.168.11.201
  • 安裝 Photo Staiton, 開啟個人相簿功能
  • 安裝媒體伺服器, 會建立 video, music 等公用資料夾
  • 啟動 ssh 功能 (控制台 > 終端機與SNMP > 終端機)

server 端 :J1900 安裝 Ubuntu 18.04
  • IP: 192.168.11.202
  • 將 /dev/sdb2 掛到 /backup, 使用者 synology 家目錄為 /backup, 也是 rsync 模組 synology 的主目錄
  • 使用者 ghosty, 家目錄為 /home/ghosty
  • 建立 /home/ghosty/synology, 這是 rsync 模組 ghosty 的主目錄
  • 建立 /home/ghosty/synology/ghosty 目錄, 這是用來放 NAS 的個人資料

注意事項:
  • NAS 的 rsync client 只能在 server 端建立一層目錄, 所以若有多層目錄, 必須先自行手動建立
  • J1900 安裝兩顆硬碟, 不使用 hardlink 的話, 須建立兩個 rsync 模組來對應兩個目錄


以下步驟, 準備將 NAS 個人相簿備份到 J1900 的個人帳號家目錄下, 媒體伺服器的 video 備份到 J1900 的 /backup 目錄下

[ J1900 server 端設定步驟 ]

安裝 rsync server

$sudo apt-get install rsync


設定開機啟動 rsync server
$sudo vi /etc/init.d/rsync
將 RSYNC_ENABLE= false 改成 true









建立 /etc/rsync.conf 檔案
$sudo vi /etc/rsyncd.conf
輸入以下內容 :
ock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid

[synology]
    path = /backup/synology
    comment = synology backup folder
    uid = synology
    gid = synology
    read only = no
    list = yes
    auth users = synology
    secrets file = /etc/rsyncd.secrets
    hosts allow = 192.168.11.0/255.255.255.0

[ghosty]
    path = /home/ghosty/synology
    comment = synology backup folder
    uid = ghosty
    gid = ghosty
    read only = no
    list = yes
    auth users = ghosty
    secrets file = /etc/rsyncd.secrets
    hosts allow = 192.168.11.0/255.255.255.0


以上設定重點為:
rsync 模組 synology 對應的 path = /backup/synology
rsync 模組 ghosty 對應的 path = /home/ghosty/synology


建立  /etc/rsyncd.secrets 檔案
$sudo vi /etc/rsyncd.secrets
輸入以下內容 :

synology:synology
ghosty:synology

以上每行的格式為 '模組名稱:密碼', 對應 /etc/rsync.conf 的設定, 而不是 linux 系統的帳密


更改  /etc/rsyncd.secrets 的權限
在 /etc/rsync.conf 的設定中, 兩個模組使用同一個 secrets file = /etc/rsyncd.secrets
因 rsync server 運作時要求 secrets file 不可以有 other 權限, 否則會報錯誤訊息 secrets file must not be other-accessible, 因此須設定檔案權限:
$sudo chmod 600 rsyncd.secrets 
 


重新啟動 rsync daemon:
$sudo /etc/init.d/rsync restart




[ NAS client端設定步驟 ]


建立各模組的對應 secret file:
sudo vi ~/rsyncd.secrets
輸入以下內容 :

synology
以上內容即為登入 rsync server 模組時用到的密碼, 如果每個模組密碼不同, 可建立多個 rsyncd.secrets 與之對應, 例如  rsyncd.secrets.synology, rsyncd.secrets.ghosty



建立測試環境變數:
因 Synology NAS 預設將第一個儲存集區放在 /volume1, 為方便調整多集區的使用, 先設定變數 srcRoo1 與 srcRoo2:
$srcRoot1=/volume1
$srcRoot2=/volume3



測試 Photo Station 建立的個人相簿目錄是否可以同步:
$rsync -avh $srcRoot1/homes/ghosty/photo/* --password-file ~/rsyncd.secrets ghosty@192.168.11.202::ghosty/ghosty/photo


用 ssh 登入 Server 端, 檢查資料是否有複製過去:
$cd ~/synology/ghosty
$ls -l






如果photo 目錄已被建立成功, 則可回到 NAS 端, 按下Ctrl-C 將測試指令停止執行,
並回到 Server 端刪除個人photo目錄下所有測試檔案:
$rm -r ~/synology/ghosty/*



[ NAS 端排程設定 ]

建立 [使用者定義指令碼] 排程任務:
名稱:J1900_ghosty-photo
使用者帳號:ghosty (這是 NAS 端啟動排程時本地端的帳號, 與本地端使用者權限有關)
使用者定義指令碼:sh /volume1/mybackup/tasks/backup_J1900_ghosty-phpto.sh

backup_J1900_ghosty-phpto.sh 內容:

#!/bin/sh
LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=en_US.utf8
#
srcRoot1=/volume1
srcRoot2=/volume2
srcRoot3=/volume3
tarRoot1=/volumeUSB1/usbshare
tarRoot2=/volume3/Temp
exclude='#recycle'

rsync -avh $srcRoot1/homes/ghosty/photo/* --password-file ~/rsyncd.secrets ghosty@192.168.11.202::ghosty/ghosty/photo




排程測試:
啟動排程第一次備份, 到 Server 端檢查資料是否已經被複製過去



video備份:
步驟與個人相簿相同, 但是用 synology 模組登入 server, 以下是backup_J1900_ghosty-phpto.sh 內容:

#!/bin/sh
LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=en_US.utf8
#
srcRoot1=/volume1
srcRoot2=/volume2
srcRoot3=/volume3
tarRoot1=/volumeUSB1/usbshare
tarRoot2=/volume3/Temp
exclude='#recycle'

rsync -avh $srcRoot1/video/* --password-file ~/rsyncd.secrets synology@192.168.11.202::synology/video






參考資料:
[1] "rsync server在linux(fedora&ubuntu)下的安裝與設定", https://kennyp.pixnet.net/blog/post/18303839
[2] "Linux – Rsync Daemon", http://benjr.tw/99075
[3] "rsync",  Synology DSM documents, https://www.synology.com/zh-tw/knowledgebase/DSM/help/DSM/AdminCenter/file_rsync



沒有留言:

張貼留言