Login

Navigation

This articles is published 417 days ago and last updated 388 days ago, some information may be out of date.

Linux 的命令基本用法 - rsync

Rsync.png

簡言:
rsync 是開源程式,提供快速的增量或同步備份,大部份的Linux發行版已經內建。

功能特性:
  • 可以更新整個目錄樹和文件系統
  • 可選保留符號連結、硬連結、文檔的擁有權、權限、設備和時間
  • 無需特權安裝
  • 內部管襯減少多個文件的延遲
  • 可以使用rsh,ssh或sockets傳輸
  • 支援匿名同步,這是理想的鏡像(*這個不太了解)
  • 首次複製檔案時,會完整的複製,往後再次複製時,就會先以"rsync algorithm" 算法檢示新舊檔的差異,從而只傳送有變動的部份


目錄內容:


基礎用法:

返回目錄

rsync -參數 來源 目的地

rsync -option source destination
-option(參數):
  • -v:verbose 模式,輸出比較詳細的訊息。
  • -r:遞迴(recursive)備份所有子目錄下的目錄與檔案。
  • -a:封裝備份模式,相當於 -rlptgoD,遞迴備份所有子目錄下的目錄與檔案,保留連結檔、檔案的擁有者、群組、權限以及時間戳記。
  • -z:啟用壓縮。
  • -h:將數字以比較容易閱讀的格式輸出。
  • -e:遠端登入後指定要使用指令

額外參數:

  • --progress:顯示傳輸進度、速度、剩餘時間
  • --delete:刪除來源端沒有的檔案
  • --whole-file:強制同步整個檔案
  • --min-size=數字K/M:限制備份檔案大小下限,K為kb,M為MB
  • --max-size=數字K/M:限制備份檔案大小上限,K為kb,M為MB
  • --remove-source-files:檔案同步完成後,自動刪除來源檔案
  • --exclude '特定檔案名稱或字元' :同步與備份時排除特定檔案
  • --include '特定檔案名稱或字元' :限定同步與備份特定檔案
  • --bwlimit=<限制頻寬>:限制頻寬使用

基礎範例:

返回目錄

rsync -avh /home/user/data/ /mnt/backup
將目錄/home/user/data的所有內容複製到目錄/mnt/backup內,

參數-avh是以封裝模式及可視化輸出


Rsync 伺服器端的簡單設定:
除了本機做資料備份之外,Rsync的優勢是本機和遠端電腦之間的資料備份,這就需要設定Rsync伺服器(即Rsync Daemon)。好讓其他客戶端電腦(Client)向伺服器(Server)主動傳輸資料,做到PUSH推送(上載)或PULL拉取(下載)的操作。

以OpenWrt設定Rsync Daemon

返回目錄

安裝

opkg update && opkg install rsyncd

Rsync Daemon,有兩個檔案需要設定:
/etc/rsyncd.conf 為rsyncd的配置文件
/etc/rsyncd.secrets 為rsyncd的密碼檔

Rsyncd的配置文件/etc/rsyncd.conf

# /etc/rsyncd.conf
# Minimal configuration for rsync daemon

# Next line required for init script
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
use chroot = no
uid = nobody
gid = nogroup
read only = no

[Tools]
        path = /mnt/Tools
        comment = Shared Tools Folder over Rsync
        read only = no
        auth users = user01
        secrets file = /etc/rsyncd.secrets


[Media]
        path = /mnt/Media
        comment = Shared Media Folder over Rsync
        read only = no
        auth users = user02
        secrets file = /etc/rsyncd.secrets
在伺服器配置文件分別設定ToolsMedia分享目錄,以及只允許使用者user01存取Tools目錄及user02存取Media目錄。

Rsyncd的密碼檔/etc/rsyncd.secrets 配置

user01:[email protected]
user02:[email protected]
使用者user01使用的密碼是[email protected]

使用者user02使用的密碼是[email protected]

賦予密碼檔600權限保證安全性

chmod 600 /etc/rsyncd.secrets
如果沒有賦予密碼檔600權限,就會有@ERROR: auth failed on module錯誤提示。

重新啟動服務使之生效:

/etc/init.d/rsyncd restart

或者

reboot

OpenMediaVault (OMV)的Rsync Daemon設定:

返回目錄

2021-06-17_112425.png

啟用Rsync伺服器服務

2021-06-17_112437.png

2021-06-17_113024.png

新增Backup分享目錄

2021-06-17_113125.png

新增使用者user01及設定密碼QA&Vj*mj"UB3okb

