rsync詳細配置及各種玩法

来源:https://www.cnblogs.com/masterkx/archive/2018/01/16/8299238.html
-Advertisement-
Play Games

名詞區分:sync:同步async:非同步rsync:遠程同步 rsync 特點:1,可以鏡像保存整個目錄樹和文件系統2,容易做到保留原有的許可權(permission,mode),owner,group,時間(修改時間,modify time),軟硬鏈接,文件acl,文件attributes等3,傳輸 ...


名詞區分:
sync:同步
async:非同步
rsync:遠程同步

rsync 特點:

1,可以鏡像保存整個目錄樹和文件系統
2,容易做到保留原有的許可權(permission,mode),owner,group,時間(修改時間,modify time),軟硬鏈接,文件acl,文件attributes等
3,傳輸效率高,使用同步演算法,只比較變化的
4,支持匿名傳輸,方便網站鏡像;也可以做驗證,加強安全


rsync 參數介紹 (常用 -av)
-v verbo
-a 歸檔模式,遞歸的方式傳輸文件,並保持文件的屬性
-l 保留軟鏈接
-R 保留相對路徑
-H 保留硬鏈接
-p ,-o,-g,-A 分別保留許可權,屬主,屬組,acl等,但如果加了-a,這些就都包括了
-D 等於--devices --specials 表示支持b,c,s,p類型的文件
用法舉例:
rsync -av /home/ /backup/ --本機上的同步,把/home目錄下的內容同步到/backup目錄下(包括隱藏文件)
rsync -av /home/ 10.1.1.218:/backup/ --把本地的/home目錄內容,同步到遠端218的/backup目錄下,需要遠程的10.1.1.218的密碼
rsync -av 10.1.1.218:/backup/ /backup/ --把遠端218的/backup目錄下的內容同步到本地的/backup目錄,需要遠程的10.1.1.21的密碼
rsync -a /test/ '-e ssh -p 2222' 10.1.1.218:/test1/ --如果遠程機10.1.1.218的ssh埠不為預設的22,比如改成了2222,那麼需要這樣寫
註意的問題:
1.同步時保留原路徑,也就是把/home同步到/backup會變成/backup/home/*再內容

--原目錄後面加不加/也影響你的同步

下麵這三個有區別:
rsync -av /home/ /backup/ --/home下的內容直接同步到/backup下

rsync -av /home /backup/
rsync -aRv /home/ /backup/ --這兩上是/home被同步成/backup/home/*

# rsync -av /share/20171225 /backup/ --被同步成/backup/20171225/*

# rsync -aRv /share/20171225 /backup/ --被同步成/backup/share/20171225/*

rsync -aHAX --delete /test/ /test1/ --比較完整的一個寫法 (加上--delete 參數,源文件刪除了,同步目標文件也會跟著刪除)

可以把rsync做成服務(daemon)的形式,並加上一些控制功能,日誌記錄功能,匿名或驗證登錄功能等等。

首先

yum -y install rsync

 



要求一:僅做成服務除了首頁文件不添加其餘參數
第一步
vim /etc/rsyncd.conf --修改配置文件man rsyncd.conf參考幫助
motd file=/etc/rsyncd.welcome --歡迎文件,路徑自定義

[notes] --共用給客戶端看到的名字,名字自定義
path=/share/20171225/ --實際共用的伺服器路徑,名字必須是你要共用的實際路徑

vim /etc/rsyncd.welcome --手動建立自己定義的motd文件,並寫上自定義的歡迎信息,wq保存即可。
第二步
systemctl restart rsyncd
systemctl enable rsyncd
lsof -i:873 --重啟服務,並檢查埠是否為監聽狀態
第三步: 客戶端查看
rsync -a 192.168.2.9:: --直接這樣可以查看192.168.2.9這個伺服器共用了哪些
"hello today! @_@" --這就是你rsyncd.welcome里寫的歡迎內容
notes --這就是共用的名字

或者直接將分享的文件同步過來(註意服務端IP後面接兩個冒號,再接的是你自定義的標簽名,無需再添加路徑)
rsync -a 192.168.2.9::notes /notes/

要求二:添加特殊控制參數
1.把日誌記錄到/var/log/rsyncd.log
2.共用模塊要求隱藏(也就是說客戶端查看不到這個模塊名)
3.並且同時只能1個客戶端連接進行同步這個module
4.只能允許192.168.2.x(ip你自定義)同步這個vim /etc/rsyncd.conf
vim /etc/rsyncd.conf --依舊是修改配置文件,加上控制參數

motd file=/etc/rsyncd.welcome
syslog facility=local0 --日誌載體改為local0

[notes]
path=/share/20171215/
log file=/var/log/rsyncd.log --此日誌時間用的是格林威治時間
#syslog facility=local0 --時間沒問題,但此參數要寫在global參數里並結合rsyslog才能產生日誌(應該算是一個小bug,但以前rhel6也有此情況)
list=false --隱藏列表
max connections=1 --控制最大連接數
hosts allow=192.168.2.X --控制訪問IP

重啟服務
systemctl restart rsyncd

要求三:實現實時同步(源文件發生變化就觸發同步)
inotify+rsync


筆記目錄下/program/inotify_soft/inotify-tools-3.13.tar.gz --需要安裝的軟體

# tar xf inotify-tools-3.13.tar.gz -C /usr/src/
# cd /usr/src/inotify-tools-3.13/
# ./configure
# make
# make install

--安裝完後,就會產生下麵兩個命令
/usr/local/bin/inotifywait
/usr/local/bin/inotifywatch

1)實現單向本地目錄實時同步
測試本機/src目錄里一有(增,刪,改,屬性改變),就會同步到/dst目錄

--使用下麵的腳本來做


#vim /tmp/1.sh

#!/bin/bash

/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib,move /src |while read events --第一行表示發生增刪改就觸發
do
rsync -a --delete /src/ /dst/
echo "`date +'%F %T'`出現事件$events" >> /var/log/rsync.log 2>&1 --指嚮日志路徑
done

 



# nohup sh /tmp/1.sh & --使用nohup掛起到後臺執行,終端關閉,這個進程也不會被關閉
--如果你希望實現開機自動啟動,可以把此命令加到/etc/rc.local里,或者寫成shell服務腳本,讓其支持chkconfig開機自動啟動


再然後對/src進行各種操作,驗證可以實時同步到/dst

--課後可以上網查下sersync工具



2)實現雙向本地目錄的實時同步
也有相關的軟體(比如unison)可以專門來做雙向的實時同步
但我們就可以用inotify反向再做一次再寫一個腳本也一樣可以簡單去實現



==============================================================================


需求四:遠程實時同步

方法一,使用ssh等效性(ssh密鑰登錄)讓遠程機器連接不需要密碼,就很容易使用遠程監控或同步了


實現把10.1.1.1上的/src目錄實時同步到10.1.1.2上的/dst目錄
10.1.1.1 /src目錄 10.1.1.2 /dst目錄


在10.1.1.1上產生一對密鑰 --Linux上產生密匙的常用方法,互動式
# ssh-keygen --會讓你輸入密碼文件保存路徑
# ssh-copy-id -i 10.1.1.2
# ssh-add /root/.ssh/id_rsa


然後實現遠程實時同步,只需要在原來的腳本基礎上把遠程目錄前加上遠程IP就可以了(因為做了ssh等效性,不需要密碼)

#!/bin/bash

/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib,move /src |while read events
do
rsync -a --delete /src/ 10.1.1.2:/dst/
echo "`date +'%F %T'`出現事件events" >> /var/log/rsync.log 2>&1
done

 



方法二:不做上面方法一的ssh密鑰,使用expect腳本來解決密碼問題

#!/bin/bash

/usr/local/bin/inotifywait -mrq -e modify,delete,create,move /src |while read events
do
sed -i '/^10.1.1.2 /d' /root/.ssh/known_hosts
expect <<EOF &> /dev/null
spawn rsync -a --delete /src/ 10.1.1.2:/dst/
expect "no)?"
send "yes\r"
expect "password:"
sleep 2
send "123456\r"
expect eof
EOF
echo "`date +'%F %T'`出現事件events" &>> /var/log/rsync.log
done

 



測試:要先把上面執行的腳本進程都kill掉,再重新執行這個腳本來驗證




方法三,inotify+rsync+nfs
這個方法的思路是:把遠程的目錄通過nfs服務掛載到本地,然後當做本地目錄一樣來使用,這樣就避免了rsync同步遠程時要輸密碼的問題
在rhel6.5測試為:使用innotify監控遠程nfs掛載的目錄再同步到本地目錄,無法成功;(在遠程機器操作,不會同步到本地。但在掛到本地的目錄操作,也會同步到本地。原因:就是inotify只能監控本機上的目錄,不能監控另外一臺機器上的目錄)
但是反過來,使用innotify監控本地目錄,再同步到遠程nfs掛載的目錄,可以成功



實現把10.1.1.1上的/src目錄實時同步到10.1.1.2上的/dst目錄
10.1.1.1 /src目錄 10.1.1.2 /dst目錄

步驟1:
在10.1.1.2上
# vim /etc/exports --nfs控制掛載參數的配置文件
/dst *(rw,no_root_squash)
# systemctl restart nfs

步驟2:
在10.1.1.1上
# mkdir /dst/
# mount -t nfs 10.1.1.2:/dst /dst --掛載過來,那麼/dst目錄就是10.1.1.2上的遠程/dst目錄了

步驟3:
執行上面講的兩個本地目錄同步一樣的腳本,測試就可以了

#vim /tmp/1.sh

#!/bin/bash

/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib,move /src |while read events
do
rsync -a --delete /src/ /dst/
echo "`date +'%F %T'`出現事件$events" >> /var/log/rsync.log 2>&1
done

 


#nohup sh /tmp/1.sh &

步驟4:
測試(過程省略)但註意在測試之前把前面例子運行的腳本進程通過ps找出來,並kill掉

--擴展,如果把nfs換成samba服務,通過mount -t cifs指令把遠程samba共用目錄掛載到本地,是否可行?





方法四,使用rsync的secrets file的方法然後寫腳本

例:
本地同步端 ----->遠程被同步端
10.1.1.1 10.1.1.2
我要實現把本地同步端10.1.1.1上的/src/目錄里的內容實時同步到遠程被同步端10.1.1.2的/dst/目錄


準備:
關閉iptables和selinux
主機名綁定
時間同步


實現過程
第一大步:在遠程被同步端10.1.1.2上操作
# mkdir /dst/ --創建測試的被同步目錄

# yum install rsync

# vim /etc/rsyncd.conf
uid=root
gid=root --這裡指定使用root身份同步到10.1.1.2,否則預設使用nobody用戶(這樣你需要把/dst/目錄改成757的許可權,才有許可權寫)

[testsource]
path=/dst/
ignore errors
read only=no --服務級別給寫許可權
auth users=test --驗證的用戶取名為test(此用戶與系統用戶無關)
secrets file=/etc/rsyncd.secrets --驗證用戶test的用戶名和密碼的存放文件,此文件需要同步端和被同步端都要有(這樣我們就可以用
這種方式來進行驗證,而不需要遠程的ssh密碼驗證了)
hosts allow=10.1.1.1 --進一步加強安全,只允許10.1.1.1同步


# vim /etc/rsyncd.secrets --創建這個密碼文件,用戶名要與上面的auth users指定的一致,密碼隨意(我這裡以321來測試)
test:321

# chmod 600 /etc/rsyncd.secrets --為了安全性,把許可權改成600,只讓root讀寫(很多其它軟體的密碼文件也會要求你改成600許可權)



# systemctl restart rsyncd --重啟服務
# systemctl enable rsyncd

# netstat -ntlup |grep :873 --驗證873埠是否啟動
tcp 0 0 :::873 :::* LISTEN 50438/xinetd


第二大步:在本地同步端10.1.1.1上操作
先安裝inotify軟體,步驟參照上面過程,這裡省略

# mkdir /src/ --創建測試的同步目錄
# vim /etc/rsyncd.secrets --也要創建這個密碼文件,裡面只寫密碼就可以了。用戶我們在後面的腳本里的命令里指定
321
# chmod 600 /etc/rsyncd.secrets --也改成600的許可權

# vim /tmp/rsync.sh --腳本及其內容(這裡強調一下,這裡是測試方便,所以才放到/tmp下,生產環境可以放到/bin這種目錄下做成一個命令)

#!/bin/bash
/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib,move /src |while read events
do
rsync -a --delete --password-file=/etc/rsyncd.secrets /src/ test@10.1.1.2::testsource
done

 




# chmod 755 /tmp/1.sh --給執行許可權,方便執行

# nohup sh /tmp/1.sh & --後面掛起執行

# vim /etc/rc.local --加到rc.local里讓其開頭自動啟動
nohup sh /tmp/1.sh &

第三大步:
測試過程省略


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Confluence破解版 應用環境: Confluence是一個專業的企業知識管理與協同軟體,也可以用於構建企業wiki。通過它可以實現團隊成員之間的協作和知識共用. 系統及安裝軟體 centos7.2 java-1.8 mariadb atlassian-confluence-5.10.4.ta ...
  • 一、查找文件 find命令 在特定目錄下搜索符合條件的文件 find [路徑] -name “*.py” 查找指定路徑下拓展名是.py的文件,包括子目錄 如果省略路徑,表示在當前文件夾下查找 通配符也可以使用 二、軟鏈接(類似於快捷方式) ln -s 被鏈接的源文件鏈接文件 建立文件的軟鏈接 沒有- ...
  • 這是最簡單的GPIO介面模塊之一。三個引腳,VCC/GND/OUT。聲稱支持3.3-5V,檢測距離2-30cm。輸出僅2個狀態:有障礙或無障礙。當檢測到障礙物時OUT腳輸出低電平。上面有個電位器,可用以調整檢測距離,例如,我試著把它調整到約3cm,這時完全檢測不到黑色錶面。這樣就可以用來檢測黑白線, ...
  • 一、簡介 1、什麼是PXE PXE(Pre-boot Execution Environment,預啟動執行環境)是由Intel公司開發的最新技術,工作於Client/Server的網路模式,支持工作站通過網路從遠端伺服器下載映像,並由此支持通過網路啟動操作系統,在啟動過程中,終端要求伺服器分配IP ...
  • 參考:http://blog.csdn.net/luanwpp/article/details/7490871 參考: http://mp.weixin.qq.com/s?src=11&timestamp=1509778367&ver=493&signature=bWRs-rFvNNUU7DpqiU ...
  • 廢話不多說,上圖: 首先登錄http://www.phpstudy.net/download.html 下載安裝phpstudy,特別簡單不詳解; 創建一個本機項目並且與本機功能變數名稱進行綁定主要分為兩步; 1>.需要在站點功能變數名稱管理中將你創建的功能變數名稱與網站目錄進行綁定 2>.修改本地的hosts文件,將你的 ...
  • 修改docker預設網卡docker0的ip地址的方法: [root@centos7 ~]# cat /etc/docker/daemon.json 在此文件中添加如下一行,然後重啟服務。 { "bip": "192.168.0.1/24" } [root@centos7 ~]# systemctl ...
  • 在上一章,使uboot能夠支持nor、nand 本節繼續修改讓uboot支持DM9000C網卡,便可以通過網路來傳輸文件 首先uboot已帶有dm9000網卡的驅動,位於drivers/net/下的dm9000x.h、dm9000x.c 1.DM9000C介紹 參考之前寫的移植DM9000C驅動章節 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...