`

企鹅日记(十三):软件磁盘阵列RAID

阅读更多

磁盘阵列的英文全称是Redundant Arrays of Inexpensive Disks(RAID),即容错廉价磁盘阵列。可以通过一些技术将多个较小的磁盘整合成为一个较大的磁盘设备;而这个设备可不止存储功能而已,它还具有数据保护功能。

RAID的等级:

× RAID-0(等量模式,stripe):性能较佳

这种模式使用相同型号和容量的磁盘来组成,可以有多个,RAID会将每个磁盘划分成等量的区块(一般为4K,2K等等),然后当一个文件被写入时,该文件会依据块大小切割好,之后依序放到各个磁盘里面去,由于每个磁盘交错存放数据,因此当你的数据要写入RAID时,数据会被等量的放置到各个磁盘上去。越多磁盘组成RAID-0,那么的话性能肯定就越好了。

缺点:一个磁盘挂点,整个文件系统崩盘,无法恢复了。并且所有磁盘容量必须一样,不然性能会下降。

× RAID-1(映像模式,mirror):完整备份

这种模式也要相同型号,相同容量的磁盘,最好完全一样,一个模子刻出来的。

数据传送到I/O总线被复制多份到各个磁盘,因此写的性能会变得很差,不过如果你用硬件RAID(磁盘阵列卡),磁盘阵列卡会主动帮你复制,不需要I/O总线。但是磁盘阵列卡很贵滴呀呀,我买不起,所以很悲剧。RAID-1最大的用途在于备份,不过它的读取性能很好。

× RAID 0+1, RAID 1+0

RAID-0的性能较佳但是数据不安全,RAID-1数据安全但是性能不佳,那能不能组合下撒。

RAID 0+1:先让N块磁盘组成RAID-0, 同时再让另外的N块磁盘也组成RAID-0, 这样子我得到了两组RAID-0,然后将这两组RAID-0再组成一组RAID-1。

RAID 1+0:先让2N块磁盘组成N个组,每个组两个磁盘,每个组里面的两个磁盘组成RAID-1, 然后将这N组RAID-1组成RAID-0。

缺点:磁盘有一半的容量用来做备份了,悲剧呀!!!

RAID-5:性能与数据备份的均衡考虑

RAID-5至少需要三块以上的磁盘才能组成这种类型的磁盘阵列。这种磁盘阵列的数据写入有点类似RAID-0,不过每次循环写入过程中,在每块磁盘还加入一个同位检查数据(Parity),这个数据会记录其他磁盘的备份数据,用于当有磁盘损毁时的救援。

RAID-5的容量要减掉一个磁盘容量,也就是阵列的磁盘总数N-1,因为需要一个磁盘容量来保存同位检查数据Parity

RAID-5的读取性能很不错,跟RAID-0有得一拼,但是写入性能就很尴尬了,在软件磁盘阵列的时候,CPU还得花时间去计算同位检查数据。同时它只能保证一个磁盘损坏数据的安全,如果两个磁盘损坏就挂了。

RAID-6:跟RAID-5类似,不过这次会使用两块磁盘容量作为Parity的存储,它可以支持两块磁盘同时损坏,这个概率应该比走在马路上被一辆驴车撞到的概率还低吧,^_^

====Spare Disk:预备磁盘的功能====

为了让系统可以实时在坏掉磁盘时主动重建,需要预备磁盘spare disk的辅助,平时不包含在磁盘阵列中,当磁盘阵列有任何磁盘损坏时,spare disk马上被主动拉入磁盘阵列中,并将坏掉的磁盘移除磁盘阵列,然后立即重建数据系统,如果你的磁盘阵列还支持热插拔就更爽了,因为这个时候只需要把坏的那颗磁盘拔下来,换上一个新的,再将新的磁盘设置成spare disk,完成了,不用关机重启可以完成一切。这对服务器的稳定性有很好的帮助。

磁盘阵列的优点:

× 数据安全与可靠性,这里指的是硬盘坏了数据可以挽回。

× 读写性能,RAID-0可以加强读写性能,让你的系哦I/O系统部分得以改善

× 容量:可以让多个磁盘组合起来,因此单一文件系统可以有相当大的容量。

centos提供的软件磁盘阵列为mdadm这套软件,以分区或磁盘为单位,也就是说你不需要多个磁盘就可以设计你的磁盘阵列了。此外,mdadm支持刚刚提到的RAID-0,RAID-1,RAID-5等级,还支持spare disk的功能。而且提供的管理机制还可以达到类似可以热插拔的功能,可以在线(文件系统正常使用)进行分区的抽换,使用上非常的方便。。

注意:硬盘磁盘阵列在linux看起来就是一个大的磁盘,所有设备文件名为/dev/sd[a-p],因为使用到SCSI的模块的原因。而软件磁盘阵列因为是系统仿真,因此使用的设备文件名时系统的设备文件,文件名为/dev/md0, /dev/md1,两者注意区别。

====软件磁盘阵列的设置====

# mdadm –detail /dev/md0

# mdadm –create –auto=yes /dev/md[0-9] –raid-device=4 –level=[015] –spare-device=2 /dev/sd5 /dev/sd6

–create:为新建RAID的参数

–auto=yes:决定新建后面接的软件磁盘阵列设备,即/dev/md0, /dev/md1等

–raid-devices=N:使用N个磁盘作为磁盘阵列的设备

–spare-devices=N:使用N个磁盘作为备用spare设备

–level=[015]:设置磁盘阵列的等级。支持很多,不过建议只要用0,1,5即可

–detail:后面所接的那个磁盘阵列设备的详细信息

注意最后面接的设备文件名,可以时整块磁盘,比如/dev/sdb,也可以是一个分区,比如/dev/sdb1,不过这些设备文件名的数量总数必须等于–raid-devices和–spare-devices的个数总和才行。

下面我来试试建立一个RAID-5的软件磁盘阵列,貌似这个比较常用,很适合。

我希望这个RAID-5环境时这样子的:

× 利用4个分区组成RAID-5

× 每个分区大约为1G大小,需要确定每个分区一样大较佳

× 另外加一个分区设置为sparedisk

× 这个sparedisk的大小与其他RAID所需分区一样大

× 将此RAID-5设备挂载到/mnt/raid目录下面

先用fdisk构建5个1G的分区:

# fdisk /dev/sda
前面省略。。。
Command (m for help):n

每次分1000M空间大小,注意,我不知道神马原因,first 扇区要手动输入,用p选项查看后,用最后一个分区的扇区号+2049才是第一个空闲扇区号,这个可能时fedora的一个bug,分区居然不是连续的,不管了,自己去试试。囧

最后的分区用p查看后,是这样子的:

设备 Boot      Start         End      Blocks   Id  System
/dev/sda1            2048      206847      102400    7  HPFS/NTFS/exFAT
/dev/sda2   *      206848   169859071    84826112    7  HPFS/NTFS/exFAT
/dev/sda3       169859072   462827821   146484375    7  HPFS/NTFS/exFAT
/dev/sda4       462829568   976773119   256971776    5  Extended
/dev/sda5       462833664   463243263      204800   83  Linux
/dev/sda6       463245312   631181311    83968000   83  Linux
/dev/sda7       631183360   799119359    83968000   83  Linux
/dev/sda8       799121408   803315711     2097152   82  Linux swap / Solaris
/dev/sda9       803317760   805365759     1024000   83  Linux
/dev/sda10      805367808   807415807     1024000   83  Linux
/dev/sda11      807417856   809465855     1024000   83  Linux
/dev/sda12      809467904   811515903     1024000   83  Linux
/dev/sda13      811517952   813565951     1024000   83  Linux
后面的从9到13就是刚刚我分的5个分区,每个大概1G,大小都相同。

# partprobe

接下来就简单啦啦,,通过mdadm来创建磁盘阵列吧。哦也

# mdadm –create –auto=yes /dev/md0 –level=5 –raid-devices=4 –spare-devices=1 /dev/sda{9,10,11,12,13}

查看下(等下,先去喝杯咖啡先,因为如果你直接立马运行,可能出现下面的正在building数据的信息):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# mdadm --detail /dev/md0
/dev/md0:   <==RAID设备文件名
        Version : 1.2
  Creation Time : Sun Oct 28 10:03:43 2012   <==RAID被创建的时间
     Raid Level : raid5    <==此RAID的等级
     Array Size : 3068928 (2.93 GiB 3.14 GB)    <==此RAID可用磁盘容量
  Used Dev Size : 1022976 (999.17 MiB 1047.53 MB)    <==每个设备可用容量
   Raid Devices : 4     <==用作RAID的设备数量
  Total Devices : 5     <==全部的设备数量
    Persistence : Superblock is persistent
 
    Update Time : Sun Oct 28 10:04:01 2012
          State : clean, degraded, recovering
 Active Devices : 3          <==启动的(active)设备数量
Working Devices : 5       <==可工作的设备数量
 Failed Devices : 0          <==出现错误的设备数量
  Spare Devices : 2         <==预备spare磁盘的数量
 
         Layout : left-symmetric
     Chunk Size : 512K
 
 Rebuild Status : 17% complete
 
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : 657db303:887c7b6f:b8d8fc91:dc7b3374
         Events : 3
 
    Number   Major   Minor   RaidDevice State
       0       8        9        0      active sync   /dev/sda9
       1       8       10        1      active sync   /dev/sda10
       2       8       11        2      active sync   /dev/sda11
       5       8       12        3      spare rebuilding   /dev/sda12
 
       4       8       13        -      spare   /dev/sda13

真正的完成build后的信息应该是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sun Oct 28 10:03:43 2012
     Raid Level : raid5
     Array Size : 3068928 (2.93 GiB 3.14 GB)
  Used Dev Size : 1022976 (999.17 MiB 1047.53 MB)
   Raid Devices : 4
  Total Devices : 5
    Persistence : Superblock is persistent
 
    Update Time : Sun Oct 28 10:06:00 2012
          State : clean
 Active Devices : 4
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 1
 
         Layout : left-symmetric
     Chunk Size : 512K
 
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : 657db303:887c7b6f:b8d8fc91:dc7b3374
         Events : 20
 
    Number   Major   Minor   RaidDevice State
       0       8        9        0      active sync   /dev/sda9
       1       8       10        1      active sync   /dev/sda10
       2       8       11        2      active sync   /dev/sda11
       5       8       12        3      active sync   /dev/sda12
 
       4       8       13        -      spare   /dev/sda13

还可以通过查看/proc/mdstat查看磁盘阵列情况:

# cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sda12[5] sda13[4](S) sda11[2] sda10[1] sda9[0]
3068928 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
unused devices: <none>

格式化与挂载使用RAID:

# mkfs -t ext4 /dev/md0

# mkdir /mnt/raid

# mount /dev/md

# mount /dev/md0 /mnt/raid

# df

文件系统          1K-块    已用     可用 已用% 挂载点
rootfs         82649712 4681980 73769332    6% /
devtmpfs        1964632       4  1964628    1% /dev
tmpfs           1975352     600  1974752    1% /dev/shm
tmpfs           1975352    1160  1974192    1% /run
/dev/sda6      82649712 4681980 73769332    6% /
tmpfs           1975352       0  1975352    0% /sys/fs/cgroup
tmpfs           1975352       0  1975352    0% /media
/dev/sda7      82649712 8355056 70096256   11% /home
/dev/sda5        198337   90718    97379   49% /boot
/dev/md0        3020688   70048  2797196    3% /mnt/raid
看到了吧,最后一个,是不是很有成就感,=_=

====仿真RAID错误的救援模式====

# mdadm –manage /dev/md[0-9] [--add 设备] [--remove 设备] [--fail 设备]

–add:将后面的设备加入到这个md中

–remove:将后面的设备从这个md中删除

–fail:将后面的设备设置成出错的状态

手动模拟磁盘错误:

# cp -a /etc /var/log /mnt/raid/

# df -h /mnt/raid/; du -smh /mnt/raid/*
文件系统        容量  已用  可用 已用% 挂载点
/dev/md0        2.9G  126M  2.7G    5% /mnt/raid
45M    /mnt/raid/etc
4.4M    /mnt/raid/log
16K    /mnt/raid/lost+found

# mdadm –manage /dev/md0 –fail /dev/sda10
mdadm: set /dev/sda10 faulty in /dev/md0

然后马上查看状态,这个动作要快点,因为raid会自动重建数据系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sun Oct 28 10:03:43 2012
     Raid Level : raid5
     Array Size : 3068928 (2.93 GiB 3.14 GB)
  Used Dev Size : 1022976 (999.17 MiB 1047.53 MB)
   Raid Devices : 4
  Total Devices : 5
    Persistence : Superblock is persistent
 
    Update Time : Sun Oct 28 10:24:42 2012
          State : clean, degraded, recovering
 Active Devices : 3
Working Devices : 4
 Failed Devices : 1
  Spare Devices : 1
 
         Layout : left-symmetric
     Chunk Size : 512K
 
 Rebuild Status : 6% complete
 
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : 657db303:887c7b6f:b8d8fc91:dc7b3374
         Events : 23
 
    Number   Major   Minor   RaidDevice State
       0       8        9        0      active sync   /dev/sda9
       4       8       13        1      spare rebuilding   /dev/sda13
       2       8       11        2      active sync   /dev/sda11
       5       8       12        3      active sync   /dev/sda12
 
       1       8       10        -      faulty spare   /dev/sda10

喝完咖啡后,看一下(其实也就1分钟左右)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sun Oct 28 10:03:43 2012
     Raid Level : raid5
     Array Size : 3068928 (2.93 GiB 3.14 GB)
  Used Dev Size : 1022976 (999.17 MiB 1047.53 MB)
   Raid Devices : 4
  Total Devices : 5
    Persistence : Superblock is persistent
 
    Update Time : Sun Oct 28 10:26:53 2012
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 1
  Spare Devices : 0
 
         Layout : left-symmetric
     Chunk Size : 512K
 
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : 657db303:887c7b6f:b8d8fc91:dc7b3374
         Events : 43
 
    Number   Major   Minor   RaidDevice State
       0       8        9        0      active sync   /dev/sda9
       4       8       13        1      active sync   /dev/sda13
       2       8       11        2      active sync   /dev/sda11
       5       8       12        3      active sync   /dev/sda12
 
       1       8       10        -      faulty spare   /dev/sda10

看到了吧,不用我来给你解释了吧。

接下来,我将出错的磁盘删除并加入新的磁盘:

首先,先新建一个新的分区,这个分区大小要与其他的分区一样大才好。然后再用mdadm删除错误的并加入新的

# fdisk /dev/sda

….下面建新分区步骤省略,如果不知道怎么建,参考我的企鹅日记(一)

# partprobe

# partprobe
[root@localhost ~]# mdadm –manage /dev/md0 –add /dev/sda14 –remove /dev/sda10
mdadm: added /dev/sda14
mdadm: hot removed /dev/sda10 from /dev/md0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sun Oct 28 10:03:43 2012
     Raid Level : raid5
     Array Size : 3068928 (2.93 GiB 3.14 GB)
  Used Dev Size : 1022976 (999.17 MiB 1047.53 MB)
   Raid Devices : 4
  Total Devices : 5
    Persistence : Superblock is persistent
 
    Update Time : Sun Oct 28 10:33:04 2012
          State : clean
 Active Devices : 4
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 1
 
         Layout : left-symmetric
     Chunk Size : 512K
 
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : 657db303:887c7b6f:b8d8fc91:dc7b3374
         Events : 45
 
    Number   Major   Minor   RaidDevice State
       0       8        9        0      active sync   /dev/sda9
       4       8       13        1      active sync   /dev/sda13
       2       8       11        2      active sync   /dev/sda11
       5       8       12        3      active sync   /dev/sda12
 
       6       8       14        -      spare   /dev/sda14

看到了吧,结果不用我解释了吧。。哈哈

而这一切的一切都是online的状态下完成的,是不是很NB呢  =_=

====开机自动挂载RAID====

只需要知道/dev/md0的UUID就行

# mdadm –detail /dev/md0 | grep -i uuid
UUID : 657db303:887c7b6f:b8d8fc91:dc7b3374

# vi /etc/mdadm.conf
ARRAY /dev/md0 UUID=657db303:887c7b6f:b8d8fc91:dc7b3374
# vi /etc/fstab,在最后一行加入

/dev/md0 /mnt/raid ext4 defaults 1 2

测试下可行否(这个很重要,因为如果fstab修改不对可能导致开不了机器)

# umount /dev/md0; mount -a
[root@localhost ~]# df /mnt/raid/
文件系统         1K-块   已用    可用 已用% 挂载点
/dev/md0       3020688 120464 2746780    5% /mnt/raid
OK,没有问题,那么你就可以重启了,看是不是自动挂载了呢。

====关闭RAID====

1,先卸载

# umount /dev/md0

2,删除配置文件内容:

# vi /etc/fstab,删除(注释)下面这行

/dev/md0 /mnt/raid ext4 defaults 1 2

3,关闭/dev/md0:

# mdadm –stop /dev/md0

4,# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
unused devices: <none>

5,vi /etc/mdadm.conf,删除(注释)下面的行

ARRAY /dev/md0 UUID=657db303:887c7b6f:b8d8fc91:dc7b3374

好的,所有的RAID的基本都讲完了。不过上面我用的时一块磁盘,实际用途中记得用多块磁盘啊!!

=======================================END====================

 

本人博客已搬家,新地址为:http://yidao620c.github.io/

分享到:
评论

相关推荐

    企鹅智酷年度报告:移动时代创业黄金法则.rar

    《企鹅智酷年度报告:移动时代创业黄金法则》是一份深入探讨移动互联网时代创业规律的重要文献。报告全面分析了在当前技术飞速发展、移动设备普及的背景下,创业者们如何抓住机遇,遵循黄金法则成功开创事业。以下将...

    帝企鹅日记观后感800字.docx

    《帝企鹅日记》是一部揭示南极洲帝企鹅生存之道的纪录片,影片通过细腻的镜头语言,展现了这个物种在极端环境下的坚韧与智慧。以下是从影片中提炼出的一些关键知识点: 1. 团结协作:帝企鹅面对南极的恶劣环境,...

    帝企鹅日记观后感大全.doc

    《帝企鹅日记》是一部揭示南极生态与帝企鹅生存智慧的纪录片,通过观影,我们可以深入了解到这种生活在地球最寒冷之地的生物所展现出的惊人生命力和团队精神。 首先,帝企鹅的生存策略是一个生动的生物学案例。在...

    《帝企鹅日记》观后感.docx

    《帝企鹅日记》是一部描绘南极洲帝企鹅生存与繁衍的纪录片,以其深情的叙述和震撼的影像展现了生命在极端环境中的坚韧与伟大。影片揭示了帝企鹅面对严寒、饥饿和天敌挑战时所展现出的无尽耐力和亲情之深。 在南极的...

    《帝企鹅日记》观后感字.doc

    《帝企鹅日记》是一部揭示生命坚韧与母爱的伟大纪录片,通过讲述南极洲帝企鹅的生活,展现了生物在极端环境下生存的智慧与勇气。影片以其真实、细腻的镜头语言,让我们深入了解了帝企鹅的生存之道,同时也引发了对...

    《帝企鹅日记2—召唤》观后感参考.doc

    《帝企鹅日记2—召唤》是一部记录片,展现了帝企鹅从繁衍到成长的艰辛历程,同时也是对生命坚韧不拔精神的颂扬。影片通过讲述帝企鹅的生活习性,传递了许多关于生存、亲情和勇气的知识点。 首先,影片揭示了帝企鹅...

    企鹅与怪兽:互联时代的合作共享与创新模式

    企鹅与怪兽:互联时代的合作共享与创新模式

    企鹅智酷:互联网+九大传统行业转型报告

    企鹅智酷:互联网+九大传统行业转型报告

    企鹅智酷年度报告:移动时代创业黄金法则.pdf

    企鹅智酷年度报告:移动时代创业黄金法则.pdf

    帝企鹅ۥ日记观后感大全精选.doc

    《帝企鹅日记》是一部揭示南极生态与生命坚韧的纪录片,通过观察帝企鹅的生活,展现了大自然中一种非凡的生命力。观影后的感受深深触动了观众的心灵,引发了对生命、团结和坚韧精神的深刻思考。 首先,影片让我们...

    ps练习猫和企鹅

    本教程通过一系列细致的操作步骤,向读者展示了如何使用PS软件完成猫和企鹅的图片合成工作。这些技能不仅适用于本案例,还可以广泛应用于各种图像编辑场景中。希望读者通过实践这些步骤,能够熟练掌握PS的基本操作,...

    企鹅智酷:2019-2020中国互联网趋势报告.pdf

    企鹅智酷:2019-2020中国互联网趋势报告.pdf

    企鹅::penguin:通用的多功能Discord机器人

    企鹅 :penguin: Penguin是一款多功能Discord机器人,在编写时就考虑了Discord社区。 目前,该机器人尚处于早期阶段,并且仍在开发中,尚无法使用。 任何人都可以为这个项目做贡献。 如果您愿意,只需发送请求请求,...

    帕尔默企鹅数据集.rar

    数据说明penguins_size.csv :经过简化的原始数据英文字段名中文字段名描述species种类巴布亚企鹅、阿德利企鹅、金图企鹅)culmen_length_mm喙长(毫米)喙的长度(毫米)culmen_depth_mm喙深(毫米)喙的深度(毫米...

    企鹅与Linux.pdf

    1. 开源软件发展的重要性:文章中提到企鹅是 Linux 的象征,它的知名度随着 Linux 的发展壮大。这里强调了开源软件在软件发展中的重要性和影响力。 2. Linux 操作系统的普及:文章中多次提到 Linux sistemi,强调了...

    企鹅智库:2019-2020中国互联网趋势报告.pdf

    腾讯企鹅智库出品的《2019-2020中国互联网趋势报告》最新版已经出炉

    打企鹅系列三

    打企鹅系列三123456

    企鹅V4.6.zip

    《企鹅V4.6.zip》是一款软件更新的压缩包,其主要包含了企鹅软件的V4.6版本。在IT行业中,软件更新是至关重要的,因为它通常涉及到性能提升、新功能添加、bug修复以及安全性增强等多个方面。下面将详细讨论与企鹅V...

    游戏地图去巍峨企鹅去巍峨企鹅企鹅却

    游戏地图去巍峨企鹅去巍峨企鹅企鹅却游戏地图去巍峨企鹅去巍峨企鹅企鹅却游戏地图去巍峨企鹅去巍峨企鹅企鹅却游戏地图去巍峨企鹅去巍峨企鹅企鹅却游戏地图去巍峨企鹅去巍峨企鹅企鹅却游戏地图去巍峨企鹅去巍峨企鹅...

Global site tag (gtag.js) - Google Analytics