日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747


 

阿銘linux近16年的IT從業經驗,6年+鵝廠運維經驗,6年+創業公司經驗,熟悉大廠運維體系,有從零搭建運維體系的實戰經驗。關注我,學習主流運維技能,讓你比別人提升更快,漲薪更多!

作為一個系統管理員,數據備份是非常重要的。阿銘有一次沒有做好備份策略,結果磁盤壞了,數據全部丟失。所以在以后的系統維護工作中,你一定要時刻牢記給數據做備份。

在Linux系統下數據備份的工具很多,但阿銘只用一種,那就是rsync,從字面意思上可以理解為remote sync(遠程同步)。rsync不僅可以遠程同步數據(類似于scp),而且可以本地同步數據(類似于cp),但不同于cp或scp的一點是,它不會覆蓋以前的數據(如果數據已經存在),而是先判斷已經存在的數據和新數據的差異,只有數據不同時才會把不相同的部分覆蓋。如果你的Linux沒有rsync命令,請使用命令yum install -y rsync安裝。

下面阿銘先舉一個例子,然后再詳細講解rsync的用法。

# rsync -av /etc/passwd /tmp/1.txtsending incremental file listpasswdsent 1,205 bytes received 35 bytes 2,480.00 bytes/sectotal size is 1,113 speedup is 0.90

上例將會把/etc/passwd同步到/tmp/目錄下,并改名為1.txt。如果是遠程復制,數據備份就是這樣的形式——IP:path,比如192.168.72.128:/root/。具體用法如下:

# rsync -av /etc/passwd 192.168.72.128:/tmp/1.txtThe authenticity of host '192.168.72.128 (192.168.72.128)' can't be established.ECDSA key fingerprint is SHA256:gFHUJnoZAjOcnG95pt7Zg9iaPZGDiOrbZyssZtRoQhA.Are you sure you want to continue connecting (yes/no/[fingerprint])? yesWarning: Permanently added '192.168.72.128' (ECDSA) to the list of known hosts.root@192.168.72.128's password:sending incremental file listsent 45 bytes received 12 bytes 8.77 bytes/sectotal size is 1,113 speedup is 19.53

首次連接時會提示是否要繼續連接,我們輸入yes繼續。當建立連接后,需要輸入密碼。如果手動執行這些操作比較簡單,但若是寫在腳本中該怎么辦呢?這就涉及添加信任關系了,該部分內容稍后會詳細介紹。

14.7.1rsync的命令格式

rsync [OPTION]... SRC DESTrsync [OPTION]... SRC [USER@]HOST:DESTrsync [OPTION]... [USER@]HOST:SRC DESTrsync [OPTION]... [USER@]HOST::SRC DESTrsync [OPTION]... SRC [USER@]HOST::DEST

在阿銘前面舉的兩個例子中,第一個例子為第一種格式,第二個例子為第二種格式。但不同的是,阿銘并沒有加user@host,如果不加默認指的是root。第三種格式是從遠程目錄同步數據到本地。第四種和第五種格式使用了兩個冒號,這種格式和其他格式的驗證方式不同。

14.7.2rsync常用選項

rsync命令各選項的含義如下。

 

  • -a:這是歸檔模式,表示以遞歸方式傳輸文件,并保持所有屬性,它等同于-rlptgoD。-a選項后面可以跟一個--no-OPTION,表示關閉-rlptgoD中的某一個,比如-a--no-l等同于-rptgoD。
  • -r:表示以遞歸模式處理子目錄。它主要是針對目錄來說的,如果單獨傳一個文件不需要加-r選項,但是傳輸目錄時必須加。
  • -v:表示打印一些信息,比如文件列表、文件數量等。
  • -l:表示保留軟連接。
  • -L:表示像對待常規文件一樣處理軟連接。如果是SRC中有軟連接文件,則加上該選項后,將會把軟連接指向的目標文件復制到DST。
  • -p:表示保持文件權限。
  • -o:表示保持文件屬主信息。
  • -g:表示保持文件屬組信息。
  • -D:表示保持設備文件信息。
  • -t:表示保持文件時間信息。
  • --delete:表示刪除DST中SRC沒有的文件。
  • --exclude=PATTERN:表示指定排除不需要傳輸的文件,等號后面跟文件名,可以是萬用字符模式(如*.txt)。
  • --progress:表示在同步的過程中可以看到同步的過程狀態,比如統計要同步的文件數量、同步的文件傳輸速度等。
  • -u:表示把DST中比SRC還新的文件排除掉,不會覆蓋。
  • -z:加上該選項,將會在傳輸過程中壓縮

 

