資料複製在作業系統管理是最平常的事了,不論是重要資料的備份或者協助使用者做檔案的處理,都會用到 copy 之類的指令,今天就來說說如何在 unix 裡做資料備份。
分為三個方向來說
cp (copy files and directories)
scp (secure copy "remote file copy program")
rsync (faster, flexible replacement for rcp "remote file copy" )
-------------------------------------------------------------------
cp 為 unix 內建的指令,基本的用法為 cp [參數] 來源 目的
例:如果你想複製目錄及檔案,並且維持原有檔案的時間及權限,你可以
cp -pr 來源目錄/檔案 目的地 ( ex: cp -pr /home /backup/home )
其中 r 是代表 recursive 遞迴的複製,而 p 代表要維持原有的權限
------------
------------
scp 通常會放在 /usr/bin/scp (可以用 which 或 whereis 找一下)
scp copies files between hosts on a network. It uses ssh for data transfer, and uses the same authentication and provides the same security as ssh.
從上面那段英文的說明可以清楚的得知,scp 的傳輸會以 ssh 來作為加密,你可以拿 scp 來做本機的檔案複製,OK但沒意義,既然要用 ssh 加密,我們就會使用他來做遠端的複製,並以 ssh 加密來保護傳輸的過程。
scp [-P 連接埠] [-pr] 來源(user@IP:/目錄檔案) 目的地(user@IP:/目錄檔案)
假設你要從 192.168.1.1 複製所有 a開頭的檔案,並維持原有權限,你可以用
scp -pr someone@192.168.1.1:~/directory/a* /backup/someone
當然你也可以把目的地端改成遠端,這樣就可以做檔案上傳了。
---------------
---------------
rsync 就不一定會內建於 unix 系統裡了,通常他會放於 /usr/bin/rsync ,目前跟著 CentOS 6.3 所安裝的 rsync 為 3.0.6 9.el6 版,目前最新的為 3.0.9 (2011.09.24)
rsync 官方網站 http://rsync.samba.org/
Rsync uses a reliable algorithm to bring remote and host files into sync very quickly. Rsync is fast because it just sends the differences in the files over the network instead of sending the complete files. Rsync is often used as a very powerful mirroring process or just as a more capable replacement for the rcp command.
執行 rsync 要注意的項目
複製(client)與目的(server)主機都需要安裝 rsync
目的(server)主機的防火牆需要開放 873 port (可以透過修改 /etc/services 變更)
目的(server)主機需要設定 /etc/rsyncd.conf 與 /etc/rsyncd.secrets
複製(client)主機要設定 /etc/rsyncd.secrets
註:中文的名稱很容易搞混,建議大家用 client/ Server 名稱來瞭解資料複製的方向
註:其實本機備份你可以用「rsync -av --delete 來源目錄 目的目錄」簡單的來做兩個資料夾的同步,第一次他也會自動幫你在目的目錄建立起該有的子目錄。
底下的說明是舉例:rsync 如何複製 Server 的 OO 目錄/檔案,到 Client 的 XX 路徑
***目的(server)主機 - 設定******************
S1:確認 rsync 是否安裝:yum info rsync
S2:設定防火牆 開啟 22(ssh), 873(rsync) ports
修改 /etc/sysconfig/iptables
-A Firewall-rules -m state --state NEW -s 140.113.1.1 -m tcp -p tcp --dport 22 -j ACCEPT
-A Firewall-rules -m state --state NEW -s 140.113.1.1 -m tcp -p tcp --dport 873 -j ACCEPT
要把上面的 140.113.1.1 改成你 client 的 IP
重新啟動 FW
/etc/init.d/iptables restart
檢查規則
/sbin/iptables -L -n
>> 到此其實你已經可以執行 rsync 了,你可以用「rsync -av --delete someone@140.113.1.1:~/來源目錄 目的目錄」來複製來源目錄裡的檔案了,缺點是:你必須在 terminal 輸入你的密碼。
QQ:怎麼可能系統的備份,還得每次在 terminal 輸入密碼呢?所以要進行下列步驟!!
S3:設定(新增) /etc/rsyncd.conf
這個檔案預設是不存在的,你可能要新增他。
[server1] ; 目的主機代號
path = /home ; 要備份的路徑
auth users = someone ; 驗證的帳號,密碼在另一個檔案
secrets file = /etc/rsyncd.secrets ; 密碼檔
read only ; 唯讀模式複製
uid=0 ; 0=root
gid=0 ; 0=root
S4:設定(新增) /etc/rsyncd.secrets (這個的檔名,當然是跟著前一個設定檔)
someone:onespasswd ;帳號:密碼,以明文方式儲存
S5:把密碼檔設成 -rw------- 600 模式
chmod 600 /etc/rsyncd.secrets
S6:修改 /etc/xinetd.d/rsync
檢視 disable 設定,disable = no 代表要啟動 rsync,反之disable = yes 表示不用 rsync
***複製(client)主機 - 設定******************
S1:設定(新增) /home/greenth/rsyncd.secrets (路徑跟檔名就看你想放哪裡)
onespasswd ;密碼,跟 server 最大的不一樣在於,檔案裡只需要密碼,不需要帳號,密碼也是以明文方式儲存。
---- 呼叫方式 --------------------------
rsync -av --delete 指定密碼檔的路徑跟檔名 帳號@主機::主機代號 複製的目的地
rsync -av --delete --password-file=/home/greenth/rsyncd.secretsitman@140.113.1.1::server1 ~/dest_directory/
註:可以使用「~」來表示使用者的家目錄
註: --delete 意思是會連帶將 client 有的檔案,但 server 上卻沒有的檔案,給刪除掉~使其兩邊是一致的。
註:如果你直接使用 terminal 執行上面那段 rsync ,你會發現他還是會跟你要密碼的,可以的解決方式可以用 SSH 免登入的方式來做認證,就可以避開需要密碼的問題。
另外,也有人把密碼寫在 /etc/crontab 裡,使用 RSYNC_PASSWORD="onespasswd" 。
沒有留言:
張貼留言