学习笔记511—Ubuntu rsync实现本地多目录实时同步到 NAS

主要完成:systemd 自启 + 挂载 NAS + 实时同步脚本

第一步:准备工作

1. 安装必要工具

打开终端,输入命令:

sudo apt update
sudo apt install rsync inotify-tools cifs-utils -y
  • rsync → 文件同步工具
  • inotify-tools → 监控文件变化,实现实时同步
  • cifs-utils → 用于挂载 NAS
2. 创建 NAS 挂载点
sudo mkdir -p /mnt/qnap
  • /mnt/qnap 是挂载 NAS 的目录
  • 确保当前用户有权限写入(稍后挂载时指定 uid/gid)

**3. 挂载 NAS

sudo mount -t cifs //172.30.12.130/homes/hcc /mnt/qnap \
  -o username=hcc,password=******,uid=1000,gid=1000,iocharset=utf8,file_mode=0775,dir_mode=0775
  • uid=1000,gid=1000 → 当前用户归属(在终端输入:id + 用户名 ,可以查询uid和gid)
  • file_mode=0775,dir_mode=0775 → 允许读写
  • 测试权限:
touch /mnt/qnap/testfile
ls /mnt/qnap
  • 成功创建文件 → 权限正常

第二步:创建实时同步脚本

1. 创建脚本文件
nano /home/wolf/Documents/realtime_sync.sh
2. 脚本内容(实时同步 + 跳过已同步文件 + 日志记录)
#!/bin/bash

# 本地目录数组
folders=(/mnt/disk1 /mnt/disk2 /home/wolf/Documents)

# NAS 目标目录
dest="/mnt/qnap/Sync/ubuntu-office-wolf"

# 日志文件
logfile="/home/wolf/Documents/realtime_sync.log"

# 循环监控每个目录
for folder in "${folders[@]}"; do
    folder_name=$(basename "$folder")
    inotifywait -m -r -e create,modify,delete,move "$folder" |
    while read path action file; do
        echo "$(date '+%Y-%m-%d %H:%M:%S') Detected $action on $file in $path" >> "$logfile"
        rsync -av --update "$folder/" "$dest/$folder_name/" >> "$logfile" 2>&1
    done &
done

echo "Realtime sync started..." >> "$logfile"
wait
3. 保存并退出
  • Ctrl + O → 回车保存
  • Ctrl + X → 退出 nano
4. 赋予执行权限
chmod +x /home/wolf/Documents/realtime_sync.sh

第三步:测试脚本

1. 直接运行
/home/wolf/Documents/realtime_sync.sh
  • 输出如下:
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
  • 脚本已经启动,实时监控目录变化
2. 测试同步
touch /mnt/disk1/testfile.txt
ls /mnt/qnap/Sync/ubuntu-office-wolf/disk1/
  • 如果看到 testfile.txt → 同步成功
3. 查看日志
tail -f /home/wolf/Documents/realtime_sync.log
  • 记录文件变化和 rsync 同步信息

第四步:后台运行脚本(tmux)

1. 创建 tmux 会话
tmux new -s qnap_sync
2. 在会话中运行脚本
/home/wolf/Documents/realtime_sync.sh
3. 脱离 tmux(后台运行)
  • Ctrl + B, 然后按 D
  • 脚本继续在后台运行
4. 回到 tmux 会话
tmux attach -t qnap_sync

第五步:开机自启(systemd)

1. 创建 systemd 服务文件
sudo nano /etc/systemd/system/realtime_sync.service

内容:

[Unit]
Description=Realtime NAS Sync
After=network.target

[Service]
Type=simple
User=wolf
ExecStart=/home/wolf/Documents/realtime_sync.sh
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
2. 重新加载 systemd
sudo systemctl daemon-reload
3. 启用开机自启
sudo systemctl enable realtime_sync.service
  • 输出:
Created symlink /etc/systemd/system/multi-user.target.wants/realtime_sync.service → /etc/systemd/system/realtime_sync.service.

4. 立即启动并检查状态
sudo systemctl start realtime_sync.service
sudo systemctl status realtime_sync.service
  • active (running) → 脚本正在后台运行
  • 查看日志:
journalctl -u realtime_sync.service -f
posted @ 2025-11-28 11:04  何弈  阅读(8)  评论(0)    收藏  举报
你好