RAID磁盘阵列

1. 什么是RAID

       磁碟阵列全名是『 Redundant Arrays of Independent Disks, RAID 』,英翻中的意思为:独立容错式磁碟阵列,旧称为容错式廉价磁碟阵列,反正就称为磁碟阵列即可!RAID可以透过一个技术(软体或硬体),将多个较小的磁碟整合成为一个较大的磁碟装置;而这个较大的磁碟功能可不止是储存而已,他还具有资料保护的功能呢。整个RAID由于选择的等级(level)不同,而使得整合后的磁碟具有不同的功能,基本常见的level有这几种( 注2 ):

RAID-0 (等量模式, stripe):效能最佳
       这种模式如果使用相同型号与容量的磁碟来组成时,效果较佳。这种模式的RAID 会将磁碟先切出等量的区块(名为chunk,一般可设定4K~1M 之间), 然后当一个档案要写入RAID 时,该档案会依据chunk 的大小切割好,之后再依序放到各个磁碟里面去。由于每个磁碟会交错的存放资料, 因此当你的资料要写入RAID 时,资料会被等量的放置在各个磁碟上面。举例来说,你有两颗磁碟组成RAID-0 , 当你有100MB 的资料要写入时,每个磁碟会各被分配到50MB 的储存量。RAID-0 的示意图如下所示:
                                   在这里插入图片描述

                                                        图、RAID-0 的磁碟写入示意图
       上图的意思是,在组成RAID-0时,每颗磁碟(Disk A与Disk B)都会先被区隔成为小区块(chunk)。当有资料要写入RAID时,资料会先被切割成符合小区块的大小,然后再依序一个一个的放置到不同的磁碟去。由于资料已经先被切割并且依序放置到不同的磁碟上面,因此每颗磁碟所负责的资料量都降低了!照这样的情况来看, 越多颗磁碟组成的RAID-0效能会越好,因为每颗负责的资料量就更低了!这表示我的资料可以分散让多颗磁碟来储存,当然效能会变的更好啊!此外,磁碟总容量也变大了!因为每颗磁碟的容量最终会加总成为RAID-0的总容量喔!

       只是使用此等级你必须要自行负担资料损毁的风险,由上图我们知道档案是被切割成为适合每颗磁碟分割区块的大小,然后再依序放置到各个磁碟中。想一想,如果某一颗磁碟损毁了,那么档案资料将缺一块,此时这个档案就损毁了。由于每个档案都是这样存放的,因此RAID-0只要有任何一颗磁碟损毁,在RAID上面的所有资料都会遗失而无法读取。

       另外,如果使用不同容量的磁碟来组成RAID-0 时,由于资料是一直等量的依序放置到不同磁碟中,当小容量磁碟的区块被用完了, 那么所有的资料都将被写入到最大的那颗磁碟去。举例来说,我用200G 与500G 组成RAID-0 , 那么最初的400GB 资料可同时写入两颗磁碟(各消耗200G 的容量),后来再加入的资料就只能写入500G 的那颗磁碟中了。此时的效能就变差了,因为只剩下一颗可以存放资料嘛!

RAID-1 (映射模式, mirror):完整备份
       这种模式也是需要相同的磁碟容量的,最好是一模一样的磁碟啦!如果是不同容量的磁碟组成RAID-1时,那么总容量将以最小的那一颗磁碟为主!这种模式主要是『让同一份资料,完整的保存在两颗磁碟上头』。举例来说,如果我有一个100MB的档案,且我仅有两颗磁碟组成RAID-1时,那么这两颗磁碟将会同步写入100MB到他们的储存空间去。因此,整体RAID的容量几乎少了50%。由于两颗硬碟内容一模一样,好像镜子映照出来一样,所以我们也称他为mirror模式啰~
                                   在这里插入图片描述
                                                 图14.2.2、RAID-1 的磁碟写入示意图
       如上图所示,一份资料传送到RAID-1 之后会被分为两股,并分别写入到各个磁碟里头去。由于同一份资料会被分别写入到其他不同磁碟,因此如果要写入100MB 时,资料传送到I/O 汇流排后会被复制多份到各个磁碟, 结果就是资料量感觉变大了!因此在大量写入RAID-1 的情况下,写入的效能可能会变的非常差(因为我们只有一个南桥啊!)。好在如果你使用的是硬体RAID (磁碟阵列卡) 时,磁碟阵列卡会主动的复制一份而不使用系统的I/O 汇流排,效能方面则还可以。如果使用软体磁碟阵列,可能效能就不好了。

       由于两颗磁碟内的资料一模一样,所以任何一颗硬碟损毁时,你的资料还是可以完整的保留下来的!所以我们可以说,RAID-1最大的优点大概就在于资料的备份吧!不过由于磁碟容量有一半用在备份,因此总容量会是全部磁碟容量的一半而已。虽然RAID-1的写入效能不佳,不过读取的效能则还可以啦!这是因为资料有两份在不同的磁碟上面,如果多个processes在读取同一笔资料时, RAID会自行取得最佳的读取平衡。

