两台Linux服务器如何共享文件夹同步,什么方法最稳定?

两台Linux服务器共享文件夹同步,最靠谱的方案是用rsync配合inotify实现实时单向同步,或者用lsyncd做自动触发同步,双向同步则用unison。这几种工具都是开源免费的,在行业内用了很多年,稳定性经得起考验,接下来我会把这几种方案的具体配置步骤、适用场景和坑都讲清楚,帮你少走弯路。

两台linux服务器共享文件夹同步,先搞清楚你要单向还是双向

动手配置之前,先想明白一个核心问题:你的两台服务器数据流是单向的,还是双向的?

多台服务器之间怎么同步文件
加载中
多台服务器之间怎么同步文件

单向同步的场景很常见,比如主备架构,一台主服务器写数据,备份服务器只需要定期或者实时拉取主服务器的变更,这种情况用rsync就足够了,成本低,配置简单,带宽占用也可控。

双向同步则复杂得多,比如两台服务器都在对外提供服务,都有可能写入文件,需要互相合并,这种情况直接用rsync会出问题,因为rsync的镜像逻辑是“以源端为准”,两边互相覆盖会丢数据,得用unison这类专门做双向同步的工具,或者干脆上分布式文件系统(比如GlusterFS、Ceph),但后者架构重,小规模场景没必要。

另外还要考虑同步的实时性要求,如果允许几分钟的延迟,crontab定时rsync就够了,如果要求秒级响应,比如用户刚上传的文件立刻要在另一台服务器能访问到,那就要用inotify或lsyncd配合rsync做事件触发。

rsync+inotify实现linux服务器文件夹实时同步,配置步骤详解

这是目前用得最多的组合方案,rsync负责传输,inotify负责“盯着”目录变化,一旦有文件被创建、修改、删除,立刻触发rsync去同步。

环境假设和准备工作

假设有两台服务器,A服务器(源端)IP是192.168.1.10,B服务器(目标端)IP是192.168.1.20,我们要把A服务器上/data/wwwroot这个目录下的所有文件实时同步到B服务器的/data/wwwroot。

先检查两台服务器是否装了rsync:

rsync --version

如果没有,用包管理器装一下:

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

inotify-tools也需要装:

# CentOS/RHEL  
yum install -y inotify-tools
# Ubuntu/Debian
apt-get install -y inotify-tools

Linux内核从2.6.13版本开始就内置了inotify机制,所以不用额外打补丁,直接装工具集就能用。

配置SSH免密登录,让rsync能自动拉起

rsync走SSH通道是最省事的做法,不用单独启动rsync守护进程,先给A服务器生成密钥,然后把公钥放到B服务器上:

# 在A服务器执行
ssh-keygen -t rsa -b 4096
ssh-copy-id root@192.168.1.20

注意:

  • 生产环境建议用专用同步账号,别直接用root,权限控制得更精细。
  • 如果两台服务器之间有防火墙,记得放行22端口。
  • 密钥一定要设置好权限,chmod 600,否则SSH会拒绝使用。

编写inotify监控脚本

这是整个方案的核心,创建一个脚本文件/root/sync.sh:

#!/bin/bash
SRC_PATH=/data/wwwroot
DEST_SERVER=root@192.168.1.20
DEST_PATH=/data/wwwroot
/usr/bin/inotifywait -mrq --timefmt '%Y-%m-%d %H:%M:%S' --format '%w%f' 
-e create,modify,delete,move,attrib ${SRC_PATH} 
| while read file
do
    /usr/bin/rsync -avz --delete --progress ${SRC_PATH} ${DEST_SERVER}:${DEST_PATH}
done

两台Linux服务器如何共享文件夹同步,什么方法最稳定?

脚本的逻辑很简单:

  • -m表示持续监控,-r递归子目录,-q静默模式。
  • -e指定要监控的事件:创建、修改、删除、移动、属性变更。
  • 一旦有事件发生,就把整个目录同步过去。

给脚本加执行权限,然后放后台跑:

chmod +x /root/sync.sh
nohup /root/sync.sh > /dev/null 2>&1 &

脚本的坑和优化

别高兴太早,这个脚本有几个问题需要注意。

频繁触发导致rsync跑不完又启动新进程。 如果目录里文件很多,rsync传一次可能要几秒,但inotify事件可能一秒刷几十条,脚本会疯狂fork rsync进程,得加个锁:

#!/bin/bash
LOCK_FILE=/tmp/rsync_sync.lock
# 检查是否已有同步进程在跑
if [ -f "$LOCK_FILE" ]; then
    PID=$(cat $LOCK_FILE)
    if kill -0 $PID 2>/dev/null; then
        exit 0
    fi
