学习笔记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

浙公网安备 33010602011771号