不同电子设备之间传输和备份文件的方案

1 序言

我日常使用的操作系统包括 windows, mac, iOS, Android,这些操作系统支持的网络文件共享协议以及文件系统各有差异。
并且我需要在平板上在线观看电脑上的视频,iOS Android 系统上的播放器对不同的传输协议的支持也各有不同。
原来使用 windows 文件共享在局域网共享文件,移动硬盘拷贝文件已经没法满足需求了。我整理了下各种常见的文件传输协议以及软件,针对不同场景给出了最优的方案。

2 结论

如果不想阅读各种技术的详细解析,直接看针对不同场景的最优选择就行了。 

2.1 传输单个文件(push模型)

微信,企业微信,AirDrop(只支持 mac + iOS)

2.2 备份数据

⚠️ 警告:单向同步(镜像)功能不能用来做单版本备份,会有严重的数据丢失风险,具体看文末的附录。
 
建议用移动硬盘备份数据。
 
如果需要保留多个历史版本:windows 自带的"文件历史记录"。
如果不需要保留历史版本:FreeFileSync,并且要做自定义配置,具体看文末的附录
 
如果备份的数据想要加密:建议直接用 BitLocker 把整个移动硬盘加密了。不要使用备份软件提供的加密功能,因为到时候如果备份软件强制收费了,可能解不开。
注意 BitLocker 只有专业版和企业版的 windows 才能用,家庭版没有这个功能。

2.3 windows 和 macOS 之间共享文件(poll模型)

不管是给别人的电脑共享文件,还是自己的电脑之间共享文件,都可以用下面的方案。
SMB 和 sftp 都使用操作系统的用户,所以只要给自己和别人分别创建一个读取共享文件用的用户,然后分别授予不同的文件访问权限就行了。

2.3.1 ⭐️ 推荐: SMB

SMB: Server Message Block,也就是 windows 自带的文件共享。macOS 下面的实现叫做 samba。
windows 和 macOS 都内置的这个软件,不用安装什么。

2.3.2  备用: sftp

如果遇到 macOS samba 和 windows 的 smb 不兼容的情况,选择 sftp 方案。
 
windows client 端: Bitvise SSH Client
图形界面,支持高分屏。
 
windows server 端:  bitvise ssh server
图形界面配置,非常好用
 
mac client 端:  Cyberduck
免费,图形界面软件,完美支持高分屏。
 
mac server 端: 系统自带的 sftp 服务器功能。
不过需要注意这个会把磁盘上的所有文件都共享出去,不安全。需要自己修改配置文件来限制共享的目录。

2.4 windows 共享视频给平板和手机看(poll模型)

还是使用 SMB,也就是 windows 自带的文件共享。
 
windows: 使用系统自带的共享功能。
 
iOS: nplayer
 
Android: Cx File Explorer 打开视频文件,在弹出的菜单中选择用 mx player 播放。

2.5 不同的设备之间做文件的镜像或者双向同步

如果不需要增量网络同步:
(1) FreeFileSync + smb 网络驱动器
(2) FreeFileSync + sftp 服务器
 
如果需要增量网络同步:

3 完整方案一览

按照工作模型区分:
(1) push模型
发送者决定接收者能获取哪些数据,并且手动发送文件给接收者。
(2) poll模型
发送者开启文件共享,接收者自行决定从发送者获取哪些数据。

 

按照目的区分:

 

(1) 手动拷贝数据

(2) 备份
备份的数据需要能回到一个历史版本,所以需要做版本管理。因此比手动拷贝数据复杂很多,一般需要借助一些软件来实现。
(3) 单向同步(镜像)
把A电脑的数据拷贝到B电脑,丢弃B电脑的修改。
镜像也可以叫做单向同步。
(4) 双向同步
A和B电脑都有数据修改,需要保留两边的修改。注意支持双向同步的软件,一般也支持单向同步。
 
按照传输介质区分:
(1) 使用 TCP/IP 网络
(2) 存储介质直连
 
