从数据恢复角度分析腾讯云静默损坏

腾讯云在这次事件中的结论表述为因受所在物理硬盘固件版本Bug导致的静默错误,文件系统元数据损坏:
根据这个表述,故障应出现在硬盘固件故障导致的文件系统元数据损坏。这其中,涉及具备因果关系的三个知识点:
硬盘固件故障—>文件系统元数据损坏—>文件损坏。
在此大致画一下腾讯云可能用到的存储架构方案。

带*号的是不一定存在的存储链。事实上,这个逻辑肯定不准确,比如有些环节精减或不需要,有些环节有更详细的设计等。但是不是和真实场景一致不重要,重要的是,问题如果出现,总会出现在我列出的项或我没列出的项中(废话),这些项是相互关联的。
我们再重复一下现象:硬盘固件故障(层1故障)导致的文件系统元数据损坏,从而导致部分文件校验出错,导致文件损坏。针对现象,努力从上述10个环节匹配,每一层会有可能出错,导致上述故障吗:

第1层:存储介质

以硬盘为例,每个构成数据的最小单位扇区都会有严格的校验,包括扇区头部的CRC校验以及地址标识校验。理论上,如果层1的数据出现磁力失真(或闪存状态丢失)等比特出错,其头部校验不匹配时,介质控制器就会向上层反馈错误(一般表现为坏扇区),上层会启动修正模式进行修正。
当然也有例外,比如硬盘内部程序出错,根本不按上述原则执行,忽略校验值的情况下,任何对数据的篡改都是可以的。可以表现为腾讯所说的静默损坏(即层1在合理的逻辑里偷梁换柱)。这种情况,基本大帽子就能扣在硬盘固件BUG这上面了,但硬盘固件这种BUG是致命的,等同于我们存进银行的钱不知什么原因变多或变少,没有硬盘厂商站出来承认,也没有紧急发布BUG修复固件,完全归因于硬盘固件,可能偏激了些(也可能事件背后有固件BUG的原因,那也应该是添油加醋型的)。

第2层:RAID

RAID自身有冗余算法,可实现在部分介质(硬盘)损坏后,由其他成员及算法控制来接管损坏硬盘的数据服务,保证上层业务不中断,不出故障。但RAID也并非完全可靠。
一种错误是软RAID中的写漏洞(write hole),如果是软RAID,这无法避免,可能导致腾讯本次事故。但软RAID是玩具产品,自然腾讯是不会用这种方案的。
还有可能的错误是buffer?dirty,当缓冲数据掉电清空,或有意无意损坏后,会导致数据出现本例的表现错误。但这个原因可以很容易推到控制器BUG上面,腾讯没提及这个原因,或者是他们没找到病根,或者的确和这个无关。
还有最可能的错误是RAID中超过冗余数量的磁盘损坏。比如RAID5只支持一块盘损坏,但现实中出现了:
情形1:同时2块或以上硬盘损坏
情形2:1块损坏后未及时重建,第2块又损坏
情形2出现的可能性非常大,几乎IT类公司没有不湿鞋的,只是数据或不重要,或未千万公众效应。本次腾讯事故,情形2导致的数据灾难,不是没有可能。想象一下,以RAID5为例,若底层RAID有硬盘坏,管理人员没及时跟进重建,希捷负载加重后,其他硬盘坏,是非常正常的事情。更有一种情况,与硬盘固件有关,就是硬盘已经有坏道了,但并未碰触到坏道区,这时表现一切完好,一旦重建,就会导致RAID崩溃。
一般而言,工程师的修复方法就是强制上线,让带病的硬盘强行工作,也可能不懂的工程师随便上线了旧掉线的硬盘,这时,就会表现为大多数数据可访问,但部分数据(尤其较新)出现损坏,与腾讯公开的表现相似。

第3层:虚拟卷层

