惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
Y
Y Combinator Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
L
LangChain Blog
美团技术团队
N
Netflix TechBlog - Medium
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog
博客园 - 司徒正美
爱范儿
爱范儿
D
DataBreaches.Net
月光博客
月光博客
U
Unit 42
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
MongoDB | Blog
MongoDB | Blog
腾讯CDC

BTSync

Resilio Sync 个人版完全免费了 btsync 怎样穿透? Resilio Sync 占用太高,然而并不想用微力 Orz btsync 又被墙了 现在有没有 ipv6 tracker 可以推荐下? Resilio Sync 可以单向同步吗?源文件本地删除,其他节点不同步删除 各位大佬好, Resilio Sync 有绿化就是便携化的方法吗? Resilio sync 的 utp 协议代理问题 差点被 Resilio Sync 坑死 Seafile, Syncthing, BTSync 到底哪个好? Resilio Sync 已经无法正常使用,连不上中续服务器。 最近的 Resilio Sync 速度极慢!穿透效果极差,随便就被 syncthing 秒杀,求解? 唉! ipv6 什么时候才能普及呢?! 网件 r7000 挂移动硬盘+树莓派装 btsync 和 vsftpd 实现单位电脑和家里网盘同步 大家说,有必要花上 99 开通高级账户吗,感觉体验下来没多少区别呀 用 btsync 备份 ios 设备照片到 NAS 上后, NAS 的文件夹里有几百个 groupxxx 文件夹 最近试用了下 BTSync,觉得不错,想用来搭私有同步盘,有坑不? 问一个 BT sync 同步的权限问题? iOS 客户端怎么删除无效设备? BT Sync 没有促进大家分享的策略 现在还有人用 BT Sync 么? btsync 一个同步问题 BTsync 部分文件夹无法同步的问题 BTSync 已改名 Resilio,节点也应该改名了 从 Mac 端的 BT Sync 同步一些文件(图片)到 Android 端后发生了文件损坏的奇怪 BUG!屡试不爽 求 openwrt + btsync 或者其它类似固件 btsync 和 syncthing 都有增量同步吗?为何没见过路由器版本? btsync 速度有时快,有时贼慢,奇怪问题 [积淀半年,再次发力!] 自同步,好用的局域网文件同步软件! linux 服务器、跟本地部署 bitsync,本地修改数据很快同步到服务器上,但如果改的服务器上的,很慢才能同步到本地,这是为什么?
记录下 Resilio Sync 的一个坑
Sylv · 2019-10-19 · via BTSync

TL;DR

Resilio Sync 在差异同步下仍会重写整个文件,在用于同步类似日志文件这样不断变动的文件时,会导致巨量硬盘写入量。

起因

前几天我无意中使用 DriveDx 查看硬盘 S.M.A.R.T. 信息时发现,我使用了差不多才一年的 MacBook Pro 的 SSD 硬盘写入量竟然高达 180 TB !按 365 天算,平均每天写入量接近 500 GB。

image-20191018123129542

非常不可思议,因为我并没有主动写入这么多数据量。虽然 MacBook Pro 的 SSD 应该有相当高的写入寿命,但按这疯狂的写入量趋势,我还是怕没过一两年这 SSD 就得出问题。

很快我就通过 iStat Menus 和活动监视器( Activity Monitor )发现,造成这疯狂写入量的罪魁祸首就是 Resilio Sync。Resilio Sync 持续不断地以数十 MB/s 的速度往硬盘写入数据,一天的写入量可以达到 1 TB 以上,但是我并没有使用 Resilio Sync 同步这么高的数据量。

我的 Resilio Sync 使用场景

大半年以来,我有二三十台服务器长时间在跑我的一个程序,我一直用 Resilio Sync 来同步这些服务器上此程序使用的配置文件和生成的 CSV 数据文件以及日志文件到我的电脑上,这样可以很方便地管理和维护这么多台服务器,也可以及时获取生成的数据文件,一直都挺满意的。

虽然同步的服务器多,但需要同步的数据量并不高,每台服务器上同步的文件夹总大小一般只有几百 MB,而程序每分钟只会新增几十行数据到 CSV 数据文件和日志文件中,因为 Resilio Sync 支持块级差异同步——只有文件新改动的部分才需要传输,所以几十台服务器总共一直也只有 KB/s 数量级的同步量,一天应该不到 1 GB 的数据量。

那么按这同步量,理论上 Resilio Sync 一天的写入量也只要 1 GB 左右就好了,但是实际上 Resilio Sync 却以上千倍的速度不断地往硬盘写入数据,导致一天能有上 TB 的写入量,和同步量严重不符。

原因

为了找出造成此问题的具体原因,我搜遍了互联网没找到先例,以及尝试了许多现在看来是徒劳的方法,期间的折腾就按下不表,最终被我发现导致这问题的原因是:

Resilio Sync 虽然支持差异同步传输,但是在同步到差异数据后会重写整个文件!

假设服务器上有个 100 MB 的文本文件,之前已经和本地同步好了。现在在文件末尾添加了 1 MB 的数据,Resilio Sync 可以只传输这新增的 1 MB 数据到本地,但是本地在接收到这 1 MB 后,会读取已有的 100 MB 文件加上这 1 MB,重新写一个 101 MB 的文件覆盖原文件,而不是将新的数据直接写入原文件。每次同步完后文件的 inode 编号都会改变,说明文件已经不是同一个文件了,我是这样才发现的。

所以虽然我的同步量很少,但是服务器上生成的数据文件和日志文件有的能涨到上百 MB 大小,而且每分钟都会有新增数据,因此 Resilio Sync 在同步过程中就会不断重写这些大文件,也就导致了每天上 TB 的恐怖写入量。

解决方法

受制于 Resilio Sync 的这个机制,在我这使用场景下其实并没有可以根治的办法,可能 Resilio Sync 就不适合用来同步这种一直会变动的文件,但我目前没找到更好的替代方案。

我唯一能做的就是改程序,将生成的数据文件和日志文件按时间或者大小进行拆分,使得需要不断同步的文件的体积保持在一定大小以下,以此来减少每次重写的数据量。这样更改后效果还是很明显的,Resilio Sync 每天的写入量从 1 TB 多降低到了 100 GB 左右,减少了 90%,虽然和实际同步量比还是很高,但已经在我可接受范围内,再配合上 Resilio Sync 的定时暂停同步功能,可以进一步降低写入量,这样应该在这台电脑淘汰前不会因此导致 SSD 提前寿终正寝了。