darkclown 发表于 2022-11-27 15:33

SMB是可能静默数据损坏的,同步重要文件务必开启校验(加密)

本帖最后由 darkclown 于 2025-1-9 09:32 编辑

我这段时间一直在和smb同步问题作斗争,具体可见我前两个帖子,想看结论直接看本帖。

结论:smb3.0并不能保证数据完整性,例如在我的网络环境下,win到mac传输400G的12000个文件中,会出现约8个文件损坏,每个文件中存在一段约500~1500(目前观察到的)字节的连续错误(静默无提示),文末附图。

网络环境:
路由器:国外运营商送的
服务端:win10 20H2及21H2都试过,无线网卡PCIE的AX200,开启smb共享,是ECC内存
客户端:win10笔记本(AX201),macbook(m1)

测试组:
1. win10->win10:损坏率不稳定,损坏部分全为0,与mac不同
2. 以下几组损坏率稳定可复现,400G的12000个文件中,都会出现约5~8个文件损坏,损坏部分全为乱码:
   win10->mac(finder挂载,直接拷贝)
   win10->mac(paralles虚拟机win11中打开服务器ip,直接拷贝到mac共享文件夹)
3. win10->mac(开启smb加密):无损坏
(以上测试中数据传输过程无任何报错,同步的文件也和原文大小等属性完全一致,只是中间有一小段与原文不同)
(所谓“乱码”是指,无规律地与原文不同,见文末附图)


讨论:
1. smb是在tcp之上的,tcp本身有16bit的checksum校验,但它的抗随机错误的能力不强,如果网络环境错误率高,可能会恰好过校验。
2. 部分坛友提到无线网的不稳定性,但是无线网本身也是通过WPA加密了数据,如果有错误校验也不会通过。
3. 如今网络环境越来越复杂(万兆、**、sdn),默认明文无校验的smb就像http一样,是不靠谱的,尤其是静默错误等你发现的时候已经晚了。
4. 必须在应用层再作校验,开启smb的加密或者签名功能,包括使用webdav等也应该开启https。



SMB3.0加密特性兼容性(欢迎补充):
win8和server2012以后:native支持
mac:finder(√) parallels+win(√)
linux:samba(√)
iphone/ipad:FE文件管理器(√)File Hub(√)Infuse(√) Documents(×) nPlayer(×)
android:MiX(×) mxplayer(×)


开启smb3.0加密的方法:
powershell执行Set-SmbServerConfiguration –EncryptData $true
详见https://learn.microsoft.com/zh-cn/windows-server/storage/file-server/smb-security


另外按理说开启smb签名也能起到校验的作用,但是我没做实际测试。

开启smb签名校验的方法:
powershell执行Set-SmbServerConfiguration –RequireSecuritySignature $true
详见https://learn.microsoft.com/zh-cn/windows-server/storage/file-server/smb-signing


文件差异对比:

jcd_chh 发表于 2022-11-27 22:25

我不知道我的案例有没有关系。前段时间从电脑往NAS上传了700G左右数据,win11 AX201-->群晖,都是单个十几个G的大文件,用的fastcopy开校验,传完可能有近100G的数据是过不了校验的[雷人]之前还有直接windows资源管理器传输,也出现过MD5不一致的情况
路由器是TP 6088,想不通到底是哪个环节的问题。

还是rsync好,公网龟速传过几个T的数据,MD5一点问题也没有。

wujin941005 发表于 2022-11-27 15:38

严谨的拷贝我们都用Teracopy来操作

darkclown 发表于 2022-11-27 15:42

本帖最后由 darkclown 于 2022-11-27 15:56 编辑

wujin941005 发表于 2022-11-27 15:38
严谨的拷贝我们都用Teracopy来操作

嗯,最保险的是再校验一遍了,smb加密也只能保证中间的步骤不出错。只是网络传输时,额外作校验还要重传一遍,要花两倍的时间,除非服务端能直接提供hash。

gartour 发表于 2022-11-27 15:46

大概率是兼容问题。

