RAID的实际操作

下面来看操作:

为了让大家更加认识RAID的特性,所以我们通过软RAID,操作系统本身有这样的功能,来演示一下RAID的特性,来看看RAID是否真的有冗错性。

举例:

我们要做RAID-5,那么这个RAID-5要做的话,我们至少要用到三块硬盘。

现在有一个这样的问题,你是否想过,RAID-5虽然在企业里用的非常多,但是一旦损坏一块硬盘,这时候你感觉系统会出现什么状态?

解答:比方说,他有三块硬盘,坏一块是可以的,但是坏这一块硬盘,这时候我们访问磁盘的数据的时候,他需要另外两块磁盘来算这块坏掉的磁盘中的数据,这时候,我们会发现,系统特别慢,那我们的性能会急剧下降,而且这时候我们的服务器负载还挺大的时候,突然磁盘的性能这么差,服务就有可能出现宕机。比如说,正好是高峰期,访问量最大的时候,

这时候我们应该怎么办?

         一般情况下,硬盘坏了,会有报警。给你发个短信或者给你发个邮件,你可以看到这个提示。但是有可能你在外地,或者在别的地方,在你赶到之前,这中间会有一段时间,在这段时间之内,服务器可能已经受不了了,那怎么办?

         那在真正的实际生产环境中,绝对不是这样的,我们要有专门的一块硬盘放到旁边的。这个硬盘叫做spare硬盘。其实就是空闲硬盘。这个spare硬盘他是加到RAID成员里了,但是他不工作。不属于真正的成员。比方说,原来是三块硬盘,我再加一块,四块。但是平时spare硬盘是不参与工作,只是由其他三块硬盘完成工作,在当发现其中一块硬盘坏了,这个备用的硬盘,自动顶替这个坏了的硬盘。这个过程不用管,他会自动代替。

         代替,一开始可能是需要同步数据,肯定是稍微慢一会,但是这个时间不会很长。总比手工去换块硬盘的时间快多了。这就是spare硬盘,一般在实际生产环境中,一般都是有备用硬盘的。

         当我们的的备用硬盘用上之后,我们在回到公司后,我们还需要,去机房将坏的硬盘拆下来,再找一块硬盘,作为备用硬盘。这里只要我们之前配好了,做好了RAID,我们再换备用硬盘时,不用再配RAID,不用再指定谁是spare硬盘。当然这个设置,我们使用软件RAID做的,将来工作中是RAID卡,则需要在开机的时候调节BIOS,有一个专门的字符界面。他有说明,到时候自己看就行,那个也不太难。我们先了解原理就行,到时候胡一看说明书我们就能配。

这里面需要注意,RAID做的时候,比如说我没有三块硬盘做成RAID以后,在真正的linux系统启动以后,我们只能看到一a硬盘sda他底下其实是一个组合设备,对于操作系统来讲我们看到就是一块硬盘。

 

下面我们实际操作:

先看一下当前系统有几块硬盘:lsblk

                            wKiom1fGmciTu4MiAAFpOBVjRR0078.png-wh_50

发现正好有4块硬盘,并且都是20G,这时候我们就可以拿过来用了。

然后在用df命令查看一下分区的挂载情况。确认一下硬盘是否开始被使用,我们好做好将整块硬盘做RAID,还是讲硬盘中的某个分区拿出来做RAID.

wKiom1fGmoPh7eZRAAEz_J44JyQ461.png

注意:做RAIDlinux中做RAID,可以拿硬盘,也可以拿分区。要是拿分区做RAID的话,分区的大小应该是一致的,包括要加的那个成员大小都是一致的。

比方说,a硬盘,再次分一个区出来。

wKioL1fGmrnQMZJGAAB9Zn6I7lw423.png-wh_50

先查看一下,a硬盘已经分了多少个分区用p,然后发现已经分了好多了,为了便于分析观察,我们退出用命令q退出。我们去b硬盘做RAID

