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

腾讯云在这次事件中的结论表述为因受所在物理硬盘固件版本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/sun510/2155928

时间: 2024-07-30 16:28:04

数据恢复工程师视角看腾讯云静默损坏事件的相关文章

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

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

腾讯云容器服务的滚动升级使用简介

版权声明:本文由腾讯云容器服务 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/216046001482723263 来源:腾云阁 https://www.qcloud.com/community 作者介绍:于广游 腾讯云后台开发工程师 欢迎加入腾讯云容器服务QQ交流群434653499  1.什么是滚动升级 滚动升级是一种多副本服务的升级方式,其特点是能够保证升级过程中服务不中断,对外界无感知.其原理大致为循环的执行以

php5.2版本如何成功调用腾讯云短信API,实现短信发送功能

一.简要说明 我们在生活中经常会遇到一种情况,当你注册某个平台账户时,只要输入你的手机号码,点击获取验证码,随后就会收到发给你的短信验证码. 一般来说,实现这种功能都是用阿里云或者腾讯云提供的云短信服务.价格也很便宜,1000条起订,每条0.005元.因为公司的业务需求,最近需要实现这个功能,经过了解后决定使用腾讯云的云短信服务.(其实两个平台价格差不多,但是腾讯云首次开启会免费赠送100条短信,非常适合前期测试,所以理所当然选择了腾讯云.) 在官方的文档中提供了C#,node.js,Java,

腾讯云要逆天,一个人也能开发复杂的网络游戏,深圳腾讯云沙龙发来的报到!

本篇文章要感谢「银笑的尤里」从9月28日腾讯云深圳「游戏开发的超"音""速"」沙龙发来了重磅消息,下面 Shawn 重点介绍对个人开发者惊喜的"MGOBE" 联机对战引擎. 一.什么是联机对战引擎 我们先看腾讯云官方对"联机对战引擎"的介绍: 小游戏联机对战引擎(Mini Game Online Battle Engine,MGOBE)为游戏提供房间管理.在线匹配.帧同步.状态同步等网络通信服务,帮助开发者快速搭建多人交互游戏

腾讯云服务器从购买到入门使用流程 新手必看教程

一.购买腾讯云之前根据个人业务需要选购合适的云服务器, 如果想省钱的话点我领取腾讯云千元代金券,节约上云成本. 点我参加腾讯云秒杀活动,性价比也很高. 腾讯云账号实名认证,买域名,域名实名认证, 点我打开腾讯云首页>产品>热门>云服务器,选好cpu.内存.带宽,地域,这几个是主要的.其他都可以默认选择. 付款前记得勾选代金券,可以省钱. 买完了腾讯云会发站内信.手机短信通知. 然后开始网站备案,备案通过后可以开始建站. 二.登陆控制台 1.点我登陆腾讯云账号之后,在腾讯云首页右上角,点击

本机,同机房,同城,异地,不同城,腾讯云ping延时值

ping本机: 0.01ms ping同机房机器: 0.1ms ping同城机器: 1ms ping不同城机器: 20ms 北(南)方ping南(北)方机器: 50ms 从国内ping国外机器: 200ms 1~30ms 极好 几乎察觉不出有延迟31~50ms 较好 没有明显延迟51~100ms 一般 有明显延迟>100ms 差 丢包 ,掉线 腾讯云 北京到上海:38ms上海到广州:40ms北京到广州:53ms http://www.jifang360.com/news/2016429/n037

万物智联,腾讯云 IoT 边缘计算揭秘——云+未来峰会开发者专场回顾

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 背景:现在是万物互联的时代,智能穿戴设备,智能家居,无人商业,改变了我们的生活方式.预计到2021年,全球物联网设数将达到150亿,超过手机和PC的总和,物联网开发将是移动互联网之后系一个风口,如何让设备快速物联网化,解决高可用.实时性和数据安全问题,腾讯云的IOT PaaS平台可以帮开发者解决了这一系列问题. 本文整理自腾讯云加速产品总监王琰在2018腾讯云云+未来峰会上的分享,介绍了腾讯云如何助力加速物联网+,提供低门槛的一站式开发

记一次腾讯云MySQL数据库数据回滚

如题,因为操作人员的问题,需要对数据库数据进行回滚. 可以看到,设置了7天自动备份,且是物理冷备. 什么是物理冷备?科普一下: (1)热备:在数据库运行时,直接进行备份,对运行的数据库没有影响.(2)冷备:在数据库停止运行的时候进行备份,这种备份方式最为简单,只需要拷贝数据库物理文件即可.(3)温备:同样是在数据库运行的时候进行备份的,但对当前数据库的操作会产生影响. 热备份的缺点: 1.尽量不要出错,否则后果会很严重. 2.如果热备份不成功,所得结果不可用于时间点的数据恢复. 3.维护的工作比

云-腾讯云:腾讯云

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