下面不好用,不稳定,跨平台太差的方案,用删除线标记。

4 工作模型

4.1 poll模型 - 通用文件传输协议

(1) Server Message Block(windows自带的文件共享)
如果可能的话,就用这个协议。windows对它的支持是完美的,特别好用。
(2) sftp
没有smb的话,就用这个好了,也挺好用的。
(3) http
这个没有标准的展示目录,文件属性的方法。不过对于流媒体文件共享来说,非常够用了。mx player 老版本只支持 http 协议的网络串流。
(4) apple filing protocol
这个是苹果私有的协议,而且好像苹果自己都不用了。
(5) nfs
只有 unix 操作系统原生支持。macOS 的开发者文档中说这个协议是不安全的
(6) webdav
这个协议和它的实现有一堆的坑,一般情况下使用 sftp 是更好的选择。
 

下面简单介绍下不同协议常用的软件

4.1.1 Server Message Block

Android
2021-05-06 推荐使用的 Android smb 软件(我自己试过了):
  1. Cx File Explorer     界面还不错,对 smb 支持也挺完美的。
 
2021-05-06 不推荐使用的 Android smb 软件(我自己测试过)
  1. ES 文件浏览器。        没法正常浏览 win10 smb 共享出来的文件,直接打不开。广告超级多,而且是那种弹出式的广告。有很多没有用的垃圾功能,软件非常臃肿。有常驻后台的垃圾服务。有垃圾通知。
  2. mx player pro 1.35.8    印象中拖动一部分视频文件的时候,会有卡顿的问题。而且只使用这个软件的时候,没法加载字幕。
 
2021-05-06 不推荐使用的 Android smb 软件(没测试过)
  1. X-plore File Manager        看 google play 上软件界面的截图,还是 Android 4.0 的界面风格。
 
参考资料:
  1. TUTORIAL: SAMBA on Android, connection with Windows and alternatives | AndroidPCtv    这篇2018年的文章,写了 Android 软件对 smb 协议的支持情况,里面也推荐了一些软件,文章质量不错
  2. TUTORIAL: Connect an Android device with your PC through SAMBA | AndroidPCtv    下面这个文章也可以看看,是设置教程,不过用处不大
 

Mac & iOS

4.1.2 sftp

windows server 端
(1) ⭐️ bitvise ssh server
图形界面配置,非常好用
 
windows client 端
(1) ⭐️ Bitvise SSH Client
图形界面,支持高分屏。
(2) 😂 Cyberduck
windows 版本不支持高分屏。
 
mac client 端
(1) ⭐️ Cyberduck
免费,图形界面软件,完美支持高分屏。

4.1.3 http server

(1) nginx
全平台
(2) KODExplorer
php写的,全平台   介绍   看过去功能很强大的样子
windows,功能比较简洁,支持 Virtual File System   介绍
经过测试,在windows用这个东西搭建了一个 http server,然后共享视频给mac,mac下面不管是 iina 还是 vlc 都没法做流媒体播放。windows上面倒是可以使用 potplayer 播放 localhost 共享出来的视频。估计是 http 协议实现不规范或者不完整导致的。mac 使用 nginx 共享给 windows 上的 potplayer 没有问题。
试了下关闭 Prevent Leeching, Stop Spiders 选项,mac 上面iina依然没法正常播放,看了下是网卡没有在发送数据,估计是这个软件不支持 http range request。
(4) IIS - windows

4.1.4 webdav server

(1) nginx
 
全平台
(2) macOS Server
mac 专用,支持很多很多功能 
(3) IIS - windows
 
webdav 的坑
  1. 协议本身不是一个文件访问协议。上传下载的时候会丢失时间戳。文件属性查看功能不完整
  2. nginx 上传文件的时候有奇怪的缓存。nginx上传文件大小好像有奇怪的限制
  3. IIS 上传文件大小有奇怪的限制。
  4. 各种实现程序都有很多奇怪的限制
  5. windows 下没有好用的 webdav client。