RAID 1+0,RAID 0+1
       RAID-0 的效能佳但是资料不安全,RAID-1 的资料安全但是效能不佳,那么能不能将这两者整合起来设定RAID 呢?可以啊!那就是RAID 1+0 或RAID 0+1。所谓的RAID 1+0 就是: (1)先让两颗磁碟组成RAID 1,并且这样的设定共有两组; (2)将这两组RAID 1 再组成一组RAID 0。这就是RAID 1+0 啰!反过来说,RAID 0+1 就是先组成RAID-0 再组成RAID-1 的意思。
              在这里插入图片描述
                                                 图14.2.3、RAID-1+0 的磁碟写入示意图
       如上图所示,Disk A + Disk B 组成第一组RAID 1,Disk C + Disk D 组成第二组RAID 1, 然后这两组再整合成为一组RAID 0。如果我有100MB 的资料要写入,则由于RAID 0 的关系, 两组RAID 1 都会写入50MB,又由于RAID 1 的关系,因此每颗磁碟就会写入50MB 而已。如此一来不论哪一组RAID 1 的磁碟损毁,由于是RAID 1 的映像资料,因此就不会有任何问题发生了!这也是目前储存设备厂商最推荐的方法!

RAID 5:效能与资料备份的均衡考量
       RAID-5 至少需要三颗以上的磁碟才能够组成这种类型的磁碟阵列。这种磁碟阵列的资料写入有点类似RAID-0 , 不过每个循环的写入过程中(striping),在每颗磁碟还加入一个同位检查资料(Parity) ,这个资料会记录其他磁碟的备份资料, 用于当有磁碟损毁时的救援。RAID-5 读写的情况有点像底下这样:
                            在这里插入图片描述

                                                        图14.2.4、RAID-5 的磁碟写入示意图
       如上图所示,每个循环写入时,都会有部分的同位检查码(parity)被记录起来,并且记录的同位检查码每次都记录在不同的磁碟,因此,任何一个磁碟损毁时都能够藉由其他磁碟的检查码来重建原本磁碟内的资料喔!不过需要注意的是,由于有同位检查码,因此RAID 5的总容量会是整体磁碟数量减一颗。以上图为例,原本的3颗磁碟只会剩下(3-1)=2颗磁碟的容量。而且当损毁的磁碟数量大于等于两颗时,这整组RAID 5的资料就损毁了。因为RAID 5预设仅能支援一颗磁碟的损毁情况。

       在读写效能的比较上,读取的效能还不赖!与RAID-0 有的比!不过写的效能就不见得能够增加很多!这是因为要写入RAID 5 的资料还得要经过计算同位检查码(parity) 的关系。由于加上这个计算的动作, 所以写入的效能与系统的硬体关系较大!尤其当使用软体磁碟阵列时,同位检查码是透过CPU 去计算而非专职的磁碟阵列卡, 因此效能方面还需要评估。

       另外,由于RAID 5 仅能支援一颗磁碟的损毁,因此近来还有发展出另外一种等级,就是RAID 6 ,这个RAID 6 则使用两颗磁碟的容量作为parity 的储存,因此整体的磁碟容量就会少两颗,但是允许出错的磁碟数量就可以达到两颗了!也就是在RAID 6 的情况下,同时两颗磁碟损毁时,资料还是可以救回来!

