Linux 的命令基本用法 - rsync
簡言: |
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
在伺服器配置文件分別設定Tools
和Media
分享目錄,以及只允許使用者user01
存取Tools
目錄及user02
存取Media
目錄。
Rsyncd的密碼檔/etc/rsyncd.secrets
配置
user01:P@ssw0rd01
user02:P@ssw0rd02
使用者user01
使用的密碼是P@ssw0rd01
使用者
user02
使用的密碼是P@ssw0rd02
賦予密碼檔600權限保證安全性
chmod 600 /etc/rsyncd.secrets
如果沒有賦予密碼檔600權限,就會有@ERROR: auth failed on module
錯誤提示。
重新啟動服務使之生效:
/etc/init.d/rsyncd restart
或者
reboot
OpenMediaVault (OMV)的Rsync Daemon設定: |
啟用Rsync伺服器服務
新增Backup
分享目錄
新增使用者user01
及設定密碼QA&Vj*mj"UB3okb
可以設定多個分享目錄及使用者
Synology (DSM)設定Rsync Daemon: |
開啟Rsync服務
設定Rsync帳號
查看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/
## 會提示輸入密碼
P@ssw0rd01
免手動輸入密碼實現數據傳輸
添加上環境變量
export RSYNC_PASSWORD=P@ssw0rd01
rsync -avz /mnt/Tools/ [email protected]::Tools/
## 不會再提示輸入密碼
或者
創建存放Rsync密碼文件/etc/rsync.passwd
P@ssw0rd01
若有多組帳號和密碼,需要分別創建不同的密碼文件,如: /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客戶端設定: |
將遠端(IP: 10.10.1.252)的Tools
分享目錄拉取PULL(下載)到本機Tools
目錄內
Windows的Rsync客戶端設定: |
choco install rsync -y
透過chocolaty軟件包管理安裝windows版的cwRsync
創建存放Rsync密碼文件D:\rsync.pass
P@ssw0rd01
將本機的資料推送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="P@ssw0rd01"
rsync -avzuh --delete --progress user01@Rsync_Server::Rsync/ /mnt/sda/Backup/Rsync/ --log-file=/mnt/sda/log/rsync_$(date -I).txt
EOF
以root
身份登入
export RSYNC_PASSWORD=P@ssw0rd01
# 添加上環境變量(用於免手動輸入密碼)
Rsync_Server
#是遠端伺服的IP
::Rsync
#是遠端伺服的分享目錄
--log-file=
#日誌存放
加入到crontab
排程
crontab -e
0 1 * * * sh /root/rsync_bak.sh 2>&1
每天1時執行腳本
結語: |
這是我在多個平台之間實踐過的rsync
應用,如果在同一網段內的電腦之間互傳可用密碼的型式,但如果和外網的電腦(如公司電腦)同步或備份資料,建議首選SSH。另外透過
Linux
的crontab
或者Windows
的Tasks
(工作排程器)可以很方便地定期自動同步資料。
參考: |