4.2 poll模型 - 多媒体专用

建议不要选择下面的协议,非常坑:
  1. 这种协议对于文件类型的限制很多,可能明明是一个多媒体文件,但是这个协议支持不了,就没法传输了。
  2. 可能莫名其妙做了一些视频音频转码的操作,非常浪费cpu资源。然而实际上手机平板电视安装app之后能直接播放没有转码的视频,这个操作毫无意义。
  3. 很多协议本身或者软件的实现不支持字幕。
 
具体的协议列表:
  1. DLNA
  2. mms
  3. rtsp

4.3 poll模型 - 历史遗留协议,不要使用

  1. ftp
  2. ftps
 
ftp 软件: 
(1) Star FTP Server   windows专用

4.4 push模型 - 依赖互联网

依赖互联网上的中心化的服务器(其中很多软件会针对局域网做优化。但是因为局域网环境比较复杂,软件的实现不一定足够完善,经常会发生莫名其妙数据就到公网传输的问题。)
  1. QQ
  2. 企业微信
  3. 其它通过云服务器转发的坑爹方案
  4. Send Anywhere      官方文档说是加密传输的。这个东西依赖中心服务器获取和解析transfer key。传输的文件本身可以不经过中央服务器;如果在不能ip到ip直连的网络上传输数据,需要经过中央服务器中转。结果就是,如果发送小文件,创建和验证transfer key非常慢,花费了大量的时间;如果在局域网内因为某些原因,两台主机之间不能互相发现,最后传输文件会走因特网,最后还是非常非常慢。
  5. Droplr
  6. JumpShare
  7. WeTransfer
  8. TransferXL
  9. Infinit              根据官网,2017-03-31 开始就停止服务,软件不可用

4.5 push模型 - 局域网

勉强还行
  1. 快牙       没有找到是否加密。不知道会不会分析用户数据。
  2. Dukto    支持:windows,mac,linux,iOS,Android。根据官方文档,这个东西没有任何加密,也没有其他安全相关的特性。这个软件的手机版本非常简陋,勉强能用。开源免费软件,不过作者现在不维护它了。
 
下面的方案有不稳定,速度慢,支持的操作系统少,不可用,没有加密等问题
  1. AirDrop          非常不稳定,只支持 mac 和 iOS
  2. 蓝牙               非常慢
  3. 飞鸽传书        聊天工具
  4. 飞秋               聊天工具
  5. EaseUS Todo PCTrans   看过去是局域网传输解决方案,但是只支持windows
  6. Fast File Transfer      这个是一个Android软件

5 按照目的区分

手动拷贝文件没什么好说的。

5.1 备份+同步

⚠️ 警告:单向同步(镜像)功能不能用来做单版本备份,会有严重的数据丢失风险,具体看文末的附录。

5.1.1 测试过发现值得推荐的方案

(1) ⭐️ FileGee
  1. 同步功能的话,和 FreeFileSync 差不多。具体看下面的附录。
  2. 备份功能的话,看你喜欢 windows file history 的简洁,还是这个软件的强大自定义能力。
 
功能强大,界面简洁,高性能。可以在后台自动备份,可以在移动硬盘插入的时候自动备份。免费版限制只能创建8个任务,但是因为可以创建多文件夹的备份任务,约等于没有限制。付费版本支持卷影复制。
 
不建议使用的功能:
不建议使用它的加密功能。之前用过这个软件,明明是一个单机软件,居然弹出了“当前版本号的个人版已经停用,请上网免费激活或者下载最新版本使用”。那可能哪天开发商跑路,或者软件强制收费,原来用这个软件加密备份的数据就没法恢复了。虽然官方提供了《独立的文件加密解密程序》,但是这个工具需要使用安装包安装软件之后才能使用,而且不知道这个独立工具有没有检测到新版本之后,禁止使用旧版本的逻辑。
 
