云盘秒传原理的探讨——哈希查找与数据去重

P个重要的S:用云盘存片的童鞋注意了,别以为你辛辛苦苦收集好几年的片存到云盘就高枕无忧了,根据“假秒传,真共享”原则,你秒传的文件是非常不保险的,很容易被河蟹,已经有童鞋表示存到云盘的片子被河蟹了。

自己多年的“劳动成果”很有可能突然化为乌有!!!

自己的“财产”突然被剥夺了你有脾气么?

不是有可能,是已经被删了,我很愤怒有木有!!!!

如果把文件和数据比做财产(很多时候已经是了),只因为你的文件和别人的一样,然后别人犯法了,买卖了,你的文件也跟着没了。“云盘”这不是赤裸裸的对个人财产的剥夺吗?!!!!

想保住革命果实,赶紧看下边的方法,打造属于你自己的,独特的,不被河蟹的云盘片源。

============================================================================================================================

前几天给360云盘传了《一个华尔街之狼》(无删减送审版,很暴力呦:http://yunpan.cn/QICpnLPX3CLaX),但是是秒传的,当时能想到肯定是服务器有了,但是它凭什么知道已经有?文件名?不可能,乱七八糟什么文件名都有,我改了一个试试,还是秒传~究竟是什么原理呢?


首先想到的是360云盘利用文件标识符之类,唯一的ID,有文件相关信息等,尤其是索引信息。但后来感觉不对,查了一下,原来标识符指的是文件名,那个概念应该是文件描述符。那是否是通过文件描述符来解决文件重复的问题呢?仔细想想,明显不是,很关键的一个问题其实是,文件索引,描述符,它唯一的标识你的硬盘中某文件的索引信息,在另一台机子上他就是另一个ID了,这是针对系统的而不是针对文件的。


那么文件有什么唯一性呢?想起了mp3文件可以改属性,包括音乐家、专辑等,而且很多播放器是利用这个属性来自动匹配歌词等信息的。但是视频文件好像不是这样的。到这,常识已经用的差不多了,似乎没找到方向。


其实通过过去网盘常用的链接共享,或者百度文库的收藏功能就可以知道,通过把同一个文件分发一些链接等假象,是可以让很多人同时”拥有“的。不过看云盘需要角度更深一点,是不管你们共享不共享,传播不传播,只要文件相同,他都是只存一份(问题简单化,不考虑分布式和备份等现实问题)。那他怎么做到的呢?是对比整个文件吗?如果真的去一个字节一个字节的完全不差的比较,那样服务器不得憋死~!其实,他只要比较HASH值就够了,联想我们去网上下东西,某些网站,是不是也经常看到HASH值呢。那计算HASH值是不是也得耗费服务器资源呢,其实,HASH去重也是分粒度的,有文件去重,块去重,字节去重,粒度越细的准确率越高,相应的耗费服务器资源肯定也要多,这里只要文件级别的去重就够了,有谁没事闲的(或者具备一定的知识而有能力)去修改一个音视频文件呢?太少了吧,对于大多数人,除了文件名,他的音视频文件无非就是网上流传的几个热门版本,这样大家都用一个就够了,是不是很节约云盘资源呢?通过数十个视频数十G大规模的上传证实,虽然这些文件都“秒传”了,但是没那么迅速,说明检索庞大的数据库是需要时间的,或者跟颗粒粗细有关系。


“破解”秒传的办法:比如360云盘,把电影文件随便改哪怕一个字符,那应该就“秒传”不成了。这样仇视360的就可以通过不断上传垃圾文件饱和攻击360网盘了(不过怕网速不够)。如果真的这种现象频繁了,他们可以把去重粒度转为字节级,这样你把一个字节改一百次,因为其他部分都重复,所以只需增加99字节(问题简单化分析)的空间,不过考虑到文件太大,可能粒度需要把调整到块来应对~又是另一个根据现实情况分析对策的问题了。



个中细节,其实我也不是很了解,只是整合了一些知识进行了一个小猜想,不保证对,想解释的很透,还得再充电。


补充测试:

前边说的不是非常准确吧,hash码我不知道,但是回到mp3的问题上,mp3的文件头是有各种歌曲歌手信息的,也许人家去重就是通过这个文件头,这个是我知识范围能搞定的事

百度云盘下载了一个华尔街之狼插曲——the money chant.mp3,秒传360云盘。

用UE打开mp3文件,如图:


挂到linux

root@v:/mnt/hgfs/share2VM# cp The\ Money\ Chant.mp3 /tmp
root@v:/mnt/hgfs/share2VM# cd /tmp
root@v:/tmp# ls
at-spi2             ssh-bCAlBYJZ2212      VMwareDnD      vmware-root-2966103375
pulse-2L9K88eMlGn7  The Money Chant.mp3   vmware-huhuhu
pulse-PKdhtXMmr18n  unity_support_test.0  vmware-root
用vi打开,把ID3(注意看上图)直接改成ID4:



root@v:/tmp# cp The\ Money\ Chant.mp3 /mnt/hgfs/share2VM/The\ Money\ Chant_ID4.mp3
传回去,不影响,能听,传360云盘,秒传失败 大笑 大笑


当然,这是改了二进制文件的,不是改文件名,至于改文件名行不行,你试试~偷笑


另外,不光ID3,后边的几个改了也有点效果(我这显示的效果有上传过程有网速,不过还是近乎秒传,不知道是不是网速太快了,有时候能到1M,估计还是太快了,加上他在进度条出现之前耗了一阵子,所以刚看到进度条就快满了,有条件还是应该用电影测试,我硬盘太小,没存~~~~)。


最后一个小规律就是,人家应该是存了一个数据库的,放索引用(也许就是文件头)。你刚上传一个个性化定制(ID4)的MP3文件,哪怕马上又删了,第二个和他一样的也能秒传了。

那样貌似会出问题?你的删了,别人是“秒传”不是真传。那他也下载不到这个文件了,最后出现空有标题没有文件的尴尬~怎么办?

其实你只管删你的就行了,人家服务器还是存着呢,不光文件头存着,物理硬盘也躺着一份。可以”秒传“,就不可以“秒删”么?“秒删”又是一个假象,只是你对该文件的定向没了,人家服务器才懒得帮你删了又装,并且人家可以用来让别人“秒传”。

具体的流程应该是你上传了,人家就存好了,你删了,也保留一阵子。万一这之中(保质期)有别人上传了,那么你删了文件也不会影响别人了。这个其实特别像linux的文件硬链接(也许就是)。




至于为什么厂商做这么无私的事情(硬盘躺一堆没用的文件占地方):

一方面,大家某日传文件,突然发现能秒传,是不是很开心呢?这对口碑和用户粘性都有好处。(不过也不一定就传多少垃圾“删除”后都给你保留,可能有一定的算法,比如你上传又删了的东西,长时间都没有人传相同的,这样也就没必要保留死数据在那了。)

另一方面,让你秒传他也节省带宽啊。


今天传高音质mp3,十兆以上的,全不是秒传。
你传到云盘,说的通俗点,等于你把自己文件全传别人机子里去了,人家那一个目录写着mp3,一个目录写着avi的,说复制就复制,说分享就分享。
最后人家就有了无数免费资源,免费上传?是免费打工,替人家收集资源了。

你就不怕哪天人家云盘运营商突然开个资源发布(并且设法避免版权纠纷)什么的?其实现在人家也在积极推动这个事,比如资源共享群什么的,一方面是让你们重复“存储”相同内容,另一方面,可能把云盘里边“私人“存储的东西又取出来分享了,所以,你要有点什么好资源,可要慎重上传哦?(加密或者打包可能会好一点,考虑到成本问题,人家应该找最好弄的资源,比如从文件头就读出这是什么歌曲的mp3)



想到测试方法:

1.写一个word文档A,用第一个帐户存,然后删,看多久以后再传不是秒传。这证明没有别人用过你的是可以被删除的。



2.一个word文档B,第一个帐户存,然后删,第二个帐户再存,看是不是秒传,能证明你的文件不光被保留了,还能被检索,和别人的文件“合体”。

实测,删除后清空回收站,第二个账号存,不是秒传。



3.word文档C,用第一个帐户存,第二个帐户也存,看看是不是无论过多久第一个用户都能秒传。这证明存在文件硬链接。

实测,都不是秒传,可能服务器没更新检索目录,可能东西太小,不值得放到秒传里,也可能对文档和对多媒体文件的策略不同。


扩展测试:

word文档可能目标太小,被服务器忽视了,可以自己剪切个大点的电影,只要MD5变了,不是秒传就行,然后重复上边的测试流程。




提供一个比较方便的测试方法,放一个压缩包上去,再把压缩包里随便扔个文件,再传上去,就不能秒传了(至于压缩文件的文件头,表示太乱了,不容易读出来区别)。


提供一个未经测试的傻瓜方式:用视频剪辑软件,随便加一秒或者减一秒,我觉得可以达到改变文件哈希值的目的。有兴趣的可以试试,只要要求你重新整个文件上传,就证明改成功了。




想学习相关知识可以找找:去重deduplication、ZFS、HASH、文件头、重复数据删除





  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
你好!对于搭建入门级免费私有云盘NAS,基于Syncthing的扩展篇,我可以为你提供一些指导。 首先,你需要确保已经完成了基础篇的搭建,也就是成功安装和配置了Syncthing。接下来,我们可以开始扩展功能。 1. 安装额外的设备:将更多的设备添加到你的私有云盘中。这可以是其他计算机、手机或平板电脑。你只需在每个设备上安装Syncthing,并使用相同的设备ID和共享文件夹配置进行连接。 2. 设置文件版本控制:Syncthing支持文件版本控制,可以方便地恢复之前的文件版本。要启用该功能,你需要在Syncthing的配置文件中添加以下行: ``` <versioning> <type>internal</type> <params> <keep>5</keep> </params> </versioning> ``` 这将使Syncthing保留最近的5个版本。你可以根据需要调整此数字。 3. 添加其他共享文件夹:除了默认的共享文件夹外,你还可以添加其他文件夹进行共享。在Syncthing界面中,点击“添加设备”按钮,然后选择要共享的文件夹。配置共享文件夹的名称和路径后,将其添加到需要访问该文件夹的设备上。 4. 配置高级选项:Syncthing还提供了许多高级选项,例如文件忽略模式、文件冲突解决方案等。你可以在Syncthing的配置文件中进行相应的设置。详细的配置选项可以在Syncthing的官方文档中找到。 这些是扩展你的私有云盘NAS的一些基本步骤。希望对你有所帮助!如果你有进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值