Spare Disk:预备磁碟的功能:
       当磁碟阵列的磁碟损毁时,就得要将坏掉的磁碟拔除,然后换一颗新的磁碟。换成新磁碟并且顺利启动磁碟阵列后, 磁碟阵列就会开始主动的重建(rebuild) 原本坏掉的那颗磁碟资料到新的磁碟上!然后你磁碟阵列上面的资料就复原了!这就是磁碟阵列的优点。不过,我们还是得要动手拔插硬碟,除非你的系统有支援热拔插,否则通常得要关机才能这么做。

       为了让系统可以即时的在坏掉硬碟时主动的重建,因此就需要预备磁碟(spare disk) 的辅助。所谓的spare disk 就是一颗或多颗没有包含在原本磁碟阵列等级中的磁碟,这颗磁碟平时并不会被磁碟阵列所使用, 当磁碟阵列有任何磁碟损毁时,则这颗spare disk 会被主动的拉进磁碟阵列中,并将坏掉的那颗硬碟移出磁碟阵列!然后立即重建资料系统。如此你的系统则可以永保安康啊!若你的磁碟阵列有支援热拔插那就更完美了!直接将坏掉的那颗磁碟拔除换一颗新的,再将那颗新的设定成为spare disk ,就完成了!

磁碟阵列的优点
说的口沫横飞,重点在哪里呢?其实你的系统如果需要磁碟阵列的话,其实重点在于:

资料安全与可靠性:指的并非网路资讯安全,而是当硬体(指磁碟) 损毁时,资料是否还能够安全的救援或使用之意;
读写效能:例如RAID 0 可以加强读写效能,让你的系统I/O 部分得以改善;
容量:可以让多颗磁碟组合起来,故单一档案系统可以有相当大的容量。
       尤其资料的可靠性与完整性更是使用RAID 的考量重点!毕竟硬体坏掉换掉就好了,软体资料损毁那可不是闹着玩的!所以企业界为何需要大量的RAID 来做为档案系统的硬体基准,现在您有点了解了吧?那依据这三个重点,我们来列表看看上面几个重要的RAID 等级各有哪些优点吧!假设有n 颗磁碟组成的RAID 设定喔!

项目RAID0RAID1RAID10RAID5RAID6
最少磁碟数22434
最大容错磁碟数(1)n-1n/212
资料安全性(1)完全没有最佳最佳比RAID5 好
理论写入效能(2)n1n/2<n-1<n-2
理论读出效能(2)nnn<n-1<n-2
可用容量(3)n1n/2n-1n-2
一般应用强调效能但资料不重要的环境资料与备份服务器、云系统常用资料与备份资料与备份

注:因为RAID5, RAID6 读写都需要经过parity 的计算机制,因此读/写效能都不会刚好满足于使用的磁碟数量喔!

       另外,根据使用的情况不同,一般推荐的磁碟阵列等级也不太一样。以鸟哥为例,在鸟哥的跑空气品质模式之后的输出资料,动辄几百GB 的单一大档案资料, 这些情况鸟哥会选择放在RAID6 的阵列环境下,这是考量到资料保全与总容量的应用,因为RAID 6 的效能已经足以应付模式读入所需的环境。

       近年来鸟哥也比较积极在作一些云程式环境的设计,在云环境下,确保每个虚拟机器能够快速的反应以及提供资料保全是最重要的部份!因此效能方面比较弱的RAID5/RAID6 是不考虑的,总结来说,大概就剩下RAID10 能够满足云环境的效能需求了。在某些更特别的环境下, 如果搭配SSD 那才更具有效能上的优势哩!

