linux 資料夾同步工具

2021-06-19 14:28:58 字數 3384 閱讀 8894

背景:

這篇文放到一群共享裡,網上被摘抄了一下,但未註明出處。這裡申明一下,摘抄可以,但請註明出處。同樣,也是未完之作。

幾種資料夾同步工具介紹

1 前言

我們日常工作中,經常會遇到下面的一些情況:靜態應用中,為減少web訪問對發布系統的壓力,而使用的多級快取構架中,位於快取構架中後端的多台www伺服器需保持資料一致,且需要與發布系統保持接近實時的資料一致,確保所有使用者訪問到的資料是一致的且是最新的;動態應用中,為保證應用的可靠性而使用多台伺服器冗餘,每台伺服器上應用的資料同樣需要保持一致。

上述兩種構架中,存在明顯的弊端,例如同步系統中,我們使用rsync來對資料進行同步,資料是以壓縮包的形式在不同主機之間進行傳遞,那麼每次傳輸前後都需要對資料進行壓縮喝解壓縮,增加了系統的負載,特別是遇到幾百兆的大包時,不僅占用了頻寬,而且還使得後續的壓縮包被堵住,影響了**內容的實時性;另外,動態應用的更新是我們日常工作中占用時間多,重複枯燥,毫無技術性可言的一件事,對一些只有兩台或三颱伺服器的應用來說,更新一次花費時間精力不多,也就算了,但是對於一些重要的、訪問量大、伺服器多的應用,例如bbs,廣告等,通常進行一次更新,至少需要半個小時,而且伺服器多也較容易出現差錯。

基於以上的各種原因,並徵求其它同事以及參考網上一些介紹,我在檔案同步這方面進行了一點點探索,下面是我所發現的一些可以減輕我們系統壓力和我們維護工作量的工具,它們是:unison、inotify、csync2和tsync。

這篇文件會簡單介紹各種工具的特點、工作原理、安裝使用、配置策略等,而不會聚焦於它們的工作如何具體的實現,詳細的文件請參考互連網。同樣,我也不會介紹它們的所有用法,而只是介紹能用於我們工作上的用法。

2 unison

2.1 unison簡介

unison是windows和unix平台下都可以使用的檔案同步工具,它能使兩個資料夾(本地或網路上的)保持內容的一致。unison擁有其它一些同步工具或檔案系統的相同特性,但也有自己的特點:

l  跨平台使用;

l  對核心和使用者許可權沒有特別要求;

l  unison是雙向的,它能自動處理兩分拷貝中更新沒有衝突的部分,有衝突的部分將會顯示出來讓使用者選擇更新策略;

l  只要是能連通的兩台主機,就可以執行unison,可以直接使用socket連線或安全的ssh連線方式,對頻寬的要求不高,使用類似rsync的壓縮傳輸協議。

2.2 安裝unison

unison有文字介面和圖形介面,這裡只介紹如何在文字介面下使用。

ocaml安裝指令碼如下:

# tar -zxf ocaml-3.09.3.tar.gz

# cd ocaml-3.09.3

# ./configure

# make world opt

# make install

unison對版本要求很高,進行同步的兩台主機需要相同版本的unison,所以這裡使用和windows一致的版本2.13.16,unison-2.13.16.tar.gz

安裝指令碼如下:

# tar –zxf unison-2.13.16.tar.gz

# cd unison-2.13.16

# make uistyle=text

# make install

之後將生成可執行檔案unison,將其cp到系統path即可。

# cp ./unison /usr/local/bin

2.3 使用unison

unison可以在一台主機上使用,同步兩個資料夾,也可以在網路上是用。

2.3.1 本地使用(簡單介紹)

使用方法:

# unison dir1 dir2

如果檢測到兩個資料夾有所不同,unison會提示,讓你選擇相應的操作。例如:

filename [f]

表示右邊的資料夾有新的檔案,是否同步到左邊的資料夾,f表示force,輸入?會有更詳細的介紹。

new file       d/h

表示出現兩個資料夾的不一致,同樣,輸入?有詳細的介紹。

2.3.2 遠端使用

l  ssh方式:

使用方法:

# unison dir1 ssh://username@remotehostname(ip)//absolute/path/to/dir2

表示將本機的目錄dir1和遠端主機的/absolute/path/to/dir2進行同步。一般的,需要兩台機能ssh連線。

l  socket方式:

unison的manual說這是種極不安全的方式,但如果只是進行例如台式電腦和筆記本之間的資料同步,也可以使用這種比較簡單的方式。

使用方法:

在一端主機,需要起乙個daemon:

# unison -socket port

另一端主機:

# unison dir1 socket://remotehost(ip):port//absolute/path/to/dir2

unison的使用中可以使用相對路徑,即相對於執行unison命令的當前路徑,但我認為使用絕對路徑不容易出錯,這裡也推薦使用絕對路徑來表示需要同步的資料夾。

2.3.3 同過配置檔案來使用unison

儘管可以完全通過命令列的方式來指定unison執行所需要的引數,但我還是推薦使用配置檔案來進行配置使用unison,原因很簡單,看配置檔案比看命令列容易理解,而且可管理性更強。

預設的配置資料夾位於~currentuser/.unison,即當前使用者的home目錄下,windows則位於c:\documents and settings\currentuser\.unison,預設的配置檔名是default.prf.

執行這樣的命令:

# unison config

unison將讀取~currentuser/.unison/config.prf檔案裡的配置。

下面是乙個簡單的配置檔案例子(用於bbs應用中兩個資料夾同步):

root = /var/www/bbsnew

root = ssh:

force = /var/www/bbsnew

ignore = path web-inf/tmp

ignore = path web-inf/work*

auto = true

log = true

logfile = /home/support/.unison/itbbs_239.172.log

兩個root表示需要同步的資料夾。

force表示以本地的/var/www/bbsnew資料夾為標準,將該目錄同步到遠端。

ignore = path表示忽略root下面的web-inf/tmp目錄,即同步時不同步它。

auto表示自動應用預設的更新規則。應為這裡是以本地資料夾為準,不會出現更新衝突現象,可以使用預設更新規則。

log = true表示在終端輸出執行資訊。

logfile則指定了同時將輸出寫入log檔案。

**:

檔案資料夾同步

datax之ftpreader 參考url ftpreader提供了讀取遠端ftp檔案系統資料儲存的能力。在底層實現上,ftpreader獲取遠端ftp檔案資料,並轉換為datax傳輸協議傳遞給writer。ftpreader實現了從遠端ftp檔案讀取資料並轉為datax協議的功能,遠端ftp檔案本...

vmware資料夾同步

首先感謝某大神的分享,自己整理乙份完整一點的 1.在虛擬機器設定同步檔案 2.安裝 vmware tools工具 1 安裝依賴包 yum y install perl gcc gcc c make cmake kernel kernel headers kernel devel net tools ...

Nodejs 多資料夾檔案同步

不多說,直接上 package.json asycnfile.js var fssync require fs sync var fs require fs var util require util var later require later 需要同步的資料夾路徑 var path 需要同步的...