FreeFileSync跨平台同步实战:Windows与Linux文件备份指南
2026/9/20 7:52:08 网站建设 项目流程

1. 为什么我最终选择了 FreeFileSync 做跨平台同步

1.1 从一次惨痛的备份事故说起

三年前我还在用某款商业同步软件做 Windows 和 Linux 服务器之间的数据备份,结果有一次同步过程中网络抖动,软件直接把源目录里没传完的文件标记成了"已同步",等我发现的时候,一批设计稿已经变成了 0 字节的空文件。那次事故之后,我开始认真找一款能"看得见、控得住、可回滚"的同步工具,最后落在了 FreeFileSync 上,一直用到现在。

FreeFileSync 是一款开源的文件同步与备份工具,支持 Windows、Linux、macOS 三大平台,核心能力是对比两个目录的差异,然后按照你设定的规则把文件从一边复制到另一边。它最打动我的地方有三个:第一,同步前会先做完整的对比分析,把"要新增什么、要覆盖什么、要删除什么"全部列出来给你看,确认之后才动手;第二,支持双向同步、镜像同步、更新同步等多种模式,覆盖了绝大多数备份场景;第三,跨平台,Windows 和 Linux 之间互相同步完全没问题,配置文件还能通用。

这篇文章主要面向两类人:一类是手里有 Windows 电脑、想把重要资料备份到另一块硬盘或 NAS 的普通用户;另一类是需要在 Windows 开发机和 Linux 服务器之间同步代码、配置、日志的运维或开发人员。不管你是哪种,只要跟着走一遍,基本都能把同步这件事跑通。

1.2 它到底解决了什么问题

很多人第一次接触同步工具时会问:我直接用复制粘贴不行吗?行,但有几个场景复制粘贴会要命。

第一个场景是增量同步。你有一个 200GB 的资料库,每天只改动其中几个文件,如果每次都全量复制,一次要跑几个小时,硬盘寿命也扛不住。FreeFileSync 只处理有差异的文件,几秒钟就能完成。

第二个场景是双向同步。你在公司电脑上改了文档,回家又在笔记本上改了同一份,两边都有新内容,这时候你需要的是把两边的改动合并,而不是用一边覆盖另一边。FreeFileSync 的双向模式能识别出"左边新增""右边新增""两边都改了"这几种情况,分别处理。

第三个场景是跨平台路径差异。Windows 用D:\Projects,Linux 用/home/user/projects,路径分隔符、大小写敏感性、权限模型都不一样。FreeFileSync 在跨平台同步时会自动处理这些差异,你只需要在图形界面里把两边目录选好就行。

第四个场景是可审计。同步完之后它会生成一份日志,告诉你哪些文件被复制了、哪些被删除了、耗时多久。出问题的时候这份日志就是救命稻草。

1.3 版本选择与安装包获取

FreeFileSync 官网提供两种版本:标准版和捐赠版。标准版免费,功能已经足够日常使用;捐赠版多了并行复制、自动更新等特性,如果你经常同步几十万个小文件,捐赠版的并行复制能明显提速。我个人建议先用标准版,觉得不够再考虑捐赠。

Windows 端下载下来是一个 exe 安装包,双击一路下一步就行。安装过程中会问你要不要装 RealTimeSync,这是一个配套的实时监控工具,建议勾上,后面会用到。Linux 端官网提供的是 tar.gz 压缩包,解压之后直接运行里面的可执行文件即可,不需要编译。注意 Linux 端需要系统里有 GTK3 运行库,大部分桌面发行版都自带,如果是纯命令行服务器,需要额外装一下。

提示:Linux 端从官网下载的压缩包解压后,第一次运行可能会提示缺少依赖,用发行版自带的包管理器补一下 GTK 相关库即可,不要去找第三方源。

2. Windows 与 Windows 之间的同步实操

2.1 建立第一个同步任务

假设你有两块硬盘,C 盘里有一个D:\Work目录,想完整备份到移动硬盘的E:\Backup\Work。打开 FreeFileSync,界面分成左右两栏,左边点"浏览"选D:\Work,右边选E:\Backup\Work。如果目标目录不存在,它会问你要不要创建,选是。

选好之后点界面上方的"比较"按钮,它会扫描两边目录,把差异用颜色标出来。绿色是左边有右边没有,蓝色是右边有左边没有,黄色是两边都有但内容不同,红色是冲突。第一次同步的时候,右边是空的,所以左边所有文件都会显示绿色。

