本帖最后由 eterfinity 于 2017-1-21 06:43 编辑
阵列中 监控盘易多盘暴毙:
先谈ata streaming , 这个指令的作用,大部分水友都知道,那么监控盘固件和想象中的ata streaming存储设备之间到底是啥关系呢,并不是等价关系
sata监控盘号称支持媒体streaming特性,其实并不是以响应ata streaming指令作为充分必要条件的,而仅仅是必要条件,
这里我要指出的是,它包含两类固件行为
第一类:当有视频streaming写入遇到超时的时候,不影响其它路的并发写入,超时的视频streaming写入帧段落就放那了不管了;
第二类:当有任何数据读取发生超时,固件内会转为后台执行且不对主机控制器报告,同时缩短该读取操作的磁头伺服分时资源,用于别的线程写入
此两类固件行为在单盘单一逻辑使用的过程中,并没有什么不妥
但是做了raid之后:
问题出在第二类行为上,因为第二类行为不需要ata streaming指令,也会被监控盘直接使用
一般的硬阵列控制器 读取超时就会使sata硬盘从vd逻辑上offline 然后会有个延时数分钟后维护smart信息的进程去加重映射表 使硬盘调用备用块替换
以上正确的流程执行完后 这块硬盘即使继续闪黄灯,也可以重新插拔或设置为热备盘,参与重建恢复工作,只是smart里多了重映射计数而已
然后监控盘在这类情景下,如果区块读取超时的同时阵列有写入,后果是在整个阵列上拖住该读取,直到阵列控制器判断这个盘访问超时并以降级状态完成该读取,此时一般阵列固件会对这块硬盘重新加载(企业级存储上带sas转接卡的sata盘会被重新加电),然后做介质冲刷(即小范围阵列逻辑数据重构),那么问题来了,此时读取超时的区块处根本没有被加入待替换扇区列表,介质冲刷也只会去管刚才待写入的区块。 这一条龙的操作不包含加表重映射!!!
久而久之,阵列内多块盘上 ,都出现该被重映射,但是未被重映射的离散分布的坏道,后续巡读或者高负荷使用非常容易造成double fault 或者t fault
如果上述问题发生在阵列信息 metadata存储区(尤其是通用的DDF格式信息), 很有可能会发生阵列信息不完整的问题,重启机器直接虚拟磁盘无法加载无法导入,需要免初始化重创建虚拟磁盘。
实际使用中 LSI阵列卡对监控盘确实也没什么脾气 一旦触雷 就是丢数据的节奏
当然 并不是说一般的盘 哪怕企业级盘 它的固件行为就一定没有这种问题
实际上我接触到的某些sas产品 某些固件 也有这种脑残的固件行为 但是人家新固件就能完美解决 问题固件只是造成一批盘返厂(返厂=运到美国实际控制区,随你怎么想)而已 , OEM管这种事叫做固件召回
上面说的是硬阵列 , 那么软阵列呢
自己搭的zpool可能没这方面的问题
各种版本LVM+软阵列+Linux的文件系统的产品里(比如群晖) ,只要它不会在强制超时时重新加载硬盘,就不大会遇到此问题,但是很不幸,群晖在启动时或os分区重建时会的,也就是说,如果在用了监控盘或者监控盘贴皮翻新的盘, 出现“堪用”报警时不要重启,也不要去点修复系统,而是要先备份。
微软家的软阵列妥妥的没有问题
|