增量备份功能使用注意事项:
官方提供一个《独立的增量备份恢复程序》,但是需要导出的日志文件才能工作,并且默认配置下日志只会保存在本地计算机,需要按照《日志导出子窗口》里面配置成同步完成之后自动导出日志到备份文件所在的磁盘。
注意:如果不配置,在本地计算机的C盘数据消失之后(比如重装或者C盘所在的磁盘物理损坏),没法方便地从增量备份恢复数据,你只能自己人肉从 n 多个版本的支离破碎的文件夹中找到需要的数据。
以及,还是不知道这个独立工具有没有检测到新版本之后,禁止使用旧版本的逻辑。

5.2 备份

⚠️ 警告:单向同步(镜像)功能不能用来做单版本备份,会有严重的数据丢失风险,具体看文末的附录。

5.2.1 测试过发现值得推荐的方案

(1) ⭐️ Windows File History (文件历史记录)
Windows 8 开始自带的软件。Windows 10 开始可以灵活选择备份和排除的文件夹。
重装或者换了电脑之后从文件历史记录里面还原文件的教程: How to correctly use File History to transfer data files to a new Windows 10 installation
 
优点
1. 性能非常好。
2. ⭐️ 能在移动硬盘插入后自动备份。在移动硬盘断开连接的时候可以做本地缓存,等移动硬盘插上之后把本地缓存的内容拷贝到移动硬盘。如果本地缓存满了,Windows 会提示你需要插入移动硬盘了。这个功能是许多其他备份软件不具备的,堪称碾压级优势。
3. 完全后台备份,不会打扰你,你只需要定期不定期插上移动硬盘就好了。
 
缺点:
1. Windows 10 开始,会自动把 "C:\Users\{你的用户名}\" 这个目录下面新建的文件夹添加到备份列表中。这会导致很多没有的垃圾文件也被备份走。
解决方案:创建一个 "C:\{你的用户名}\" 的文件夹,然后把你的各种文件塞到这里,避免它们莫名其妙被备份走了。但是有些程序自动创建的文件夹还是会被莫名其妙备份走。
 
功能:备份windows和软件设置。
我只备份过,没有还原过,所以不知道它是不是和它说的一样有用。
我现在重装系统之后都是手动重新配置一遍所有软件,所以已经用不上这个东西了。而且很多时候新版本的软件和老版本的软件的设置是不兼容的,强制导入可能导致问题。

5.2.2 没有测试过的方案,先记录下

SnapRAID is a backup program for disk arrays. It stores parity information of your data and it recovers from up to six disk failures. 
看官网的介绍,似乎很适合用了做 RAID 磁盘阵列的备份。
 
(2) Bacula
一个企业级备份软件。
 
Very efficient backup system based on the git packfile format, providing fast incremental saves and global deduplication (among and within files, including virtual machine images).

Duplicacy backs up your files to many cloud storages with client-side encryption and the highest level of deduplication。
看介绍不错的样子

5.2.3 建议不要使用的方案

(1) FBackup
排除的原因:
1. 上次看的时候,这个软件不支持增量备份。
2. ⚠️ 而且在镜像备份的时候,如果源分区不可用,它会直接删除掉目标分区下的备份数据 (不知道现在修复了没有): 《UGH! Mirror backup deletes backup if source drive failed
 
排除的原因:这个是命令行工具
 
优点:
1. 功能比较强大
2. 可以灵活选择备份目标
 
排除的原因:
1. 不能在移动硬盘插入后自动备份
2. 性能稀烂。特别是增量备份,性能特别烂。它需要先把目标目录传输到C盘下的一个临时目录,然后将临时目录中的内容与源目录中的内容比较,然后重新将源目录中的数据写入目标目录下面。
3. 卷影复制的支持需要付费的第三方插件。
 
Boar aims to be the perfect way to make sure your most important digital information, like pictures, movies and documents, are stored safely.
排除的原因:这个是命令行工具

5.3 单向同步(镜像)