这时候先别急着点"同步",先看一眼对比结果,确认没有意外。比如你发现某个大文件不该同步,可以右键把它排除掉。确认无误后点"同步",它会弹出确认框,列出将要执行的操作,再点一次"开始"才真正动手。

2.2 同步模式的选择逻辑

FreeFileSync 提供几种同步模式,选错了会出大事,这里必须讲清楚。

双向模式:两边互相同步,左边新增的传到右边,右边新增的传到左边,两边都改了的会提示冲突让你选。适合两台电脑之间保持资料一致。

镜像模式:以左边为准,把右边变成和左边一模一样,右边多出来的文件会被删除。适合做备份,但要注意——如果你误删了左边的文件,同步之后右边的备份也会被删掉。

更新模式:只把新的或改动过的文件从左边复制到右边,右边多出来的文件保留不动。适合做增量备份,不会误删。

自定义模式:可以针对不同情况分别设置,比如"左边新增的复制到右边,右边新增的保留不动"。

我个人的习惯是:做备份用更新模式,做两台机器同步用双向模式,几乎不用镜像模式,因为镜像模式的删除行为太危险。

2.3 过滤器与排除规则

实际使用中你不可能同步整个目录,总有些东西要排除。比如node_modules.git、临时文件、系统缓存。FreeFileSync 的过滤器功能就是干这个的。

点界面上的漏斗图标打开过滤器,可以按文件名、扩展名、路径来排除。比如排除所有.tmp文件,就写*.tmp;排除某个目录,写\node_modules\。支持通配符和正则,具体语法在过滤器窗口里有说明。

这里有个坑:过滤器的路径匹配是相对于同步根目录的,不是绝对路径。比如你同步D:\Work,想排除D:\Work\cache,过滤器里写\cache\就行,不要写完整路径。

注意:过滤器设置是保存在同步任务配置里的,换一个任务就要重新设。如果你有多个任务共用一套排除规则,可以先把规则存成模板,新建任务时导入。

2.4 保存配置与批量执行

配置好一个同步任务之后,点"文件"菜单里的"另存为",把它存成一个.ffs_gui文件。下次直接双击这个文件就能打开配置好的任务,不用重新选目录。

如果你有多个同步任务,比如"工作资料备份""照片备份""代码备份",可以分别存成不同的配置文件。更进一步,FreeFileSync 支持批处理:把多个配置文件放进一个批处理文件里,一次执行全部。具体做法是新建一个.ffs_batch文件,在里面列出要执行的配置文件路径,然后用命令行调用。

命令行调用格式大致是这样:

FreeFileSync.exe "D:\Sync\work.ffs_batch"

Windows 下可以写一个.bat脚本,把几个批处理串起来,再配合任务计划程序设置每天定时执行。这样你人不在电脑前,备份也能自动跑。

2.5 实时监控:RealTimeSync 的用法

RealTimeSync 是 FreeFileSync 的配套工具,作用是监控指定目录,一旦有文件变动就自动触发同步。安装 FreeFileSync 时会一起装上。

用法很简单:打开 RealTimeSync,把要监控的目录拖进去,设置一个空闲时间(比如 10 秒),意思是"目录停止变动 10 秒后才触发同步",避免你正在编辑文件时频繁触发。然后指定要执行的同步配置文件,保存。

这个工具适合"改完就想立刻备份"的场景,比如你写代码,每次保存都希望同步到备份盘。但要注意,如果监控的目录文件变动非常频繁,RealTimeSync 会一直触发同步,反而拖慢系统。这种情况建议还是用定时任务。

3. Windows 与 Linux 之间的同步实操

3.1 跨平台同步的三种连接方式

Windows 和 Linux 之间同步,首先要解决"Linux 那边的目录怎么让 Windows 访问到"这个问题。常见有三种方式。

方式一:SMB 共享。在 Linux 上装 Samba,把要同步的目录共享出来,Windows 通过网络路径访问,比如\\192.168.1.100\share。这种方式最直观,FreeFileSync 直接选这个网络路径就行。缺点是 SMB 在小文件多的时候性能一般。

方式二:SSHFS 挂载。在 Windows 上装 SSHFS 客户端,把 Linux 的目录挂载成本地盘符,然后 FreeFileSync 当本地目录处理。这种方式走 SSH 协议,安全性好,性能也比 SMB 稳定。缺点是挂载断了之后同步会失败,需要重新挂载。