fi
echo $$ > $LOCK_FILE
inotifywait -mrq --timefmt '%Y-%m-%d %H:%M:%S' --format '%w%f' 
-e create,modify,delete,move,attrib /data/wwwroot 
| while read file
do
    # 用flock避免并发
    flock -n 200
    /usr/bin/rsync -avz --delete /data/wwwroot root@192.168.1.20:/data/wwwroot
    flock -u 200
done 200>$LOCK_FILE

--delete参数双刃剑。 它保证目标端和源端完全一致,源端删了文件,目标端也会删,这在一个方向上是安全的,但如果有人误操作删了源端文件,目标端也会被删,根据实际需求决定是否保留这个参数。

大量小文件的场景效率低。 如果目录里是几万个图片文件,事件触发会很密集,建议把-e参数里的attrib事件去掉,减少无谓的触发,很多情况下,只监控create,modify,delete就够用了。

服务器重启后脚本不会自动启动。 把nohup那行写进/etc/rc.local,或者用systemd搞成一个服务,才能保证开机自启。

lsyncd让linux服务器文件实时同步更省心,配置更简洁

如果你觉得手写inotify脚本太麻烦,可以试试lsyncd,它把inotify和rsync包装成了配置文件,思路是一样的,但管理起来规范得多,支持故障自动重试,行为更可预测。

安装lsyncd:

# CentOS/RHEL
yum install -y lsyncd
# Ubuntu/Debian
apt-get install -y lsyncd

编辑配置文件/etc/lsyncd.conf:

settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status",
    inotifyMode = "CloseWrite",
    maxProcesses = 8,
    maxDelays = 5
}
sync {
    default.rsyncssh,
    source = "/data/wwwroot",
    host = "root@192.168.1.20",
    targetdir = "/data/wwwroot",
    excludeFrom = "/etc/lsyncd-exclude.lst",
    rsync = {
        archive = true,
        compress = true,
        delete = true,
        whole_file = false
    }
}

解释一下关键配置:

  • default.rsyncssh:通过SSH隧道跑rsync,不需要目标端开rsync服务。
  • inotifyMode = "CloseWrite":只在文件关闭写入后触发,减少中间态事件。
  • maxDelays:合并事件延迟,如果5秒内没新事件就执行同步,避免频繁触发。
  • 两台Linux服务器如何共享文件夹同步,什么方法最稳定?

排除文件列表/etc/lsyncd-exclude.lst,用法和rsync的exclude类似:

.tmp
.swp
.git/
cache/

启动lsyncd:

systemctl start lsyncd
systemctl enable lsyncd

lsyncd适合中等规模场景,业内专家指出,当同步文件数量级达到百万以上时,lsyncd的inotify事件处理也可能成为瓶颈,建议考虑分布式文件系统方案。

两台linux服务器双向文件同步用什么工具,unison了解一下

如果两台服务器都要写文件,那上面说的单向同步就不好使了,unison是双向同步的老牌工具,它记录每个文件的同步状态,能检测出哪些文件在哪一端被修改过,然后尝试合并。

举个例子:A服务器改了config.php,B服务器改了logo.png,unison会同时保留两边的修改,再把对方的变更拉到本地,如果同一个文件在两台服务器的修改时间相差不大且内容不同它会检测到冲突,然后根据配置决定保留哪一份,或者让你手动处理。

安装unison:

# 两台服务器都需要安装
yum install -y unison
# 或
apt-get install -y unison

然后编写同步配置,比如/root/sync/unison-default.prf:

root = /data/wwwroot
root = ssh://root@192.168.1.20//data/wwwroot
batch = true
auto = true
times = true
terse = true
silent = true
logfile = /var/log/unison.log

跑一次同步测试:

unison unison-default.prf -testServer

确认没问题后,用crontab定时跑双向同步:

/5     /usr/bin/unison /root/sync/unison-default.prf >> /var/log/unison.log 2>&1

不过说实话,双向同步是个高风险操作。 除非业务真的需要两台服务器同时读写同一份数据,否则不建议这么做,因为一旦出现冲突,你很难判断哪一份文件才是“正确”的,与其双向,不如好好评估业务架构,看看能不能把写操作收敛到一台服务器上,另一台只读。

同步之外的可选方案:分布式文件系统

如果两台服务器的数据用rsync同步不过来比如数据量上百TB,文件数量上千万,或者在网络丢失时两端都要保持读写能力那就得考虑上分布式文件系统了。

GlusterFS是目前比较轻量的选择,它把多台服务器的磁盘聚合为一个全局命名空间,客户端直接挂载使用,数据在后端自动复制多份,配置简单,没有中心节点,两台服务器组一个replica 2卷就够了。

