在Linux系统中,文件同步是数据备份、多节点数据一致性维护的核心操作,不同的同步场景可以选择不同的工具和方法,下面介绍几种常用的实现方案。
一、使用sync命令进行基础同步
sync命令是Linux系统自带的强制将内存中的文件系统缓冲区数据写入磁盘的工具,适合简单的本地数据落盘同步场景,本身不具备目录对比同步的能力,通常配合其他操作使用。
如果需要将当前所有未写入磁盘的缓冲数据同步到磁盘,直接执行以下命令即可:
# 强制将所有内存中的文件系统缓冲数据写入磁盘 sync
该命令没有额外参数,执行后会阻塞直到所有数据写入完成,适合在系统关机、卸载磁盘前执行,避免数据丢失。
二、使用rsync工具实现灵活同步
rsync是Linux下最常用的文件同步工具,支持本地目录同步、远程服务器同步,具备增量同步、权限保留、排除指定文件等高级功能,大部分Linux发行版默认已经安装该工具,如果没有安装可以通过包管理器安装。
1. 本地目录同步
将源目录的所有内容同步到目标目录,保留文件权限、时间戳等属性,执行以下命令:
# 将 /data/source 目录内容同步到 /data/backup 目录 # -a 归档模式,保留权限、时间戳等属性 # -v 显示同步过程详情 # -z 传输时压缩数据 rsync -avz /data/source/ /data/backup/
注意源目录后面的斜杠,如果带斜杠表示同步目录内的内容,不带斜杠会同步整个目录本身。
2. 远程服务器同步
如果需要将本地文件同步到远程服务器,或者从远程服务器拉取文件,rsync支持通过SSH协议传输,示例如下:
# 将本地 /data/source 目录同步到远程服务器 192.168.0.1 的 /data/backup 目录 rsync -avz -e ssh /data/source/ root@192.168.0.1:/data/backup/ # 从远程服务器拉取文件到本地 rsync -avz -e ssh root@192.168.0.1:/data/backup/ /data/source/
3. 常用参数说明
| 参数 | 作用说明 |
|---|---|
| --delete | 删除目标目录中源目录不存在的文件,保证目标目录和源目录完全一致 |
| --exclude | 排除指定文件或目录,例如 --exclude="*.log" 排除所有日志文件 |
| -n | 模拟同步过程,不实际执行操作,用于测试同步命令是否符合预期 |
三、结合inotify-tools实现实时同步
rsync默认需要手动触发或者配合定时任务执行,如果需要实现文件变化后自动同步,可以结合inotify-tools监听文件系统事件,触发rsync同步操作。
1. 安装inotify-tools
CentOS系统安装命令:
yum install -y inotify-tools
Ubuntu系统安装命令:
apt-get install -y inotify-tools
2. 编写实时同步脚本
创建同步脚本 /usr/local/bin/real_time_sync.sh,内容如下:
#!/bin/bash
# 源目录
SRC_DIR="/data/source/"
# 目标目录
DEST_DIR="/data/backup/"
# 远程同步地址,本地同步可以注释该部分,直接执行本地rsync
REMOTE_USER="root"
REMOTE_IP="192.168.0.1"
REMOTE_DIR="/data/backup/"
# 监听源目录的创建、修改、删除、移动事件
inotifywait -mrq --format '%Xe %w%f' -e create,modify,delete,move $SRC_DIR | while read event file
do
# 本地同步
rsync -avz $SRC_DIR $DEST_DIR
# 远程同步,如果需要远程同步取消下面注释
# rsync -avz -e ssh $SRC_DIR $REMOTE_USER@$REMOTE_IP:$REMOTE_DIR
echo "$(date '+%Y-%m-%d %H:%M:%S') 同步完成,事件:$event,文件:$file"
done
给脚本添加执行权限:
chmod +x /usr/local/bin/real_time_sync.sh
3. 后台运行脚本
使用nohup将脚本放到后台运行,避免终端关闭后脚本停止:
nohup /usr/local/bin/real_time_sync.sh > /var/log/real_time_sync.log 2>&1 &
如果需要开机自动启动,可以将启动命令添加到/etc/rc.d/rc.local文件中,记得给rc.local添加执行权限。
四、同步注意事项
- 执行同步操作前,建议先使用rsync的-n参数模拟同步过程,确认同步范围符合预期,避免误删目标目录文件。
- 远程同步如果使用密码登录,建议配置SSH免密登录,避免脚本执行时需要手动输入密码。
- 实时同步场景下,如果文件变化频率过高,可能会触发多次同步,可以适当添加同步间隔时间,避免资源占用过高。
- 同步重要数据前,建议先对目标目录做快照备份,防止同步异常导致数据丢失。
rsyncLinux文件同步inotify-toolssync命令修改时间:2026-06-30 16:00:59