wKiom1fGmujzuPvtAAF7_mBf2Vo963.png

 

我们发现B硬盘是干净的硬盘,我们就用B硬盘来做。首先第一步是进入b磁盘的划分分区的管理界面:

第一步:

wKioL1fGmxTQR_AKAAB_5Rf_A2E607.png

用命令查看一下b硬盘的分区情况:

wKioL1fGm3qzkV2fAAEZfrTXoYU230.png

接下来我们划分分区,用分区来做RAID,用分区做RAID就是多一个步骤,就是多一个分区的操作,而且还要改他的ID,如果是硬盘的话,没有这个动作,对于硬盘直接拿过来做RAID就行了。

那么创建分区:

这里创建分区,创建主分区或者创建逻辑分区,都可以,只要大小一样就行。

第二步:

wKiom1fGm7fSvR4_AACdXhruMs8216.png-wh_50

现在注意我是有四个硬盘,每个硬盘取出10G,我要做RAID-5,最终我们看到的空间是多大?我们知道RAID-5磁盘利用率是n-1/n,也就是说我们最后应该看到30G.另外那10G我们放了校验位。

我们分完区之后,我们要调一个选项:用命令tl自命令

wKiom1fGnFuySv2hAAAvcUoSEDQ811.png

输入l后,会显示如下编号对应的文件系统而且我们也有下图显示的内容,找到我们要改的编号是,fd 因为它对应Linux raid auto

wKiom1fGnDSQ_R7NAAMOl-B1uro371.png-wh_50

 

然后我们在下面的提示符后面输入 fd 并用p命令查看一下分好区的文件系统格式。然后保存分区后退出交互式管理界面。并且在保存退出时发现磁盘分区表也同步了,不用手动通知内核,强制其重新读取磁盘分区表。“the partition table has been altered!”如下图所示:

wKiom1fGnIrggEMUAAGIPUTmMgU919.png

我们接下来查看一下磁盘分区 lsblk 如下图所示:

wKiom1fGnKrhZFGZAAGSKShPVoY255.png

这样我们的b1分区就准备好了。而且我们发现b磁盘跟d,c,e磁盘是一模一样的,那我们一个个分区岂不是太麻烦了,那我们应该怎么办?

我们要学会学以致用,我们可以用dd复制命令,将b磁盘分区表导入到,c,d,e三个磁盘中。如下图所示:

wKiom1fGnM7xuQYPAAFfsuvEP58640.png

这种导入分区表后,可能不同步,如下图所示:

wKioL1fGnPjR4w44AAGHS4G1J9c231.png

这时发现分区表不同步,那么我们就用命令partx  -a DEVICE来同步一下,如下图所示:发现分区表同步了。

wKiom1fGnRvDJTa5AAJGotH5uUc282.png

这时我们分完区后,我们正好是用b1,c1,d1,e1四个成员来做RAID

注意:我们做RAID可不能拿分区一个个来做,我们是把他们组合起来一块来做的,所以现在不是格式化的时候,是我们做完RAID以后统一格式化,以前我们说的是,分完区就格式化了,这里有区别,这里是我们先做完RAID再格式化。

接下来我们用mdadm这个命令来创建RAID

mdadm: md就是多磁盘管理器。

命令的语法格式:mdadm [mode] <raiddevice> [options] <component-devices>

         命令语法格式翻译一下就是:mdadm

                   [mode]模式 (比如说创建就是 -C大写)

                   <raiddevice>  指定要创建的RAID设备有哪些,包括要制定的RAID级别是RAID                 包括有几块硬盘,分别是谁都要指定。

  支持的RAID 级别:LINEAR,RAID0, RAID1, RAID4,RAID5, RAID6, RAID10

接下来我们开始做RAID:

第三步:

先查看RAID设备名称是否已经存在,由下图可知,默认情况下没有

wKioL1fGnT6g6chrAABD-skARFQ371.png

 

没有则需要我们创建,创建RAID模式用 -C大写,

  模式:

创建:-C后加RAID设备名来创建。

(这里设为/dev/md0,其实这个地方,md0不是确定的,可以写md7,这里我们是第一个RAID设备,为了好区分,我们就设置为、/dev/md0

  -a{yes|no} :自动创建目标RAID 设备的设备文件

 -l #llevel的意思,指明要创建的RAID 的级别;

 -n#: 使用# 个块设备来创建此RAID

     (我们这里-n 后面写了3,是这样的我们用4个分区来创建 RAID,但有一个是备用   的所以实际工作是三个。

 -x#: 指明空闲盘的个数。其实就是让我表名备用磁盘或分区的个数。

     最后再挨个指定做RAID的成员。标准写法是/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

但是我们可以用简便的写法,综合所述,写出如下图命令。回车则开始构建RAID

wKioL1fGnWfxltftAABxQB-STNM944.png

在构建RAID时,我们可以用,命令

-D :显示raid 的详细信息; mdadm-D /dev/md#

#mdadm -D /dev/md0 来查看RAID的创建过程。可以看到

"spare rebuliding /dev/sdd1"

"clean, degraded, recovering"

wKiom1fGnYzAkAmJAAFX2kRT328849.png

 

我们还可以用命令cat /proc/mdstat  来查看md的工作状态。如下图所示,已经是%45

wKiom1fGnizgNlxHAACU6oei3cc169.png

还可以用命令

watch -n 1 cat  /proc/mdstat  动态查看创建状态

从里面可以读出,当前创建的是RAID-5,包括哪些成员。一共有几个。显示谁是备用磁盘或分区sde1[3](S):后面加S表示备用。Sspare的首字母

能看到chunk512K

wKioL1fGnleRjtgXAACbULhQNC0685.png

创建完成后我们再次用命令

cat /proc/mdstat 查看一下。没有问题

wKiom1fGnnjjmrevAACK_FgilC8786.png

在用命令mdadm  -D /dev/md0 来查看我们创建的RAID的详细信息。

wKioL1fGnqSB-q5UAAFWDR2tzPo550.png

layout=left-symmetric  这个标签表示我创建的RAID是左对齐。

接下来,注意我们创建完RAID 后,他是有这样一个变化的,

wKiom1fGnvPTCQuwAAGzsbUcVGc847.png

我们可以看到在/dev/sdb1等等RAID成员后面的类型,已经不是普通的分区了,而是RAID成员了。member 成员。

第四步:

接下来这个RAID设备,我们需要用-Ds 来显示出的信息,并将这个信息备份到专门的一个文件里面。这个文件应该叫 mdadm.conf

wKioL1fGnxeSxcVmAAA3qXrM5FU257.png

但是这个文件不存在。

wKioL1fGnzWREjW-AABTHK7LHD8302.png

文件mdadm.conf不存在,我们需要这个命令来创建。

生成配置文件:mdadm D s >> /etc/mdadm.conf

否则可能在将来启动的时候会有问题。那么我就生成一下,如下图所示:

wKioL1fGn7PiObK4AABQKFHsGlM890.png

第五步:

RAID做完之后我们进行格式化,格式化如下图所示:

wKiom1fGn9GgVyC8AAFw0x07Gzo171.png

第六步:

我们接下来进行挂载:为了我们下次重启,丢不了。

wKioL1fGoFnS3M5wAAAWoakj-XI005.png

 加入的内容如下图所示:

其实我们要挂载的设备文件名应该写成UUID,但是这里偷懒,就先写成设备文件名。

wKiom1fGoIHyrRL0AAEtgosKB4g473.png

创建挂载目录,并将做的RAID挂载到目录下,并查看挂载结果。

wKiom1fGoKaxmfrSAAFTaYEqGJ4191.png

我们看到,创建的RAID已经挂载上了,但是显示是20G,这是为什么呢?

解:这是因为我们用四个分区创建RAID-5,其中一个是用来备用的,另一个是存放校验位的,所以我们看到的是20G.

接下来我们拷贝点文件过去,并查看一下。用来检验我创建的RAID

wKiom1fGoMeimYDtAAAzd3Cwm5I825.png

发现成功了。这就是所说的创建RAID-5,的步骤。

RAID的测试和修复。

RAID做破坏测试,其实就是损坏一块硬盘就知道了。

损坏硬盘有两种情况,

第一种是:做测试,模拟损坏。

第二种是:真损坏。

我们接下来模拟硬盘的损坏,模拟硬盘损坏,我们有专门的命令,

我们先用命令查看一下当前RAID的状态:

#mdadm -D /dev/md0

  模拟磁盘故障

#mdadm /dev/md0 -f /dev/sda1     选项 -f 其实就是failed的首字母,坏掉的意思。

wKioL1fGoO3SYTbhAABHI8-XBWA280.png

我们模拟其中一块损坏的,如果创建RAID成功的话,我们的将其中一块硬盘模拟损坏后,按正常的来讲,备用的硬盘应该是自动替换坏掉的硬盘。

我们执行一下,mdadm -D /dev/md0

 wKiom1fGoTzB-QQqAAAY19E-Vvs168.png

查看结果中,显示的内容:

wKioL1fGoVvw3T3OAAByPaEcuWk918.png

我们发现,备用硬盘顶替了损坏的硬盘。但是这个过程开始需要一段时间,因为备用的硬盘在构建数据,这时我们可以用命令来查看:

#cat /proc/mdstat

wKioL1fGoXjAozTlAACKcAr_-c4011.png

我们注意的是,在这个数据恢复的过程中,我们还是能够访问数据的,只是速度有点慢。

用命令再次查看:

           #cat /proc/mdstat     //查看数据恢复状态到什么程度了。

           #mdadm -D /dev/md0    // 查看RAID是否正常,显示"clean",带表正常。

wKioL1fGoZXTlnsvAAFx5v-rH1A043.png

接下来我们看到在上图中,最后一行,就是模拟坏掉的硬盘,或者分区,那我们再加进RAID中,是否可以呢?

解:

我们是在做测试,加进去应该没有问题。

并且在加的时候,我们一你该注意,我们原先模拟的这块损坏的硬盘,还在RAID中,并没有移除,所以我们要想加进去,要先移除或者卸载之后再加进去。

用命令:

  移除磁盘

#mdadm  /dev/md0  –r  /dev/sda1

我们再查看一下确认将其移除:

#mdadm -D  /dev/md0

wKiom1fGobiCPfQUAABh_TqRjfA545.png

然后我们再将其加进去:

#mdadm /dev/md0 –a /dev/sda1

再次查看,是否加进去了:如下图所指示:显示加进去了,并且做备用盘。

#mdadm -D /dev/md0

wKioL1fGodqz8hUhAAByotGlJMc125.png

 

那现在我们在做一个测试:

我们将dev/sdb1移除:

wKioL1fGofbgzlaiAAA6ny6WcM0725.png

我们查看一下:

#mdadm -D /dev/md0

然后我们想问的问题是,我们移除这个分区或者磁盘后,我们重启机器,移除的磁盘会往上加吗?

#reboot

其实我们有可能会遇到错误,希望在这里要注意一下。但是我演示没有出现错误。

重启机器后,先查看一下挂载:

wKioL1fGohPTTcwNAAEbzihvXF8894.png

看到有RAID后,我们在用命令

#mdadm -D /dev/md0  查看一下,开机之前移除的的分区是否还有自动挂载上了。

wKiom1fGojWzZCdlAABrJmEqeHs125.png

发现有。

 

二。

我们这下来点真的,模仿真是生产环境硬盘真的坏了,物理损坏。

我们将硬盘删了,这个删除是要在VMW中删除。

我们删除其实删除备用的磁盘或者分区,是没用的,但是我们这次,删除备用的sdb,跟sde,这样按理说,我们删除了两块硬盘,应该还能访问数据。

我们关闭虚拟机,删除硬盘。

关机:

wKioL1fGoljDAXKMAABnwOcantA137.png

删除两块硬盘之后,我们再重启,如果能重启,说明我们做的RAID具有冗错性。如果启动都启动不了。则说明做的RAID不成功。

但是我们操作发现,删掉两块硬盘后,我们是能开机的。

然后我们再看一下/dev/mdadm 详细信息。发现还剩两块硬盘在工作中,我们之前创建的

#mdadm -D /dev/md0

RAID.如下图所示:

wKioL1fGon6RlojXAAFO518UuEM321.png

我们再访问我们RAID挂载的目录:

# cd /mnt/raid

#ls              发现我们的目录还能访问。

接下来我们修复:

一种方法:我们直接再加硬盘,划分去,然后格式化,加进去。

第二种方法:我们直接在本地现有的硬盘上划分出10G,改fd然后格式化,然后再加入到我们需要修复的RAID.

我们就不在以后用RIAD成员的硬盘上在划分分区,因为,再发分分区,就体现不出,RAID的冗错性了,只有在不同的磁盘上才有冗错性。

 

我们在a盘上划分出一个分区,大小为10G

wKiom1fGoqKTJjcDAAAaUj08Irs714.png

wKioL1fGor7w8OKgAAASDgrbolU876.png

wKioL1fGot6idcOsAABkrT7g9wo408.png

分完区之后再改类型:

wKiom1fGov7jw3GmAADu_hFi9R4262.png

上面显示不同步,那我们需要手动同步:

#partx -a /dev/sda

在用lsblk查看分区表:

wKioL1fGoxrihWwNAAHIOLRB98s042.png

然后我们就将、sda7加入到RAID中,注意这里不需要对a7单独格式化,我们只要将a7加入到RAID中,里面的文件系统就自动同步。

执行步骤:

#mdadm /dev/md0 -a /dev/sda7     并查看加入后的md0详细信息:

wKioL1fGozzy204PAABMG3G7vnY432.png

wKiom1fGo1yjGtuyAABf4Y5STP4693.png

这时我们发现我们恢复成功。

那么我再加一块行不行?

答:可以,再加一个就是加备份磁盘或者分区。

具体步骤:

我们就再在a盘上演示:

一:#fdisk  /dev/sda

         n

         +10G

         p

         t

         8

         fd

         w

二:分区表同步:

#partx -a /dev/sda

lsblk     //查看分区表信息,发现有了sa8

三:将其加入到已将创建RAID中加之前先看看RAID是不是三个成员:

#mdadm -D /dev/md0

sa8加入RAID

#mdadm /dev/md0 -a /dev/sda8

再次查看mdadm 详细信息:

#mdadm -D /dev/md0

加入成功的分区后。显示如下图所示:

wKioL1fGo3_gq_z3AAByR8GLQUI738.png

接下来,我想移除所键的RAID,

第一步:

卸载RAID

umount /mnt/raid

再停止RAID服务:

mdadm -S  /dev/md0

wKiom1fGo56xBj9BAAA1IlWVkN0300.png

注意:在将设备停止之后,我们的RAID状态就看不到了。如下图所示:

wKiom1fGo7zw2IcmAABbR3XWbEs570.png

甚至RAID设备都没了,tab键补全后,补不出来。

wKiom1fGo9yCsdI1AAAbqSXgZC4271.png

停掉后,我们还可以将服务RAID开启

wKioL1fGpAHyLbQkAABLG9EPcGA586.png

启动之后我们就又可以看mdadm详细信息了。

#mdadm -D /dev/md0

注意:做这个启动,停止,都依赖于一个文件,/etc/mdadm.conf,如过没有这个文件,这个文件我们必须事先准备好,如果这个文件没了,我们就不能在停止,启动了。

停止后,这个RAID设备就用不上了,那用命令blkid查看的到的RAID成员我们就可以删除了。

那我们删除他们的分区就可以了。

# fdisk /dev/sda


d

8      删除sda7 sda8两个分区。并保存

d     

7

w

 

lsblk      //查看一下磁盘分区表,发现没有同步。

#partx  -d --nr 7-8  /dev/sda  //让内核重读分区

lsblk

我们在次查看,我们发现,还有一个md0,这说明,我们直接删除分区其实是有问题。

 

wKiom1fGpCmDe0DsAAIZjZt1Css153.png

 同样的道理,我们用相同的命令删除其他分区中的RAID成员。

我们再次查看时,发现md0还是存在的。

wKioL1fGpE3Bxww_AAHF8lw9qYk976.png

然后我们执行

ls /dev/sd*会显示如下图所示:

wKiom1fGpG_TflEuAAB10-g2vlY553.png

我们发现,a7 ,a8还是存在的。所以我们这种删除需要特殊的命令来删除:

为什么删了分区,里面还有显示呢?

解:这是因为他里面带有的RAID信息还没有删除。

执行:

# mdadm--superblock /dev/sda7   如下图显示:

下面这张图片,是因为命令打错了,应该是,mdadm


二用命令:

blkid 也可以查看到分区的系统的系统类型。文件要格式化成的文件系统。

wKioL1fGpJyx17KpAAA7idlLN5s780.png

我们删掉RAID,我们先要停掉这个服务。

执行命令:

#mdadm--zero-superblock /dev/sda8

#mdadm --zero-superblock/dev/sda7

#mdadm--zero-superblock /dev/sdc1

#mdadm--zero-superblock /dev/sdb1

最后执行

blkid

wKioL1fGpL2zOGXwAADxSs6V08w746.png

然后将自动挂载文件里边的配置信息删掉:

vim  /etc/fstab

自后将RAID的配置文件mdadm.conf删除

#rm  -f  /etc/mdadm.conf

到此为止,我们所做的RAID就全部清空了。

 

创建软件RAID的命令总结

mdadm :模式化的工具

  命令的语法格式:mdadm [mode]<raiddevice> [options]

<component-devices>

  支持的RAID 级别:LINEAR,RAID0, RAID1, RAID4,

RAID5, RAID6, RAID10

  模式:

创建:-C

装配: -A

监控: -F

管理:-f, -r, -a

<raiddevice>: /dev/md#

<component-devices>:

-C:  创建模式

-n #: 使用# 个块设备来创建此RAID

-l # :指明要创建的RAID 的级别;

-a {yes|no} :自动创建目标RAID 设备的设备文件;

-c CHUNK_SIZE:  指明块大小;

-x #:指明空闲盘的个数,其实就是备份个数。

-D :显示raid 的详细信息;

mdadm -D /dev/md#

  管理模式:

-f:  标记指定磁盘为损坏

-a:  添加磁盘

-r:  移除磁盘

  观察md 的状态:

cat /proc/mdstat

  停止md 设备:

mdadm -S /dev/md#

  模拟磁盘故障

#mdadm /dev/md0 -f /dev/sda1

  移除磁盘

#mdadm /dev/md0 –r /dev/sda1

  从软件RAID 磁盘修复磁盘故障

替换出故障的磁盘然后开机

在备用驱动器上重建分区

#mdadm /dev/md0 -a /dev/sda1

mdadm /proc/mdstat

生成配置文件:mdadm D s >> /etc/mdadm.conf

  停服务:mdadm –S /dev/md0

  激活:mdadm –A –s/dev/md0  激活

  删除raid 信息:mdadm–zero-superblock /dev/sdb1

补充:RAID在用的时候,千万要注意,他的设备名有可能一重启就会发生变化,明明是md0,一重启变成127了,所以在/etc/fstab文件里边,就不写设备文件名,写UUID.

我们这时在centos6上做的实验,如果我们去centos7上做实验的时候,我们重启,起不来,我们可以用下面的命令,

强制启动:

mdadm -R /dev/sdb1