方式三:先同步到中间盘。如果两边网络不稳定,可以先把 Linux 的数据同步到一块移动硬盘,再把移动硬盘接到 Windows 上同步。这种方式最笨但最可靠,适合一次性大批量迁移。

我平时用方式二居多,因为 SSH 本来就开着,不用额外配 Samba。下面重点讲这种方式。

3.2 SSHFS 挂载的完整步骤

Windows 端我用的是一款叫 WinFsp 加 SSHFS-Win 的组合,都是开源免费的。先装 WinFsp,再装 SSHFS-Win,装完之后在文件资源管理器里就能看到"映射网络驱动器"的选项。

映射的时候填的路径格式是这样的:

\\sshfs\user@192.168.1.100\home\user\projects

其中user是 Linux 用户名,192.168.1.100是 Linux 的 IP,后面是远程路径。映射成功之后,Windows 里会多出一个盘符,比如Z:,里面就是 Linux 的目录内容。

这时候打开 FreeFileSync,左边选 Windows 本地目录,右边选Z:\下的对应目录,就可以像本地同步一样操作了。

注意:SSHFS 挂载默认走的是密码认证,每次重启都要重新输密码。建议配置 SSH 密钥认证,把公钥放到 Linux 的~/.ssh/authorized_keys里,这样挂载时就不用输密码了。密钥生成用ssh-keygen命令,具体步骤网上很多,这里不展开。

3.3 路径与权限的坑

跨平台同步最容易出问题的地方是路径和权限。

路径分隔符:Windows 用反斜杠\,Linux 用正斜杠/。FreeFileSync 在图形界面里会自动转换,但如果你用命令行调用,配置文件里的路径要写对。建议统一用正斜杠,FreeFileSync 在 Windows 上也能识别。

大小写敏感:Linux 的文件系统区分大小写,File.txtfile.txt是两个不同的文件;Windows 不区分。如果你在 Windows 上同步一个包含File.txtfile.txt的目录到 Linux,可能会出问题。FreeFileSync 在检测到这种情况时会提示,你需要手动处理。

文件权限:Linux 的文件有 rwx 权限位,Windows 没有。同步到 Linux 时,FreeFileSync 会按默认权限创建文件,通常是 644(文件)和 755(目录)。如果你需要特定权限,比如可执行脚本要 755,需要在同步后手动改,或者在 FreeFileSync 的设置里指定权限掩码。

文件名非法字符:Windows 文件名不能包含: * ? " < > |这些字符,Linux 可以。如果 Linux 那边有这类文件名,同步到 Windows 会失败。FreeFileSync 会把这些文件标红,你需要先在 Linux 上改名。

3.4 用命令行做自动化同步

图形界面适合手动操作,但如果你要定期自动同步,命令行更靠谱。FreeFileSync 在 Linux 端也提供命令行版本,叫FreeFileSync,用法和 Windows 端类似。

先在图形界面里配好一个同步任务,存成.ffs_batch文件,然后在 Linux 上写一个 shell 脚本调用它:

#!/bin/bash /path/to/FreeFileSync /path/to/config.ffs_batch

再用 crontab 设置定时执行,比如每天凌晨 2 点跑一次:

0 2 * * * /home/user/sync.sh >> /home/user/sync.log 2>&1

日志重定向到文件里,方便出问题的时候查。

提示:Linux 端跑 FreeFileSync 命令行需要图形环境支持,因为它的核心还是依赖 GTK。如果是纯命令行服务器,可以用xvfb-run包一层虚拟显示,或者干脆用 rsync 替代。FreeFileSync 的优势在图形界面和跨平台配置,纯命令行场景 rsync 更合适。

3.5 一个真实的跨平台同步配置案例

我现在的配置是这样的:Windows 开发机上有一个D:\Code目录,Linux 服务器上有一个/home/dev/code目录,两边通过 SSHFS 挂载同步。

同步模式选的是双向,因为两边都可能改代码。过滤器排除了node_modules.git__pycache__*.log这些不需要同步的东西。同步前会先比较,确认没有冲突再执行。

配置文件存成code_sync.ffs_gui,放在桌面上,每天上班第一件事就是双击打开,点比较,点同步。周末的时候会用 RealTimeSync 挂着,改完代码自动同步。

这套配置跑了两年多,除了偶尔 SSHFS 挂载断掉需要重连,没出过什么大问题。关键是每次同步前都会看一眼对比结果,确认没有意外删除,这个习惯救过我好几次。

4. 常见问题与排查技巧实录

4.1 同步速度慢怎么办

同步速度慢通常有几个原因,按可能性从高到低排:

小文件太多。几万个几 KB 的文件,同步时间主要花在建立连接和元数据操作上,而不是传输数据。这种情况可以开捐赠版的并行复制,或者把文件打包成压缩包再同步。

网络带宽不够。跨平台同步走网络,如果带宽被占满,速度自然慢。可以在同步时暂停其他大流量任务,或者设置 FreeFileSync 的带宽限制。

磁盘 IO 瓶颈。如果源盘或目标盘是机械硬盘,随机读写性能差,同步大量小文件会很慢。换成 SSD 能明显改善。

对比阶段耗时。FreeFileSync 默认会对比文件内容(不只是时间戳),这需要读取文件。如果文件很大,对比阶段就很慢。可以在设置里改成"只对比文件大小和修改时间",速度快很多,但准确性略降。

4.2 同步后文件丢失怎么恢复

这是最吓人的情况,但 FreeFileSync 有内置的版本控制功能可以救你。

在同步设置里有一个"版本控制"选项,可以设置删除或覆盖的文件移到哪里。比如设置成"移到D:\Backup\Versions目录",这样每次同步时被删除或覆盖的文件都会先移到这个目录,而不是直接删掉。万一同步错了,可以从这里找回。

我强烈建议所有做备份的同步任务都开启版本控制,尤其是用镜像模式的时候。多占一点硬盘空间,换的是安心。

如果没开版本控制,文件已经被删了,那就只能靠数据恢复软件了。所以这个设置一定要提前开,事后补救很麻烦。

4.3 权限错误与访问被拒绝

Windows 端常见的权限错误是"访问被拒绝",通常是因为目标文件正在被其他程序占用,或者你没有目标目录的写权限。

如果是文件被占用,关掉相关程序再同步。如果是权限问题,检查目标目录的属性,确保当前用户有写权限。有时候是杀毒软件在拦截,把 FreeFileSync 加入白名单。

Linux 端的权限错误通常是 SSH 用户对目标目录没有写权限。用ls -l看一下目录权限,必要时用chmodchown调整。如果是通过 SSHFS 挂载的,还要确认挂载时用的用户和权限设置。

4.4 中文文件名乱码

跨平台同步中文文件名乱码,根源是编码不一致。Windows 默认用 GBK,Linux 默认用 UTF-8。FreeFileSync 在同步时会尽量转换,但有时候还是会出问题。

预防的办法是统一用 UTF-8。Windows 端可以在系统设置里开启"使用 Unicode UTF-8 提供全球语言支持",Linux 端确认 locale 设置是zh_CN.UTF-8en_US.UTF-8

如果已经出现乱码,先别急着同步,把乱码文件在源端改名成正常中文,再重新同步。已经同步过去的乱码文件手动删掉。

4.5 常见问题速查表

问题现象可能原因排查方向解决方法
同步速度极慢小文件多、网络差、磁盘慢看日志里对比和传输各占多少时间开并行复制、换 SSD、打包同步
文件同步后丢失镜像模式误删、未开版本控制检查同步模式和版本控制设置开启版本控制,改用更新模式
访问被拒绝文件占用、权限不足、杀软拦截看具体是哪个文件报错关程序、改权限、加白名单
中文乱码编码不一致检查两端 locale 和系统编码统一 UTF-8,手动改名
SSHFS 挂载断掉网络抖动、SSH 超时看挂载点是否还在重新挂载,配 SSH 保活
同步任务不执行配置文件路径错、权限问题看命令行报错检查路径,用绝对路径
对比结果异常时间戳差异、时区问题看文件修改时间统一时区,改用内容对比

4.6 几个我踩过的坑

第一个坑是时区问题。Windows 和 Linux 的时区设置不一样,导致文件修改时间差了几个小时,FreeFileSync 误判为"文件有改动",每次都全量同步。解决办法是两端统一时区,或者在 FreeFileSync 设置里放宽时间戳容差。

第二个坑是符号链接。Linux 里有很多符号链接,同步到 Windows 时会被当成普通文件或目录处理,可能造成循环引用。FreeFileSync 有"跟随符号链接"的选项,默认是关的,跨平台同步时保持关闭比较安全。

第三个坑是长路径。Windows 默认路径长度限制是 260 字符,Linux 没有这个限制。如果 Linux 那边有很深的目录结构,同步到 Windows 会失败。解决办法是开启 Windows 的长路径支持,或者把同步目标设在路径较短的目录下。

