rsync 應用

July 28, 2019

Description

我是用 NAS 存放備份檔。方式有 2 種

  1. rsync 來建立鏡像資料夾。您需先用 CIFS 或 NFS 來將 Synology NAS 上的資料夾掛載至 Linux 伺服器。
  2. Linux 執行指令,無需掛載資料夾。

其中第 2 種方式是我實做出來的方式。

rsync

rsync 是一種異地備份軟體,與一般備份軟體不同的是,rsync 採用增量備份的方式,此類備份方式在每次備份前會先比較兩邊資料的差異,然後僅將差異的資料備份過去,而非備份全部的資料。

rsync 用於遠程複製和同步文件和目錄,以及在 Linux/Unix 系統中本地複製和同步。借助 rsync 命令,您可以跨目錄,跨硬碟和網路遠端和本地複製和同步數據,在兩台 Linux 計算機之間執行數據備份和鏡像。

rsync 的運作方式分為以下兩種:

rsync 優點和功能

rsynv 參數

rsync 啟用

$ sudo vi /etc/default/rsync
RSYNC_ENABLE=true #預設 false

實作

ubuntu to ubuntu

預設上無須配置 rsync 設定檔即可傳輸(範例1、2)

  1. 複製目錄/檔案,從 128 傳至 132(IP)
$ rsync -zvh test.csv.zip lab702@192.168.222.132:/tmp
The authenticity of host '192.168.222.132 (192.168.222.132)' can't be established.
ECDSA key fingerprint is SHA256:TmidBei2XVw7f2lqHuSrjfFHsFRz6riglpwY/tKXlXc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.222.132' (ECDSA) to the list of known hosts.
lab702@192.168.222.132's password:
skipping directory .
test.csv.zip

sent 675.07M bytes  received 35 bytes  8.49M bytes/sec
total size is 674.68M  speedup is 1.00
  1. 複製目錄/檔案,從 132 傳至 128(IP)
lab702@elk:~$ ls /tmp/
dupl-usagereport-4684-20190214012833.json  HttpServer  systemd-private-fdf1de5804eb4744968fea5bf13e6734-systemd-timesyncd.service-6nds2r  vmware-root
lab702@elk:~$ rsync -azvh lab702@192.168.222.132:/tmp/test.csv.zip /tmp
lab702@192.168.222.132's password:
receiving incremental file list
test.csv.zip

sent 43 bytes  received 675.07M bytes  16.67M bytes/sec
total size is 674.68M  speedup is 1.00
lab702@elk:~$ ls /tmp/
dupl-usagereport-4684-20190214012833.json  HttpServer  systemd-private-fdf1de5804eb4744968fea5bf13e6734-systemd-timesyncd.service-6nds2r  test.csv.zip  vmware-root
  1. 無密碼 因為上述的做法需要輸入 server 端的密碼。以下是透過配置檔來達到認證不用輸入密碼,而進行傳輸。
Server 設置
[rsync_test]
path = /tmp # 存放備份資料的目錄
auth users =  lab702 # 認證帳號
uid = root # 用來啟動 rsync server 的 uid
gid = root # 用來啟動 rsync server 的 gid
read only = false # 是否設定為唯讀 
write_only = false # 是否設定為可寫
log file = /var/log/rsync.log
hosts allow = 192.168.222.0/24 # 允許使用 rsync連入的ip
#hosts deny = * # 不允許連入的 ip,* 表示全拒絕
secrets file = /etc/rsyncd.secrets # 認證檔存放路徑
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz # 不對這些副檔名的檔案做壓縮

設定認證,Serve 認證 Client

$ sudo vi /etc/rsyncd.secrets
account:password # 帳號:密碼

權限設定,認證檔案的權限設為 600,並將擁有者設為 root

$ sudo chmod 600 /etc/rsyncd.secrets 
$ sudo chown root:root /etc/rsyncd.secrets

client 設定來源端的密碼認證檔,權限也如上

$ sudo vi /etc/rsyncd.pwd # server 所設定的密碼

完成後,傳輸資料時則不必輸入 Server 端密碼

$ sudo rsync -avzrpog --password-file=/etc/rsyncd.pwd a.txt lab702@192.168.222.132::rsync_test

ubuntu rsync to NAS

這部分是我因為有管理學校的小系統,這系統都有做定期備份,但學長們都是用將資料拉到 USB 做備份,因此我接手的時候想到用 rsync 備份至 NAS,這樣減少了定期拿 USB 手動拿資料的時間。 NAS 需要設定,但 NAS 部分我不是負責人。這裡就不描述。

將 ubuntu 要備份資料遠端至 NAS 上
rsync -av  --progress --remove-source-files  /home/misc/backup/NFS [NASAccount]@[NAS-Domain]::[資料夾名稱]
$ sudo vi /etc/rsyncd.pwd
$ sudo chmod 600 /etc/rsyncd.pw
$ sudo chown root:root /etc/rsyncd.pwd
$ sudo rsync -av  --progress --remove-source-files --password-file=/etc/rsyncd.pwd   a.txt  [NASAccount]@[NAS-Domain]::[資料夾名稱]

錯誤解決

服務端設置 read only = false
$ rsync -av  --progress --remove-source-files  test.csv.zip  [NASAccount]@[NAS-Domain]::[資料夾名稱]
Password:
sending incremental file list
test.csv.zip
         32,768   0%    0.00kB/s    0:00:00
rsync: read error: Connection reset by peer (104)
rsync error: error in socket IO (code 10) at io.c(785) [sender=3.1.1]
調整 NAS 給予的檔案大小限制
rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Connection reset by peer (104)
rsync: connection unexpectedly closed (28 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
硬碟磁區受損

調整一下 NAS

$ sudo rsync -av  --progress --remove-source-files /home/misc/backup/NFS [NASAccount]@[NAS-Domain]::[資料夾名稱]
[sudo] password for itachi:
Password:
sending incremental file list
NFS/jihmsp/
NFS/jihmsp/2018-10-20-05-00-02_jihmsp.tar.gz
  1330249728  78%   11.16MB/s    0:00:32
rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Connection reset by peer (104)
rsync: write failed on "NFS/jihmsp/2018-10-20-05-00-02_jihmsp.tar.gz" (in AICT_BIT_Backup): Disk quota exceeded (122)
rsync error: Quota exceeded (code 54) at receiver.c(358) [receiver=3.0.9]
rsync: connection unexpectedly closed (399 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]

權限 600 和 gid、uid 問題

權限 600,uid、gid 都是 root,這部分要看 Server 配置檔的設定

ERROR: password file must not be other-accessible
rsync error: syntax or usage error (code 1) at authenticate.c(175) [sender=3.0.9]

參考資料

How_to_back_up_Linux_computer_to_Synology_NAS

rsync commands

網管人

weithenn