磁盘阵列raid基础原理
如果你的主机中有三个硬盘(不是分区),里面保存的数据非常重要,那么你会想怎么对这些数据进行备份。最简单的办法是再买几个硬盘,把数据全部拷贝到备份硬盘。如果你的主机上挂载着十个盘,那么你就得买十个硬盘用来备份。
对于企业级的大型机,一个应用系统上少则挂载二十多块硬盘,多着上百块,如果对其进行备份,我们不可能使用等量的硬盘。
这时我们就得考虑其他的备份策略。
最近学习了一种称为RAID5的备份策略,感觉很神奇,分享给大家。
首先我们应该明白什么是异或运算:
0100^0101=0001
异或运算的规则是同则为假,异则为真(0为假,1为真),
0^1^0^1^1^0=1
当异或计算中,1的个数为奇数时,几个等于1,为偶数时等于0。
然后让我们来进行一个计算
0^1^0^1^*=1
请问*为何值? =1
如果每一个0 1 都对应硬盘中的一个bit,看看下面的情况:
disk1 | disk2 | disk3 | disk4 | ++disk |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 0 |
1 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 0 | 1 |
++disk为奇偶校验盘,它的数据都是通过前面四个盘的数据进行异或计算得到的。
下面神奇的事情将要发生:
如果disk2盘突然坏了,怎么办?
回想前面的演示计算,我们完全可以通过其它盘和奇偶校验盘的数据对disk2的数据进行恢复。
如果disk3盘坏了呢?当然我们还是可以通过其它盘对其进行数据恢复。
甚至于当某个盘坏掉的情况下,不用更换,系统可以通过其它盘计算出该盘的数据,照样能使够稳定运行(当然我们一般不会这样做)。
进一步优化:
1、每次写数据时,为了奇偶校验,都需要读取其它所有盘 的数据,造成写的速度慢。改进办法:分段写磁盘,系统首先把要写入的数据进行段(大小同硬盘中的段)的划分,按照这些段中的数据,计算出奇偶校验数据,然后同时写入硬盘(此时的同时写入是真实的同步执行写入,因为每一个硬盘都是物理独立的)。
2、把奇偶校验数据都写到一个盘,会造成每次写数据和恢复数据,都会访问此硬盘,因为硬盘自身速度的限制,会造成瓶颈。改进方法:把这些奇偶校验数据分散写入各个硬盘。
3、当一个硬盘坏掉后,能够进行恢复,但如果再坏一个,会对系统造成难以恢复的灾难。改进办法:增加一个热备盘,正常情况下,不向此盘写入数据,当一个磁盘出问题后,系统立即把数据恢复到热备盘。这样就运行系统可以有两个盘同时损坏而不影响系统运行,也不会造成数据丢失。