Linux命令之檔案同步、定時備份 -rsync,cron,crontab
一、rsync介紹(可忽略)
Rsync(remote synchronize)是一個遠端檔案同步工具;
Rsync使用“Rsync演算法”來同步檔案,該演算法只傳送兩個檔案的不同部分,因此速度相當快;
Rsync是替代rcp的一個工具,目前由rsync.samba.org維護,因而rsync.conf檔案的格式類似於samba的主配置檔案;
Rsync可通過rsh或ssh使用,也能以daemon模式執行,以daemon方式執行時,Rsync Server會開啟一個873埠等待客戶端連線.連線時,Rsync Server
Rsync支援大多數的類Unix系統(Linux、Solaris、BSD等);此外,在windows平臺也有相應的版本,如cwRsync和Sync2NAS等工具;
二、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 遞迴模式;
-l 保持符號連線;
-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介紹(可忽略)
Rsync(remote synchronize)是一個遠端檔案同步工具;
Rsync使用“Rsync演算法”來同步檔案,該演算法只傳送兩個檔案的不同部分,因此速度相當快;
Rsync是替代rcp的一個工具,目前由rsync.samba.org維護,因而rsync.conf檔案的格式類似於samba的主配置檔案;
Rsync可通過rsh或ssh使用,也能以daemon模式執行,以daemon方式執行時,Rsync Server會開啟一個873埠等待客戶端連線.連線時,Rsync Server會檢查口令是否相符,若口令相符,則進行檔案傳輸.第一次會把整份檔案傳輸一次,以後則為增量傳輸;
Rsync支援大多數的類Unix系統(Linux、Solaris、BSD等);此外,在windows平臺也有相應的版本,如cwRsync和Sync2NAS等工具;
二、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 遞迴模式;
-l 保持符號連線;
-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