剛剛看到一個老牌的ECVPS跑路了,在這里再說一下再可靠的服務(wù)商也要做好留一手的準(zhǔn)備,誰還沒可能有個小災(zāi)小難,做好備份,多處備份,你手里有備份才是王道。作為站長或者運維,在服務(wù)器上從這臺同步到另外一臺是很頻繁的操作,之前我們介紹過用scp傳輸文件或目錄,但是不能判斷文件是否更改,是否有文件增刪,每次都是覆蓋,會浪費掉很多時間。今天VPS偵探推薦的是另外一個利器rsync,全稱remote synchronize。它的特性如下:安裝方便、可以鏡像保存整個目錄樹和文件系統(tǒng)、可以容易的保持原來文件的權(quán)限、時間、軟硬鏈接等等、文件傳輸效率高、可以使用ssh等方式來傳輸文件也可以通過直接的socket連接等。
安裝rsync
CentOS/Fedora/RHEL: yum install rsync
Debian/Ubuntu: apt-get install rsync
rsync使用教程
rsync有兩種工作方式:SSH和daemon。
- SSH方式是使用系統(tǒng)上的用戶通過SSH進(jìn)行同步操作。
- daemon方式是rsync服務(wù)器會開一個873端口,等待客戶端去連接,連接是進(jìn)行驗證,通過后進(jìn)行同步。
一、SSH模式下進(jìn)行同步操作
rsync -options SRC DEST
SRC代表源目錄,DEST代表目標(biāo)目錄,當(dāng)通過ssh鏈接時, 有時需要指定ssh端口, 請使用這個方式:rsync -options -e "ssh -p 10000" SRC DEST
下面舉例說明一下常用到的場景:
1.1:本地拷貝目錄,將/home/wwwroot/vpser/拷貝到/data/wwwroot/vpser/
rsync -avu /home/wwwroot/vpser/ /data/wwwroot/vpser/
1.2:將本地目錄拷貝到遠(yuǎn)程服務(wù)器
rsync -avu --progress --delete /home/wwwroot/vpser.net/ root@1.2.3.4:/home/wwwroot/vpser.net/
如果改了SSH端口,需要加-e "ssh -p 你的SSH端口",如果不想顯示具體傳輸過程可以去掉P參數(shù),如果需要壓縮傳輸可以加z參數(shù)。
--delete 參數(shù),這樣當(dāng)本地刪除的文件,遠(yuǎn)程端也會刪除,保持完整的一致。
1.3:將遠(yuǎn)程服務(wù)器目錄拷貝到本地
rsync -avu --progress --delete root@1.2.3.4:/home/wwwroot/vpser.net/ /home/wwwroot/vpser.net/
二、daemon模式的配置
rsync daemon模式是以rsync服務(wù)器形式運行,首先我們需要創(chuàng)建rsync服務(wù)器的配置文件,配置文件:/etc/rsyncd.conf 默認(rèn)此文件可能不存在,需要自己創(chuàng)建,配置信息如下:
port = 873
uid = root
gid = root
use chroot = no //使用chroot到文件系統(tǒng)中的目錄中
max connections = 100 //最大并發(fā)連接數(shù)
#motd file = /etc/rsyncd.motd //定義服務(wù)器信息的,自己寫 rsyncd.motd 文件內(nèi)容
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
timeout = 300
[vpser] //自定義模塊
path = /home/wwwroot/vpser.net/ //用來指定要備份的目錄
ignore errors //可以忽略一些IO錯誤
read only = no //設(shè)置no,客戶端可以上傳文件,yes是只讀
write only = no //no為客戶端可以下載,yes 不能下載
hosts allow = 192.168.2.0/24 //允許連接的IP,強(qiáng)烈建議加上你允許的IP,多個IP逗號隔開
list = yes //客戶請求時,使用模塊列表
auth users = vpser //連接用戶名,是虛擬用戶與linux系統(tǒng)用戶無關(guān),多個用戶名逗號隔開
secrets file = /etc/rsyncd.secrets //驗證密碼文件,文件格式為:用戶名:密碼
寫入配置時請將上面的注釋信息去掉,并調(diào)整里面的相關(guān)參數(shù)。我們也提供了一個模板文件http://soft.vpser.net/sync/rsync/rsyncd.conf 可自己下載放到/etc/下并修改相關(guān)參數(shù)。
/etc/rsyncd.secrets 文件權(quán)限必須是600,創(chuàng)建好該文件后可以執(zhí)行: chmod 600 /etc/rsyncd.secrets
注意:默認(rèn)rsync服務(wù)器并不是自動啟動的!
Debian/Ubuntu上是帶自啟動腳本的,修改 /etc/default/rsync ,將里面的RSYNC_ENABLE=false 改成 RSYNC_ENABLE=true 保存就設(shè)成開機(jī)自啟動了。
CentOS上啟動腳本都是不帶的,執(zhí)行:wget http://soft.vpser.net/sync/rsync/init.d.rsync -O /etc/init.d/rsync && chmod +x /etc/init.d/rsync && chkconfig rsync on 如果不報錯的話就會開機(jī)自啟動了。
完成上面設(shè)置后,執(zhí)行:/etc/init.d/rsync start 即可啟動。
測試rsync服務(wù)器:rsync -avuP vpser@192.227.165.35::vpser /home/wwwroot/vpser.net/ 進(jìn)行連接測試,注:@前的vpser為自定義模塊里設(shè)置的用戶名,::后面的vpser為你自定義模塊的名稱。
rsync使用小技巧:
1、可以用rsync快速刪除大量文件:
建立一個空的文件夾: mkdir /root/blank
用rsync刪除目標(biāo)目錄:rsync --delete-before -a -H -v --progress --stats /root/blank/ /home/wwwroot/cache/
這樣我們要刪除的 cache目錄就會被清空了,刪除的速 度會非常快。
2、如果開啟了iptables防火墻,請將873端口加入防火墻允許規(guī)則。
iptables -I INPUT -p tcp --dport 873 -j ACCEPT
iptables -I OUTPUT -p tcp --sport 873 -j ACCEPT
3、用戶可以自己根據(jù)自己的需求選擇SSH或daemon模式
配合crontab定時執(zhí)行任務(wù) 自動完成同步、備份等工作。
rsync 常用參數(shù)的具體解釋如下:
-v, --verbose 詳細(xì)模式輸出
-q, --quiet 精簡輸出模式
-c, --checksum 打開校驗開關(guān),強(qiáng)制對文件傳輸進(jìn)行校驗
-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等于-rlptgoD
-r, --recursive 對子目錄以遞歸模式處理
-b, --backup 創(chuàng)建備份,也就是對于目的已經(jīng)存在有同樣的文件名時,將老的文件重新命名為~filename?梢允褂--suffix選項來指定不同的備份文件前綴。
-suffix=SUFFIX 定義備份文件前綴
-u, --update 僅僅進(jìn)行更新,也就是跳過所有已經(jīng)存在于DST,并且文件時間晚于要備份的文件。(不覆蓋更新的文件)
-l, --links 保留軟鏈結(jié)
-p, --perms 保持文件權(quán)限
-o, --owner 保持文件屬主信息
-g, --group 保持文件屬組信息
-t, --times 保持文件時間信息
-e, --rsh=COMMAND 指定使用rsh、ssh方式進(jìn)行數(shù)據(jù)同步
--delete 刪除那些DST中SRC沒有的文件
--delete-excluded 同樣刪除接收端那些被該選項指定排除的文件
--delete-after 傳輸結(jié)束以后再刪除
--ignore-errors 及時出現(xiàn)IO錯誤也進(jìn)行刪除
--force 強(qiáng)制刪除目錄,即使不為空
--timeout=TIME IP超時時間,單位為秒
--progress 顯示備份過程
-z, --compress 對備份的文件在傳輸時進(jìn)行壓縮處理
--exclude=PATTERN 指定排除不需要傳輸?shù)奈募J?br />
--include=PATTERN 指定不排除而需要傳輸?shù)奈募J?br />
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件