1. 程式人生 > >Linux命令之檔案同步、定時備份 -rsync,cron,crontab

Linux命令之檔案同步、定時備份 -rsync,cron,crontab

一、rsync介紹(可忽略)

Rsyncremote synchronize)是一個遠端檔案同步工具;

Rsync使用“Rsync演算法來同步檔案,該演算法只傳送兩個檔案的不同部分,因此速度相當快;

Rsync是替代rcp的一個工具,目前由rsync.samba.org維護,因而rsync.conf檔案的格式類似於samba的主配置檔案;

Rsync可通過rshssh使用,也能以daemon模式執行,daemon方式執行時,Rsync Server會開啟一個873埠等待客戶端連線.連線時,Rsync Server

會檢查口令是否相符,若口令相符,則進行檔案傳輸.第一次會把整份檔案傳輸一次,以後則為增量傳輸;

Rsync支援大多數的類Unix系統(LinuxSolarisBSD);此外,windows平臺也有相應的版本,cwRsyncSync2NAS等工具;



二、rsync安裝(可忽略)

Linux發行版預設已經安裝rsync工具,如果想自行安裝,可以參考如下安裝步驟:

#網 http://rsync.samba.org/ 上下載 rsync-3.1.0.tar.gz

tar -zxvf rsync-3.1.0.tar.gz

cd rsync-3.1.0

./configure -prefix=/opt/app/rsync

make

make install


#此時,安裝完成,將 /opt/app/rsync/bin 增加到PATH;



rsync 一般使用

命令列使用rsync語法

$ rsync <dir_name> <remote_ip>:<dir_name>

 

實際使用中,根據不同的情況使用下面的格式

#同步資料夾到遠端

rsync -avI dir_name remote_ip:dir_name

 

#同步資料夾到遠端,傳輸時進行壓縮

rsync -avzI dir_name remote_ip:dir_name

 

#同步資料夾到遠端(保持嚴格同步,即本地刪除,遠端也同步刪除)

rsync -avzI –-delete dir_name remote_ip:dir_name

 

#排除指定的檔案或目錄,可多次使用,支援萬用字元(比如.svn.git等目錄)

