Linux磁盘存储——RAID学习

RAID(管理多个磁盘空间的技术)


一开始主要是为了降低成本,后来成为服务器的标配,将多个磁盘组合成阵列,提供更好的性能和冗余能力

raid分级

1. RAID 0(条带集)

  • 至少需要两个磁盘组成,以两个磁盘为例,两个磁盘要使用相同大小的的空间来逻辑地组成一个硬盘;对于一个文件,两个磁盘将它以chunk单位大小来进行并行存储,这带来了读写性能的提升;不过只要有一个磁盘上出现问题导致数据丢失或是损坏都将造成文件的损坏,raid0没有容错能力;磁盘利用率为100%

2. RAID 1,镜像raid。最少要有两个磁盘,并且磁盘数是偶数;以两个磁盘为例,第一个磁盘写什么,第二个磁盘就写什么,保证了当第一个磁盘不能访问的时候还能访问第二个磁盘;读性能提升,但是写性能有下降(一个内容写两次肯定下降);空间利用率50%;有冗余能力但没有恢复能力。

3. RAID 5(带校验位的条带集)

 

  • 至少需要三块硬盘来组成;以三个磁盘为例,三个磁盘使用相同大小的空间来组成逻辑磁盘;也是并行存储,但是三个磁盘在写数据的时候要考虑校验位,具体表现为chunk1、chunk2、校验;chunk3、校验、chunk4;校验、chunk5、chunk6......以此类推,保证每行都有一个校验位(每个磁盘上都有校验位),当有数据损坏时,通过异或运算可以计算出损坏的数据,但是仅限一个磁盘上的数据出错,而且这种运算会时时增加服务器的负担,造成服务器性能降级;总体而言,raid5可以带来读写性能的提升,允许最多一个硬盘上的数据出错,有容错能力,及时将损坏硬盘换掉即可;磁盘利用率是(n-1)/n,适用于中小型企业数据并非不能损失的服务器。
  • 在实践中,一个磁盘损坏虽然整体还可以工作,但是读写性能会降低,所以需要尽快替换损坏的磁盘。

4. RAID 4,与RAID 5大体相似,但是RAID 4的校验位只放在一个磁盘上,也就是万一这个检验磁盘出错,就没得恢复了。

5. RAID 6,最少要有4个硬盘,与raid5相比,raid6有两个校验位,这意味着它最多允许两块硬盘出错,并且它的空间利用率是(n-2)/n

6. RAID 7,可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上性能最高的RAID模式,但成本高。

7. JBOD,串行存储,就相当是把不同的磁盘串起来连续使用空间,仅仅是磁盘空间变大。


RAID 组合

 

  1. raid 01,多块磁盘先实现RAID0,再组合成RAID1。
     
  2. raid 10,多块磁盘先实现RAID1,再组合成RAID0
     
  3. raid 50,多块磁盘先实现RAID5,再组合成RAID0

 


软RAID,利用操作系统实现

1. 搭建一个raid0

2. 创建raid0

  • 先z准备4个分区
    • fdisk /dev/sdb
      • n
      • p
      • 回车
      • 回车
      • +1G
      • t
      • fd(id改为Linux raid Auto)
      • w(我这里因为是新加的硬盘分区,里面是空的,所以提示需要同步。但是如果是分区里有内容的,需要partprobe同步)
    • PS:4个磁盘也可以,并且磁盘不用设置fd分区标签,直接用。
  • dd if=/dev/sdb of=/dev/sdc bs=1 count=66 skip=446 seek=446
  • dd if=/dev/sdb of=/dev/sdd bs=1 count=66 skip=446 seek=446
  • dd if=/dev/sdb of=/dev/sde bs=1 count=66 skip=446 seek=446
  • mdadm -C /dev/md0(raid0的名字) -a(初始化) yes -l0(指定raid的级别) -n4(指定成员,有4个) /dev/sd{b,c,d,e}1
  • mdadm -Ds /dev/md0 > /etc/mdadm.conf 将raid信息存到配置文件中,防止raid设备要再次启动的时候找不到配置信息而无法启动。
  • mks.xfs /dev/md0格式化文件系统
  • mkdir /mnt/raid0创建目录作为挂载点
  • mount /dev/md5 /mnt/raid5挂载
    • vim /etc/fstab永久挂载
      • r!blkid /dev/md0
        • /mnt/raid0 xfs defaults 0 0设置信息
    • mount -a挂载

 3. 删除raid0

  • 取消挂载 umount /mnt/raid0
  • 停止raid0设备服务 mdadm -S /dev/md0
  • 清除sd{b.c,d,e}1的超级块使其不属于raid0,mdadm --zero-superblock /dev/sdb1
  • mdadm --zero-superblock /dev/sdc1
  • mdadm --zero-superblock /dev/sdd1
  • mdadm --zero-superblock /dev/sde1
  • rm -f /etc/mdadm.conf
  • 删除/etc/fstab中的md0挂载点,删除完毕。
  • 当然,取消挂载,直接dd if=/dev/zero of=/dev/sd{b,c,d,e}1清除文件系统后再停止服务、清除超级块、删配置文件跟挂载点也可以。