虚拟卷往往用在大的云存储中心,简单地举例来说,如果由1000个硬盘构成的一个存储系统,再按8硬盘一组的方式进行存储划分,会有很多问题(高故障、空间利用不集中等)。为此,很多厂商开始提及虚拟化存储,方法各有不同,但基本就是存储池化---意思是所有可用的空间在确保案例的前提下,汇总到一个统一管理的“池”中,再根据需求灵活分配虚拟磁盘。
一种方法是把所有硬盘放到池子里,再切块组RAID,再组个存储池,再划分虚拟卷。华为把这个技术称为RAID2.0,其实HP EVA、3PAR也都按这个技术在实现(网络上的主流资料描述HP EVA的算法均有误),DELL康贝(Compellent)都是这样实现。这种思路硬盘如果足够多,在使用前期安全性很好(有足够多的混在队伍中的替补,可以快速替换故障数据块),但后期随着损坏硬盘数量的增加(尤其越是自动替换,管理人员就越松懈),故障率就会增加。
举个HP-EVA的例子,一组存储144个硬盘,在崩溃临界点,先后有近40个硬盘报故障。故障的根源其实来源于硬盘预警失效、控制器又完全呆傻的BUG。40个故障硬盘远远超过可以激活系统的故障数量,就导致所有部署在本存储上的数据全部下线。一般HP官方的最高解决办法(美国的一线),就是用指令强行激活存储,让存储自己计算缺失数据,当数据的确落到坏道处无法校验生成时,就会用旧状态数据(EVA快速重建时会可能保留某些数据块的旧状态)或全0代替。这样,就会导致上层文件系统故障。文件系统故障就是表现为元文件故障,否则元文件没坏,文件系统就不会坏,顶多表现为文件内容不正确。
腾讯本次的事故也有这个可能。
另一种方法是把所有硬盘按xD+yP的方式构建RAID(如8个硬盘的数据,配一个硬盘的校验),再把所有的RAID放到池里,再从池中划分虚拟磁盘。IBM DS8000、HP X20000、DELL EqualLogic都用这个方案。这是非常垃圾的方案,IBM和HP的上述两类存储都是上千万一套的产品,但故障风险极大,我们的国企,政府常用,也常出问题,只是没人知道。故障主要来源于不断放大的RAID风险,每一组RAID假设有1/10000的概率损坏(如第2层中的情形2),如果1000个硬盘,有100组,损坏概率就放大了100倍,想想也可怕。但腾讯本次事故不太可能用IBM、HP、EMC的存储,因为太贵了,又不是存自己的核心数据。可能有小厂商或腾讯自己用软件定义的方式搭建本类存储,损坏的可能也就如同第2层中的情形2。

第4层:虚拟卷快照

快照是对某个数据集某个时间段的差异数据组合。快照集叠加到其父集上,就可以表现为最新的数据副本。集中在快照上的故障往往因人为发生,比如以为某个快照副本已经失效,删除后发现删错了;比如在回到某个快照状态时选错了,再也退不回去等等。
如果照着腾讯本次的事故,至少有一种可能会导致故障现象的发生:管理人员因故(迁移、维护等原因)对数据做了快照,在清理临时数据时不小心删除了快照副本,紧急抢救后,快照数据救回来有部分损坏,快照合并后表现为部分数据损坏。当然,这个可能性不大,腾讯本次事故中没有选择数据恢复专业公司介入(只要有选择数据恢复方案,北亚不会不知道),应该不会有这种实施可能。

第5层:大数据或云存储层

出问题的腾讯云是基于虚拟化技术构建的,涉及虚拟化,就一定会设计资源的集中分配。涉及数据部分,单一或独立存储很难响应IO的不确定性峰谷请求,所以,腾讯应该会设计Hadoop之类的平台来提供数据资源分配。
在大数据平台的设计逻辑里,数据IO资源会以可能平均地分配在所有节点中。而管理他们的元数据或集中或分布式。逻辑上,用户数据与元数据是独立的。
但现在的大数据平台往往是基于传统单机文件系统为载体进行架构。单机文件系统的操作手段、命令并未废止。所以,在一些情况下,大数据平台出故障,可能会导致腾讯类似的数据灾难。
仅仅是举几个想象的例子。
如果维护人员不小心删除大数据平台下一层文件系统上的某些数据块,大数据平台的冗余也无法还原某个数据块的话,就会表现某个用户的虚拟机数据缺失。
如果维护人员没及时维护节点,某些节点损坏,超过了冗余级别,也会导致某个用户的虚拟机数据缺失(也有可能用VMware vSAN之类的技术,同样这种可能也存在)。
腾讯的事故是否如此,不得而知。

第6层:虚拟化文件系统

VMware?vsphere、Xen、KVM或Hyper-V是专门的虚拟化系统平台。这些虚拟化平台,为了实现块级别的同时访问,且适应虚拟机的大块分配原则,有时要设计自己的文件系统,最为典型的是VMware的VMFS。
以VMFS为例,对VMFS引发本次事故表现的可能举举例子,如下:
1、VMFS是典型的共享块设备文件系统,是基于每台VMWARE服务器的约定,如果接入存储网络的是普通单机,他可不管是不是共享,有时就会独占存储设备,导致VMFS的破坏。强行修复后,就会出现某台虚拟机数据损坏的情况。
2、VMFS管理时不小心删除数据,或扩容、缩容,也会导致VMFS文件系统损坏,修复后,可能出现某台虚拟机数据损坏的情况。

