Linux高效備份:rsync + inotify實時同步

一、rsync 簡介

rsync(Remote Sync)是 Linux 系統下的數據鏡像備份工具,支持本地復制、遠程同步(通過 SSH 或 rsync 協議),是一個快速、安全、高效的增量備份工具。


二、rsync 特性

  • 支持鏡像保存整個目錄樹和文件系統;
  • 保留文件權限、時間、軟硬鏈接等屬性;
  • 無須特殊權限即可安裝;
  • 增量備份:僅傳輸修改過的文件,支持壓縮傳輸,節省帶寬;
  • 安全:支持 SSH、SCP 等方式加密傳輸;
  • 支持匿名傳輸,常用于網站鏡像。

三、rsync 的認證協議

rsync 同步前需認證,支持兩種協議:

  1. SSH 協議(常用)
  2. rsync 協議(需啟動 rsyncd 服務)

若使用 SSH 認證,無需啟動 rsync 服務端守護進程,只需遠程主機的用戶名和密碼即可同步。若不想每次輸入密碼,可使用 ssh-keygen -t rsa 設置免密登錄。

常用命令示例:
# 默認使用 SSH 協議(省略 -e ssh)
rsync -avz /SRC root@192.168.100.20:/DEST# 指定 SSH 端口,默認是22
rsync -avz /SRC -e "ssh -p2222" root@192.168.100.20:/DEST
常用選項說明:
選項說明
-a, --archive歸檔模式,保留所有屬性
-v, --verbose顯示詳細輸出
-q, --quiet靜默模式,不輸出信息
-r, --recursive遞歸傳輸目錄
-p, --perms保留權限
-z, --compress壓縮傳輸
--delete刪除目標端有而源端沒有的文件

四、rsync 命令格式與工作模式