我之前用OP开SMB做远程备份盘。

经常出现几个文件在同步时总是提示文件已存在无法写入(记不太清提示原话,大概是这样)。以前同步到windows二奶机时从来没出过问题,查看NAS那边的文件,其实是同步过去了的。删除后重新同步,这几个文件还是会报错。

然后相同的硬件换成hyper-v(win+op),用winodws自带共享,同步就一点问题没有了。

darkclown 发表于 2022-11-27 15:52

gartour 发表于 2022-11-27 15:46
大概率是兼容问题。

我之前用OP开SMB做远程备份盘。


你这个是不是smb实现的问题,而且有错误提示的。

静默损坏就太可怕了,我经常需要局域网同步文件,要不是偶然一次发现,长期这么下去数据千疮百孔了[流泪]

gartour 发表于 2022-11-27 15:56

darkclown 发表于 2022-11-27 15:52
你这个是不是smb实现的问题,而且有错误提示的。

静默损坏就太可怕了,我经常需要局域网同步文件,要不 ...

我觉得有可能是同一个原因。只是那个软件刚好有提示。

我没说清楚,不是同步几个文件不行,而是同步几千个文件,有几个文件会报错。

如果没提示,不就是无提示损坏了?

hellol1 发表于 2022-11-27 15:57

有没有可能是交换机呢?

darkclown 发表于 2022-11-27 15:59

gartour 发表于 2022-11-27 15:56
我觉得有可能是同一个原因。只是那个软件刚好有提示。

我没说清楚,不是同步几个文件不行,而是同步几千 ...

应该不是同一个原因,我这里遇到的smb数据损坏是上层软件发现不了的,文件大小什么的都一模一样,只是中间有一小段数据和原文不同

ccchoco 发表于 2022-11-27 16:03

可能出错的环节有点多

赫敏 发表于 2022-11-27 16:05

确定是文件损坏而不是两个系统编码不一样?把mac乱码文件放到win打开呢?

Phil_Libra 发表于 2022-11-27 16:07

如果没有经过交换机,高度怀疑是路由器问题导致的……smb要是出错率这高早就很多人报告这个问题了吧

caileipk 发表于 2022-11-27 16:10

smb出错这么狠的话。那公司的file Server还得了。。你就没想有想到是在占用的情况下吗?

uuyyhhjj 发表于 2022-11-27 16:10

哦,原来是用无线网卡当服务器的勇士,那是得开校验的,不开校验出问题很正常

goat 发表于 2022-11-27 17:13

smb非加密出错可能是链路问题,同线路你可以试试ftp/nfs出不出错。

孤舟一笠 发表于 2022-11-27 19:50

之前坛内出现一例网件路由器导致的文件传输静默错误
如果设备的内存不稳定,也会导致smb文件传输静默错误
遇到这个问题,我不敢保证smb本身100%没问题,但是也要首先怀疑路由器或者内存的问题。最最不该首先质疑smb
先测试一下内存吧,看看有没有错误。LinX,P95,memtest都可以。

darkclown 发表于 2022-11-27 20:42

Phil_Libra 发表于 2022-11-27 16:07
如果没有经过交换机,高度怀疑是路由器问题导致的……smb要是出错率这高早就很多人报告这个问题了吧 ...

如果是路由器的问题,那为什么tcp校验可以过呢?

darkclown 发表于 2022-11-27 20:43

caileipk 发表于 2022-11-27 16:10
smb出错这么狠的话。那公司的file Server还得了。。你就没想有想到是在占用的情况下吗? ...

我觉得不一定,公司都是有线网,出错的概率小,更不容易出现并察觉这种事

darkclown 发表于 2022-11-27 20:48

本帖最后由 darkclown 于 2022-11-27 21:13 编辑

孤舟一笠 发表于 2022-11-27 19:50
之前坛内出现一例网件路由器导致的文件传输静默错误
如果设备的内存不稳定,也会导致smb文件传输静默错误
...