第7~8层:虚拟磁盘文件与快照

虚拟机的数据载体是虚拟磁盘,往往表现为宿主系统上的一个文件或一个独立区域。以文件形式表现的居多,如RAW、VMDK、VHD、VHDX、QCOW2等格式。
这些虚拟磁盘和普通文件表现相同,就会面临和普通文件一样的损坏可能。比如上层误删除文件、上层格式化、文件截断、文件迁移时中断等。这些文件一旦破坏,即使恢复回来,也可能不是100%,就会与腾讯本次数据灾难的表现相同。
磁盘文件快照与第四层的卷快照原理相似,Hyper-V对其称为差异磁盘,表述直接明了。快照文件丢失或损坏后,也可能与腾讯本次数据灾难表现相同。

第9层:虚拟机文件系统

分配给用户的虚拟机,其硬盘就是前文提到的虚拟磁盘文件,但进入虚拟机后,就等同于物理硬盘。这些硬盘也被正常操作方法分区、格式化、安装系统、安装应用等。不论Windows的NTFS、Linux的Ext4等,文件系统总会可能有突发性的灾难。但本次事帮显然不属于此,仅聊聊可能的数据风险。
一是来自误操作。如格式化、删除数据、同名文件覆盖等。
二是来自系统bug。但bug并非是特别明显的,有时是需要多方环境因素催化。举个例子,在NTFS上打开卷压缩,存入一个上百GB的文件,文件系统8成会崩溃,连现有文件都可能找不到(在早些年,我做了很多这处条件下的试验,最终确定的确是系统bug,最近未做实验,或许Microsoft已修正)。另一个例子,非常常见,在WINDOWS上运行ORACLE数据库,数据库文件的增长粒子设置过小(比如1M之类),当数据大小到上百G时,不出5年,几乎肯定会崩溃(数据文件大小截为0,或内容交串出错)。

第10层:文件

这一层没什么好说的,往往是来自于上述几层的故障,导致文件损坏。除此之外,就谨防勒索病毒吧。

建议

数据灾难大方向有2个:人为灾难和不可抗力灾难。能给出的建议大概如下:
1、备份。
备份的重要性毫无疑问,但要讲方法,为避免硬件故障,就不能备份在同一个或同一类硬件载体上;为避免自然灾害,就要异地备份;为避免备份集过多带来的管理问题(找数据都费劲之类的),应制定良好的备份计划;为避免同类介质受环境的影响,就应该考虑不同介质的方案,如光存储与磁存储各自备份;为避免有意或无意破坏,备份集就应该设不同的存取权限,不能一把钥匙开所有门……
2、规范管理和实施。
很多企业级数据灾难往往来自于人为,因为任何一个系统,在涉及维护的时候,都必须工作在无保护状态,任何一个不小心都可能导致无法回溯的后果。制定严格的维护实施方案、备份计划、预警机制是非常重要的保障。
3、数据取舍。
太老的数据就删了吧,再对数据精简整理,再做详细的管理计划。要知道,娶妻越多,头顶发绿的机会就越大。

原文地址:http://blog.51cto.com/zhangyu/2155939

时间: 2024-07-30 16:27:54

从数据恢复角度分析腾讯云静默损坏的相关文章

数据恢复工程师视角看腾讯云静默损坏事件

腾讯云在这次事件中的结论表述为因受所在物理硬盘固件版本Bug导致的静默错误,文件系统元数据损坏:根据这个表述,故障应出现在硬盘固件故障导致的文件系统元数据损坏.这其中,涉及具备因果关系的三个知识点:硬盘固件故障->文件系统元数据损坏->文件损坏.在此大致画一下腾讯云可能用到的存储架构方案.带*号的是不一定存在的存储链.事实上,这个逻辑肯定不准确,比如有些环节精减或不需要,有些环节有更详细的设计等.但是不是和真实场景一致不重要,重要的是,问题如果出现,总会出现在我列出的项或我没列出的项中(废话)

使用ELK分析腾讯云CLB日志

缘起 最近在使用腾讯云,想对访问日志进行收集与分析,发现CLB(负责均衡)日志只能保存到COS上面,而且是每个CLB没小时压发送个gz压缩包到COS. 实现方式 CLB配置日志存储到COS,Filebeat客户端CVM安装cosfs挂载COS,并配置Filebeat输出到Elasticsearch集群,最后通过Kibana和Grafana分析. 参考文档 https://www.elastic.co/guide/en/logstash/current/lookup-enrichment.html

云-腾讯云:腾讯云