選項雖然多,但阿銘常用的選項也就-a、-v、-z、--delete和--exclude這幾個,請牢記它們!下面阿銘將會針對這些選項做一系列小試驗。

1. 建立目錄和文件

過程如下所示:

# mkdir rsync# cd rsync# mkdir test1# cd test1# touch 1 2 3/root/123.txt# ln -s/root/123.txt ./123.txt# ls -l總用量 0-rw-r--r-- 1 rootroot 0 6月 26 17:30 1lrwxrwxrwx 1 rootroot 13 6月 26 17:30 123.txt ->/root/123.txt-rw-r--r-- 1 rootroot 0 6月 26 17:30 2-rw-r--r-- 1 rootroot 0 6月 26 17:30 3# cd ..

阿銘建立這些文件的目的就是為后續試驗做一些準備工作。

2. 使用-a選項

首先來看看-a選項的用法,如下所示:

# rsync -a test1 test2# ls test2test1# ls test2/test1/1 123.txt 2 3

這里有一個問題,就是本來想把test1目錄直接復制成test2目錄,可結果rsync卻新建了test2目錄,然后把test1放到test2當中。為了避免這樣的情況發生,可以這樣做:

# rm -rf test2# rsync -a test1/ test2/# ls -l test2/總用量 0-rw-r--r-- 1 rootroot 0 6月 26 17:30 1lrwxrwxrwx 1 rootroot 13 6月 26 17:30 123.txt -> /root/123.txt-rw-r--r-- 1 root root 0 6月 26 17:30 2-rw-r--r-- 1 root root 0 6月 26 17:30 3

這里加一個斜杠就好了,所以阿銘建議你在使用rsync備份目錄時,要養成加斜杠的習慣。前面已經講了-a選項等同于-rlptgoD,且-a還可以和--no-OPTIN一并使用。下面再來看看-l選項的作用,如下所示:

# rm -rf test2# rsync -av --no-l test1/ test2/sending incremental file listcreated directory test2skIPping non-regular file "123.txt"123sent 234 bytes received 144 bytes 756.00 bytes/sectotal size is 13 speedup is 0.03

上例中使用了-v選項,跳過了非普通文件123.txt。其實123.txt是一個軟連接文件,如果不使用-l選項,系統則不理會軟連接文件。雖然加-l選項能復制軟連接文件,但軟連接的目標文件卻沒有復制。有時我們需要復制軟連接文件所指向的目標文件,這又該怎么辦呢?

3. 使用-L選項

具體用法如下:

# rm -rf test2# rsync -avL test1/ test2/sending incremental file listcreated directory test21123.txt23sent 265 bytes received 123 bytes 776.00 bytes/sectotal size is 0 speedup is 0.00# ls -l test2/總用量 0-rw-r--r-- 1 root root 0 6月 26 17:30 1-rw-r--r-- 1 root root 0 6月 26 17:30 123.txt-rw-r--r-- 1 root root 0 6月 26 17:30 2-rw-r--r-- 1 root root 0 6月 26 17:30 3

上例加上-L選項就可以把SRC中軟連接的目標文件復制到DST。

4. 使用-u選項

首先查看一下test1/1和test2/1的創建時間(肯定是一樣的),然后使用touch修改一下test2/1的創建時間(此時test2/1要比test1/1的創建時間晚一些)。如果不加-u選項,會把test2/1的創建時間變成和test1/1一樣,如下所示:

# ll test1/1 test2/1-rw-r--r-- 1 root root 0 6月 26 17:30 test1/1-rw-r--r-- 1 root root 0 6月 26 17:30 test2/1

從上例可以看出二者的創建時間是一樣的。下面修改test2/1的創建時間,然后不加-u同步,如下所示:

# echo "1111" > test2/1# ll test2/1- rw-r--r-- 1 root root 5 6月 26 17:33 test2/1# rsync -a test1/1 test2/# ll test2/1-rw-r--r-- 1 root root 0 6月 26 17:30 test2/1

這里test2/1的創建時間還是和test1/1一樣。下面加上-u選項,如下所示:

# echo "1111" > test2/1# ll test2/1-rw-r--r-- 1 root root 5 6月 26 17:34 test2/1# rsync -avu test1/ test2/sending incremental file list123.txt -> /root/123.txtsent 134 bytes received 22 bytes 312.00 bytes/sectotal size is 13 speedup is 0.08# ll test1/1 test2/1-rw-r--r-- 1 root root 0 6月 26 17:30 test1/1-rw-r--r-- 1 root root 5 6月 26 17:34 test2/1

加上-u選項后,不會再把test1/1同步為test2/1了。

5. 使用--delete選項

首先刪除test1/123.txt,如下所示:

# rm -f test1/123.txt# ls test1/1 2 3

然后把test1/目錄同步到test2/目錄下,如下所示:

# rsync -av test1/ test2/sending incremental file list1sent 130 bytes received 38 bytes 336.00 bytes/sectotal size is 0 speedup is 0.00# ls test2/1 123.txt 2 3

上例中,test2/目錄并沒有刪除123.txt。下面加上--delete選項,示例如下:

# rsync -av --delete test1/ test2/sending incremental file listdeleting 123.txtsent 84 bytes received 23 bytes 214.00 bytes/sectotal size is 0 speedup is 0.00# ls test2/1 2 3

這里test2/目錄下的123.txt也被刪除了。

另外還有一種情況,就是如果在DST中增加文件了,而SRC當中沒有這些文件,同步時加上--delete選項后同樣會刪除新增的文件。如下所示:

# touch test2/4# ls test1/1 2 3# ls test2/1 2 3 4# rsync -a --delete test1/ test2/# ls test1/1 2 3# ls test2/1 2 3

6. 使用--exclude選項

具體用法如下:

# touch test1/4# rsync -a --exclude="4" test1/ test2/# ls test1/1 2 3 4# ls test2/1 2 3

該選項還可以與匹配字符*一起使用,如下所示:

# touch test1/1.txt test1/2.txt# ls test1/1 1.txt 2 2.txt 3 4# rsync -a --progress --exclude="*.txt" test1/ test2/sending incremental file list40 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/5)# ls test2/1 2 3 4

上例中,阿銘也使用了--progress選項,它主要是用來觀察rsync同步過程狀態的。

總而言之,平時你使用rsync同步數據時,使用-a選項基本上就可以達到想要的效果了。當有個別需求時,也會用到--no-OPTION、-u、 -L、--delete、--exclude以及--progress等選項。其他選項阿銘都沒有介紹,如果在以后的工作中遇到特殊需求,可以查一下rsync的man文檔。

14.7.3rsync應用實例

上面列舉了許多小案例,都是為了讓大家熟悉rsync各個選項的基本用法。本節正式介紹rsync的實際應用,請大家認真學習。在正式試驗前,你需要準備兩臺Linux機器,因為下面的小案例都是從一臺機器復制文件到另一臺機器。前面阿銘也帶著大家克隆過一臺虛擬機,所以把那臺克隆的虛擬機打開即可,阿銘的兩臺機器IP地址分別為192.168.72.128和192.168.72.129。

1. 通過ssh的方式

在之前介紹的rsync的5種命令格式中,第二種和第三種(一個冒號)就屬于通過ssh的方式備份數據。這種方式其實就是讓用戶登錄到遠程機器,然后執行rsync的任務:

# rsync -avL test1/ 192.168.72.129:/tmp/test2/The authenticity of host '192.168.72.129 (192.168.72.129)' can't be established.ECDSA key fingerprint is SHA256:gFHUJnoZAjOcnG95pt7Zg9iaPZGDiOrbZyssZtRoQhA.Are you sure you want to continue connecting (yes/no/[fingerprint])? yesWarning:Permanently added '192.168.72.129' (ECDSA) to the list of known hosts.root@192.168.72.129's password:sending incremental file listcreated directory /tmp/test211.txt22.txt34sent 377 bytes received 166 bytes 98.73 bytes/sectotal size is 0speedup is 0.00

這種方式就是前面介紹的第二種方式了,是通過ssh復制的數據,需要輸入192.168.72.129那臺機器root賬戶的密碼。

當然也可以使用第三種方式復制,如下所示:

# rsync -avL 192.168.72.129:/tmp/test2/ ./test3/root@192.168.72.129's password:receiving incremental file listcreated directory./test311.txt22.txt34sent 141 bytes received 389 bytes 117.78 bytes/sectotal size is 0speedup is 0.00