2021-06-17_113254.png

可以設定多個分享目錄及使用者

Synology (DSM)設定Rsync Daemon:

返回目錄

2021-06-15_144248.png

開啟Rsync服務

2021-06-15_144330.png

設定Rsync帳號

2021-06-15_154642.png

查看Rsync的分享目錄


Rsync 客戶端安裝及使用:

OpenWrt的Rsync客戶端設定:

返回目錄

檢查是否已經安裝

opkg list-installed | grep rsync
rsync - 3.1.3-2
rsyncd - 3.1.3-2

如未安裝可輸入以下命令行

opkg update && opkg install rsync
交互模式(手動輸入密碼實現數據傳輸)
rsync -avz /mnt/Tools/ [email protected]::Tools/
## 會提示輸入密碼
[email protected]
免手動輸入密碼實現數據傳輸

添加上環境變量

export [email protected]
rsync -avz /mnt/Tools/ [email protected]::Tools/
## 不會再提示輸入密碼

或者
創建存放Rsync密碼文件/etc/rsync.passwd

[email protected]

若有多組帳號和密碼,需要分別創建不同的密碼文件,如: /etc/rsync.passwd02

ll /etc/rsync.passwd*
-rw-------    1 root     root            11 Jun 18 16:16 /etc/rsync.passwd
-rw-------    1 root     root            11 Jun 18 16:16 /etc/rsync.passwd02

賦予密碼本600權限保證安全性

chmod 600 /etc/rsync.passwd

將本機的資料推送PUSH(上載)到遠端伺服器

rsync -avz /mnt/Tools/ [email protected]::Tools/ --password-file=/etc/rsync.passwd
將本機/mnt/Tools/內的資料備份到遠端(IP: 10.1.1.254)的Tools分享目錄

透過user01及指定密碼存取文檔/etc/rsync.passwd

將遠端伺服器的資料拉取PULL(下載)到本機

rsync -avz [email protected]::Media/ /mnt/Media/ --password-file=/etc/rsync.passwd
將遠端(IP: 10.1.1.254)的Media分享目錄下載到本機/mnt/Media/目錄內

透過user02及指定密碼存取文檔/etc/rsync.passwd

OMV的Rsync客戶端設定:

返回目錄

image-20210617124732339.png

將遠端(IP: 10.10.1.252)的Tools分享目錄拉取PULL(下載)到本機Tools目錄內

Windows的Rsync客戶端設定:

返回目錄

2021-06-15_143958.png

choco install rsync -y
透過chocolaty軟件包管理安裝windows版的cwRsync

軟件包 (Chocolatey) 在 Windows 安裝軟件

創建存放Rsync密碼文件D:\rsync.pass

[email protected]

將本機的資料推送PUSH(上載)到遠端伺服器

rsync -avhz --progress --update --chmod=ugo=rwX --password-file=/cygdrive/d/rsync.pass "/cygdrive/d/Tools" "[email protected]::NetBackup"
將本機D:\Tools內的資料備份到遠端(IP: 10.1.1.50)的NetBackup分享目錄

透過admin及指定密碼存取文檔D:\rsync.pass

在這個windows範例中,/cygdrive/d 對應 Windows 上的 D: 磁碟機

Linux的排程備份設定:

建立備份腳本:

cat >> /root/rsync_bak.sh << EOF
#!/bin/bash

## Rsync Rsync_Server's folder to local
export RSYNC_PASSWORD="[email protected]"
rsync -avzuh --delete --progress [email protected]_Server::Rsync/ /mnt/sda/Backup/Rsync/ --log-file=/mnt/sda/log/rsync_$(date -I).txt

EOF
root身份登入

export [email protected] # 添加上環境變量(用於免手動輸入密碼)

Rsync_Server #是遠端伺服的IP

::Rsync #是遠端伺服的分享目錄

--log-file= #日誌存放

加入到crontab排程

crontab -e
0 1 * * * sh /root/rsync_bak.sh 2>&1
每天1時執行腳本

結語:
這是我在多個平台之間實踐過的rsync應用,如果在同一網段內的電腦之間互傳可用密碼的型式,但如果和外網的電腦(如公司電腦)同步或備份資料,建議首選SSH。

另外透過Linuxcrontab 或者 WindowsTasks(工作排程器)可以很方便地定期自動同步資料。


參考:

rsync (samba.org)

Linux 使用 rsync 遠端檔案同步與備份工具教學與範例

rsyncd in openWRT | #Villa's syslog (villasyslog.net)