2. software, hardware RAID

       为何磁碟阵列又分为硬体与软体呢?所谓的硬体磁碟阵列(hardware RAID) 是透过磁碟阵列卡来达成阵列的目的。磁碟阵列卡上面有一块专门的晶片在处理RAID 的任务,因此在效能方面会比较好。在很多任务(例如RAID 5 的同位检查码计算) 磁碟阵列并不会重复消耗原本系统的I/O 汇流排,理论上效能会较佳。此外目前一般的中高阶磁碟阵列卡都支援热拔插, 亦即在不关机的情况下抽换损坏的磁碟,对于系统的复原与资料的可靠性方面非常的好用。

       不过一块好的磁碟阵列卡动不动就上万元台币,便宜的在主机板上面『附赠』的磁碟阵列功能可能又不支援某些高阶功能, 例如低阶主机板若有磁碟阵列晶片,通常仅支援到RAID0 与RAID1 ,鸟哥喜欢的RAID6 并没有支援。此外,作业系统也必须要拥有磁碟阵列卡的驱动程式,才能够正确的捉到磁碟阵列所产生的磁碟机!

       由于磁碟阵列有很多优秀的功能,然而硬体磁碟阵列卡偏偏又贵的很~因此就有发展出利用软体来模拟磁碟阵列的功能, 这就是所谓的软体磁碟阵列(software RAID) 。软体磁碟阵列主要是透过软体来模拟阵列的任务, 因此会损耗较多的系统资源,比如说CPU 的运算与I/O 汇流排的资源等。不过目前我们的个人电脑实在已经非常快速了, 因此以前的速度限制现在已经不存在!所以我们可以来玩一玩软体磁碟阵列!

       我们的CentOS提供的软体磁碟阵列为mdadm这套软体,这套软体会以partition或disk为磁碟的单位,也就是说,你不需要两颗以上的磁碟,只要有两个以上的分割槽(partition)就能够设计你的磁碟阵列了。此外, mdadm支援刚刚我们前面提到的RAID0/RAID1/RAID5/spare disk等!而且提供的管理机制还可以达到类似热拔插的功能,可以线上(档案系统正常使用)进行分割槽的抽换!使用上也非常的方便呢!

       另外你必须要知道的是,硬体磁碟阵列在Linux底下看起来就是一颗实际的大磁碟,因此硬体磁碟阵列的装置档名为/dev/sd[ap] ,因为使用到SCSI的模组之故。至于软体磁碟阵列则是系统模拟的,因此使用的装置档名是系统的装置档,档名为/dev/md0, /dev/md1…,两者的装置档名并不相同!不要搞混了喔!因为很多朋友常常觉得奇怪,怎么他的RAID档名跟我们这里测试的软体RAID档名不同,所以这里特别强调说明喔!

3. 软体磁碟阵列的设定

       软体磁碟阵列的设定很简单呢!简单到让你很想笑喔!因为你只要使用一个指令即可!那就是mdadm 这个指令。这个指令在建立RAID 的语法有点像这样:

[root@study ~]# mdadm --detail /dev/md0 
[root@study ~]# mdadm --create /dev/md[0-9] --auto=yes --level=[015] --chunk =NK \ 
> --raid-devices=N --spare-devices=N /dev/sdx /dev/hdx... 
选项与参数:
--create :为建立RAID 的选项;
--auto=yes :决定建立后面接的软体磁碟阵列装置,亦即/dev/md0, /dev/md1...
--chunk=Nk :决定这个装置的chunk 大小,也可以当成stripe 大小,一般是64K 或512K。
--raid-devices=N :使用几个磁碟(partition) 作为磁碟阵列的装置
--spare-devices=N :使用几个磁碟作为备用(spare) 装置
--level=[015] :设定这组磁碟阵列的等级。支援很多,不过建议只要用0, 1, 5 即可
--detail :后面所接的那个磁碟阵列装置的详细资讯

上面的语法中,最后面会接许多的装置档名,这些装置档名可以是整颗磁碟,例如/dev/sdb , 也可以是分割槽,例如/dev/sdb1 之类。不过,这些装置档名的总数必须要等于–raid-devices 与–spare-devices 的个数总和才行!鸟哥利用我的测试机来建置一个RAID 5 的软体磁碟阵列给您瞧瞧!底下是鸟哥希望做成的RAID 5 环境:

  • 利用4 个partition 组成RAID 5;
  • 每个partition 约为1GB 大小,需确定每个partition 一样大较佳;
  • 利用1 个partition 设定为spare disk
  • chunk 设定为256K 这么大即可!
  • 这个spare disk 的大小与其他RAID 所需partition 一样大!
  • 将此RAID 5 装置挂载到/srv/raid 目录下

       最终我需要5 个1GB 的partition。在鸟哥的测试机中,根据前面的章节实做下来,包括课后的情境模拟题目,目前应该还有8GB 可供利用!因此就利用这部测试机的/dev/vda 切出5 个1G 的分割槽。实际的流程鸟哥就不一一展示了,自己透过gdisk /dev/vda 实作一下!最终这部测试机的结果应该如下所示:

[root@study ~]# gdisk -l /dev/vda
Number Start (sector) End (sector) Size Code Name
   1 2048 6143 2.0 MiB EF02
   2 6144 2103295 1024.0 MiB 0700
   3 2103296 65026047 30.0 GiB 8E00
   4 65026048 67123199 1024.0 MiB 8300 Linux filesystem
   5 67123200 69220351 1024.0 MiB FD00 Linux RAID
   6 69220352 71317503 1024.0 MiB FD00 Linux RAID
   7 71317504 73414655 1024.0 MiB FD00 Linux RAID
   8 73414656 75511807 1024.0 MiB FD00 Linux RAID
   9 75511808 77608959 1024.0 MiB FD00 Linux RAID 
#上面特殊字体的部份就是我们需要的那5个partition啰!注意注意!

[root@study ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 40G 0 disk
|-vda1 252:1 0 2M 0 part
|-vda2 252:2 0 1G 0 part /boot
|-vda3 252:3 0 30G 0 part
| |-centos-root 253:0 0 10G 0 lvm /
| |-centos-swap 253:1 0 1G 0 lvm [SWAP]
| `-centos-home 253:2 0 5G 0 lvm /home
|-vda4 252:4 0 1G 0 part /srv/myproject
|-vda5 252:5 0 1G 0 part
|-vda6 252:6 0 1G 0 part
|-vda7 252:7 0 1G 0 part
|-vda8 252:8 0 1G 0 part
`-vda9 252:9 0 1G 0 part

以mdadm 建置RAID
接下来就简单啦!透过mdadm 来建立磁碟阵列先!

[root@study ~]# mdadm --create /dev/md0 --auto=yes --level=5 --chunk=256K \ 
> --raid-devices=4 --spare-devices=1 /dev/vda {5,6,7,8,9}
mdadm: /dev/vda5 appears to contain an ext2fs file system
       size=1048576K mtime=Thu Jun 25 00:35:01 2015    #某些时刻会出现这个东西!没关系的!
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# 详细的参数说明请回去前面看看啰!这里我透过{} 将重复的项目简化!
# 此外,因为鸟哥这个系统经常在建置测试的环境,因此系统可能会抓到之前的filesystem 
# 所以就会出现如上前两行的讯息!那没关系的!直接按下y 即可删除旧系统

[root@study ~]# mdadm --detail /dev/md0 
/dev/md0:                                            # RAID的装置档名
        Version : 1.2
  Creation Time : Mon Jul 27 15:17:20 2015           #建置RAID的时间 
     Raid Level : raid5                              #这就是RAID5等级!
     Array Size : 3142656 (3.00 GiB 3.22 GB)         #整组RAID的可用容量 
  Used Dev Size : 1047552 (1023.17 MiB 1072.69 MB)   #每颗磁碟(装置)的容量 
   Raid Devices : 4                                  #组成RAID的磁碟数量 
  Total Devices : 5                                  #包括spare的总磁碟数
    Persistence : Superblock is persistent

    Update Time : Mon Jul 27 15:17:31 2015
          State : clean                              #目前这个磁碟阵列的使用状态 
 Active Devices : 4                                  #启动(active)的装置数量 
Working Devices : 5                                  #目前使用于此阵列的装置数 
 Failed Devices : 0                                  #损坏的装置数 
  Spare Devices : 1                                  #预备磁碟的数量

         Layout : left-symmetric
     Chunk Size : 256K                               #就是chunk的小区块容量

           Name : study.centos.vbird:0 (local to host study.centos.vbird)
           UUID : 2256da5f:4870775e:cf2fe320:4dfabbc6
         Events : 18

    Number Major Minor    RaidDevice State
       0 252 5 0 active sync /dev/vda5
       1 252 6 1 active sync /dev/vda6
       2 252 7 2 active sync /dev/vda7
       5 252 8 3 active sync /dev/vda8

       4 252 9 - spare /dev/vda9
# 最后五行就是这五个装置目前的情况,包括四个active sync 一个spare !
# 至于RaidDevice 指的则是此RAID 内的磁碟顺序

由于磁碟阵列的建置需要一些时间,所以你最好等待数分钟后再使用『 mdadm --detail /dev/md0 』去查阅你的磁碟阵列详细资讯!否则有可能看到某些磁碟正在『spare rebuilding』之类的建置字样!透过上面的指令, 你就能够建立一个RAID5 且含有一颗spare disk 的磁碟阵列啰!非常简单吧!除了指令之外,你也可以查阅如下的档案来看看系统软体磁碟阵列的情况:

[root@study ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 vda8[5] vda9[4](S) vda7[2] vda6[1] vda5[0]                 <==第一行 
      3142656 blocks super 1.2 level 5, 256k chunk, algorithm 2 [4/4] [UUUU] <==第二行

unused devices: <none>

上述的资料比较重要的在特别指出的第一行与第二行部分( 注3 ):

  • 第一行部分:指出md0 为raid5 ,且使用了vda8, vda7, vda6, vda5 等四颗磁碟装置。每个装置后面的中括号[]
    内的数字为此磁碟在RAID 中的顺序(RaidDevice);至于vda9 后面的[S] 则代表vda9 为spare 之意。
  • 第二行:此磁碟阵列拥有3142656 个block(每个block 单位为1K),所以总容量约为3GB, 使用RAID 5
    等级,写入磁碟的小区块(chunk) 大小为256K,使用algorithm 2磁碟阵列演算法。[m/n] 代表此阵列需要m 个装置,且n
    个装置正常运作。因此本md0 需要4 个装置且这4 个装置均正常运作。后面的[UUUU] 代表的是四个所需的装置(就是[m/n]
    里面的m) 的启动情况,U 代表正常运作,若为_ 则代表不正常。

这两种方法都可以知道目前的磁碟阵列状态啦!

格式化与挂载使用RAID
接下来就是开始使用格式化工具啦!这部分就需要注意喔!因为涉及到xfs 档案系统的优化!还记得第七章的内容吧?我们这里的参数为:

  • srtipe (chunk) 容量为256K,所以su=256k
  • 共有4 颗组成RAID5 ,因此容量少一颗,所以sw=3 喔!
  • 由上面两项计算出资料宽度为: 256K*3=768k

所以整体来说,要优化这个XFS 档案系统就变成这样:

[root@study ~]# mkfs.xfs -f -d su=256k,sw=3 -r extsize=768k /dev/md0 
#有趣吧!是/dev/md0做为装置被格式化呢!
[root@study ~]# mkdir /srv/raid 
[root@study ~]# mount /dev/md0 /srv/raid 
[root@study ~]# df -Th /srv/raid
Filesystem Type Size Used Avail Use% Mounted on
/dev/md0 xfs 3.0G 33M 3.0G 2% /srv/raid
# 看吧!多了一个/dev/md0 的装置,而且真的可以让你使用呢!还不赖!

4. 模拟RAID 错误的救援模式

俗话说『天有不测风云、人有旦夕祸福』,谁也不知道你的磁碟阵列内的装置啥时会出差错,因此, 了解一下软体磁碟阵列的救援还是必须的!底下我们就来玩一玩救援的机制吧!首先来了解一下mdadm 这方面的语法:

 [root@study ~]# mdadm --manage /dev/md[0-9] [--add装置] [--remove装置] [--fail装置] 
选项与参数:
--add :会将后面的装置加入到这个md 中!
--remove :会将后面的装置由这个md 中移除
--fail :会将后面的装置设定成为出错的状态

设定磁碟为错误(fault)

首先,我们来处理一下,该如何让一个磁碟变成错误,然后让spare disk 自动的开始重建系统呢?

# 0.先复制一些东西到/srv/raid去,假设这个RAID已经在使用了 
[root@study ~]# cp -a /etc /var/log /srv/raid 
[root@study ~]# df - Th /srv/raid ; du -sm /srv/raid/*
Filesystem Type Size Used Avail Use% Mounted on
/dev/md0 xfs 3.0G 144M 2.9G 5% /srv/raid
28 /srv/raid/etc   <==看吧!确实有资料在里面喔!
51 /srv/raid/log

# 1.假设/dev/vda7这个装置出错了!实际模拟的方式: 
[root@study ~]# mdadm --manage /dev/md0 --fail /dev/vda7 
mdadm: set /dev/vda7 faulty in /dev/md0       #设定成为错误的装置啰!
/dev/md0:
.....(中间省略).....
    Update Time : Mon Jul 27 15:32:50 2015
          State : clean, degraded, recovering
 Active Devices : 3
Working Devices : 4
 Failed Devices : 1       <==出错的磁碟有一个!
  Spare Devices : 1
.....(中间省略).....

    Number Major Minor RaidDevice State
       0 252 5 0 active sync /dev/vda5
       1 252 6 1 active sync /dev/vda6
       4 252 9 2       spare rebuilding /dev/vda9
       5 252 8 3 active sync /dev/vda8

       2 252 7 -       faulty /dev/vda7 
#看到没!这的动作要快做才会看到!/dev/vda9启动了而/dev/vda7死掉了

上面的画面你得要快速的连续输入那些mdadm 的指令才看的到!因为你的RAID 5 正在重建系统!若你等待一段时间再输入后面的观察指令,则会看到如下的画面了:

# 2.已经藉由spare disk重建完毕的RAID 5情况 
[root@study ~]# mdadm --detail /dev/md0 
....(前面省略)....
    Number Major Minor RaidDevice State
       0 252 5 0 active sync /dev/vda5
       1 252 6 1 active sync /dev/vda6
       4 252 9 2 active sync /dev/vda9
       5 252 8 3 active sync /dev/vda8

       2 252 7 - faulty /dev/vda7

看吧!又恢复正常了!真好!我们的/srv/raid 档案系统是完整的!并不需要卸载!很棒吧!

将出错的磁碟移除并加入新磁碟
因为我们的系统那个/dev/vda7 实际上没有坏掉啊!只是用来模拟而已啊!因此,如果有新的磁碟要替换,其实替换的名称会一样啊!也就是我们需要:

  1. 先从/dev/md0 阵列中移除/dev/vda7 这颗『磁碟』

  2. 整个Linux 系统关机,拔出/dev/vda7 这颗『磁碟』,并安装上新的/dev/vda7 『磁碟』,之后开机

  3. 将新的/dev/vda7 放入/dev/md0 阵列当中!

     # 3.拔除『旧的』/dev/vda7磁碟 
    [root@study ~]# mdadm --manage /dev/md0 --remove /dev/vda7 
    #假设接下来你就进行了上面谈到的第2 , 3个步骤,然后重新开机成功了!
    
    # 4.安装『新的』/dev/vda7磁碟 
    [root@study ~]# mdadm --manage /dev/md0 --add /dev/vda7 
    [root@study ~]# mdadm --detail /dev/ md0 
    ....(前面省略)....
    
    Number Major Minor RaidDevice State
    0 252 5 0 active sync /dev/vda5
    1 252 6 1 active sync /dev/vda6
    4 252 9 2 active sync /dev/vda9
    5 252 8 3 active sync /dev/vda8
    
    6 252 7 - spare /dev/vda7
    

嘿嘿!你的磁碟阵列内的资料不但一直存在,而且你可以一直顺利的运作/srv/raid 内的资料,即使/dev/vda7 损毁了!然后透过管理的功能就能够加入新磁碟且拔除坏掉的磁碟!注意,这一切都是在上线(on-line) 的情况下进行!所以,您说这样的咚咚好不好用啊!_

5. 开机自动启动RAID 并自动挂载

新的distribution 大多会自己搜寻/dev/md[0-9] 然后在开机的时候给予设定好所需要的功能。不过鸟哥还是建议你, 修改一下设定档吧!_。software RAID 也是有设定档的,这个设定档在/etc/mdadm.conf !这个设定档内容很简单, 你只要知道/dev/md0 的UUID 就能够设定这个档案啦!这里鸟哥仅介绍他最简单的语法:

[root@study ~]# mdadm --detail /dev/md0 | grep -i uuid
           UUID : 2256da5f:4870775e:cf2fe320:4dfabbc6
# 后面那一串资料,就是这个装置向系统注册的UUID 识别码!

#开始设定mdadm.conf 
[root@study ~]# vim /etc/mdadm.conf 
ARRAY /dev/md0 UUID=2256da5f:4870775e:cf2fe320:4dfabbc6 
# RAID装置识别码内容

#开始设定开机自动挂载并测试 
[root@study ~]# blkid /dev/md0
/dev/md0: UUID="494cb3e1-5659-4efc-873d-d0758baec523" TYPE="xfs"

[root@study ~]# vim /etc/fstab 
UUID=494cb3e1-5659-4efc-873d-d0758baec523 /srv/raid xfs defaults 0 0

[root@study ~]# umount /dev/md0; mount -a 
[root@study ~]# df -Th /srv/raid
Filesystem Type Size Used Avail Use% Mounted on
/dev/md0 xfs 3.0G 111M 2.9G 4% /srv/raid
# 你得确定可以顺利挂载,并且没有发生任何错误!

如果到这里都没有出现任何问题!接下来就请reboot 你的系统并等待看看能否顺利的启动吧!

6. 关闭软体RAID(重要!)

除非你未来就是要使用这颗software RAID (/dev/md0),否则你势必要跟鸟哥一样,将这个/dev/md0 关闭!因为他毕竟是我们在这个测试机上面的练习装置啊!为什么要关掉他呢?因为这个/dev/md0 其实还是使用到我们系统的磁碟分割槽, 在鸟哥的例子里面就是/dev/vda{5,6,7,8,9},如果你只是将/dev/md0 卸载,然后忘记将RAID 关闭, 结果就是…未来你在重新分割/dev/vdaX 时可能会出现一些莫名的错误状况啦!所以才需要关闭software RAID 的步骤!那如何关闭呢?也是简单到爆炸!(请注意,确认你的/dev/md0 确实不要用且要关闭了才进行底下的玩意儿)

# 1.先卸载且删除设定档内与这个/dev/md0有关的设定: 
[root@study ~]# umount /srv/raid 
[root@study ~]# vim /etc/fstab 
UUID=494cb3e1-5659- 4efc-873d-d0758baec523 /srv/raid xfs defaults 0 0 
#将这一行删除掉!或者是注解掉也可以!

# 2.先覆盖掉RAID的metadata以及XFS的superblock,才关闭/dev/md0的方法 
[root@study ~]# dd if=/dev/zero of=/dev/md0 bs=1M count=50 
[root @study ~]# mdadm --stop /dev/md0 
mdadm: stopped /dev/md0   <==不啰唆!这样就关闭了!
[root@study ~]# dd if=/dev/zero of=/dev/vda5 bs=1M count=10 
[root@study ~]# dd if=/dev/zero of=/dev/vda6 bs=1M count =10 
[root@study ~]# dd if=/dev/zero of=/dev/vda7 bs=1M count=10 
[root@study ~]# dd if=/dev/zero of=/dev/vda8 bs= 1M count=10 
[root@study ~]# dd if=/dev/zero of=/dev/vda9 bs=1M count=10

[root@study ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
unused devices: <none>   <==看吧!确实不存在任何阵列装置!

[root@study ~]# vim /etc/mdadm.conf 
#ARRAY /dev/md0 UUID=2256da5f:4870775e:cf2fe320:4dfabbc6 
#一样啦!删除他或是注解他!

注意:如果你只是将设定档移除, 同时关闭了RAID,但是分割槽并没有重新规划过,那么重新开机过后,系统还是会将这颗磁碟阵列建立起来,只是名称可能会变成/dev/md127 就是了!因此,移除掉Software RAID 时,上述的dd 指令不要忘记!但是…千千万万不要dd 到错误的磁碟

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值