我做了很多组实验了,不开加密出错,开了就无错,实验结果是可重复的。
路由器问题为何tcp校验可以过?内存问题为何开了加密就不出错?
我现在怀疑是不是网卡封包解包TCP有问题

darkclown 发表于 2022-11-27 20:52

goat 发表于 2022-11-27 17:13
smb非加密出错可能是链路问题,同线路你可以试试ftp/nfs出不出错。

每做一次实验要12小时。。暂时做不动了。我重点疑问的是,这种特点的错误是不可能过tcp校验的,那为何还会如此?

goat 发表于 2022-11-27 21:35

darkclown 发表于 2022-11-27 20:52
每做一次实验要12小时。。暂时做不动了。我重点疑问的是,这种特点的错误是不可能过tcp校验的,那为何还 ...

可以稳定复现就整理下给samba提issue,然后扔给对面,除非你打算自己修。

AxIaTErN 发表于 2022-11-27 21:38

我怎么记得有个帖子说的netgear的设备会造成smb数据被篡改?[雷人]

darkclown 发表于 2022-11-27 21:42

AxIaTErN 发表于 2022-11-27 21:38
我怎么记得有个帖子说的netgear的设备会造成smb数据被篡改?

帮忙找找那个帖子呗,我没找到

darkclown 发表于 2022-11-27 21:53

goat 发表于 2022-11-27 21:35
可以稳定复现就整理下给samba提issue,然后扔给对面,除非你打算自己修。

我不是用的samba啊,提给微软/intel他们会理吗?[困惑]

Phil_Libra 发表于 2022-11-27 21:57

darkclown 发表于 2022-11-27 21:42
帮忙找找那个帖子呗,我没找到

https://www.chiphell.com/forum.php?mod=viewthread&tid=1878038&extra=&page=2&mobile=1

要被网件坑死了,NAS里面文件废了大半,R7800用户注意啊

但是被归档了

goat 发表于 2022-11-27 21:58

darkclown 发表于 2022-11-27 21:53
我不是用的samba啊,提给微软/intel他们会理吗?

直接找微软试试,至少比自己瞎摸解决方案强多了。
当然召唤个大佬直接指出哪里有问题更好

darkclown 发表于 2022-11-27 21:58

Phil_Libra 发表于 2022-11-27 21:57
https://www.chiphell.com/forum.php?mod=viewthread&tid=1878038&extra=&page=2&mobile=1

要被网件坑死 ...

看不到帖子,你能讲讲吗?那个案例中为何文件损坏而tcp校验可以过?

zhuifeng88 发表于 2022-11-27 22:04

本帖最后由 zhuifeng88 于 2022-11-27 22:31 编辑

脚本跑了10TiB测试(linux读写win11的共享目录, 网卡两侧都是mcx4421a, 交换机st5008f, linux生成1GiB随机数据, 本地计算crc32, 写入共享目录, 冲刷io buffer, 从共享目录读取刚刚写入的数据, 计算crc32并和之前的比对, 重复10240次), 没看到有明确问题, 比较怀疑是有其他方面影响

darkclown 发表于 2022-11-27 22:32

本帖最后由 darkclown 于 2022-11-27 22:38 编辑

zhuifeng88 发表于 2022-11-27 22:04
脚本跑了10TB测试(linux读写win11的共享目录, 网卡两侧都是mcx4421a, 交换机st5008f, linux生成1GiB随机数 ...

应该是我这边某一个环节错误率大而没被修正导致的,你那边应该不好观察到。。。

因为我这边做实验也比较慢,就先看看大家有什么说法,如果找到方向再进一步研究。

darkclown 发表于 2022-11-27 22:34

jcd_chh 发表于 2022-11-27 22:25
我不知道我的案例有没有关系。前段时间从电脑往NAS上传了700G左右数据,win11 AX201-->群晖,都是单个十几 ...

你这个感觉跟我这很像啊,另外rsync是用什么协议的,ssh?那应用层有校验,和smb开加密效果应该一样了
页: [1] 2 3 4
查看完整版本: SMB是可能静默数据损坏的,同步重要文件务必开启校验(加密)