Linux系统raid配置

一、raid简介

1.软raid

计算机核心部件:CPU、内存

IDE(集成开发环境): 133Mbps

SATA(硬盘): 300Mbps,600Mbps,6Gbps

USB 3.0: 480Mbps

SCSI: Small Computer System Interface

早期,硬盘容量很小,还没有现在的U盘空间大,而且性能也不稳定。当然也有相对比较好的,但价格非常昂贵,所以人们就想能不能有多个硬盘绑定成一块,让系统认为只是一块硬盘。
1987年Raid技术兴起。美国的一个大学开发出来了,叫做廉价冗余磁盘阵列,后来改名叫做独立冗余磁盘阵列。
Raid发展到现在,已经不是简单的条带化了,还产生了其他的类型,叫做Raid level(级别)。这个级别仅代表磁盘组织方式不同,没有上下之分。不仅有速度,还要考虑数据可用性。

二、raid列举

1.Raid 0(条带)
读写速度得到提升,但不具备数据冗余,不推荐使用,最少需要2块硬盘。
应用场景:不要求安全,只要求速度。适合大规模并发读取。例如数据库从库,存储从库。
在这里插入图片描述
2.Raid 1(镜像)
相比raid 0写性能下降,读性能提升,冗余能力提升。但磁盘利用率是1/2,最少需要2块硬盘。
应用场景:只要求安全,对速度不要求。适合系统盘和监控服务器。
在这里插入图片描述
3.Raid 10
同组不能都坏掉,这是目前主流的方案。磁盘利用率是1/2,最少需要4块硬盘。
应用场景:对于性能和安全都要求的情况。例如高并发或高访问量数据库主库,存储主库。
在这里插入图片描述
4.Raid 01
同组都可以坏,不能是不同组的相同标号。磁盘利用率是1/2,最少需要4块硬盘。
在这里插入图片描述
5.Raid 5(校验码机制)
读写都提升,有数据冗余功能,空间利用率(n-1)/n,只能坏一块,最少需要3块硬盘。
应用场景:适合对性能和安全有一定要求但又不太高的情况。例如普遍数据库和存储库。
在这里插入图片描述
6.Raid 6
可以看做是raid 5的升级版,它支持同时损坏2块磁盘,最少需要4块硬盘。
7.Raid 7
可以看做是raid 5的升级版,它支持同时损坏3块磁盘,最少需要5块硬盘。

三、raid创建

那么到底怎么实现软raid呢?
md:内核模块。
mdadm:将任何块设备做成RAID,意味着分区也可以做。
常用命令

创建模式: -C 