rsync -avzI –exclude=/a/b/*.svn –exclude=/a/b/*.git dir_name remote_ip:dir_name

 

#當排除的檔案較多時,可將檔案寫到某檔案中,同時使用 –exclude-from 指定該檔案即可。

rsync -avzI –exclude-from=/a/exclude_file_list.txt dir_name remote_ip:dir_name

 

以上使用的選項說明如下:

-a, –archive 歸檔模式,等於-rlptgoD;

-r, –recursive 遞迴模式;

-保持符號連線;

-p 保持檔案原有許可權;

-t 保持檔案原有修改時間;

-g 保持檔案原有使用者組;

-o 保持檔案原有屬主;

-D -devices -specials,保持塊裝置檔案和特殊檔案;

 

-I 強制掃描,放棄“quick check”策略(quick check策略,通過檢視檔案的時間戳和檔案大小,先排除一批認為相同的檔案[rsync不會對資料夾本身做“quick check”]);

-z, –compress 壓縮,預設的壓縮演算法和gzip一樣;

-v, verbose 顯示進度詳細資訊;

-q, –quiet 精簡輸出模式;

-R, –relative 保持全路徑;

–progress  顯示傳輸進度(百分百);

–delete 本地刪除一檔案,遠端也同步的刪除該檔案,保持嚴格的一致(不加該引數,則表示只增不減);

–exclude=”*.tmp” 排除某些檔案;

–exclude-from=FILE 排除FILE中指定模式的檔案;

–port=PORT 指定其他的rsync服務埠;

 

注意:

就路徑格式而言,如果源路徑末尾使用/,rsync會將源路徑尾端目錄中的所有內容複製到目的端;如果沒有使用/,rsync會將源路徑尾端目錄本身複製到目的端。

$ rsync -av /home/test/ /home/backup; #test目錄中的內容備份;

$ rsync -av /home/test /home/backup; #test目錄本身備份;

如果目的路徑末尾使用/,rsync會將來自源端的內容複製到目的端的目錄中;如果沒有使用/,rsync會在目的端路徑尾部建立一個和目的端尾部目錄同名的目錄,並將源端內容複製到該目錄中。

$ rsync -av /home/test /home/backup/; #將源端內容複製到backup目錄中;

$ rsync -av /home/test /home/backup; #/home/backup建立下級目錄backup,並將源端內容複製到/home/backup/backup目錄中;

 

該部分內容參考http://roclinux.cn/?p=2643



四、rsync結合crontab實現定時備份
關於crontab的介紹和簡單使用,可參考另一篇博文:http://blog.csdn.net/wangjunjun2008/article/details/19497803

#建立crontab定時任務,呼叫rsync命令進行定時備份:

$ crontab -e

0 1 * * * rsync -avzI dir_name remote_ip:dir_name

#每晚1點進行資料備份

注意:需要建立本地伺服器和遠端伺服器的信任,以便於實現免登入操作(相關內容可參考http://blog.csdn.net/wangjunjun2008/article/details/20037101)



五、rsync高階用法(使用rsyncd服務進行定時備份)

使用crontab的方式實現定時備份雖然可行,但卻不是正統的方法;規範、流行的rsync定時備份方案是使用rsyncd服務實施定時備份策略.

(此部分沒有深入學習,未完待續)



六、定時備份不能完成的任務

定時備份雖好,卻不能完成全部的備份任務假如需要實時同步一些資料(任意時間點,本地資料的改變,都能及時同步到遠端伺服器),使用定時備份的話,會存在時間差(在這個時間段內,資料不同步),解決此類問題的方法是:結合 inotify 工具來實現實時備份策略。


關於inotify的介紹和使用,請參考博文:

http://blog.csdn.net/wangjunjun2008/article/details/38755959


一、rsync介紹(可忽略)

Rsyncremote synchronize)是一個遠端檔案同步工具;

Rsync使用“Rsync演算法來同步檔案,該演算法只傳送兩個檔案的不同部分,因此速度相當快;

Rsync是替代rcp的一個工具,目前由rsync.samba.org維護,因而rsync.conf檔案的格式類似於samba的主配置檔案;

Rsync可通過rshssh使用,也能以daemon模式執行,daemon方式執行時,Rsync Server會開啟一個873埠等待客戶端連線.連線時,Rsync Server會檢查口令是否相符,若口令相符,則進行檔案傳輸.第一次會把整份檔案傳輸一次,以後則為增量傳輸;

Rsync支援大多數的類Unix系統(LinuxSolarisBSD);此外,windows平臺也有相應的版本,cwRsyncSync2NAS等工具;



二、rsync安裝(可忽略)

Linux發行版預設已經安裝rsync工具,如果想自行安裝,可以參考如下安裝步驟:

#網 http://rsync.samba.org/ 上下載 rsync-3.1.0.tar.gz

tar -zxvf rsync-3.1.0.tar.gz

cd rsync-3.1.0

./configure -prefix=/opt/app/rsync

make

make install


#此時,安裝完成,將 /opt/app/rsync/bin 增加到PATH;



rsync 一般使用

命令列使用rsync語法

$ rsync <dir_name> <remote_ip>:<dir_name>

 

實際使用中,根據不同的情況使用下面的格式

#同步資料夾到遠端

rsync -avI dir_name remote_ip:dir_name

 

#同步資料夾到遠端,傳輸時進行壓縮

rsync -avzI dir_name remote_ip:dir_name

 

#同步資料夾到遠端(保持嚴格同步,即本地刪除,遠端也同步刪除)

rsync -avzI –-delete dir_name remote_ip:dir_name

 

#排除指定的檔案或目錄,可多次使用,支援萬用字元(比如.svn.git等目錄)

rsync -avzI –exclude=/a/b/*.svn –exclude=/a/b/*.git dir_name remote_ip:dir_name

 

#當排除的檔案較多時,可將檔案寫到某檔案中,同時使用 –exclude-from 指定該檔案即可。

rsync -avzI –exclude-from=/a/exclude_file_list.txt dir_name remote_ip:dir_name

 

以上使用的選項說明如下:

-a, –archive 歸檔模式,等於-rlptgoD;

-r, –recursive 遞迴模式;

-保持符號連線;

-p 保持檔案原有許可權;

-t 保持檔案原有修改時間;

-g 保持檔案原有使用者組;

-o 保持檔案原有屬主;

-D -devices -specials,保持塊裝置檔案和特殊檔案;

 

-I 強制掃描,放棄“quick check”策略(quick check策略,通過檢視檔案的時間戳和檔案大小,先排除一批認為相同的檔案[rsync不會對資料夾本身做“quick check”]);

-z, –compress 壓縮,預設的壓縮演算法和gzip一樣;

-v, verbose 顯示進度詳細資訊;

-q, –quiet 精簡輸出模式;

-R, –relative 保持全路徑;

–progress  顯示傳輸進度(百分百);

–delete 本地刪除一檔案,遠端也同步的刪除該檔案,保持嚴格的一致(不加該引數,則表示只增不減);

–exclude=”*.tmp” 排除某些檔案;

–exclude-from=FILE 排除FILE中指定模式的檔案;

–port=PORT 指定其他的rsync服務埠;

 

注意:

就路徑格式而言,如果源路徑末尾使用/,rsync會將源路徑尾端目錄中的所有內容複製到目的端;如果沒有使用/,rsync會將源路徑尾端目錄本身複製到目的端。

$ rsync -av /home/test/ /home/backup; #test目錄中的內容備份;

$ rsync -av /home/test /home/backup; #test目錄本身備份;

如果目的路徑末尾使用/,rsync會將來自源端的內容複製到目的端的目錄中;如果沒有使用/,rsync會在目的端路徑尾部建立一個和目的端尾部目錄同名的目錄,並將源端內容複製到該目錄中。

$ rsync -av /home/test /home/backup/; #將源端內容複製到backup目錄中;

$ rsync -av /home/test /home/backup; #/home/backup建立下級目錄backup,並將源端內容複製到/home/backup/backup目錄中;

 

該部分內容參考http://roclinux.cn/?p=2643



四、rsync結合crontab實現定時備份
關於crontab的介紹和簡單使用,可參考另一篇博文:http://blog.csdn.net/wangjunjun2008/article/details/19497803

#建立crontab定時任務,呼叫rsync命令進行定時備份:

$ crontab -e

0 1 * * * rsync -avzI dir_name remote_ip:dir_name

#每晚1點進行資料備份

注意:需要建立本地伺服器和遠端伺服器的信任,以便於實現免登入操作(相關內容可參考http://blog.csdn.net/wangjunjun2008/article/details/20037101)



五、rsync高階用法(使用rsyncd服務進行定時備份)

使用crontab的方式實現定時備份雖然可行,但卻不是正統的方法;規範、流行的rsync定時備份方案是使用rsyncd服務實施定時備份策略.

(此部分沒有深入學習,未完待續)



六、定時備份不能完成的任務

定時備份雖好,卻不能完成全部的備份任務假如需要實時同步一些資料(任意時間點,本地資料的改變,都能及時同步到遠端伺服器),使用定時備份的話,會存在時間差(在這個時間段內,資料不同步),解決此類問題的方法是:結合 inotify 工具來實現實時備份策略。


關於inotify的介紹和使用,請參考博文:

http://blog.csdn.net/wangjunjun2008/article/details/38755959