> 使用rsync從伺服器同步資料,這裡只說如何單向同步
首先安裝rsync
# 伺服器端配置
伺服器使用 `xinetd` 來充當`rsync`的精靈,沒有的話就安裝
> xinetd專門監聽某個設定的連接埠,然後fork出配置好的連接埠對應的服務程式,再繼續監聽
## 1. 配置rsync的xinetd設定檔:
# nano /etc/xinetd.d/rsync
service rsync
{
disable= no
flags= IPv4
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
## 2.配置rsync自動啟動
# chkconfig rsync on
## 3.配置rsync
# nano /etc/rsyncd.conf
uid=root #運行RSYNC守護進程的使用者
gid=root #運行RSYNC守護進程的組
use chroot=no #不使用chroot
max connections=0 #最大串連數,0不限制
strict modes=yes #是否對密碼檔案進行許可權檢查,yes的話,其他使用者都不能訪問密碼檔案
prot=873 #監聽連接埠
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
#備份模組
[backup]
path=/opt/backup
comment=backup files
auth users=backupuser #允許訪問的使用者,必須是密碼檔案中的
uid=root
gid=root
secrets file=/etc/rsyncd.secret # 密碼檔案
read only=no
list=no
## 4.確認一下`/etc/services`中的rsync連接埠號碼是否和它設定檔中的一樣
# less /etc/services
...
rsync 873/tcp # rsync
rsync 873/udp # rsync
....
## 5.配置密碼檔案
# nano /etc/rsyncd.secret
# 格式為使用者名稱:密碼
backupuser:passwd
改變密碼檔案許可權
# chmod 400 /etc/rsyncd.secret
## 6.啟用`xinetd`
# /etc/init.d/xinetd restart
然後檢查一下看是否正常啟動:
# lsof -i :873
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
xinetd 4396 root 5u IPv4 633387 TCP *:rsync (LISTEN)
# 用戶端配置
用戶端只需要安裝有`rsync`即可
## 1.配置密碼檔案
# nano /etc/rsyncd.secret
# 只要求輸入密碼
passwd
設定好許可權
# chmod 600 /etc/rsyncd.secret
## 2.從伺服器同步
# rsync -avz --password-file=/etc/rsyncd.secret backupuser@192.168.1.2::backupuser /opt/backup/
# 小結
可以在用戶端把同步指令碼放到corntab裡來定時同步資料
## 常用的全域選項
**motd file**:設定歡迎訊息
**pid file**:該選項告訴daemon把它的進程ID寫入指定檔案。如果檔案已經存在,daemon會中止運行,而不是覆蓋原檔案。
**port**:設定daemon運行監聽的連接埠。如果daemon是由inetd運行,該選項將被忽略;如果命令列中已經指定--port,該選項將被取代。
**address**:設定rsync daemon運行時監聽的地址。同上,如果daemon由inetd運行或命令列中已經指定了--port,該選項將被忽略或取代。
## 模組參數
**path**:設定該模組的目錄位置
**use chroot**:指定是否使用chroot,值為yes或no,我推薦no
**max connections**:該參數設定了daemon允許每個client發起的最大串連數。超過最大串連數,client會收到警告資訊,值為0表示不限制,值為負數表示禁用該模組
**lock file**:該參數用來支援max connection,它指定一個檔案來記錄client的請求,以確保client的請求不會突破最大串連數
**log file**:設定該模組的log檔案的位置,如果此參數未設定,或rsync daemon讀取指定檔案失敗,rsync會使用syslog記錄日誌;如果此參數只在每個模組中設定,而未在全域中設定,則全域日誌將只記錄授權失敗或設定檔錯誤的訊息
**read only**:設定是否允許用戶端上傳檔案,預設為yes,不允許上傳檔案
**write only**:設定是否允許用戶端下載檔案,預設為no,允許下載檔案(有點拗口)
**list**:設定該模組是否允許被列出,有點類似於samba的browseable,預設為yes,我們可以把它設定為no,來建立一個隱藏模組
**uid**:當rsync daemon以root使用者運行時,此參數指定了,向該模組傳輸檔案,或從該模組傳輸檔案時的使用者身份(使用者名稱或使用者ID),預設為-2,即nobody使用者
**gid**:意義類似於uid,預設為-2,即nobody組
**incoming chmod**:這個參數允許你指定多個以逗號分隔的許可權字元,這些許可權會影響所有daemon收到的檔案。這些許可權會在其它所有許可權之後生效,這意味著,如果用戶端沒有指定--perms,它們會覆蓋掉目標預設和(以及或)已經存在的許可權。
**auth users**:這個參數指定了允許訪問該模組的使用者列表,列表中的使用者名稱以逗號和空格分隔。指定使用者可以不必真實存在於本地系統,使用者名稱中也可以包含shell萬用字元。純文字的使用者名稱和密碼儲存在由”secrets file”參數指定的檔案中。
**secrets file**:該參數指定一個密碼檔案,用於該模組的授權驗證。只有當指定了”auth users”參數時,這個檔案才會被考慮。密碼可以包含任何字元,最好不要超過8個字元。該參數沒有預設值,你必須手動建立一個密碼檔案,而且該檔案不應該被其它使用者訪問。
**strict modes**:該參數決定了是否對密碼檔案進行許可權檢查。如果值為yes,除了運行rsync daemon的使用者外,其它使用者均不能訪問該檔案。預設值為yes。
**fake super**:如果該模組設定成fake super = yes,跟在命令列中指定了--fake-super效果一樣。它不需要daemon以root運行,就可以隱藏檔的完整屬性。
**hosts allow**:簡單的說,該參數指定了允許訪問該模組的用戶端名稱或IP。可以指定一個具體的IP,或配合掩碼指定一個IP段。當hosts allow和hosts deny同時指定的時候,先檢查hosts allow,匹配的用戶端將被允許訪問該模組;然後檢查hosts deny,匹配的用戶端將被拒絕;既不匹配hosts allow又不匹配hosts deny的用戶端將被允許訪問。
**hosts deny**:該參數指定的用戶端均不允許訪問該模組。
**ignore errors**:如果該參數被指定,在進行傳輸中的刪除操作時,rsync將忽略掉daemon的I/O錯誤。通常情況下,如果發生任何I/O錯誤,rsync將忽略掉--delete操作,以防止由於臨時資源短缺或其它I/O錯誤而導致的災難性(檔案)丟失。
**timeout**:rsync的逾時設定,防止用戶端的死串連,單位為秒。預設值為0,意味著沒有逾時定義。
**dont compress**:此選項允許指定一些基於萬用字元模式的檔案名稱,當從daemon拉檔案時,這些檔案將不會被壓縮。選項接受一個以空格分隔的,大小寫敏感的萬用字元模式列表。類似於命令列中的--skip-compress=LIST,並且會覆蓋命令中的參數。
**filter**:該參數接受一個由空格分開的daemon過濾規則列表,每個模組只接受一個filter參數,所以要把所有規則寫入一個filter參數中。可以使用正常文法把一個或多個merge-file指定成一條規則。
**exclude**:該參數接收一個以空格分隔的daemon排除規則的列表,像用戶端的--exclude選項一樣,它使用”-“或”+”來指明排除或包含。一個模組中只能有一個exclude參數。
**include**:該參數可以覆蓋掉exclude的效果。一個模組中只能有一個include參數。
**exclude from**:該參數指定了一個daemon上的檔案,用來包含daemon的排除規則,每行一條(規則)。每個模組中只能有一個exclude from參數,如果有多個exclude-from檔案,可以在filter參數中把它們看成成一個merge file。
**include from**:類似於exclude from。
## rsync 命令參數
**-v**, --verbose 詳細模式輸出
**-q**, --quiet 精簡輸出模式
**-c**, --checksum 開啟校正開關,強制對檔案傳輸進行校正
**-a**, --archive 歸檔模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性,等於-rlptgoD
**-r**, --recursive 對子目錄以遞迴模式處理
**-R**, --relative 使用相對路徑資訊
**-b**, --backup 建立備份,也就是對於目的已經存在有同樣的檔案名稱時,將老的檔案重新命名為~filename。可以使用--suffix選項來指定不同的備份檔案首碼。
**--backup-dir** 將備份檔案(如~filename)存放在在目錄下。
**-suffix=SUFFIX** 定義備份檔案首碼
**-u**, --update 僅僅進行更新,也就是跳過所有已經存在於DST,並且檔案時間晚於要備份的檔案。(不覆蓋更新的檔案)
**-l**, --links 保留軟鏈結
**-L**, --copy-links 想對待常規檔案一樣處理軟鏈結
**--copy-unsafe-links** 僅僅拷貝指向SRC路徑分類樹以外的鏈結
**--safe-links** 忽略指向SRC路徑分類樹以外的鏈結
**-H**, --hard-links 保留硬鏈結
**-p**, --perms 保持檔案許可權
**-o**, --owner 保持檔案屬主資訊
**-g**, --group 保持檔案屬組資訊
**-D**, --devices 保持裝置檔案資訊
**-t**, --times 保持檔案時間資訊
**-S**, --sparse 對疏鬆檔案進行特殊處理以節省DST的空間
**-n**, --dry-run現實哪些檔案將被傳輸
**-W**, --whole-file 拷貝檔案,不進行增量檢測
**-x**, --one-file-system 不要跨越檔案系統邊界
**-B**, --block-size=SIZE 檢驗演算法使用的塊尺寸,預設是700位元組
**-e**, --rsh=COMMAND 指定使用rsh、ssh方式進行資料同步
**--rsync-path=PATH** 指定遠程伺服器上的rsync命令所在路徑資訊
**-C**, --cvs-exclude 使用和CVS一樣的方法自動忽略檔案,用來排除那些不希望傳輸的檔案
**--existing** 僅僅更新那些已經存在於DST的檔案,而不備份那些新建立的檔案
**--delete** 刪除那些DST中SRC沒有的檔案
**--delete-excluded** 同樣刪除接收端那些被該選項指定排除的檔案
**--delete-after** 傳輸結束以後再刪除
**--ignore-errors** 及時出現IO錯誤也進行刪除
**--max-delete=NUM** 最多刪除NUM個檔案
**--partial** 保留那些因故沒有完全傳輸的檔案,以是加快隨後的再次傳輸
**--force** 強制移除目錄,即使不為空白
**--numeric-ids** 不將數位使用者和組ID匹配為使用者名稱和組名
**--timeout=TIME** IP逾時時間,單位為秒
**-I**, --ignore-times 不跳過那些有同樣的時間和長度的檔案
**--size-only** 當決定是否要備份檔案時,僅僅察看檔案大小而不考慮檔案時間
**--modify-window=NUM** 決定檔案是否時間相同時使用的時間戳記視窗,預設為0
**-T** --temp-dir=DIR 在DIR中建立臨時檔案
**--compare-dest=DIR** 同樣比較DIR中的檔案來決定是否需要備份
**-P** 等同於 --partial
**--progress** 顯示備份過程
**-z**, --compress 對備份的檔案在傳輸時進行壓縮處理
**--exclude=PATTERN** 指定排除不需要傳輸的檔案模式
**--include=PATTERN** 指定不排除而需要傳輸的檔案模式
**--exclude-from=FILE** 排除FILE中指定模式的檔案
**--include-from=FILE** 不排除FILE指定模式比對的檔案
**--version** 列印版本資訊
**--address** 綁定到特定的地址
**--config=FILE** 指定其他的設定檔,不使用預設的rsyncd.conf檔案
**--port=PORT** 指定其他的rsync服務連接埠
**--blocking-io** 對遠程shell使用阻塞IO
**-stats** 給出某些檔案的傳輸狀態
**--progress** 在傳輸時現實傳輸過程
**--log-format=formAT** 指定記錄檔格式
**--password-file=FILE** 從FILE中得到密碼
**--bwlimit=KBPS** 限制I/O頻寬,KBytes per second
**-h**, --help 顯示協助資訊