管理模式:--add,--del mdadm /dev/* --fail /dev/sd*

监控模式: -F

增长模式: -G

装配模式: -A

创建模式:-C
环境要求:新添加一块大小为10G的磁盘并且分区,先分2个分区,每个分区大小为1G(fdisk或gdisk都可以)。
在这里插入图片描述

[root@base ~]# echo "- - -" >> /sys/class/scsi_host/host0/scan
[root@base ~]# echo "- - -" >> /sys/class/scsi_host/host1/scan
[root@base ~]# echo "- - -" >> /sys/class/scsi_host/host2/scan
[root@base ~]# fdisk -l
...
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of  1 * 512 = 512 bytes
...
[root@base ~]# gdisk /dev/sdb
...
Number   Start (sector)    End (sector)    Size       Code     Name
1         2048                2099199   1024.0 MiB    FD00   Linux RAID
2         2099200             4196351   1024.0 MiB    FD00   Linux RAID
[root@base ~]# partprobe /dev/sdb
[root@base ~]# cat /proc/partitions
major minor  #blocks  name
...
8     17        1048576  sdb1
8     18        1048576  sdb2

1.Raid 0:
示例:使用mdadm命令创建一个2G的raid 0
专用选项:

-l:指定级别

-n:设备个数

-a:{yes|no}自动为其创建设备文件

-c:chunk大小,默认为64k,(数据块)2的N次方

-x:指定空闲盘的个数

创建raid0

[root@base ~]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

查看当前系统上所有启用raid的设备

[root@base ~]# cat /proc/mdstat
Personalities  :  [raid0]
md0 : active raid0 sdb2[1] sdb1[0]
      2093056 blocks super 1.2 512k chunks
unused devices: <none>

对硬盘进行格式化操作

[root@base ~]# mkfs.xfs /dev/md0
meta-data=/dev/md0               isize=512    agcount=8, agsize=65408 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=523264, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

然后就可以直接挂载使用

[root@base ~]# mkdir /mnt/raid0
[root@base ~]# mount /dev/md0 /mnt/raid0
[root@base ~]# df -hT /mnt/raid0
文件系统   类型   容量   已用  可用  已用%  挂载点
/dev/md0  xfs   2.0G   33M  2.0G  2%  /mnt/raid0

如果想要开机自动挂载,可以直接编辑/etc/fstab文件。

[root@base ~]# vim /etc/fstab
/dev/md0 /mnt/raid0 xfs defaults 0 0

2.raid 1
创建一个2G的raid1
由于raid1的硬盘使用率是1/2,所以要想达到2G,则需要创建两块大小为2G的硬盘,我们可以再创建两个大小为2G的分区。

[root@base ~]# gdisk /dev/sdb
... 
Number    Start (sector)    End (sector)    Size     Code     Name
1            2048            2099199      1024.0 MiB FD00  Linux RAID 
2           2099200          4196351      1024.0 MiB FD00  Linux RAID 
3           4196352          8390655      2.0 GiB    FD00  Linux RAID 
4           8390656          12584959     2.0 GiB    FD00  Linux RAID
[root@base ~]# partprobe /dev/sdb
[root@base ~]# cat /proc/partitons
...
8 17 1048576 sdb1 
8 18 1048576 sdb2
8 19 2097152 sdb3 
8 20 2097152 sdb4
...

直接用命令创建

[root@base ~]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb{3,4}
mdadm: Note: this array has metadata at the start and 
     may not be suitable as a boot device. If you plan to 
     store '/boot' on this device please ensure that 
     your boot-loader understands md/v1.x metadata, or use 
     --metadata=0.90 
Continue creating array? y 
mdadm: Defaulting to version 1.2 metadata 
mdadm: array /dev/md1 started.
[root@base ~]# cat /proc/mdstat
Personalities : [raid0] [raid1] 
md1 : active raid1 sdb4[1] sdb3[0] 
      2094080 blocks super 1.2 [2/2] [UU] 
      [==>..................] resync = 14.5% 
(305536/2094080) finish=0.2min speed=101845K/sec 

md0 : active raid0 sdb2[1] sdb1[0] 
      2093056 blocks super 1.2 512k chunks 
unused devices: <none>
[root@base ~]# mkdir /mnt/Raid1
[root@base ~]# mkfs.xfs /dev/md1
meta-data=/dev/md1               isize=512    agcount=4, agsize=130880 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=523520, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@base ~]# mount /dev/md1 /mnt/Raid1
[root@base ~]# df -hT /mnt/Raid1
文件系统   类型   容量   已用  可用  已用%  挂载点
/dev/md1  xfs   2.0G   33M  2.0G  2%  /mnt/Raid1

我们在其中创建一些数据,然后模拟一块磁盘损毁,看一下是否还可以看到那些数据。

[root@base ~]# cd /mnt/Raid1
[root@base Raid1]# echo "jiayou" > aixuexi
[root@base Raid1]# cat aixuexi
jiayou

使用命令mdadm -D /dev/md1查看raid1的相关信息

[root@base Raid1]# mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Mon Jan 18 11:04:03 2021
        Raid Level : raid1
        Array Size : 2094080 (2045.00 MiB 2144.34 MB)
     Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Jan 18 11:07:22 2021
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : 21a27a2d:d4210bb8:faa229da:09c63a7e
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       19        0      active sync   /dev/sdb3
       1       8       20        1      active sync   /dev/sdb4

模拟损坏一块磁盘sdb4并查看raid1的相关信息

[root@base Raid1]# mdadm /dev/md1 -f /dev/sdb4
mdadm: set /dev/sdb4 faulty in /dev/md1
[root@base Raid1]# mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Mon Jan 18 11:04:03 2021
        Raid Level : raid1
        Array Size : 2094080 (2045.00 MiB 2144.34 MB)
     Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Jan 18 11:09:22 2021
             State : active, degraded
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 1
     Spare Devices : 0

Consistency Policy : resync

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : 21a27a2d:d4210bb8:faa229da:09c63a7e
            Events : 20

    Number   Major   Minor   RaidDevice State
       0       8       19        0      active sync   /dev/sdb3
       -       0        0        1      removed

       1       8       20        -      faulty   /dev/sdb4

然后我们去查看刚才创建的数据是否还可以查看,结果证明还可以查看,所有raid1是具有数据冗余功能的,允许损坏一块磁盘。

[root@base Raid1]# cat aixuexi
jiayou

那么如果真的是磁盘损坏,我们可以在硬件设备上把它拔掉,软raid可以这样操作:

[root@base Raid1]# mdadm /dev/md1 -r /dev/sdb4
mdadm: hot removed /dev/sdb4 from /dev/md1
[root@base Raid1]# mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Mon Jan 18 11:04:03 2021
        Raid Level : raid1
        Array Size : 2094080 (2045.00 MiB 2144.34 MB)
     Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)
      Raid Devices : 2
     Total Devices : 1
       Persistence : Superblock is persistent

       Update Time : Mon Jan 18 11:10:41 2021
             State : clean, degraded
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : 21a27a2d:d4210bb8:faa229da:09c63a7e
            Events : 22

    Number   Major   Minor   RaidDevice State
       0       8       19        0      active sync   /dev/sdb3
       -       0        0        1      removed

可是现在的raid1只剩下一块磁盘,如果这块也损坏就会造成数据丢失,所以我们可以再补上一块盘,需要注意的是,对于硬盘的大小、转速各方面都要尽量一致。
我们再创建一个分区:

[root@base Raid1]# gdisk /dev/sdb
[root@base Raid1]# partprobe /dev/sdb
[root@base Raid1]# cat /proc/partitions

然后对新添加的分区格式化

[root@base Raid1]# mkfs.xfs /dev/sdb5
meta-data=/dev/sdb5              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

然后通过管理命令里的-a添加

[root@base Raid1]# mdadm /dev/md1 -a /dev/sdb5
mdadm: added /dev/sdb5
[root@base Raid1]# mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Mon Jan 18 11:04:03 2021
        Raid Level : raid1
        Array Size : 2094080 (2045.00 MiB 2144.34 MB)
     Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Jan 18 11:14:02 2021
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : 21a27a2d:d4210bb8:faa229da:09c63a7e
            Events : 41

    Number   Major   Minor   RaidDevice State
       0       8       19        0      active sync   /dev/sdb3
       2       8       21        1      active sync   /dev/sdb5

如果不想用raid1阵列了,可以停止这个阵列,不过停止前需要先反挂载一下。需要注意的是当进行反挂载时,数据会丢失,所以要提前做好数据迁移。

[root@localhost ~]# umount /dev/md1
[root@localhost ~]# mdadm -S /dev/md1
mdadm: stopped /dev/md1
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md0 : active raid0 sdb2[1] sdb1[0]
      2093056 blocks super 1.2 512k chunks

unused devices: <none>

raid1处于停止状态,那我们如果想要再次启用该怎么做呢?
这里我们可以将刚才模拟损坏的盘添加上

[root@base Raid1]# mdadm -A /dev/md1 /dev/sdb{3,4}
[root@base Raid1]# cat /proc/mdstat

这里看不到是因为它本身是记录有损坏的信息的,这时我们可以手动添加:

[root@base Raid1]# mdadm -AR /dev/md1 /dev/sdb{3,4}
[root@base Raid1]# cat /proc/mdstat
[root@base Raid1]# mdadm -D /dev/md1

进行手动添加:

[root@base Raid1]# mdadm /dev/md1 -a /dev/sdb4
mdadm: added /dev/sdb4
[root@base Raid1]# mdadm -D /dev/md1
[root@base Raid1]# cat /proc/mdstat

其实在工作当中,raid的损坏是感觉不到的。当然,raid有一个监控功能可以做到,如果损坏是可以发邮件的,而且也还有其他的第三方的监控软件。换一种思路,我们都知道Raid1是两块磁盘,那么可不可以多建立一个磁盘,让它一直处于替补状态。只不过这样又浪费了一块磁盘,不过为了数据安全,这样做是有必要的。
可用命令模式-a选项直接添加

[root@base Raid1]# mdadm /dev/md1 -a /dev/sdb5
mdadm: added /dev/sdb5
[root@base Raid1]# mdadm -D /dev/md1

这时我们再模拟一块磁盘损坏,看sdb5是否会补上空缺。

[root@base Raid1]# mdadm /dev/md1 -f /dev/sdb3
mdadm: set /dev/sdb3 faulty in /dev/md1
[root@base Raid1]# mdadm -D /dev/md1

结果显示,完全是可以自动补上空缺的。

现在回过头看下,刚才用-A进行添加时,还是需要手动执行。那么怎么才能让它实现自动呢。可以通过手动创建的信息导入到它的配置文件里,让它自己去识别就可以了。

[root@base Raid1]# mdadm -D --scan
[root@base Raid1]# mdadm -D --scan > /etc/mdadm.conf
[root@base Raid1]# mdadm -S /dev/md1
[root@base Raid1]# cat /proc/mdstat
[root@base Raid1]# mdadm -A /dev/md1
[root@base Raid1]# cat /proc/mdstat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值