三種命令格式:
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
對應三種工作模式:
  1. 本地拷貝(SRC 和 DEST 均無冒號)
  2. 推送到遠程(DEST 包含 user@host:
  3. 從遠程拉取(SRC 包含 user@host:

五、rsync + inotify 實時同步

背景:

rsync 雖高效,但不實時。inotify 是 Linux 內核提供的文件系統事件監控機制,可監聽文件/目錄的創建、修改、刪除等事件。

組合優勢:
  • inotify 監控文件變化;
  • 觸發 rsync 實時同步;
  • 解決 rsync 非實時性的問題。

六、實戰配置:rsync + inotify 實時同步

環境說明:
服務器類型IP地址應用操作系統
源服務器192.168.100.10rsync + inotifyCentOS 7
目標服務器192.168.100.20rsync 服務端CentOS 7

目標:

將源服務器 /root/etc 實時同步到目標服務器的 /tmp 目錄。


配置時鐘同步,將源服務器當作時鐘服務器

源服務器:

[root@server ~] vim /etc/chrony.conf# Serve time even if not synchronized to a time source.
local stratum 10[root@server ~] systemctl restart chronyd
[root@server ~] systemctl enable chronyd
[root@server ~] hwclock -w

目標服務器:

[root@YDH tmp] vim /etc/chrony.conf
server 192.168.100.10 iburst[root@YDH tmp] systemctl restart chronyd
[root@YDH tmp] systemctl enable chronyd
[root@YDH tmp] hwclock -w
[root@YDH tmp] chronyc sources
210 Number of sources = 1MS Name/IP address         Stratum Poll Reach LastRx Last sample===============================================================================^? 192.168.100.10                0   8     0     -     +0ns[   +0ns] +/-    0ns

步驟一:目標服務器配置(接收端)

關閉防火墻和 SELinux

[root@YDH ~] systemctl stop firewalld
[root@YDH ~] systemctl disable firewalld
[root@YDH ~] setenforce 0
[root@YDH ~] sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux

安裝 rsync

yum -y install rsync

配置 /etc/rsyncd.conf

log file = /var/log/rsyncd.log
pidfile = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
secrets file = /etc/rsync.pass[etc_from_client]
path = /tmp/
comment = sync etc from client
uid = root
gid = root
port = 873
ignore errors = yes
use chroot = no
read only = no
list = no
max connections = 200
timeout = 600
auth users = admin
hosts allow = 192.168.100.10
hosts deny = 192.168.1.1

創建密碼文件并設置權限

[root@YDH tmp] echo 'admin:redhat' > /etc/rsync.pass
[root@YDH tmp] cat /etc/rsync.pass 
admin:redhat
#設置文件權限
[root@YDH tmp] chmod 600 /etc/rsync*
[root@YDH tmp] ll /etc/rsync*
-rw-------. 1 root root 384 Sep 20 16:14 /etc/rsyncd.conf
-rw-------. 1 root root  13 Sep 20 16:15 /etc/rsync.pass

啟動 rsync 服務并設置開機自啟

[root@YDH ~] rsync --daemon --config=/etc/rsyncd.conf
[root@YDH ~] echo 'rsync --daemon --config=/etc/rsyncd.conf' >> /etc/rc.d/rc.local
[root@YDH ~] netstat -tulnp | grep 873
tcp        0      0 0.0.0.0:873            0.0.0.0:*               LISTEN      2043/rsync          
tcp6       0      0 :::873                 :::*                    LISTEN      2043/rsync 

步驟二:源服務器配置(發送端)

關閉防火墻和 SELinux

[root@server ~] systemctl stop firewalld
[root@server ~] systemctl disable firewalld
[root@server ~] setenforce 0
[root@server ~] sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux

安裝 rsync 和 inotify-tools

[root@server ~] yum -y install rsync inotify-tools

創建密碼文件

[root@server ~] echo 'redhat' > /etc/rsync.pass
[root@server ~] cat /etc/rsync.pass 
redhat
[root@server ~] chmod 600 /etc/rsync.pass

測試同步是否正常

[root@server ~] mkdir -p /root/etc/test
mkdir: created directory '/root/etc'
mkdir: created directory '/root/etc/test'[root@server ~] rsync -avH --port 873 --progress --delete /root/etc/ admin@192.168.100.20::etc_from_client --password-file=/etc/rsync.passsending incremental file list
deleting .font-unix/
deleting .esd-0/socket
deleting .esd-0/
deleting .XIM-unix/
deleting .X11-unix/X1024
deleting .X11-unix/
deleting .Test-unix/
deleting .ICE-unix/1486
deleting .ICE-unix/
deleting .viminfo
deleting .X1024-lock
./
test/sent 77 bytes  received 191 bytes  536.00 bytes/sec
total size is 0  speedup is 0.00
#運行完成后,在目標服務器上查看,在/tmp目錄下有test目錄,說明數據同步成功
[root@YDH ~] cd /tmp/
[root@YDH tmp] ls
test

步驟三:配置實時同步腳本

安裝inotify-tools工具,實時觸發rsync進行同步

#查看服務器內核是否支持inotify
[root@server ~] ll /proc/sys/fs/inotify
total 0
-rw-r--r--. 1 root root 0 Sep 20 16:54 max_queued_events
-rw-r--r--. 1 root root 0 Sep 20 16:54 max_user_instances
-rw-r--r--. 1 root root 0 Sep 20  2022 max_user_watches
#如果有這三個max開頭的文件則表示服務器內核支持inotify#安裝inotify-tools
[root@server ~] yum -y install make gcc gcc-c++[root@server ~] yum -y install inotify-tools#寫同步腳本,此步乃最最重要的一步,請慎之又慎。讓腳本自動去檢測我們制定的目錄下 \
#文件發生的變化,然后再執行rsync的命令把它同步到我們的服務器端去[root@server ~] mkdir /yangduhan
[root@server ~] touch /yangduhan/inotify.sh
[root@server ~] chmod +x /yangduhan/inotify.sh

創建監控腳本 /yangduhan/inotify.sh

[root@server ~] vim /yangduhan/inottify.sh#!/bin/bash	
host=192.168.100.20		# 目標服務器的ip(備份服務器)
src=/root/etc			# 在源服務器上所要監控的備份目錄(此處可以自定義,但是要保證存在)
des=etc_from_client		# 自定義的模塊名,需要與目標服務器上定義的同步名稱一致
password=/etc/rsync.pass	# 執行數據同步的密碼文件
user=admin				# 執行數據同步的用戶名
inotifywait=/usr/bin/inotifywait$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' \-e modify,delete,create,attrib $src | while read files; dorsync -avzP --delete --timeout=100 --password-file=$password $src $user@$host::$desecho "${files} was rsynced" >> /tmp/rsync.log 2>&1
done

賦予執行權限并后臺運行

[root@server ~] chmod +x /yangduhan/inotify.sh
[root@server ~] nohup /bin/bash /yangduhan/inotify.sh &
[1] 32503nohup: ignoring input and appending output to 'nohup.out'[root@server ~] ps -ef | grep inotify
root       32503    2458  0 17:05 pts/1    00:00:00 bash /yangduhan/inotify.sh
root       32504   32503  0 17:05 pts/1    00:00:00 /usr/bin/inotifywait -mrq --timefmt %Y%m%d %H:%M --format %T %w%f%e -e modify,delete,create,attrib /root/etc
root       32505   32503  0 17:05 pts/1    00:00:00 bash /yangduhan/inotify.sh
root       32510    2458  0 17:05 pts/1    00:00:00 grep --color=auto inotify

設置開機自啟

echo 'nohup /bin/bash /yangduhan/inotify.sh &' >> /etc/rc.d/rc.local

步驟四:驗證實時同步

在源服務器創建文件:

[root@localhost ~] touch /root/etc/ydh123

查看日志:

[root@server ~] tail -f /tmp/rsync.log
20220920 17:06 /root/etc/ydh123CREATE was rsynced
20220920 17:06 /root/etc/ydh123ATTRIB was rsynced
#從日志上可以看到,我們生成了一個test文件,并且添加了內容到其里面

在目標服務器檢查:

ls /tmp/etc/

源服務器中,設置腳本開機啟動:

[root@server ~] chmod +x /etc/rc.d/rc.local 
[root@server ~] ll /etc/rc.d/rc.local 
-rwxr-xr-x. 1 root root 474 Mar 24  2020 /etc/rc.d/rc.local
[root@server ~] echo 'nohup /bin/bash /yangduhan/inotify.sh &' >> /etc/rc.d/rc.local
[root@server ~] tail /etc/rc.d/rc.local 
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.touch /var/lock/subsys/localnohup /bin/bash /yangduhan/inotify.sh &#到目標服務器上去查看是否把新生成的文件自動傳上去了:
[root@YDH tmp] ls
etc  test
[root@YDH tmp] cd etc/
[root@YDH etc] ls
yangduhan123  test
[root@YDH etc] pwd
/tmp/etc#由此可見,已將源服務器的/root/etc目錄整個同步到了目標服務器,且新增的test文件也自動同步了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94044.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94044.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94044.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一種通過模板輸出Docx的方法

起因在2個群里都有網友討論這個問題,俺就寫了一個最簡單的例子。其實,我們經常遇到一些Docx的輸出的需求,“用模板文件進行處理”是最簡單的一個方法,如果想預覽也簡單 DevExpress 、Teleric 都可以,而且也支持 Web 、…

探索 List 的奧秘:自己動手寫一個 STL List?

📖引言大家好!今天我們要一起來揭開 C 中 list 容器的神秘面紗——不是直接用 STL,而是親手實現一個簡化版的 list!🎉你是不是曾經好奇過:list 是怎么做到高效插入和刪除的?🔍迭代器…

mysql占用高內存排查與解決

mysql占用高內存排查-- 查看當前全局內存使用情況(需要啟用 performance_schema) SELECT * FROM sys.memory_global_total; -- 查看總內存使用 SELECT * FROM sys.memory_global_by_current_bytes LIMIT 10; -- 按模塊分類查看內存使用排行memory/perfor…

構建真正自動化知識工作的AI代理

引言:新一代生產力范式的黎明 自動化知識工作的人工智能代理(AI Agent),或稱“智能體”,正迅速從理論構想演變為重塑各行各業生產力的核心引擎。這些AI代理被定義為能夠感知環境、進行自主決策、動態規劃、調用工具并持…

青少年機器人技術(四級)等級考試試卷-實操題(2021年12月)

更多內容和歷年真題請查看網站:【試卷中心 -----> 電子學會 ----> 機器人技術 ----> 四級】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 青少年機器人技術(四級)等級考試試卷-實操題(2021年12月) …

最新短網址源碼,防封。支持直連、跳轉。 會員無廣

最新短網址源碼,防封。支持直連、跳轉。 會員無廣告1.可將長網址自動縮短為短網址,方便記憶和使用。2.短網址默認為臨時有效,可付費升級為永久有效,接入支付后可自動完成,無需人工操作。3.系統支持設置圖片/文字/跳轉頁…

緩存-變更事件捕捉、更新策略、本地緩存和熱key問題

緩存-基礎知識 熟悉計算機基礎的同學們都知道,服務的存儲大多是多層級的,呈現金字塔類型。通常來說本機存儲比通過網絡通信的外部存儲更快(現在也不一定了,因為網絡傳輸速度很快,至少可以比一些過時的本地存儲設備速度…

報表工具DevExpress .NET Reports v25.1新版本亮點:AI驅動的擴展

DevExpress Reporting是.NET Framework下功能完善的報表平臺,它附帶了易于使用的Visual Studio報表設計器和豐富的報表控件集,包括數據透視表、圖表,因此您可以構建無與倫比、信息清晰的報表。 DevExpress Reporting控件日前正式發布了v25.1…

kubernetes中pod的管理及優化

目錄 2 資源管理方式 2.1 命令式對象管理 2.2 資源類型 2.2.1 常用的資源類型 2.2.2 kubectl常見命令操作 2.3 基本命令示例 2.4 運行和調試命令示例 2.5 高級命令示例 3 pod簡介 3.1 創建自主式pod(生產環境不推薦) 3.1.1 優缺點 3.1.2 創建…

解釋一下,Linux,shell,Vmware,Ubuntu,以及Linux命令和shell命令的區別

Linux 操作系統概述Linux 是一種開源的類 Unix 操作系統內核,由 Linus Torvalds 于 1991 年首次發布。作為現代計算的基礎設施之一,它具有以下核心特征:多用戶多任務特性允許多個用戶同時操作系統資源,而模塊化設計使其能夠適應從…

Windows 系統中,添加打印機主要有以下幾種方式

在 Windows 系統中,添加打印機主要有以下幾種方式,我將從最簡單到最復雜為您詳細介紹。 方法一:自動安裝(推薦首選) 這是 Windows 10 和 Windows 11 中最簡單、最現代的方法。系統會自動搜索網絡(包括無線和有線網絡)上可用的打印機并安裝驅動程序。 操作步驟: 進入…

Mixture of Experts Guided by Gaussian Splatters Matters

Mixture of Experts Guided by Gaussian Splatters Matters: A new Approach to Weakly-Supervised Video Anomaly Detection ICCV2025 https://arxiv.org/pdf/2508.06318 https://github.com/snehashismajhi/GS-MoEAbstract 視頻異常檢測(VAD)是一項具有…

SeaTunnel Databend Sink Connector CDC 功能實現詳解

Databend 是一個面向分析型工作負載優化的 OLAP 數據庫,采用列式存儲架構。在處理 CDC(Change Data Capture,變更數據捕獲)場景時,如果直接執行單條的 UPDATE 和 DELETE 操作,會嚴重影響性能,無…

算法230. 二叉搜索樹中第 K 小的元素

題目:給定一個二叉搜索樹的根節點 root ,和一個整數 k ,請你設計一個算法查找其中第 k 小的元素(從 1 開始計數)。示例 1:輸入:root [3,1,4,null,2], k 1 輸出:1 示例 2&#xff1…

Seaborn數據可視化實戰:Seaborn多變量圖表繪制高級教程

Seaborn多變量圖表實戰:從數據到洞察 學習目標 本課程將帶領學員深入了解Seaborn庫中用于繪制多變量圖表的高級功能,包括聯合圖(Joint Plot)、對角線圖(Pair Plot)等。通過本課程的學習,學員將能…

【數智化人物展】首衡科技CTO李蒙:算法會過時,數據會貶值,只有系統智能才具未來性

李蒙本文由首衡科技CTO李蒙投遞并參與由數智猿數據猿上海大數據聯盟共同推出的《2025中國數智化轉型升級先鋒人物》榜單/獎項評選。大數據產業創新服務媒體——聚焦數據 改變商業“算法會過時,數據會貶值。”當我第一次在內部戰略會上拋出這句話時,現場…

word——將其中一頁變成橫向

在word中如何將其中一頁變成橫向? 在需要橫向的這一頁和上一頁插入分節符(連續) 1.點擊布局→分隔符→分節符(連續) 2.在所需要橫向頁將紙張方向改為橫向即可。

使用WORD實現論文格式的樣式化制作【標題樣式、自動序列、頁號(分節)、自動目錄(修改字體類型)】

背景 每家院校對論文的格式都有一系列的特定要求,相應的會有一份格式標準的說明文檔,該說明文檔中會羅列對文檔各個項的格式標準要求(例如:題目、1級標題、2級標題、頁號、每個級別的字體字號,行距,段前段…

分享一個免費開源的網站跟蹤分析工具Open-Web-Analytics(和GoogleAnalytics一樣)

做獨立網站的福音,這個是免費開源的,可增改性強。 開源地址:https://github.com/Open-Web-Analytics/Open-Web-Analytics 下載源碼包 接著下載PHP工具:我用XP小皮 phpstudy_pro 地址:phpStudy - Windows 一鍵部署 …

Maxscript如何清理3dMax場景?

在3ds Max的創作過程中,隨著項目的推進,場景往往會積累許多冗余元素,如孤立幫助對象、隱藏對象以及空層等,它們不僅讓場景顯得雜亂無章,還會占用資源、降低視口性能,影響工作效率。別擔心,在本教程中,我們將為大家帶來實用妙招——通過簡單的Maxscript腳本片段,快速清…