⚠️ 警告:单向同步(镜像)功能不能用来做单版本备份,会有严重的数据丢失风险,具体看文末的附录。
 
下面介绍的方案都不依赖中心化服务器。
 
(1) rsync
支持增量同步。
缺点:
1. 需要服务端和客户端都安装 rsync,不然没法工作。
2. 这东西是一个命令行软件,我没有找到 windows 下面免费好用的图形界面工具。
 
下面是我找到的一些图形界面的工具。
 
Grsync        windows+linux。GTK写的图形界面。想要通过ssh sync数据到远程计算机,需要做些奇怪的操作
rsyncOSX/RsyncOSX       mac。A macOS GUI for rsync。界面过于复杂,令人窒息。然后网上有人(2018-06左右)说这个东西有挺多问题的。
⭐️ Acrosync           windows+linux+mac。商业的rsync client,收费。
Truck.app           mac。界面挺简洁的
qtdSync            windows+mac。这个东西的设计目标是做一个备份软件,没有看到同步相关的选项。也可能是埋得太深了。
ChronoSync      mac。商业软件,收费
luckyBackup     unix+windows(不完整支持)。它的设计定位是备份而不是同步。
DeltaCopy         基于rsync做的一个备份工具。
 
监控文件系统,实现定期调度rsync来同步数据

5.4 单向同步+双向同步

警告:单向同步(镜像)功能不能用来做单版本备份,会有严重的数据丢失风险,具体看文末的附录。

5.4.1 数据会不可控地传输到互联网上

依赖互联网上的中心化服务器存放文件
  1. ⭐️ 坚果云
  2. Dropbox
  3. OneDrive
 
不需要中心化服务器,但是还是会把数据在互联网上传输
  1. resilio sync   据说这个的性能比 syncthing 好
  2. syncthing      开源的实现

5.4.2 可以纯粹在本地或者局域网执行

下面的服务如果搭建了 sftp 服务器,其实也是可以在互联网上传输的。但是它们需要你自己手动设置成在互联网上传输,比上面自动莫名其妙就传输到互联网上的方案安全的多。
 
网络同步只支持sftp/ftp。没有增量同步功能。相比 rsync 的主要优点是方便好用,有人性化的图形界面。
排除的原因:没有 atomic mirror。虽然可以手动写 script 来支持。设置教程
 
windows mac linux Android iOS NAS。免费用户最多3个任务,100个文件
购买页面: 每年 $22.45 ≈ 141.9985人民币
能做 Block Level 增量同步,非常强大。
 
只支持windows和mac。个人用户每30天能同步最多 40000 个文件。其实约等于没有限制。
这个软件虽然支持 HiDPI,但是界面是真的难看,还是 Windows XP 时代的风格。
排除的原因:相比 FreeFileSync 多支持一堆的云厂商,以及 WebDav 协议。其他界面,设置菜单,易用性都比不上 FreeFileSync,基本上能用 FreeFileSync 就不用考虑这个软件了。
 
windows mac。中国人做的软件,看过去是免费的而且没有什么限制。看官网介绍,没有本地硬盘同步的功能。
 
(5) Microsoft SyncToy
只能在windows上用。
在 2009-11-10 发布了 SyncToy 2.1,然后就没有新版本了。2021-01 微软关闭了 SyncToy 的下载通道,不过可以从第三方网站下载到。
排除的原因:测试发现这个软件还不错,不过没有 FreeFileSync 好。具体看附录。
 
(6) Synkron
图形界面还不错,不过文档中没有提及增量同步,那应该就是没有增量同步功能了。
排除的原因:这个软件在 2011-01-26 最后一次 release 了 1.6.2,太老了,应该不支持高分屏。
 
没有网络增量同步的功能。
排除的原因:性能和界面设计,功能都比 FreeFileSync 垃圾得多。具体看附录。
 
(8) Unison File Synchronizer
这个东西总体上还不错,注意client和server的版本号必须是一致的。有增量网络同步功能
 
