1. rsync的主要作用
rsync命令是一個遠程數據同步工具,可通過LAN/WAN快速同步多台主機間的文件。rsync使用所謂的“rsync算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。
但是在使用就會發現rsync有很多種命令格式,往往會造成誤解。
測試環境Ubuntu 1804。
2. rsync的命令格式和工作模式
2.1. 語法
rsync [OPTION]... SRC DEST rsync [OPTION]... SRC [USER@]host:DEST rsync [OPTION]... [USER@]HOST:SRC DEST rsync [OPTION]... [USER@]HOST::SRC DEST rsync [OPTION]... SRC [USER@]HOST::DEST rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
2.2. 工作模式
對應語法,有六種不同的工作模式:
2.2.1. 拷貝本地文件
當SRC和DES路徑信息都不包含有單個冒號":"分隔符時就啟動這種工作模式。如:
rsync -a /data /backup
2.2.2. 使用一個遠程shell程序(如rsh、ssh)來實現將本地機器的內容拷貝到遠程機器
當DST路徑地址包含單個冒號":"分隔符時啟動該模式。如:
rsync -avz *.c foo:src
2.2.3. 使用一個遠程shell程序(如rsh、ssh)來實現將遠程機器的內容拷貝到本地機器
當SRC地址路徑包含單個冒號":"分隔符時啟動該模式。如:
rsync -avz foo:src/bar /data
2.2.4. 從遠程rsync服務器中拷貝文件到本地機
當SRC路徑信息包含"::"分隔符時啟動該模式。如:
rsync -av root@192.168.78.192::www /databack
2.2.5. 從本地機器拷貝文件到遠程rsync服務器中
當DST路徑信息包含"::"分隔符時啟動該模式。如:
rsync -av /databack root@192.168.78.192::www
2.2.6. 列遠程機的文件列表
這類似於rsync傳輸,不過只要在命令中省略掉本地機信息即可。如:
rsync -v rsync://192.168.78.192/www
由上面六種工作模式可以看出,可用通過兩種方式與遠程機器進行同步:
- 使用一個遠程shell,如rsh,ssh;
- 通過遠程機器的rsync服務進行交互;
3. rsync服務器搭建
3.1. 安裝
Ubuntu 1804實際已經默認安裝rsync的,只是不是默認啟動而已,需要修改/etc/default/rsync:
RSYNC_ENABLE=true #false改true
3.2. 增加配置
sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc
配置主要選項與意思:
# sample rsyncd.conf configuration file # GLOBAL OPTIONS #motd file=/etc/motd #登錄歡迎信息 #log file=/var/log/rsyncd #日志文件 # for pid file, do not use /var/run/rsync.pid if # you are going to run rsync out of the init.d script. pid file=/var/run/rsyncd.pid #指定rsync發送日志消息給syslog時的消息級別,常見的消息級別是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默認值是daemon。 #syslog facility=daemon #自定義tcp選項,默認是關閉的 #socket options= #以下是模塊信息,我們可以創建多個模塊 # MODULE OPTIONS [ftp] comment = public archive #模塊描述 path = /var/www/pub #需要同步的路徑 use chroot = yes #默認是yes|true,如果為true,那么在rsync在傳輸文件以前首先chroot到path參數指定的目錄下。這樣做的原因是實現額外的安全防護,但是缺點是需要root權限,並且不能備份指向外部的符號連接指向的目錄文件。 # max connections=10 #最大連接數 lock file = /var/lock/rsyncd #指定支持max connections參數的鎖文件。 # the default for read only is yes... read only = yes #只讀選項 list = yes #客戶請求時可用模塊時是否列出該模塊 uid = nobody #設定該模塊傳輸文件時守護進程應該具有的uid gid = nogroup #設定該模塊傳輸文件時守護進程應具有的gid,此項與uid配合可以確定文件的訪問權限 # exclude = #用來指定多個由空格隔開的多個模式列表,並將其添加到exclude列表中。這等同於在客戶端命令中使用--exclude來指定模式,不過配置文件中指定的exlude模式不會傳遞給客戶端,而僅僅應用於服務器。一個模塊只能指定一個exlude選項,但是可以在模式前面使用"-"和"+"來指定是exclude還是include #這個我的理解是排除目錄中不需同步的文件 # exclude from = #可以指定一個包含exclude模式定義的文件名 # include = #與exclude相似 # include from = #可以指定一個包含include模式定義的文件名 # auth users = #該選項指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模塊。這里的用戶和系統用戶沒有任何關系。如果"auth users"被設置,那么客戶端發出對該模塊的連接請求以后會被rsync請求challenged進行驗證身份這里使用的 challenge/response認證協議。用戶的名和密碼以明文方式存放在"secrets file"選項指定的文件中。默認情況下無需密碼就可以連接模塊(也就是匿名方式) # secrets file = /etc/rsyncd.secrets #該文件每行包含一個username:password對,以明文方式存儲,只有在auth users被定義時,此選項才生效。同時我們需要將此文件權限設置為0600 strict modes = yes #該選項指定是否監測密碼文件的權限,如果該選項值為true那么密碼文件只能被rsync服務器運行身份的用戶訪問,其他任何用戶不可以訪問該文件。默認值為true # hosts allow = #允許的主機 # hosts deny = #拒絕訪問的主機 ignore errors = no #設定rsync服務器在運行delete操作時是否忽略I/O錯誤 ignore nonreadable = yes #設定rysnc服務器忽略那些沒有訪問文件權限的用戶 transfer logging = no #使rsync服務器使用ftp格式的文件來記錄下載和上載操作在自己單獨的日志中 # log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes. #設定日志格式 timeout = 600 #超時設置(秒) refuse options = checksum dry-run #定義一些不允許客戶對該模塊使用的命令選項列表 dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz #告訴rysnc那些文件在傳輸前不用壓縮,默認已設定壓縮包不再進行壓縮
如果需要指定賬戶密碼或者配置日志,可以參考:Ubuntu下安裝配置rsync 。
3.3. 啟動
根據自己的需求修改配置后,啟動服務:
sudo systemctl start rsync
3.4. 開放防火牆
rsync服務使用的端口是873,如果開了防火牆需要開放:
sudo ufw allow 873
4.參考
(1) rsync命令
(2) Ubuntu下安裝配置rsync
(完)