以 rsync 進行同步鏡相備份
我們曾在基礎篇裡面談過
Linux 的備份策略, 該篇曾介紹常用的備份指令,包括 tar, dd, cp 等等,不過當時並未介紹網路,所以有個很棒的網路工具沒有介紹, 那就是這個地方要談到的 rsync 啦!這個 rsync 可以作為一個相當棒的異地備援系統的備份指令喔! 因為 rsync 可以達到類似『鏡相 (mirror) 』的功能呢!
rsync 最早是想要取代 rcp 這個指令的,因為 rsync 不但傳輸的速度快,而且他在傳輸時, 可以比對本地端與遠端主機欲複製的檔案內容,而僅複製兩端有差異的檔案而已,所以傳輸的時間就相對的降低很多! 此外, rsync 的傳輸方式至少可以透過三種方式來運作:
在本機上直接運作,用法就與 cp 幾乎一模一樣,例如:
rsync -av /etc /tmp (將 /etc/ 的資料備份到 /tmp/etc 內)
透過 rsh 或 ssh 的通道在 server / client 之間進行資料傳輸,例如:
rsync -av -e ssh user@rsh.server:/etc /tmp (將 rsh.server 的 /etc 備份到本地主機的 /tmp 內)
直接透過 rsync 提供的服務 (daemon) 來傳輸,此時 rsync 主機需要啟動 873 port:
1. 你必須要在 server 端啟動 rsync , 看 /etc/xinetd.d/rsync 即可;
2. 你必須編輯 /etc/rsyncd.conf 設定檔;
3. 你必須設定好 client 端連線的密碼資料;
4. 在 client 端可以利用:rsync -av user@hostname::/dir/path /local/path
其實三種傳輸模式差異在於有沒有冒號 (:) 而已,本地端傳輸不需要冒號,透過 ssh 或 rsh 時,就得要利用一個冒號 (:), 如果是透過 rsync daemon 的話,就得要兩個冒號 (::) ,應該不難理解啦!因為本地端處理很簡單, 而我們的系統本來就有提供 ssh 的服務,所以,底下鳥哥將直接介紹利用 rsync 透過 ssh 來備份的動作喔。 不過,在此之前咱們先來看看 rsync 的語法吧!
你可以利用上面的範例二來做為備份 script 的參考!不過要注意的是, 因為 rsync 是透過 ssh 來傳輸資料的,所以你可以針對 dmtsai 這個傢伙製作出免用密碼登入的 ssh 金鑰! 如此一來往後異地備援系統就能夠自動的以 crontab 來進行備份了!簡單到爆!
免密碼的 ssh 帳號我們在上頭已經講過了,撰寫 shell script 的能力也是必須要有的! 利用 rsync 來進行你的備份工作吧! ^_^!
rsync 最早是想要取代 rcp 這個指令的,因為 rsync 不但傳輸的速度快,而且他在傳輸時, 可以比對本地端與遠端主機欲複製的檔案內容,而僅複製兩端有差異的檔案而已,所以傳輸的時間就相對的降低很多! 此外, rsync 的傳輸方式至少可以透過三種方式來運作:
在本機上直接運作,用法就與 cp 幾乎一模一樣,例如:
rsync -av /etc /tmp (將 /etc/ 的資料備份到 /tmp/etc 內)
透過 rsh 或 ssh 的通道在 server / client 之間進行資料傳輸,例如:
rsync -av -e ssh user@rsh.server:/etc /tmp (將 rsh.server 的 /etc 備份到本地主機的 /tmp 內)
直接透過 rsync 提供的服務 (daemon) 來傳輸,此時 rsync 主機需要啟動 873 port:
1. 你必須要在 server 端啟動 rsync , 看 /etc/xinetd.d/rsync 即可;
2. 你必須編輯 /etc/rsyncd.conf 設定檔;
3. 你必須設定好 client 端連線的密碼資料;
4. 在 client 端可以利用:rsync -av user@hostname::/dir/path /local/path
其實三種傳輸模式差異在於有沒有冒號 (:) 而已,本地端傳輸不需要冒號,透過 ssh 或 rsh 時,就得要利用一個冒號 (:), 如果是透過 rsync daemon 的話,就得要兩個冒號 (::) ,應該不難理解啦!因為本地端處理很簡單, 而我們的系統本來就有提供 ssh 的服務,所以,底下鳥哥將直接介紹利用 rsync 透過 ssh 來備份的動作喔。 不過,在此之前咱們先來看看 rsync 的語法吧!
[root@linux ~]# rsync [-avrlptgoD] [-e ssh] [user@host:/dir] [/local/path] 參數: -v :觀察模式,可以列出更多的資訊; -q :與 -v 相反,安靜模式,輸出的資訊比較少; -r :遞迴複製!可以針對『目錄』來處理!很重要! -u :僅更新 (update),不會覆蓋目標的新檔案; -l :複製連結檔的屬性,而非連結的目標原始檔案內容; -p :複製時,連同屬性 (permission) 也保存不變! -g :保存原始檔案的擁有群組; -o :保存原始檔案的擁有人; -D :保存原始檔案的裝置屬性 (device) -t :保存原始檔案的時間參數; -I :忽略更新時間 (mtime) 的屬性,檔案比對上會比較快速; -z :加上壓縮的參數! -e :使用的通道協定,例如使用 ssh 通道,則 -e ssh -a :相當於 -rlptgoD ,所以這個 -a 是最常用的參數了! 更多說明請參考 man rsync 的解說! 範例一:將 /etc 的資料備份到 /tmp 底下: [root@linux ~]# rsync -av /etc /tmp ....前面輸出省略.... sent 23007335 bytes received 32280 bytes 5119914.44 bytes/sec total size is 22870014 speedup is 0.99 # 第一次運作時會花比較久的時間,因為首次建立嘛!如果再次備份呢? [root@linux ~]# rsync -av /etc /tmp building file list ... done sent 77105 bytes received 20 bytes 154250.00 bytes/sec total size is 22870014 speedup is 296.53 # 瞧!立刻就跑完了!傳輸的資料也很少!因為再次比對,僅有差異的檔案會被複製。 範例二:利用 dmtsai 的身份,將 rsh.server 使用者家目錄複製到 /tmp [root@linux ~]# rsync -av -e ssh dmtsai@rsh.server:~ /tmp The authenticity of host 'rsh.server (192.168.1.2)' can't be established. RSA key fingerprint is 29:b8:a9:32:ea:d8:ff:97:6c:42:3b:aa:11:ab:55:dd. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'rsh.server' (RSA) to the list of known hosts. dmtsai@rsh.server's password: receiving file list ... done ....檔案輸出省略.... sent 8436 bytes received 43224862 bytes 2789245.03 bytes/sec total size is 43189031 speedup is 1.00 [root@linux ~]# ll -d /tmp/dmtsai drwxr-xr-x 22 dmtsai dmtsai 4096 Sep 18 23:25 /tmp/dmtsai # 瞧!這樣就做好備份啦!很簡單吧! |
免密碼的 ssh 帳號我們在上頭已經講過了,撰寫 shell script 的能力也是必須要有的! 利用 rsync 來進行你的備份工作吧! ^_^!