功能强大,支持 Block Level Sync。不过设置太多,而且没法调整模板,导致有些不好用,具体看附录。
价格:
  1. 功能被严重阉割的 "Standard Edition": 34.9美元=220.746人民币
  2. 功能被阉割了一小部分的 "Professional Edition": 59.9美元=378.8735人民币
  3. 功能完整版本 "Premium Edition": 99.9美元=631.8775人民币

5.4.3 参考资料

6.1 通过线缆直连,组建只有两台电脑的计算机网络

  1. 使用 RJ45 网线直连,组成局域网。如果电脑没有 RJ45 接口,可以使用USB有线网卡,然后用网线直连两个 RJ45 口。
  2. 使用 USB Type A - USB Type A 的usb bridge cable直连传输数据
  3. Firewire直连,这篇文章说可以,但没有细节
  4. Mac可以使用 Thunderbolt 3 Cable, Thunderbolt 3 to Thunderbolt 2 Adapter, Thunderbolt 2 Cable 直接连接两台计算机,然后通过这根数据线组建一个网络,直接传输数据。具体看这里

6.2 存储器直连,不使用 TCP/IP 网络

  1. U盘和移动硬盘
  2. Mac下可以使用firewire线直连两台电脑,把一台电脑上的硬盘连接到另外一台电脑上来访问。具体看这里的method 2。这里要使用Target Disk Mode,也就是把一台电脑上的硬盘直接挂载到另外一台电脑上。
  3. USB Type C - USB Type C 直连。mac可以使用Target Disk Mode。
  4. 把硬盘拆下,使用sata线之类的数据线直连到主机上。

6.3 参考资料

  1. How to Connect Two Computers Using USB
  2. How to Transfer Files Between Laptops
  3. How to Transfer Files Between Two Macs
  4. Is it possible to connect 2 computers with a USB cable?
  5. Transfer data between two Mac via USB-C
  6. Comparison of file transfer protocols - Wikipedia
  7. List of file systems - Wikipedia

7 附录 - 单向同步安全性测试

7.1 背景

根据我对一堆同步软件的测试结果,它们都会先移除掉目标目录下的文件,然后才是把新的文件拷贝过去。如果你移动了一堆的文件,会导致在同步的过程中,目标目录下面的文件不完整,此时如果源目录所在的硬盘发生故障,所有数据都会丢失。
 
因为经常把单向同步用作备份用途,所以为了数据安全,一款软件需要支持下面两个功能:
1. 支持 long path。
windows 专有概念,也就是 path > 260 characters。mac 和 linux 上的程序肯定支持 long path。
如果一个 mirror 程序不支持 long path。那么很可能会弄丢一部分文件。可以直接一键排除了。
2. 支持 atomic mirror。
也就是说要么镜像成功,整个目录结构变成新版本,要么镜像失败,整个目录结构 rollback 成老版本。
在把镜像功能作为备份的手段使用的时候,不支持 atomic mirror 会导致 mirror 进行的时候,文件副本数量 - 1 = 1,这是绝对不能接受的。这个还是一票否决。
 
atomic mirror 方案:
1. 直接使用文件系统提供的功能。
备份的目标是移动硬盘,所以要求移动硬盘上的文件系统支持对应的功能。
微软官方不支持在 removable media 上使用 ReFS。其他 fat16, fat32, exfat, 光驱文件系统, 各种虚拟文件系统,各种第三方驱动支持的文件系统都很弱,根本不可能有下面的豪华功能 
=> 只有 NTFS 可以考虑 
=> 如果 NTFS 不支持需要的特性,移动硬盘上就没法用上这个特性了。
=> 就不用考虑这个方案了 
  ReFS NTFS 备注
File-Level snapshots  
Volume snapshots (Volume Shadow Copy) 只能按照整个分区做 snapshot。那这样 rollback 怎么搞,只能手动拷贝文件来 rollback? 以及这个功能其实还是要软件支持,不可能自己手动调用。
Shadow Copy
Volume Shadow Copy Service
Volume Shadow Copy Service
Volume Shadow Copy Service Overview
Transactions 这个是一个文件系统的大锁,复制大量文件的时候,应该会导致整个文件系统卡死。所以不行。
 
