Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 與 Windows 即時檔案同步實戰:Rsync + Inotify 架構部署指南

編輯:Linux 教學

前言

企業環境常需在多台伺服器間實現檔案即時同步,尤其跨平台同步需求日益增長。本文詳細記錄使用 Rsync + Inotify 架構,在兩台 Linux 主機間部署即時雙向同步的完整流程,並說明關鍵配置細節與常見坑點。

架構總覽

  • 主機 A(Server):192.168.254.201,運行 Rsync Daemon,提供同步儲存端
  • 主機 B(Client):192.168.254.202,運行 Inotify 監聽本地變更,觸發 Rsync 推送至 A
  • 同步目錄:/opt/image(主機 A)、/opt/rsync(主機 B)
  • 認證方式:Rsync 密碼檔(/etc/rsyncd.secrets)

第一階段:主機 A 配置

1. 建立同步目錄

mkdir -p /opt/image

2. 安裝 Rsync

# Gentoo
emerge rsync
# CentOS/RHEL
yum install rsync
# Ubuntu/Debian
apt-get install rsync

3. 編輯 Rsync Daemon 設定檔

vi /etc/rsyncd.conf
# 全域設定
uid = root
gid = root
use chroot = no
max connections = 10
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log

# 模組設定
[images]
path = /opt/image/
read only = no
auth users = rsyncuser
secrets file = /etc/rsyncd.secrets

4. 建立認證密碼檔

echo "rsyncuser:Password01" > /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets

5. 啟動服務並設定開機自啟

rsync --daemon --config=/etc/rsyncd.conf
echo "rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.local
chmod +x /etc/rc.local

第二階段:主機 B 配置

1. 建立同步目錄

mkdir -p /opt/rsync

2. 安裝 Rsync 與 Inotify-tools

# Gentoo
emerge rsync inotify-tools
# CentOS/RHEL
yum install rsync inotify-tools
# Ubuntu/Debian
apt-get install rsync inotify-tools

3. 建立客戶端認證密碼檔

echo "Password01" > /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets

4. 撰寫即時同步腳本

vi /root/InotifyRsync.sh
#!/bin/bash
# 即時同步腳本:監聽本地變更並推送至遠端

HOST="192.168.254.201"
SRC="/opt/rsync/"
DST="images"
USER="rsyncuser"
PASSFILE="/etc/rsyncd.secrets"

# inotifywait 參數說明:
# -m 持續監聽  -r 遞迴  -q 安靜模式
# --timefmt 時間格式  --format 輸出格式
# -e 監聽事件:modify(修改) delete(刪除) create(建立) move(移動) attrib(屬性變更)
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \
    -e modify,delete,create,move,attrib "$SRC" | \
while read TIME FILE; do
    echo "[$TIME] 偵測變更:$FILE"
    rsync -avzP --delete --password-file="$PASSFILE" "$SRC" "$USER@$HOST::$DST"
    echo "[$TIME] 同步完成:$FILE"
done

exit 0

5. 賦予執行權限並測試

chmod +x /root/InotifyRsync.sh
/root/InotifyRsync.sh &

6. 設定開機自啟

echo "/root/InotifyRsync.sh &" >> /etc/rc.local
chmod +x /etc/rc.local

Inotify 監聽事件完整列表

事件觸發條件
IN_ACCESS檔案被讀取
IN_MODIFY檔案被寫入(內容修改)
IN_ATTRIB檔案屬性變更(chmod、chown、touch)
IN_CLOSE_WRITE可寫檔案被關閉
IN_CLOSE_NOWRITE不可寫檔案被關閉
IN_OPEN檔案被開啟
IN_MOVED_FROM檔案被移出監聽目錄
IN_MOVED_TO檔案被移入監聽目錄
IN_CREATE目錄下建立新檔案/子目錄
IN_DELETE檔案/目錄被刪除
IN_DELETE_SELF監聽目錄本身被刪除
IN_MOVE_SELF監聽目錄本身被移動
IN_UNMOUNT檔案系統被卸載

常用組合事件:IN_CLOSE = IN_CLOSE_WRITE | IN_CLOSE_NOWRITE、IN_MOVE = IN_MOVED_FROM | IN_MOVED_TO

常見問題與優化建議

1. 避免頻繁觸發 rsync

Inotify 可能在短時間內產生大量事件(如大檔案寫入過程)。建議在腳本中加入去抖動邏輯:

# 簡易去抖動:累積事件 2 秒後再同步
inotifywait ... | while read TIME FILE; do
    echo "$FILE" >> /tmp/sync_queue
    sleep 2
    # 批次處理佇列
    if [ -s /tmp/sync_queue ]; then
        rsync ...
        > /tmp/sync_queue
    fi
done

2. 大量小檔案同步效能優化

  • 使用 rsync -a --delete --numeric-ids 避免 UID/GID 解析開銷
  • 考慮 --inplace 避免建立暫存檔(需評估風險)
  • 調整 --bwlimit 限制頻寬避免佔滿網路

3. 系統限制調整

# 增加 inotify 監聽上限(預設 8192,大目錄易不足)
echo "fs.inotify.max_user_watches=524288" >> /etc/sysctl.conf
sysctl -p

# 增加 inotify 佇列長度
echo "fs.inotify.max_queued_events=16384" >> /etc/sysctl.conf

4. 日誌輪替

配置 logrotate 處理 /var/log/rsync.log 避免磁碟爆滿。

跨平台延伸:Windows 客戶端同步

Windows 端可使用 cwRsync(Rsync Windows 移植版)搭配 WinInotify 或排程任務定時同步。或改用 FreeFileSync、Syncthing 等 GUI 工具實現跨平台即時同步。

結語

Rsync + Inotify 是 Linux 即時檔案同步的經典組合,具備輕量、高效、可靠特性。生產環境部署時,請務必關注:認證安全(SSH 金鑰優於密碼)、頻率控制(去抖動)、系統限制調整、監控告警(同步失敗通知)。掌握核心配置與優化技巧,即可構建穩定的多節點檔案同步體系。

Copyright © Windows教程網 All Rights Reserved