ylbtech-云-腾讯云:腾讯云 腾讯云—腾讯倾力打造的云计算品牌,以卓越科技能力助力各行各业数字化转型,为全球客户提供领先的云计算.大数据.人工智能服务,以及定制化行业解决方案. 1.返回顶部 1. 腾讯云有着深厚的基础架构,并且有着多年对海量互联网服务的经验,不管是社交.游戏还是其他领域,都有多年的成熟产品来提供产品服务.腾讯在云端完成重要部署,为开发者及企业提供云服务.云数据.云运营等整体一站式服务方案. 具体包括云服务器.云存储.云数据库和弹性web引擎等基础云服务:腾讯云分析(MTA

腾讯云数据库团队:MySQL数据库的高可用性分析

作者介绍:易固武,腾讯高级工程师,参与腾讯账号安全建设,腾讯数据仓库(TDW)优化改造,腾讯云数据库等项目,对大规模分布式存储和计算系统有浓厚的兴趣和经历 MySQL数据库是目前开源应用最大的关系型数据库,有海量的应用将数据存储在MySQL数据库中.存储数据的安全性和可靠性是生产数据库的关注重点.本文分析了目前采用较多的保障MySQL可用性方案. MySQL Replication MySQL Replication是MySQL官方提供的主从同步方案,用于将一个MySQL实例的数据,同步到另一个

腾讯云监控分析报告

腾讯云监控缺点 1.存储1分钟颗粒度得监控数据只能存储31天,不能动态调整. 2.一个用户一个项目下最多只能创建15个告警策略组,一个策略组下,最多只能创建15条告警规则. 3.监控图表:一个图表只能添加12个对象(12台主机). 4.云服务器监控项:只支持CPU.内存.硬盘. 参考使用约束:https://cloud.tencent.com/document/product/248/3632 腾讯云监控优点 1.支持短信告警和邮件报警. 2.支持MySQL监控.Redis监控,监控项比较全面.

腾讯云、阿里云都“服”了,云容灾你还迟疑什么?

无巧不成书.8月6日上午,专注于提供容灾和业务高可用解决方案的专业技术厂商英方软件刚刚发布了英方云(i2yun.com)--基于互联网的企业业务连续性服务平台,晚上,记者的手机收到了腾讯QQ安全中心发出的一条致歉信:8月6日有部分用户无法登录QQ相关业务,确认问题是由于QQ服务机房故障所致.又是一次安全事故!回想起不久前发生的支付宝.携程网断服务事件,不由得让人感叹:灾备服务真是刚性需求啊! 云容灾不是纸上谈兵 英方云,一个专门提供灾备和高可用性服务的公有云平台,这在中国的灾备领域还真是第一家.

密集投资+共建行业云,腾讯云布局下一场“连接”

十三五期间,每年超过万亿的企业级IT大市将至.根据IDC的数据,2016年到2025年中国ICT市场的10年总量将达到6万亿美元,年均增长率近7%.其中,以云计算.大数据.移动和社交为代表的新IT技术将推动中国企业进入超级数字化时代,形成一个企业级IT与社会化IT相结合的超级互联网平台. 作为社会化IT代表的云计算已经走过第一个十年,其对企业级IT的深刻变化现在正在体现:混合云与私有云连接将形成一站式云服务.互联网大数据与企业大数据连接将形成一站式数据服务.行业IT与公有云连接将形成特色行业云应

胡泽锐:移动开发即服务——腾讯云移动开发平台技术分享

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:胡泽锐,2010 年毕业加入腾讯,先后负责过QQ空间.网页应用.移动应用.移动游戏相关的工作,有着丰富的平台产品经验以及大前端开发经验,目前在腾讯云负责前端以及终端相关的工作,提出并推动移动开发平台产品的落地. 很高兴能和大家分享移动开发的历史.现状.以及未来,一起探索面向云端的全新模式--移动开发即服务.正因为有了移动开发即服务的理念,才有了移动开发平台这个产品.传统模式下,大家都是以单个产品或者能力的方式提供服务,比如推送的就

从QQ音乐开发,探讨如何利用腾讯云SDK在直播中加入视频动画

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云发表于云+社区专栏 看着精彩的德甲赛事,突然裁判一声口哨,球赛断掉了,屏幕开始自动播放"吃麦趣鸡盒,看德甲比赛"的视频广告 那么问题来了,如何在直播流中,无缝的插入点播视频文件呢? 本文介绍了QQ音乐基于腾讯云AVSDK,实现互动直播插播动画的方案以及踩过的坑. 01 从产品经理给的需求说起 "开场动画?插播广告?" 不久之前,产品同学说我们要在音视频直播中,加一个开场动画. 要播放插播动画