2. 软件自己做 atomic 处理。
具体看下面的 《测试结果汇总》

7.2 测试结果汇总

测试日期:2022-02-19
所有软件都是截止这个日期的最新 windows 版本。
软件 long path atomic mirror mirror 的执行顺序
FreeFileSync 11.17 🤔 需要手动模拟
设置教程
先删除老文件,然后创建新文件
AllwaySync 21.1.5 先删除老文件,然后创建新文件
Microsoft SyncToy 2.1 先删除老文件,然后创建新文件
DirSync Pro 1.54b1 先删除老文件,然后创建新文件
Syncovery 9.46k build 358 🤔 需要调整参数,其实调整了也不是 atomic 的 可以调整
⭐️ FileGee 免费版 11.0.9 ✗ 不管是"镜像同步"还是"增量备份",都没法正确做单版本备份。  

7.3 FreeFileSync 11.17

1. FreeFileSync windows 版本支持 long path。(source 和 target 均是 long path)
2. 镜像同步的时候,如果选择"永久删除目标文件",在移动或者重命名文件的时候,会先把 target 的文件删除掉,然后再拷贝数据到新的地址。如果同步到一半中断了,会导致target里面的文件残缺。也就是说,这样做镜像备份是有风险的,可能刚把 target 里面的数据清空了,新的数据还没有拷贝过去,source 硬盘就挂了。这时候 target 里面的数据不完整,甚至没法找回上一个版本的资料。
选择 "放到回收站",在同步完成之后,再手动清空回收站:如果删除的文件大小超过了回收站的承载能力,或者遇到了 long path,还是会导致文件丢失!!!
 
FreeFileSync 里面有一个 "Fail-Safe file copy" 的选项: Delete (with versioning) before copy
 
按照这个论坛里面的说法,会先把新的文件拷贝过来,然后才会把老的文件删除掉: Computer freezes when the target disk runs out of space
In the FFS GUI, via Tools / Options you can disable the Fail-safe File Copy option.
This will prevent FFS from making a spare copy of any "old" file until it is sure
(as sure as possible) that copying over the new version of the file has succeeded and only then removes the spare copy of the old file.
If copying over the new file fails, it will restore the old file.
In case your disk is almost full, this can obviously cause problems.
 
但是经过测试,这个选项只在覆盖文件的时候有用,如果是移动文件,还是先删除老的文件,然后新增文件。这样还是会有数据丢失的风险。
历史版本只能手动清除,它里面的设置最大版本数量的功能无效。
FreeFileSync 拷贝文件的时候,是先拷贝到一个带上 .ffs_tmp 后缀的文件,然后重命名移除掉后缀。拷贝到一半停止任务的话,拷贝中的 .ffs_tmp 文件会自动被删除掉,不会留下垃圾。
 
安全的处理方案
使用 "Versioning 历史版本",设置为无限历史记录版本数量,然后在 success 的时候执行命令清空历史记录文件夹。

7.4 AllwaySync 21.1.5

不支持 atomic mirror。只能使用 Versioning 功能来避免老的数据全部被清空掉,历史记录设置为1,就能只保留1份历史记录,但是没法保证历史记录是完整的,具体看下面的测试步骤。

按照下面的顺序进行测试,发现它会把历史记录里面的东西清空掉,非常不安全(=> 代表重命名):
  1. v1 同步成功
  2. source: v1 => v2。然后同步到一半,停止。这时候 target: v1 进入了 history
  3. 修改 source: v2 => v3。然后再次开始同步。这时候 target history 中的 v1 被删除掉了,把不完整的 v2 放到了 history 中。
 
这个软件的 custom action 的 post synchronization 只能设置为在 error 或者 finished (包括 success 和 error) 的时候执行,没法单独设置为 success 的时候执行,所以也没有办法设置为无限历史记录版本数量,然后在 success 的时候执行命令清空历史记录文件夹。