1.创建raid 5

  • 新加一个分区作为空闲分区,实际中遇到磁盘损坏可以及时替换,配合raid5可以做到:先损坏一块磁盘,空闲磁盘自动替换,再损失一块,因为raid5自带校验位,所以还可以继续工作。当然,两块磁盘不能同时损坏,不然还是会失败。
  • mdadm -C /dev/md5 -a yes -l5 -n4 -x1(空闲) /dev/sd{b,c,d,e}1 /dev/sda6
  • mdadm -Ds > /etc/mdadm.conf
  • mkfs.xfs /dev/md5
  • mkdir /mnt/raid5
  • mount /dev/md5 /mnt/raid5

    • vim /etc/fstab永久挂载
      • r!blkid /dev/md0
      • /mnt/raid0 xfs defaults 0 0设置信息
    • mount -a

  • 可以看到虽然我们用5个磁盘分区5G构成了一个raid5,但是它的实际可用空间只有3G,这是因为,5个中有一个1G的空闲磁盘,有1G大小的校验位,所以实际可用是3G。

2. 损坏与修复

  • 模拟磁盘故障 mdadm /dev/md0 -f /dev/sde1

 

  • 此时再查看raid5

 

  • 对比一开始,可以看到原来的空闲磁盘分区sda6已经自动将损坏的sde1替换了,并且此时md5中没有空闲磁盘了(可以通过mdadm /dev/md5 -a 设备 再新加一块作为空闲磁盘),再损坏一块就可以看到校验位的作用了。
  • 物理移除一块硬盘,这里我移除了sde1,重启。可以看到虽然报错(没截到图233),但是可以启动,并且再次查看md5的信息。

  • 对比上面的md5的信息,可以看到明显的变化,并且此时虽然可以工作并且数据没有丢失,但是读写性能已经下降了,要尽快修复。
  • 新加一块磁盘,echo '- - -' > /sys/class/scsi_host/host2/scan,识别。接着mdadm -a /dev/mad5 /dev/sde把sde加到md5中,注意此时我直接用的空磁盘sde而不是分区,所以可以直接加。

  •  再次查看5信息,当然,数据没有丢失(一开始创建完raid5的时候可以添加数据进去用来做参照,我为什么没截数据方面的图?因为我忘记加数据了...)。

修复完毕

 3. 扩展空间,加大raid5的空间。

  • 添加磁盘(假设添加的设备是sdf)
  • 将磁盘添加到raid5中mdadm -G /dev/md5 /dev/sdf
  • 同步文件系统,xfs_growfs /mnt/raid5,显而易见这是对xfs类型的文件系统命令后面要接挂载点,假如是ext类型的,需要resize2fs /dev/md5,命令后接设备名。

4. 删除raid5,同删除raid0。


关于软raid的一些操作

  • 为空余磁盘添加冗余
  • 结合内核中的md(multi devices)
  • RAID设备可命名为/dev/md0、 /dev/md1、 /dev/md2、 /dev/md3等
  • 支持的RAID级别: LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10
  • mdadm:为软RAID提供管理界面,模式化工具
    • 命令的语法格式: mdadm [mode] <raiddevice> [options] <componentdevices>
    • mode:
      • -C创建
        • -n #: 使用#个块设备来创建此RAID
        • -l #:指明要创建的RAID的级别
        • -a {yes|no}:自动创建目标RAID设备的设备文件
        • -c CHUNK_SIZE: 指明块大小,单位k
        • -x #: 指明空闲盘的个数
      • -D显示raid的详细信息
        • mdadm --detail|D /dev/md0
      • 管理
        • -f标记指定磁盘为损坏
        • -r添加磁盘
        • -a移除磁盘
    • raiddevice: /dev/md#
    • component-devices: 任意块设备
  • 示例
    • 使用mdadm创建并定义RAID设备:mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
    • 观察md的状态: cat /proc/mdstat
    • 用文件系统对每个RAID设备进行格式化:mke2fs -j /dev/md0
    • 增加新的成员:mdadm –G /dev/md0 –n4 -a /dev/sdf1
    • 模拟磁盘故障:mdadm /dev/md0 -f /dev/sda1
    • 模拟移除磁盘:mdadm /dev/md0 –r /dev/sda1
    • 生成配置文件: mdadm –D –s >> /etc/mdadm.conf
    • 停止设备: mdadm –S /dev/md0
    • 激活设备: mdadm –A –s /dev/md0 激活
    • 强制启动: mdadm –R /dev/md0
    • 删除raid信息: mdadm --zero-superblock /dev/sdb1

 又到了一年一度吃狗粮的季节,真刺激。

猜你喜欢

转载自blog.csdn.net/qq_39155877/article/details/81749895