第四个坑是同步过程中断电。这个最要命,可能导致目标文件损坏。FreeFileSync 有"安全复制"选项,会先复制到临时文件再改名,降低损坏风险。建议开启,尤其是同步重要数据的时候。

5. 进阶技巧与效率提升

5.1 用变量让配置更灵活

FreeFileSync 的配置文件里支持一些变量,比如%DATE%%TIME%,可以用在版本控制目录的命名上。比如设置版本目录为D:\Backup\Versions\%DATE%,每次同步被删除的文件会按日期分目录存放,找起来方便。

这个功能在需要保留多个历史版本的时候特别有用。比如你每天同步一次,一周之后就有 7 个日期目录,每个目录里是当天被覆盖或删除的文件。想恢复到某一天的状态,直接去对应目录找就行。

5.2 多任务编排与依赖处理

如果你有多个同步任务,而且它们之间有依赖关系,比如"先同步 A 到 B,再同步 B 到 C",可以用批处理文件按顺序调用。FreeFileSync 的批处理文件支持串行执行,前一个任务完成后再执行下一个。

如果某个任务失败了想中止后续任务,可以在批处理里加错误检查。不过 FreeFileSync 的批处理本身不提供条件判断,需要借助外部的脚本语言,比如用 Python 调用 FreeFileSync 命令行,检查返回码,再决定是否继续。

5.3 日志分析与监控

FreeFileSync 每次同步都会生成日志,默认存在配置文件的同目录下,文件名类似xxx.ffs_log。日志里记录了同步的开始时间、结束时间、处理的文件数、错误信息等。

如果你做的是自动化同步,建议把日志收集起来定期检查。简单的做法是用脚本扫描日志文件,发现"Error"关键字就发邮件告警。复杂一点可以接入监控系统,把同步成功率、耗时等指标可视化。

我自己的做法是每周看一次日志,重点看有没有错误和警告。大部分时候都是正常的,偶尔会有几个文件因为权限问题失败,手动处理一下就行。

5.4 与其他工具的配合

FreeFileSync 专注同步,但有些场景需要和其他工具配合。

压缩归档:同步之前先把目录打包成 tar.gz 或 zip,同步压缩包而不是散文件,能大幅提升小文件场景的速度。Linux 端用tar命令,Windows 端用 7-Zip 命令行。

校验完整性:同步完成后用md5sumsha256sum校验关键文件的哈希值,确认传输无误。FreeFileSync 本身不做哈希校验,需要额外工具。

加密敏感数据:如果同步的数据包含敏感信息,可以先用 VeraCrypt 之类的工具创建加密容器,把数据放进去再同步。这样即使同步目标被访问,数据也是加密的。

5.5 性能调优的几个参数

FreeFileSync 有一些隐藏的性能相关设置,在"工具"菜单的"高级设置"里可以找到。

并行文件操作数:控制同时处理多少个文件,默认是 1。捐赠版可以调到 4 或 8,小文件多的时候提速明显。但调太高会增加磁盘和网络压力,建议从 4 开始试。

复制缓冲区大小:控制每次读写的数据块大小,默认是 512KB。大文件多的时候可以调到 4MB 或更大,减少 IO 次数。小文件多的时候反而要调小。

对比方式:前面提过,改成"只对比大小和时间"能大幅提速。如果对准确性要求不高,比如同步的是日志文件,可以用这个设置。

这些参数没有万能值,需要根据你的实际场景调。建议先用默认值跑一遍,看瓶颈在哪里,再针对性调整。

6. 我的实际使用体会

FreeFileSync 用了三年多,从最初的 Windows 单机备份,到后来的 Windows-Linux 跨平台同步,再到现在的多任务自动化,它一直是我数据管理工具箱里的核心工具。它不完美,比如图形界面在 Linux 上偶尔会卡,命令行版本依赖图形环境,跨平台同步的权限处理还不够智能。但它的核心功能——对比、确认、同步——做得足够扎实,而且完全免费开源,没有理由不用。

如果你刚开始用,我的建议是:先从最简单的本地备份开始,熟悉对比和同步的流程;然后尝试跨平台同步,把 SSHFS 挂载跑通;最后再考虑自动化和性能调优。不要一上来就搞复杂的配置,容易出错,也容易放弃。

最后分享一个小技巧:每次同步前,不管多急,都先看一眼对比结果。这个习惯看起来浪费时间,但能帮你避免 99% 的同步事故。我见过太多人因为手快点了同步,结果把重要文件覆盖了。多花十秒钟确认,省的是几个小时的恢复时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询