7.5 Microsoft SyncToy 2.1

虽然软件非常非常老了,但是居然支持高分屏!
能检测到文件被移动了。
echo 模式,也就是镜像同步的时候,对于 source 目录已经删除的文件夹,target 目录不会删除。
long path: 界面上会有错误信息,提示路径太长。
atomic mirror: 只能选择永久删除文件,或者放到回收站。没有移动到 version 文件夹的功能,自然也没有办法手动模拟。

7.6 DirSync Pro 1.54b1

界面在高分屏下非常模糊,界面看过去很乱。整个软件设计得极端难用。
界面设计得极其垃圾,修改 Sync Mode 居然会把原来设置好的 source、target 文件夹、任务名称全部给清空了!
任务进行到一半,居然没法停止!
version居然是靠拷贝文件来实现的,不是用移动文件!!!
使用这个软件简简单单拷贝下数据,居然占用了 40%-60% 的 CPU。作为对比,FreeFileSync 只用了 2% 不到的 CPU。
atomic mirror: 只能选择永久删除文件。可以设置 backup,但是backup数量设置没有用,设置了只保留1个备份,在v1 => v2 => v3 的重命名操作后,v3同步完成之后,v1 v2 都放在了 backup 里面,而不是只保留 v2,v1 自动删除。没有 post synchronization action,所以没法模拟。

7.7 Syncovery 9.46k build 358

向导模式能通过几个步骤轻轻松松创建备份任务。高级模式能修改大量的设置。功能非常强大。支持 Filesystem Monitor Service 来监控 Block-Level 修改,然后同步的时候只同步修改的数据。能准确检测到文件夹被重命名了。各种乱七八糟的安全提示有点多,不过可以选择关闭。默认的选项不太合理,每次创建一个任务之后,都要手动改一堆的参数,而且好像没有一个模板可以直接修改默认配置。所以这个软件功能强大是强大,但是不太好用。
 
拷贝到一半停止任务的话,拷贝中的文件会自动被删除掉,不会留下垃圾。这个软件并没有使用先拷贝到一个临时目录,然后 atomic move 过去的技术,文件名也没有加上 .tmp 或者其他后缀,就是直接把原始文件拷贝到目标目录,文件名不变。
 
long path: 完美支持。包括选择文件的对话框也是自己做的,并不是用的 explorer,所以选择文件的时候就能选择任意深度的文件和文件夹。
 
atomic mirror:默认也是先删除文件,然后创建文件,这样不安全,不过可以调整。"Profile Settings" - "Advanced Settings" - "Files" - "Deletions" - "Delete Files Before Copying" 这个框去掉勾选就行了。这样会先拷贝文件,然后才是删除文件。
覆盖文件的行为没有确认。

7.8 ✗ FileGee 免费版 11.0.9

评价:界面简洁易用,除了镜像还有备份功能。

7.8.1 ✗ 如果使用镜像同步功能来执行 atomic mirror

只能选择永久删除文件,或者放到回收站。没有移动到 version 文件夹的功能,自然也没有办法手动模拟 atomic mirror。
在镜像同步的时候,软件会先删除目标目录中多余的老文件,然后才是拷贝新增的数据。比如你移动了文件,会先删除目标目录中原始位置的文件,然后才是拷贝数据到新的位置。所以在同步的过程中,新老数据都没了。

7.8.2 ✗ 如果使用增量备份功能来执行 atomic mirror

可以设置在备份完成之后,自动删除老版本。但是有一个重大的设计缺陷:备份失败了也会删除老版本,所以新的备份还不完整,老版本也被删除了。开启自动删除的情况下有备份数据丢失的风险。
 
经过测试发现有问题的“单版本的增量同步”设置如下:
posted @ 2022-01-22 09:21  cmicat  阅读(1788)  评论(0编辑  收藏  举报