磁盘故障与恢复

磁盘故障与恢复

1. 故障分类

  1. 间断性故障:
    最普遍,某次读或者写一个扇区不成功,但是经过反复尝试,可以成功读或写。
  2. 介质损坏:
    一个或多个二进制位永久损坏,不管尝试多少 次,都不能正确读。
  3. 写故障:
    写扇区时,既不能正确写,也不能检索先前写入的扇区。如:在写扇区过程中断电了。
  4. 磁盘崩溃:
    最严重,整个磁盘变成永久不可读。

2. 间断性故障

在读磁盘块的时候,磁盘块的正确内容没有被传送到磁盘控制器中,即发生间断性故障。我们期望磁盘控制器能够判断出磁盘块的好坏,在读到坏数据之后,它能够重新发送读请求,直到扇区被正确读取,或者根据某种预设,尝试100次再停止。

在写扇区时,被写入的内容与预期的内容不一致,即间断性故障发生。这时候需要进行检验,检验的方法是读这个扇区,并与打算写的扇区进行比较,判断其状态好坏。对于不正确的写,即坏状态,就需要进行重写。

3. 校验和

每个扇区有若干个附加位,称为校验和(checksum),附加位的设置取决于存储在那个扇区的数据位的值。

在读操作时,如果校验和对数据位不适合,那么读错误。但是如果校验和正确,依然存在读错误的可能,但是通过使用许多校验位,我们可以使未被发现的读错误概率极小。

奇偶校验和:基于扇区内所有位的奇偶性。这里采用偶校验,即,如果二进制集合中有奇数个1,那么数据有奇数奇偶性,并加上值为1的奇偶位,如果二进制集合中有偶数个1,则数据有偶数奇偶性,并加上值为0的奇偶位。因此,在二进制位的集合和他们的奇偶位中,1的个数总是偶数。

例:如果扇区中的二进制序列式01101000,有3个1,即奇数个1,所以校验位为1,序列后面加上校验位是011010001。如果扇区中的二进制序列为11101110,有6个1,即偶数个1,所以校验位是0.序列后加上校验位是111011100.

在读或者写数据位及其奇偶位的过程中,任何一位的错误都可以通过校验和来发现,但是,如果超过一位出错,那么久可能检测不到错误。但是,可以通过增加校验位来提高检错水平。一般来说,用n位独立位作为校验码,漏掉一个错误的几率仅为1/2^n.

4. 稳定存储

虽然校验和基本能正确检测出介质故障和读写故障,但是它不能纠错。另外,可能会有一种很严重的现象:当写覆盖了扇区先前的内容时,新的内容无法读出,即新值和旧值均丢失。为了解决以上问题,出现了稳定存储的策略。

稳定存储的思想:扇区是成对的,每一对代表一个扇区内容X,将代表X的扇区对分别称为左拷贝Xl和右拷贝Xr。假设这两个拷贝有足够多的奇偶校验位,以排除检测不出坏扇区的可能。

稳定存储的写策略:
1、写X值到Xl,检查返回状态是否是好,如果不好,则反复写,如果多次写尝试依然没能成功将X写入Xl,则认为在该扇区中有一个介质故障,所以必须采用一些措施进行补救(如用备用扇区代替Xl)。
2、对Xr重复1操作

稳定存储读策略:
交替尝试读取Xl和Xr,直到返回一个正确的值,如果若干次尝试之后依然没有正确值返回,则认为X真正不可读。

5. 稳定存储的错误处理能力

1、介质故障
在将X存入扇区Xl和Xr后,如果其中一个出现介质故障并永久不可读,我们可以从另一个扇区读取X。但是如果两个扇区都坏了,那么就不能读取X了,这种情况发生的概率很低。

2、写故障
假设在进行写X操作的时候,写Xl写到一半,突然断电了,那么Xl里面的数据是有问题的,也就是不正确的,那么,这时候可以根据Xr里面的旧值对Xl进行恢复。而如果断电的时候Xl已经写好了,Xr的值可能是正确的,也可能是不正确的,那么可以根据Xl里面的值对Xr的值进行修改。这样,就不会出现新值旧值都丢失的情况。

6. 从磁盘崩溃中恢复

磁盘故障最严重的状态是磁盘损坏或者磁头损坏,其中的数据被永久性破坏。如果数据没有备份,那么数据完全没有恢复的可能。

为了减少由磁盘崩溃带来丢失数据的风险,产生了RAID(Redundant Array of Independent Disk,独立磁盘冗余阵列)技术。

7. RAID1

RAID1又称为镜像方式,它至少需要两块硬盘,一个是数据盘,另一个是冗余盘,相同的数据块同时存放在两个磁盘的相同位置上,数据的分布互为镜像。其数据丢失的唯一场景就是:第一个磁盘损坏正在被修复的同时,第二个磁盘也损坏了。

8. RAID4

RAID4仅使用一个冗余盘作为奇偶校验盘而不管有多少个数据盘。

下面以一个简单的例子说明RAID4是如何实现的:
假设有四个磁盘,三个数据盘,称为盘1,盘2和盘3,冗余盘(奇偶校验盘)称为盘4,如果现在数据盘的第一块有如下序列:
盘1:11110000
盘2:10101010
盘3:00111000
那么冗余盘的第一块的奇偶校验位为01100010(盘1,盘2,盘3各个位1的个数为奇数,校验盘该位就是1,否则为0)

当写一个数据盘的一个新块的时候,不仅需要改那个块,而且还要改变冗余盘相应的块。如果使用笨方法,即每次写数据块,都将所有数据盘中的相应块读取出来进行模2和,再重写冗余盘的块,那么磁盘I/O开销太大。通常采用关注正在被重写的数据块上的老版本和新版本,这样磁盘I/O操作较少。

故障恢复:
如果其中某一个磁盘崩溃了,可以根据其他的磁盘相应位置的值进行模2和恢复。

9. RAID5

RAID4存在一个问题:就是冗余盘和数据盘的读写负荷不均衡,因为如果有n个数据盘,那么对每个数据盘的写都会写冗余盘,所以冗余盘的写次数是任何一个数据盘的n倍。

RAID5将奇偶校验信息均匀地分散在各个磁盘上,即,每个磁盘都有某些块做其他磁盘相应块的冗余,这样每个盘的读写负荷是一样的。

10. RAID6

RAID6基于海明码的纠错码原理,在有足够多的冗余盘的条件下,可以允许处理多个磁盘崩溃。RAID6至少需要四个磁盘。

现在假设一共有7个磁盘,磁盘1、2、3、4是数据盘,磁盘5、6、7是冗余盘,其中,盘5的位是盘1,2,3相应位的模2和,盘6的位是盘1,2,4相应位的模2和,盘7是1,3,4相应位的模2和。在这种情况下,可以允许两个磁盘同时崩溃,因为其中一个崩溃的磁盘必定能通过一组磁盘恢复,同时另一组有了恢复的磁盘之后也能恢复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值