在Windows中要檔案同步有非常多的工具可以使用,但要是在Linux環境要實現檔案同步,就需要依靠指令的方式,下面簡單介紹備份到遠端的方式。
STEP 1:安裝rsync套件
# yum install epel–release
# yum install rsync
STEP 2:參數說明
參數 | 參數全名 | 說明 |
-V | –verbose | 詳細模式輸出訊息 |
-q | –quiet | 安靜模式 |
-c | –checksum | 在傳送之前透過 128bit 的 MD4 檢查碼來檢查所有要傳送的檔案 |
-a | –archive | 備份模式,表示以遞迴方式傳輸文件,並保持所有文件屬性,等於 -rlptgoD(沒有 -H) |
-e | 利用ssh指定傳輸Port,例:-e “ssh -p 8888” | |
-r | –recursive | 對子目錄以遞迴模式處理 |
-R | –relative | 使用相對路徑名稱 |
–no-relative | 不使用相對路徑 | |
-b | –backup | 產生備份,也就是對於目的已經存在有同樣的文件名時,將老的文件重新命名為 ~filename。可以使用 –suffix 選項來指定不同的備份文件前綴。 |
–backup-dir=DIR | 將備份文件(如~filename)存放在在目錄下。 | |
–suffix=SUFFIX | 定義備份文件前綴 | |
-u | –update | 僅僅進行更新,也就是略過所有已經存在於目的端,且文件時間比要備份的檔案為新。(不覆蓋較新的文件) |
-K | –keep-dirlinks | 接收方將連結到資料夾的檔案視為資料夾處理 |
-l | –links | 保留符號連結 |
-L | –copy-links | 像對待常規文件一樣處理符號連結 |
–copy-unsafe-links | 僅僅拷貝指向SRC路徑目錄樹以外的連結 | |
–safe-links | 忽略指向來源端路徑目錄樹以外的連結 | |
-H | –hard-links | 保留硬式連結 |
-p | –perms | 保留檔案權限 |
-o | –owner | 保留檔案擁有者資訊(root only) |
-g | –group | 保留檔案所屬群組資訊 |
-D | –devices | 保留設備檔案資訊(root only) |
-t | –times | 保留檔案時間資訊 |
-S | –sparse | 對稀疏檔案進行特殊處理以節省目的端的空間 |
-n | –dry-run | 不實際執行傳送,只顯示將會有的傳輸動作 |
-W | –whole-file | 複製檔案,不進行增量檢測 |
–no-whole-file | 關閉 –whole-file 參數 | |
-x | –one-file-system | 不要跨越檔案系統分界(只在一個檔案系統處理) |
-B | –block-size=SIZE | 強制透過 rsync 程式去比對修復 block-sizeforce,預設是700字節 |
-e | –rsh=COMMAND | 定義所使用的 remote shell |
–rsync-path=PATH | 定義 rsync 在遠端機器存放資料的路徑 | |
–existing | 只比對更新目的端已經存在的檔案,而不備份那些新產生的檔案 | |
–ignore-existing | 忽略目的端已經存在的檔案(也就是不更新) | |
–delete | 刪除傳送端已經不存在,而目的端存在的檔案 | |
–delete-excluded | 除了把傳送端已經不存在,而目的端存在的檔案刪除之外,也刪除 –exclude 參數所包含的檔案 | |
–delete-after rsync | 預設會在檔案傳送前進行相關刪除動作確保接收端有足夠的檔案空間,但可以透過 –delete-after 讓刪除動作在檔案傳送後再行刪除 | |
–max-delete=NUM | 定義 rsync 不要刪除超過 NUM 個檔案 | |
–ignore-errors | 忽略任何錯誤既使是 I/O error 也進行 –delete 刪除動作 | |
–partial | rsync若遇到傳輸過程中斷時,會把那些已經傳輸的檔案刪除。在某種狀況下保留那些部分傳送的檔案是令人高興的。你可以透過 –partial 參數達到這個目的 | |
–partial-dir=DIR | 在 –partial 參數啟動時,你還可以定義 rsync 把那些部分傳送的檔案寫入定義的資料夾,而非直接寫入目的端。需要注意的是,此資料夾不應該被其他使用者可以寫入(如:/tmp) | |
–force | 當目的端資料夾被傳送端非資料夾名稱覆蓋時,強制 rsync 刪除資料夾,即使該資料夾不是空的 | |
–numeric-ids | 不將傳送端檔案的 UID 及 GID 值,與目的端的使用者/群組進行配對。若傳送端並沒有 UID 及 GID 的對應名稱(如:原帳號群組被刪除的遺留檔案),或目的端沒有相對應的帳號/群組,保留數字型態的 UID/GID | |
–timeout=TIMEOUT |
設定 I/O 逾時的時間(秒)。超過這個秒數而沒有資料傳送,rsync 將會結束。預設為 0,也就是沒有定義逾時時間 | |
-I | –ignore-times | 不跳過那些有同樣的時間和長度的文件,可以透過此參數關閉此快速檢查 |
–size-only | 只檢查檔案大小是否改變,不管時間存取點是否改變。通常用在 mirror,且對方時間不太正確時 | |
–modify-window=NUM | 決定文件是否時間相同時使用的時間戳窗口,預設為 0 | |
-T | –temp-dir=DIR | 定義 rsync 在接收端產生暫時性的複製檔案時使用資料夾暫存。預設是直接在接收端資料夾直接產生暫存檔案 |
–compare-dest=DIR | 定義 rsync 在目的端建立資料夾來比對傳送過來的檔案 | |
–link-dest=DIR | 與 –compare-dest 相同,但同時會針對無法改變的檔案建立硬式連結 | |
-P | 等同 –partial –progress 顯示備份過程,只是為了把參數簡單化 | |
-z | –compress | 對備份的檔案在傳輸時進行壓縮處理 |
-C | –cvs-exclude | 排除不希望傳送的檔案(含附檔名)。定義的方式與CVS傳送相同: |
–exclude=PATTERN | 符合 PATTERN(規則表示式)樣式的檔案不進行傳送 | |
–exclude-from=FILE | 和 –exclude 參數相同,不過是把不進行傳送的檔案事先寫入某一檔案,執行時,透過此參數讓 rsync 讀取。(; # 開頭的行列或空白行會被 rsync 忽略) | |
–include=PATTERN | 指定義 rsync 不要排除符合 pattern 樣式的檔案 | |
–include-from=FILE | 和 –include 參數相同,只不過把要包含的檔案寫到某一檔案 | |
–files-from=FILE | 把要傳送的檔案名稱都精確的寫入某一檔案,讓 rsync 讀取 如:rsync -a –files-from=/tmp/foo /usr remote:/backup |
|
-o | –from0 | 定義檔案所要讀取的檔案是null字元結尾 |
–version | 顯示 rsync 版本 | |
–daemon | 定義 rsyn c以 daemon 型態執行 | |
–no-detach | 當以 daemon 型態執行時,不要進行分裂且變成背景程序 | |
–address=ADDRESS | 定義所要連結(bind)的ip位址或是 host 名稱(daemon限定) | |
–config=FILE | 定義所要讀取的設定檔 rsyncd.conf 位置(daemon 限定) 預設值為 /usr/local/etc/rsyncd.conf |
|
–port=PORT | 定義 rsyncd(daemon)要執行的 port(預設為 tcp 873) | |
–blocking-io | 使用 blocking I/O 連結遠端的 shell,如 rsh、remsh | |
–no-blocking-io | 使用 non-blocking 連結遠端的 shell,如 ssh(預設值) | |
–stats | 顯示檔案傳送時的資訊狀態 | |
–progress | 顯示傳送的進度(給檔案傳送時,怕無聊的人用的..) | |
–log-format=FORMAT | 定義 log 的格式(在 rsyncd.conf 設定) | |
–password-file=FILE | 從檔案讀取與遠端 rsync 伺服器連結的密碼 | |
–bwlimit=KBPS | 定義傳輸頻寬的大小(KBytes/秒) | |
–write-back=FILE | 把紀錄資料寫入一個檔案(給其他相同環境且相同需求的機器使用) | |
–read-batch=FILE | 透過讀取紀錄檔案來進行傳輸(檔案由 –write-batch 參數產生) | |
–checksum-seed=NUM | 定義檔案 checksum-seed 的大小(byte) | |
-4 | –ipv4 | 使用 IPv4 協定 |
-6 | –ipv6 | 使用 IPv6 協定 |
-h | –help | 顯示 rsync 求助資訊 |
STEP 3:範例說明
Server 1:192.168.1.100
Server 2:10.1.0.200
複製目錄:/tmp/rsynctest
遠端主機可連線使用Port:8888
說明:將Server1 /tmp/rsystest目錄中所有檔案同步到Server2,同時刪除與Server1不同的檔案。
指令:
[[email protected]Server1 ~]#rsync -e “ssh -p 8888” -avP –delete /tmp/rsynctest [email protected]Server2:/tmp/rsynctest/