Ceph则是重量级的,适合规模更大、需要高可靠性的场景,但它需要至少3个节点起步,运维成本明显高不少。

对于绝大多数只有两台服务器、数据量几百GB到几TB的场景,老老实实用rsync或lsyncd就够了,没必要上分布式文件系统给自己增加维护负担,分布式文件系统的架构复杂度是“非必要不上”的,上了可能比业务本身还难维护。

全量对比:几种Linux服务器共享文件夹同步方案选型参考

两台Linux服务器如何共享文件夹同步,什么方法最稳定?

方案 同步方向 实时性 配置难度 适用场景 风险点
crontab + rsync 单向 分钟级延迟 低 备机、异地灾备 数据丢失窗口大
inotify + rsync 单向 秒级 中 主备实时同步、Web文件发布 脚本自身稳定性和并发控制
lsyncd 单向 秒级 低 生产环境主备同步 无内置web管理界面
unison 双向 分钟级 中 双活写场景 冲突处理机制依赖人工
GlusterFS 双向 实时 较高 大数据量双活 需要客户端兼容、架构较重

行业共识认为,没有哪套方案是万能的,选择的关键是匹配你的业务支撑能力,如果只有一台运维人员兼职维护,那crontab+rsync是性价比最高的起点。

同步做完之后,验证和监控别忘掉

配置完成后,一定要做一次完整的验证,确认数据真的同步过去了,光看rsync退出的状态码不够,建议做这几步验证:

  1. 全量同步对比,统计源端和目标端的文件总数和大小是否一致:
find /data/wwwroot -type f | wc -l
find /data/wwwroot -type f -size +1M -exec md5sum {} ; | sort > /tmp/source.md5

再把目标端同样的命令结果拿过来对比一下。

  1. 故障恢复测试,模拟源端服务器宕机、网络中断,看目标端数据是否可用,恢复后同步是否能自动追上。

  2. 监控日志,重点关注rsync的报错信息,尤其要留意Connection refused等网络错误,以及No space left on device这类磁盘耗尽错误,日志里Permission denied出现的次数多了,就要检查文件权限是否稳定。

日常运维中,跑完同步任务花几分钟检查一下日志是值得的,总比哪天用户反馈文件缺失了再排查要省事得多。

常见问题排查

Q:rsync同步到一半报错,提示“Broken pipe”,是哪里出了问题?

A:这个错误多数是网络不稳定或SSH连接超时导致的,检查一下两台服务器之间的物理链路,看一看网卡有没有丢包,如果传输的是大文件,建议把rsync的--partial参数加上,断点续传,不然每次都从头传,大文件根本传不完。

Q:inotifywait脚本一直在跑,但文件变更后目标端没有更新,可能是什么情况?

A:先确认脚本确实在监控源目录,看看ps aux | grep inotifywait的输出,然后手动在源目录touch一个文件,观察脚本有没有被触发如果触发了但rsync没跑,手动执行脚本里的rsync命令,排查是不是SSH免密登录失效了,密钥过期或者authorized_keys文件被改动,是最常见的黑手。

另外也得注意,inotify默认监控的目录层次是有限制的如果你的目录层级特别深,需要用--recursive确保子目录也被监控到。

Q:两台服务器共享文件夹同步用什么工具性价比最高?

A:对于大多数场景,rsync就是最佳选择,它免费开源、Linux自带、不需要装额外依赖、增量传输省带宽,如果你连定时任务都不想配,想更自动化一点,那就用lsyncd花费的学习成本很低,但换来的是更可靠的触发机制和更清晰的日志,至于unison和分布式文件系统,只有在双向写这种特定需求下才值得考虑,投资回报比反而不高。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/677428.html

赞 (0)
俄罗斯新西伯利亚VPS不限流量好不好,延迟140ms怎么解决?
上一篇 2026年9月22日 21:35
刀剑ol忘记角色在哪个服务器了怎么办,怎么查角色所在区服?
下一篇 2026年9月22日 21:37