以上兩種方式如果寫入腳本,做備份麻煩,要輸入密碼,但我們可以通過密鑰(不設立密碼)驗證。下面阿銘具體介紹一下通過密鑰登錄遠程主機的方法。

你可以根據3.33節,把128機器上的公鑰內容放到129機器下的authorized_keys里面,這樣128機器登錄129機器時不再輸入密碼,如下所示:

# ssh 192.168.72.129Last login: Fri Jun 26 15:46:33 2020 from 192.168.72.1

現在不用輸入密碼也可以登錄主機129了。下面先從129主機退出來,再從主機128上執行一下rsync命令試試吧:

# rsync -avL test1/ 192.168.72.129:/tmp/test4/sending incremental file listcreated directory /tmp/test411.txt22.txt34sent 377 bytes received 166 bytes 362.00 bytes/sectotal size is 0 speedup is 0.00

2. 通過后臺服務的方式

這種方式可以理解為:在遠程主機上建立一個rsync的服務器,在服務器上配置好rsync的各種應用,然后將本機作為rsync的一個客戶端連接遠程的rsync服務器。下面阿銘就介紹一下如何配置一臺rsync服務器。

在128主機上建立并配置rsync的配置文件/etc/rsyncd.conf,如下所示(請把你的rsyncd.conf編輯成如下內容):

# vim /etc/rsyncd.confport=873log file=/var/log/rsync.logpid file=/var/run/rsyncd.pidaddress=192.168.72.128[test]path=/root/rsyncuse chroot=truemax connections=4read only=nolist=trueuid=rootgid=rootauth users=testsecrets file=/etc/rsyncd.passwdhosts allow=192.168.72.0/24

