服务器数据恢复—Raid磁盘阵列故障类型和常见故障原因

本文主要是介绍服务器数据恢复—Raid磁盘阵列故障类型和常见故障原因,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

出于尽可能避免数据灾难的设计初衷,RAID解决了3个问题:容量问题、IO性能问题、存储安全(冗余)问题。从数据恢复的角度讨论RAID的存储安全问题。


常见的起到存储安全作用的RAID方案有RAID1、RAID5及其变形。基本设计思路是相似的:当部分数据异常时,可通过特定算法将数据还原出来。以RAID5为例:如果要记录两个数字,可以通过再多记录这两个数字的和来达到记录冗余性的目的。例如记录3和5,同时再记录这2个数字的和8。在不记得到底是几和5的情况下,只需要用8-5就可以算出这个丢失的数字了,其余情况依此类推。


在RAID里同样是以某种算法来达到保全数据的目的,当一组RAID5阵列正常工作时,所有写入RAID里的数据都正确地写到特定磁盘地址,同时再生成一个特定的计算值(通常称为校验和)。当其中一块盘出现故障时,存储在这块故障盘上的原有数据就要通过其他硬盘的数据恢复出来。由控制器(硬RAID为RAID卡,软RAID实际上是个驱动)负责这个工作。为了不宕机,控制器也会保证存储的正常化,不会让操作系统认为硬盘系统出了问题。


RAID在存储安全上还有一些不太容易避免的漏洞。虽然由于这些漏洞出现问题的可能性不大,但是存储在RAID上的数据价值无法评估。


RAID常见故障:


1、处于降级状态时,未及时rebuild。RAID是通过空余的部分存储空间来提供算法上的数据安全冗余的。当某些盘出现故障下线后,RAID便不能再提供这种存储冗余。如果不及时更换盘&REBUILD,如果其他硬盘再出现故障,RAID便无法正常工作了。


2、RAID控制器故障:控制器是连接物理硬盘与操作系统之间的纽带。硬盘容量、硬盘数量,RAID级别、逻辑磁盘分割方式、块大小、校验方式等组合成不同的RAID信息(RAID元数据),这些RAID信息有时候会写在阵列卡上,有时候会写在硬盘上,还有的时候两者皆有。如果RAID控制器出现故障,即使更换新的控制器一般也不能将RAID信息还原。中低端的RAID控制器出于成本考虑,漏洞更多。

3、固件算法缺陷:RAID的创建、重建、降级、保护等功能的实现需要非常复杂的算法。尽管厂商不会承认生产的RAID控制器的BUG,但算法漏洞在任何一款控制器上都无法避免。固件算法BUG可能会导致很多无法解释的故障。


4、IO通道受阻导致RAID掉盘:RAID控制器在设计时为了数据的绝对安全,会尽可能避免写数据到不稳定的存储介质上。这样,当控制器与物理硬盘进行IO时,如果时间超过某个阈值,或不满足校验关系,控制器便会认为对应的存储设备已不具备持续工作的能力,会让其强制下线,通知管理员尽快解决问题。这种设计的初衷很好,但对于像物理链接线路松动、硬盘完好情况下机械工作时反应超时等随机因素,RAID控制器无法分辨设备是否具备和之前一样的稳定状态,通常会让其强制下线,便会导致RAID卷出现故障,此类故障的发生概率极大且无法避免。


5、RAID控制器的稳定性:RAID控制器在ONLINE状态下(无离线盘)工作是最稳定的。当部分硬盘损坏(可能是逻辑故障)后离线,RAID控制器便会工作在一个“亚健康”的状态。这也是好多中低端的RAID控制器在一块盘离线后读写性能急速下降的原因。控制器负载太重便会极大地增加数据吞吐时出现IO滞留的可能性,从而导致RAID离线。一个不具备高速硬件处理芯片,不具备高速缓冲的控制器发生这类故障的概率要高得多。


6、坏硬盘:很多人认为只要硬盘一坏,RAID就会让这块坏硬盘脱机,更换新硬盘后REBUILD就恢复如初了。实际情况是一组RAID在工作很长时间以后也很少会读到物理硬盘的所有磁盘空间,同一时间更是不可能。部分情况下会在没有读到的区域或者以前读取良好的区域出现坏道。这类坏道因为没有读写过,所以控制器是没有识别出来的。当一块物理硬盘离线后,通常技术人员及官方资料都会建议尽快做REBUILD。如果其他硬盘存在这类坏道,当REBUILD(对全盘做全面同步)过程中读到那些坏道,这时候REBUILD没完成,新盘还无法上线,旧盘里又发现了坏道,然后又有硬盘下线,导致RAID出现故障,无法自行恢复数据。


7、人为误操作:误拔RAID硬盘、没准备备件盘、不及时换盘、给RAID除尘时忘了原来的顺序、不小心删除了原RAID配置等。


8、其他原因。


上述的这些故障原因除人为因素外,大多数很难直接避免,只能结合备份,构建整体存储安全方案来解决。 

这篇关于服务器数据恢复—Raid磁盘阵列故障类型和常见故障原因的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145706

相关文章

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

Python WSGI HTTP服务器Gunicorn使用详解

《PythonWSGIHTTP服务器Gunicorn使用详解》Gunicorn是Python的WSGI服务器,用于部署Flask/Django应用,性能高且稳定,支持多Worker类型与配置,可处... 目录一、什么是 Gunicorn?二、为什么需要Gunicorn?三、安装Gunicorn四、基本使用启