相关推荐

  • 如何在Excel里画图,Excel制作图表的步骤是什么?

    Excel 快速上手:数据可视化绘图指南在 Excel 中画图(创建图表)是将枯燥的数字转化为直观信息的最佳方式,以下是从数据准备到图表优化的完整流程, 绘图基础步骤无论创建何种图表,基本操作流程都一致:准备数据:确保数据排列整齐,通常第一行作为,第一列作为行标签,中间为数值,选中数据:用鼠标拖动选中需要绘图的……

    2026年7月13日
    15600
  • CS进入游戏老被服务器踢出?,是什么原因

    cs进入游戏老被服务器踢出,先别急着怪电脑,绝大多数情况是反作弊误判、网络丢包或服务器权限限制,按本文顺序排查,几分钟就能定位,cs进入游戏老被服务器踢出?先分清四类提示被踢的提示不同,解决方向完全不同,我见过不少朋友,明明是被服务器管理员封禁,还在那折腾网络加速器,纯属白费功夫,你下次被踢时,先截图或者记住屏……

    2026年9月28日
    100
  • DNS怎么和服务器IP对应?DNS服务器地址查询方法

    DNS和服务器IP能一致,核心在于把域名解析记录(A记录或AAAA记录)指向服务器真实的公网IP,同时确保服务器端防火墙和站点配置接受该IP的访问请求,先搞懂DNS和服务器IP的“分工”很多人把DNS和IP混为一谈,其实它们是两套系统,服务器IP是机房分配给服务器的门牌号,直接输入IP就能访问服务器,而DNS是……

    2026年9月2日
    1000
  • 5e老是断开服务器连接咋回事,5e平台频繁掉线怎么解决

    5e老是与服务器断开连接,多数情况下不是服务器故障,而是本地网络路径、DNS缓存或客户端文件冲突导致,优先重置网络与修复客户端能解决大部分掉线问题,先分清掉线发生在哪个阶段5E对战平台从登录到进入对局,中间要经过登录服务器、匹配服务器、对战服务器,断开位置不同,原因和处理方向完全不一样,平台刚登录就掉线:多半是……

    2026年9月17日
    400
  • h3c交换机连接服务器怎么设置,配置步骤是什么?

    h3c交换机连接服务器,核心路径只有三步:物理链路接通、交换机端口划入正确VLAN、服务器IP与网关配置对齐,生产环境不建议单根网线直连图省事,多用双链路加端口聚合,服务器才不会因为一根线故障就整个失联,连接前先把三件事摆到台面上——硬件、线缆、地址规划设备还没上架之前,先确认三样底细,能省掉后面一大半折腾,第……

    2026年10月14日
    300
  • ftp开源服务器软件哪个好用?免费稳定ftp服务器推荐

    在开源领域,FTP(文件传输协议)服务器软件的选择非常丰富,虽然随着 SFTP(基于 SSH 的文件传输协议)和 HTTPS 的普及,传统 FTP 的使用场景有所减少,但在内网传输、老旧系统兼容或特定批量传输需求中,FTP 服务器依然不可或缺,以下是几款主流、稳定且广泛使用的开源 FTP 服务器软件,按推荐程度……

    2026年7月11日
    16800
  • ASP.NET网络编程入门难吗?系统教程带你轻松掌握

    ASP.NET网络编程ASP.NET是微软构建现代Web应用和服务的核心框架,它结合了高性能、开发效率和强大的企业级功能,使开发者能够创建从小型网站到大规模分布式系统的各类网络应用,深入理解其架构与关键组件,是构建稳健、安全、可扩展网络服务的基础,核心基石:请求处理管道ASP.NET的核心是一个高度可扩展的HT……

    2026年2月8日
    14460
  • 数据库读写压力大该升级物理机配置吗,怎么办

    数据库读写压力大,先别急着升物理机配置,多数情况下根因在架构设计、索引策略或SQL写法,而非硬件算力不足,盲目升配只会抬高成本却治标不治本,升配置前,先问自己一个问题:瓶颈到底出在哪很多团队遇到数据库慢、读写压力大,第一反应是给服务器加CPU、加内存,但行业内有个共识:**相当一部分数据库性能问题,根源不在硬件……

    程序编程 2026年11月6日
    100
  • win7服务器版本怎么创建域,操作步骤有哪些?

    严格说,微软没有发布过“Windows 7服务器版本”;大家口中的Win7服务器版,通常指同内核的Windows Server 2008 R2,在这套系统上创建域,核心动作是安装AD DS角色,再用dcpromo把服务器提升为域控制器;Windows 7客户端本身不能创建域,先分清“Win7服务器版本”和域控角……

    程序编程 2026年11月5日
    100
  • 广电服务器路由器设置密码怎么改?广电宽带路由器密码修改方法

    2026年广电服务器路由器设置密码的核心原则是:采用WPA3加密协议,配置≥15位含特殊字符的强密码,并实施内外网物理/逻辑双隔离与90天强制轮换策略,以抵御算力升级带来的暴力破解风险,广电网络密码安全新基准算力危机下的密码学迭代进入2026年,量子计算与AI算力的平民化使得传统密码形同虚设,根据【国家广电总局……

    2026年4月24日
    6300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注