文件遠程同步、備份神器rsync

簡介

我一直想搭一個自動備份代碼(或者延伸一下,各類文件)的系統(tǒng),正好我購買了服務器

可以利用這個搭建一下rsync。

rsync 是一個常用的 Linux 應用程序,用于文件同步。 它可以在本地計算機與遠程計算機之間,或者兩個本地目錄之間同步文件(但不支持兩臺遠程計算機之間的同步)undefined與其他文件傳輸工具(如 FTP 或 scp)不同,rsync 的最大特點是會檢查發(fā)送方和接收方已有的文件,僅傳輸有變動的部分(默認規(guī)則是文件大小或修改時間有變動)。

那Windows上有這個rsync嗎,畢竟,我是要從Windows往Linux同步文件。有!Windows平臺有個cwRsync,

cwRsync is a packaging of Rsync for Windows

它就是rsync在Windows上的實現(xiàn)。方法已經(jīng)有了,下面就開干了。

在服務器Linux主機上安裝配置rsync服務端

  1. 檢查rsync安裝情況. 輸入rsync --version,發(fā)現(xiàn)已經(jīng)有了,如果沒有的,通過apt-get install rsync安裝一下就行
image.png
  1. 配置rsyncd.conf文件 雖然rsync已經(jīng)安裝了,但是需要它作為服務端運行,就要以守護進程也就是daemon的方式運行它。這時候就要用到一個etc目錄下的/etc/rsyncd.conf文件,這里需要注意的是,有些Linux發(fā)行版,比如我這個Armbian是基于Debian的,是沒有rsyncd.conf這個文件的,需要先創(chuàng)建,然后再填寫配置內容。如果本來就有這個文件,那就直接填寫配置內容就行了。配置文件內容:
# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:
uid = root
gid = root
use chroot = no
max connections = 2
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
lock file = /var/run/rsyncd.lock

[feng]
path = /mnt/file
read only = no
auth users = rsync
secrets file = /etc/rsyncd.secrets
list = no

這里簡單說一下上面的配置項,也是參照別的教程改的,官方全部的配置項應該不止這些,但那不是我的研究重點,有這些就夠用了。

  • uid、gid:當使用非root賬號時,那么一定要確保服務的的文件夾是否有該非root賬號寫入的權限
  • use chroot = no :是否可以切換到root目錄,當chroot為yes的時候,客戶端連接模塊的時候,先chroot到模塊參數(shù)指定的目錄下,必須使用root權限,端口號必須是1024以內,且不能備份path路徑外的鏈接文件
  • max connections = 2 :表示同時最大的連接數(shù),也就是同時只能有兩個客戶端對自己進行連接。并且此選項必須與lock file = /var/run/rsyncd.lock 共同使用,若不指定,默認為/var/run/rsyncd.lock
  • feng這個中括號里面的內容是自己隨便定義的,它表示一個模塊,后面客戶端連接的時候需要指定這個模塊的名字,比如我這里就是feng,這樣客戶端就會按照這個模塊下面的各項配置規(guī)則來傳輸文件
  • path = /mnt/file:表示的是當客戶端把數(shù)據(jù)同步過來將保存的路徑,根據(jù)自身情況定義就行
  • read only = no :如果為只讀,那么將不能進行寫同步,所以必須關閉
  • auth users = rsync :用來進行同步的用戶,不需要系統(tǒng)用戶中有,虛擬的就行。也是自己定義,后面客戶端發(fā)起同步命令時會用到
  • secrets file = /etc/rsyncd.secrets :表示的是賬號密碼文件,此文件可隨意指定,文件里必須以username:password的格式。此文件權限必須為600,否則會報錯。username就是上面自定義的auth users,比如我這里就是rsync,然后我把密碼設置為123,那文件里就寫rsync:123就行了
  • list = no :表示的是當服務端拒絕客戶端的請求時,是否是直接顯示權限拒絕,還是顯示模塊不存在,一般與hosts allow 和hosts deny一起使用。當一個被服務端拒絕的請求進來時,如果設置為 list = no,那么直接返回模塊不存在。如果不設置,那么是什么錯就返回什么錯。

3.以守護進程(daemon)方式運行

以上各項配置好后,通過 rsync --daemon來啟動rsync就可以了,這樣rsync就會以后臺進程的方式運行,而且會開機自啟。

這里再插一句,啟動是啟動了,那怎么停止呢,假如我修改了配置文件需要重啟怎么辦,這個我了解到的方法是先查出PID,然后通過kill PID來結束進程。rsync默認使用873端口號,所以我先通過lsof -i tcp:873命令查出PID,然后kill PID結束進程。

image.png

以上就是Linux上rsync作為服務端的安裝部署過程,下面看Windows上rsync作為客戶端的安裝配置過程。

Windows上rsync作為客戶端的安裝配置過程

  1. 下載cwAsync客戶端undefined在 https://www.itefix.net/cwrsync 下載cwRsync客戶端。注意區(qū)分服務端和客戶端,服務端我這里用不到,所以也沒看。
image.png

我下載的是x86那個版本。直接解壓縮到你想放到的目錄下,然后將目錄 bin 的路徑注冊到環(huán)境變量 path 中,這樣就可以直接在 cmd 窗口中寫命令行了。

2.在 cmd 中通過命令行發(fā)起文件同步

我們先直接看一個可以運行成功的例子:

rsync --port=873 -av --progress --password-file=/cygdrive/d/test.password /cygdrive/e/test_projects/nsetter rsync@10.10.10.120::feng
  • 873就是服務端的rsync對應的端口號
  • --password-file=/cygdrive/d/test.password,是指定放在本機目錄下的密碼文件,這個密碼文件需要事先創(chuàng)建好,比如我這里就是在D盤下創(chuàng)建了一個test.password文件,路徑前加上/cygdrive/是要求的固定寫法,是按照 linux 的風格來的,如果直接寫成“D:\test.password”是不行的。undefined文件里面的內容就是對應上面服務端的rsyncd.secrets里面寫的密碼,比如我這里是123,那就在這個文件里寫個123就行了。
  • /cygdrive/e/test_projects/nsetter就是我要同步的目錄,按上面的規(guī)則可以看出來,這是E盤下的一個目錄,這種寫法會把整個目錄同步過去,而且會在服務端創(chuàng)建一個同樣名字的目錄。
  • rsync@10.10.10.120::feng,其中rsync對應上面服務端設置的auth users,后面的是服務端IP地址,在后面雙冒號跟模塊的名字,還記得服務端配置文件里我說的模塊名字嗎,這里就用到了

運行結果

下面是我把Windows上的一個目錄同步到Linux下的結果,可能是因為局域網(wǎng),速度還是很快的。

image.png

假如我要排除源目錄下的某個文件或者目錄,通過--exclude參數(shù)就能實現(xiàn),非常簡單,比如下面這個,我就把packages目錄排除了,它不會被同步

image.png

因為rsync是增量同步,只同步有變化的文件,所以不用擔心重復同步、徒增開銷的問題,比如下面這個test.txt文件,我連續(xù)同步兩次,第二次并沒有同步,那個sending list下是空的。

image.png

總結

以上就是我在購買了服務器搭建和使用rsync的整個過程了,這基本已經(jīng)滿足了我的需求,接下來可能最多就是改進一下,把手輸命令行改成自動化運行的腳本,在我看來,這個算得上是一流的同步、備份文件的解決方案了。畢竟,不但沒花一分錢,還如此強大易用。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容