其中配置文件分為兩部分:全局配置部分和模塊配置部分。全局部分就是幾個參數,比如阿銘的rsyncd.conf中的port、log file、pid file和address都屬于全局配置;而[test]以下部分就是模塊配置部分了。一個配置文件中可以有多個模塊,模塊名可自定義,格式就像阿銘的rsyncd.conf中的這樣。其實模塊中的一些參數(如use chroot、max connections、udi、gid、auth users、secrets file以及hosts allow都可以配置成全局參數。當然阿銘并未給出所有的參數,你可以通過命令man rsyncd.conf獲得更多信息。

下面就簡單解釋一下這些參數的作用。

 

  • port:指定在哪個端口啟動rsyncd服務,默認是873端口。
  • log file:指定日志文件。
  • pid file:指定pid文件,這個文件的作用涉及服務的啟動、停止等進程管理操作。
  • address:指定啟動rsyncd服務的IP。假如你的機器有多個IP,就可以指定由其中一個啟動rsyncd服務,如果不指定該參數,默認是在全部IP上啟動。
  • []:指定模塊名,里面內容自定義。
  • path:指定數據存放的路徑。
  • use chroot true|false:表示在傳輸文件前,首先chroot到path參數所指定的目錄下。這樣做的原因是實現額外的安全防護,但缺點是需要roots權限,并且不能備份指向外部的符號連接所指向的目錄文件。默認情況下chroot值為true,如果你的數據當中有軟連接文件,阿銘建議你設置成false。
  • max connections:指定最大的連接數,默認是0,即沒有限制。
  • read only ture|false:如果為true,則不能上傳到該模塊指定的路徑下。
  • list:表示當用戶查詢該服務器上的可用模塊時,該模塊是否被列出,設定為true則列出,設定為false則隱藏。
  • uid/gid:指定傳輸文件時以哪個用戶/組的身份傳輸。
  • auth users:指定傳輸時要使用的用戶名。
  • secrets file:指定密碼文件,該參數連同上面的參數如果不指定,則不使用密碼驗證。注意,該密碼文件的權限一定要是600。
  • hosts allow:表示被允許連接該模塊的主機,可以是IP或者網段,如果是多個,中間用空格隔開。

 

編輯secrets file并保存后要賦予600權限,如果權限不對,則不能完成同步,如下所示:

# vi /etc/rsyncd.passwd //寫入如下內容test:test123# chmod 600 /etc/rsyncd.passwd

啟動rsyncd服務,如下所示:

# rsync --daemon --config=/etc/rsyncd.conf

啟動后可以查看一下日志,并查看端口是否啟動,如下所示:

# cat /var/log/rsync.log2020/06/26 17:43:11 [4680] rsyncd version 3.1.3 starting, listening on port 873#.NETstat -lnp |grep rsynctcp 0 0 192.168.72.128:873 0.0.0.0:* LISTEN 4680/rsync

如果想開機啟動rsyncd服務,請把/usr/bin/rsync --daemon --confg=/etc/rsyncd.conf寫入/etc/rc.d/rc.local文件。

為了不影響實驗過程,還需要把兩臺機器的firewalld服務關閉,并設置為不開機啟動,操作過程如下所示:

# systemctl stop firewalld ; systemctl disable firewalld //兩臺機器都執行Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.# rsync -avL test@192.168.72.128::test/test1/ /tmp/test5/Password:receiving incremental file listcreated directory /tmp/test511.txt22.txt34sent 141 bytes received 377 bytes 8.56 bytes/sectotal size is 0 speedup is 0.00

阿銘剛剛提到了選項use chroot,默認為true。首先在主機128的/root/rsync/test1/目錄下創建一個軟連接文件,如下所示:

# ln -s /etc/passwd /root/rsync/test1/test.txt# ls -l /root/rsync/test1/test.txtlrwxrwxrwx 1 root root 11 6月 26 17:47 /root/rsync/test1/test.txt -> /etc/passwd

然后再到主機129上執行同步,如下所示:

# rsync -avLtest@192.168.72.128::test/test1/ /tmp/test6/Password:receiving incremental file listsymlink has no referent: "/test1/test.txt" (in test)created directory /tmp/test611.txt22.txt34sent 141 bytes received 436 bytes 42.74 bytes/sectotal size is 0 speedup is 0.00rsync error: some files/attrs were not transferred (see previous errors) (code 23) atmain.c(1659) [generator=3.1.3]

從上例可以看出,如果設置use chroot為true,則同步軟連接文件會有問題。下面阿銘把主機128的rsync配置文件修改一下,把true改為false,如下所示:

# sed -i 's/use chroot=true/use chroot=false/'/etc/rsyncd.conf# grep 'use chroot' /etc/rsyncd.confuse chroot=false

然后再到主機129上再次執行同步,如下所示:

# rsync -avL test@192.168.72.128::test/test1/ /tmp/test7/Password:receiving incremental file listcreated directory/tmp/test711.txt22.txt34test.txtsent 160 bytes received 1,556 bytes 137.28 bytes/sectotal size is 1,113 speedup is 0.65

這樣問題就解決了。另外,修改完rsyncd.conf配置文件后不需要重啟rsyncd服務,這是rsync的一個特定機制,配置文件是即時生效的。

上面的例子中,阿銘都有輸入密碼,這意味著我們還是不能寫入腳本中自動執行。其實這種方式可以不用手動輸入密碼,它有兩種實現方式。

(1) 指定密碼文件

在客戶端(即主機129)上編輯一個密碼文件:/etc/pass,加入test用戶的密碼:

# vim /etc/pass //寫入如下內容test123

修改密碼文件的權限:

# chmod 600 /etc/pass

在同步時指定密碼文件,就可以省去輸入密碼的步驟,如下所示:

# rsync -avL test@192.168.72.128::test/test1/ /tmp/test8/ --password-file=/etc/passreceiving incremental file listcreated directory /tmp/test811.txt22.txt34test.txtsent 160 bytes received 1,556 bytes 149.22 bytes/sectotal size is 1,113 speedup is 0.65

(2) 在rsync服務端不指定用戶

在服務端(即主機128)上修改配置文件rsyncd.conf,刪除關于認證賬戶的配置項(auth user和secrets file這兩行),如下所示:

# sed -i 's/auth users/#auth users/;s/secrets file/#secrets file/' /etc/rsyncd.conf

上例是在auth users和secrets file這兩行的最前面加一個#,這表示將這兩行作為注釋,使其失去意義。在前面阿銘未曾講過sed的這種用法,它是用分號把兩個替換的子命令塊替換了。

然后我們再到客戶端主機129上進行測試,如下所示:

# rsync -avL test@192.168.72.128::test/test1/ /tmp/test9/receiving incremental file listcreated directory /tmp/test911.txt22.txt34test.txtsent 160 bytes received 1,556 bytes 163.43 bytes/sectotal size is 1,113 speedup is 0.65

注意,這里不用再加test這個用戶了,默認是以root的身份復制的。現在登錄時已經不需要輸入密碼了。

分享到:
標簽:rsync
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定