OS

透過rsync備份

會用這個只是因為公司之前備份都是用ssh登入+scp來備份

而因為公司的架構有點小複雜 且我也想要有異地備份 所以乾脆來改成rsync

rsync有一個很大的優點是可以做ssh加密傳輸跟差異備份,差異備份就很重要

畢竟作異地備份的話,全部都跑 網路頻寬會受不了 畢竟每天資料量都很大 但是其實每天資料都差不多,備份不一樣的地方就會很省

而我是透過rsync 備份到我的qnap 的nas

首先nas那邊要先開啟rsync的功能 並且輸入好帳號密碼。

接下來回到要備份的這台linux電腦下指令

rsync -av 本機路徑 遠端路徑 例如:

rsync -av /home/davidou/rsync/xxx.txt davidou@192.168.1.1::backup/

這邊就是說要用rsync 把本機的/home/davidou/rsync/xxx.txt 備份到遠端的davidou@192.168.1.1::backup/

而上面-av 是參數 參數如下 可以自己選

-v, –verbose 詳細模式輸出訊息
-q, –quiet 安靜模式,幾乎沒有訊息產生。常用在以 cron 執行 rsync
-c, –checksum 打在傳送之前透過 128bit 的 MD4 檢查碼來檢查所有要傳送的檔案(會拖慢速度)
-a, –archive 備份模式,表示以遞迴方式傳輸文件,並保持所有文件屬性,等於 -rlptgoD(沒有 -H)
-r, –recursive 對子目錄以遞迴模式處理
-R, –relative 使用相對路徑名稱
–no-relative 不使用相對路徑
–no-implied-dirs
rsync foo/bar/foo.c remote:/tmp/
則在 /tmp 目錄下產生 foo.c 文件,而如果使用 -R 參數:
rsync -R foo/bar/foo.c remote:/tmp/
則會產生文件 /tmp/foo/bar/foo.c,也就是會保持完全路徑。

-b, –backup 產生備份,也就是對於目的已經存在有同樣的文件名時,將老的文件重新命名為 ~filename。可以使用 –suffix 選項來指定不同的備份文件前綴。
–backup-dir=DIR 將備份文件(如~filename)存放在在目錄下。
–suffix=SUFFIX 定義備份文件前綴
-u, –update 僅僅進行更新,也就是略過所有已經存在於目的端,且文件時間比要備份的檔案為新。(不覆蓋較新的文件)
–inplace
-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 讓刪除動作在檔案傳送後再行刪除
–ignore-errors 忽略任何錯誤既使是 I/O error 也進行 –delete 刪除動作
–max-delete=NUM 定義 rsync 不要刪除超過 NUM 個檔案
–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傳送相同:
RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core .svn/ 符合以上條件的都會被忽略而不傳送
–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
-0, –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 求助資訊

而這樣其實就可以備份過去了 備份時會叫你輸入密碼

而因為我想寫在crontab裡面 就不想輸入密碼

所以我先在 /etc創一個密碼檔

vi rsync.password

然後裡面就只打密碼就好 存檔後
注意: rsync.password 的權限屬性必須設為 600

你的rsync 指令就會變成下面這個

rsync -av --delete --password-file=/etc/rsync.password /backup/ davidou@61.224.91.108::kun_backup/90backup




這樣他就會去查詢密碼檔 而不會問你密碼要打甚麼了

或是你也可以安裝sshpass

yum install sshpass

然後指令改成

sshpass -p 'password' rsync -av /backup/ davidou@61.224.91.108::kun_backup/90backup
Be the First to comment.

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

(若看不到驗證碼,請重新整理網頁。)