Linux独立冗余磁盘阵列(RAID)

目录

  • 前言
  • 一、RAID
    • 1.RAID概述
    • 2.常见的RAID方案
  • 二、部署磁盘阵列
    • 1、相关命令:mdadm
    • 2、部署RAID10磁盘阵列
  • 三、损坏磁盘阵列的修复
  • 四、部署RAID5磁盘阵列及备份盘
  • 参考


前言

运行环境:VMware16pro + centos8.3
特别申明:space 为一个空格。


一、RAID

1.RAID概述

  • 把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列
  • 把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上
  • 利用分散读写技术来提升磁盘阵列整体的性能
  • 同时把多个重要数据的副本同步到不同的物理硬盘设备上
  • 非常好的数据冗余备份效果

2.常见的RAID方案

方案原理优缺点图示
RAID 01、物理硬盘设备串联组成卷组
2、数据依次写入各个物理硬盘
1、提升硬盘数据的传输速度
2、任一硬盘故障都会损坏整个系统的数据
3、不具备数据备份和错误修复能力
在这里插入图片描述
RAID 11、两块以上硬盘设备进行绑定
2、数据同时写入多块硬盘设备
3、硬盘故障,自动以热交换的方式来恢复数据的使用
1、数据安全性提高
2、硬盘利用率下降
3、系统计算功能负载增加
在这里插入图片描述
RAID 51、没有备份硬盘中的真实数据信息
2、把阵列组数据的奇偶校验信息存储到除自身以外的其他每一块硬盘设备
3、硬盘故障,通过奇偶校验信息来尝试重建损坏的数据
(parity 部分存放的就是数据的奇偶校验信息)
兼顾了硬盘设备的读写速度、数据安全性与存储成本问题在这里插入图片描述
RAID 101、RAID1+RAID0技术的一个“组合体”
2、至少需要4 块硬盘来组建
3、先分别两两制作成RAID 1 磁盘阵列,保证数据安全性;然后对两个RAID1磁盘阵列实施RAID0技术,提高读写速度
1、只要坏的不是同一组中的所有硬盘,那么不丢失数据
2、继承了RAID 0 的高读写速度和RAID1 的数据安全性
3、不考虑成本时,RAID 10 的性能都超过了RAID 5
4、当前广泛使用
在这里插入图片描述

二、部署磁盘阵列

1、相关命令:mdadm

用途:管理Linux系统中软件RAID磁盘阵列
格式:mdadmspace[参数]

模式参数说明
create创建一个新的RAID,每个设备都具有元数据(超级块)
build创建或组合一个没有元数据(超级块)的RAID
assemble组装以前创建的RAID的组件集成到一个活动RAID
manage更改一个现有的RAID,比如添加新的备用成员和删除故障设备
misc报告或修改各种RAID相关设备,比如查询RAID或者设备的状态信息、删除旧的超级块
grow调整/重新塑造一个活动RAID,比如改变RAID容量或阵列中的设备数目。
monitor监控一个或多个RAID的更改
incremental添加设备到RAID中,或从RAID中删除设备。
参数说明
-a检测设备名称
-n指定设备数量
-l指定RAID
-C创建
-v显示过程
-f模拟设备损坏
-r移除设备
-Q查看摘要信息
-D查看详细信息
-S停止RAID

2、部署RAID10磁盘阵列

⑴使用 mdadm 命令创建RAID 10,名称为“/dev/md0”

mdadm-Cv/dev/md0-a yes-n 4-l 10/dev/sdb /dev/sdc /dev/sdd /dev/sde
命令-C 参数创建RAID阵列卡
-v参数显示创建过程
RAID 磁盘
阵列名称
-a yes 参数自动创建设备文件-n 4 参数使用4 块硬盘部署-l 10 参数使用RAID10方案4 块硬盘设备的名称
[root@CentOS64 ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

⑵把制作好的 RAID 磁盘阵列格式化为ext4 格式

[root@CentOS64 ~]# mkfs.ext4 /dev/md0
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 10477056 4k blocks and 2621440 inodes
Filesystem UUID: 3ce6e94d-ddde-4b38-87fd-94d680689386
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information:   0/32done 

⑶创建挂载点然后把硬盘设备进行挂载操作

  • ❶创建挂载点
[root@CentOS64 ~]# mkdir /RAID
  • ❷把硬盘设备进行挂载
[root@CentOS64 ~]# mount /dev/md0 /RAID
  • ❸查看是否挂载成功
[root@CentOS64 ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
devtmpfs                      1.8G     0  1.8G   0% /dev
tmpfs                         1.9G     0  1.9G   0% /dev/shm
tmpfs                         1.9G   10M  1.9G   1% /run
tmpfs                         1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/cl_centos64-root   20G  4.3G   16G  22% /
/dev/mapper/cl_centos64-user  2.0G   47M  2.0G   3% /user
/dev/sda1                     395M  225M  171M  57% /boot
/dev/mapper/cl_centos64-home  2.0G  926M  1.1G  46% /home
/dev/mapper/cl_centos64-var   2.0G  565M  1.5G  28% /var
tmpfs                         371M  1.2M  370M   1% /run/user/42
tmpfs                         371M  4.6M  367M   2% /run/user/1000
/dev/sr0                      683M  683M     0 100% /run/media/centos/CentOS-8-3-2011-x86_64-dvd
/dev/md0  

⑷查看/dev/md0 磁盘阵列的详细信息

[root@CentOS64 ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  3 18:43:00 2021
        Raid Level : raid10
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Wed Mar  3 18:46:29 2021
             State : clean 
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : CentOS64:0  (local to host CentOS64)
              UUID : 46a97ec4:c89087eb:8c74e7c8:c28d1043
            Events : 25

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync set-A   /dev/sdb
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde

⑸挂载信息写入配置文件,使其永久生效

[root@CentOS64 ~]# vim /etc/fstab

#
# /etc/fstab
# Created by anaconda on Thu Feb 18 08:25:14 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/cl_centos64-root /                       xfs     defaults        0 0
UUID=ec3468bb-5c24-48c1-9439-a8f79836cee1 /boot      xfs     defaults        0 0
/dev/mapper/cl_centos64-home /home                   xfs     defaults        0 0
/dev/mapper/cl_centos64-user /user                   xfs     defaults        0 0
/dev/mapper/cl_centos64-var /var                     xfs     defaults        0 0
/dev/mapper/cl_centos64-swap none                    swap    defaults        0 0
/dev/md0                    /RAID                    ext4    defaults        0 0

三、损坏磁盘阵列的修复

⑴模拟硬盘损坏:移除/dev/sdb

[root@CentOS64 ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0

⑵查看RAID 磁盘阵列的状态

[root@CentOS64 ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  3 18:43:00 2021
        Raid Level : raid10
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Wed Mar  3 18:57:16 2021
             State : clean, degraded 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : CentOS64:0  (local to host CentOS64)
              UUID : 46a97ec4:c89087eb:8c74e7c8:c28d1043
            Events : 27

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde

       0       8       16        -      faulty   /dev/sdb

⑶安装新的硬盘
在这里插入图片描述⑷用mdadm 命令把新的硬盘添加到RAID 磁盘阵列

  • ❶于挂载点,移除文件系统
[centos@CentOS64 ~]$ su - root
Password: 
[root@CentOS64 ~]# umount /RAID
  • ❷替换损坏硬盘
[root@CentOS64 ~]# mdadm /dev/md0 -a /dev/sdb
mdadm: added /dev/sdb
  • ❸查看RAID 磁盘阵列的状态
    第一次查看:显示“spare rebuilding”,即“正在重建”;
    第二次查看:RAID 磁盘阵列的状态完好。
[root@CentOS64 ~]# mdadm -D /dev/md0
/dev/md0:
略
    Number   Major   Minor   RaidDevice State
       4       8       16        0      spare rebuilding   /dev/sdb
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde
[root@CentOS64 ~]# mdadm -D /dev/md0
/dev/md0:
略
    Number   Major   Minor   RaidDevice State
       4       8       16        0      active sync set-A   /dev/sdb
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde
[root@CentOS64 ~]# 

⑸挂载
前面在创建RAID10时将挂载信息写入配置文件“/etc/fstab”。此处用“mount -a”自动挂载“ /etc/fstab”即可 。

[root@CentOS64 ~]# mount -a
[root@CentOS64 ~]# 

四、部署RAID5磁盘阵列及备份盘

⑴创建一个RAID 5 磁盘阵列+备份盘

[root@CentOS64 ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@CentOS64 ~]# mdadm -D /dev/md0
/dev/md0:
略
    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

       3       8       64        -      spare   /dev/sde

⑵ 将部署好的RAID 5 磁盘阵列格式化为ext4 文件格式

[root@CentOS64 ~]# mkfs.ext4 /dev/md0
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 10477056 4k blocks and 2621440 inodes
Filesystem UUID: 2346f63c-8103-4943-bbb1-dd478291e285
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done   

⑶挂载

[root@CentOS64 ~]# echo " /dev/md0 /RAID ext4 defaults 0 0 " >> /etc/fstab
[root@CentOS64 ~]# mkdir /RAID
[root@CentOS64 ~]# mount -a

⑷移除测试

[root@CentOS64 ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@CentOS64 ~]# mdadm -D /dev/md0
/dev/md0:
略
    Number   Major   Minor   RaidDevice State
       3       8       64        0      spare rebuilding   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

       0       8       16        -      faulty   /dev/sdb

参考

1、https://www.linuxprobe.com
2、https://www.linuxcool.com

热门文章

暂无图片
编程学习 ·

Python3 元类编程

在Python中一切接对象,类也是一个对象,所有的类都是有type类创建,我们实际开发中最常用的type方法,是用来获取某个对象的类型的,例如type(1) ⇒ int 、type(‘str’) ⇒ str。但是type还有一种用法,就是用来创建类的。 1、通过type动态创建无父类、无属性的类 People = t…
暂无图片
编程学习 ·

11.登录之后的页面跳转操作

登录之后的页面跳转操作1.登录后记录用户token1.1 为什么使用token?1.2 token为什么保存在sessionStorage中?1.3 代码2. 登录成功后,页面跳转到后台主页 1.登录后记录用户token 1.1 为什么使用token? 项目中除了登录之外的其他API接口,必须要在登录之后才能访问。此时就需要…
暂无图片
编程学习 ·

Zabbix+percona插件实现数据库mysql的监控

文章目录1.配置zabbix监控mysql的配置1.1 在zabbix-agent主目录(默认情况下为/ var / lib / zabbix)中创建.my.cnf2.配置percona2.1安装2.2配置文件2.3.在zabbix图形界面中导入模板2.3.1 监控的server添加监控项2.3.2 更改字体 1.配置zabbix监控mysql的配置 检测试验环境:确…
暂无图片
编程学习 ·

Java 中三个修饰符及相关概念

abstract(抽象的) 1.修饰类 --> 抽象类抽象类 不能创建对象,可以声明引用 抽象类可以定义属性和方法以及构造方法。 构造方法是在创建子类对象时使用(创建子类对象 先创建父类对象)2.修饰方法 --> 抽象方法语法:public abstract 返回值类型 方法名(参数列表);注意: …
暂无图片
编程学习 ·

machine learning基础知识(Leetcode)

机器学习 machine learning是机器通过已知的内容,类似于人类一样进行学习,并对同类型数据进行判断的过程。 例如训练图片模型就是将每个像素点转为0到255之间的值,利用机器发现不同种类的图片之间存在的映射。 有监督与无监督模型监督学习是F(x)= sum 并且sum已知,可以通…
暂无图片
编程学习 ·

shell(1)

diff -b 忽略空格 -B 忽略空行 -i 忽略大小写 -c 显示文件所有内容并标不同 -r 对比输出 -u 合并输出 patch patch 源文件 布丁文件 -b 备份原文件 cut 检测apache服务器被谁访问的次数最多,显示访问者ip并显示访问次数 cat /etc/httpd/logs/access_log | cut…
暂无图片
编程学习 ·

你的代码是否存在硬编码

硬编码:硬编码是指将可变变量用一个固定值来代替的方法。如果我们的代码中有大量的硬编码,之后再修改维护成本就会很高。代码的延展性就会很差。硬编码:if(a==2) return false; 不是硬编码 if(a==b) return true;减少硬编码的问题查看了很多的博客之后,发现大部分的人都会选…
暂无图片
编程学习 ·

c++ string操作

c++ string操作 #include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std;void test01() {///*string& operator=(const char* s)* string& operator=(const string &s)* string& operato…
暂无图片
编程学习 ·

Java从小白到老白学习笔计【一】

命令提示符(cmd) 启动 win + r 切换盘符 盘符名称: 进入文件夹 cd 文件夹名称 进入多级文件夹 cd 文件夹1\文件夹2\文件夹3 返回上一级 cd… 直接回根路径 cd 查看当前内容 dir 清屏 cls 退出 exit String 首字母大写,不是关键字 加号代表字符串的连接操作 任何…
暂无图片
编程学习 ·

python3 yield关键字简单使用

python3 yield关键字yield简单介绍如何改变文本的样式简单实例为什么需要生成器?实例优势 yield简单介绍 yield <==> 生成器 包含yield语句的函数是一个生成器 生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值 生成器是一个不断产生值的函数 如何…
暂无图片
编程学习 ·

中国恒大:模范生的“提质增效”

撞线万亿绝不会是恒大的终极目标,在提升自身发展质量的同时,恒大必然会选择更宽广的赛道御风而行,到达万亿规模也只是恒大的又一个新起点。一点财经 严 睿|作者刘 煜|编辑泥沙俱下或者傲立潮头?愈是在行业出现重大波折的阶段,愈能检验企业的发展质量。2020年上半场结束,…
暂无图片
编程学习 ·

js 的类

js的函数和类的区别,自以为就是调用方式的不同,并且函数中写入属性、方法,就必须实例化后,才能外部调用var Func = function(){var fu = this;var a=1, // 外部调用不到b=2;this.c=3;fu.test=function(){console.log(a)} }fun = new Func(); fun.c // 3 fun.test // 1funct…
暂无图片
编程学习 ·

归并排序

给定你一个长度为n的整数数列。 请你使用归并排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行,第一行包含整数 n。 第二行包含 n 个整数(所有整数均在1~109范围内),表示整个数列。 输出格式 输出共一行,包含 n 个整数,表示排好序…
暂无图片
编程学习 ·

内网渗透 -- 获取内网浏览器历史记录等相关信息

“我喜欢你,做我女朋友可以吗?”电话的那头没有反应,男生沉不住气了,小心翼翼地问着,“你在干嘛呀?”“我在点头。”---- 网易云热评环境:小攻:Kali 2020,ip:192.168.1.133小受:win7 x86,ip:192.168.1.137一、生成木马及监听主机参考上篇文章:二、获取浏览器历史…
暂无图片
编程学习 ·

Zookeeper 总结与面试题汇总

1.zookeeper的用处 从工作机制上来说,Zk = 文件系统 + 通知机制 想个哨兵一样,它负责存储和管理大家都关心的数据,然后接收观察者的注册,一旦这些数据的状态发生变化,Zk 就通知已经在Zookeeper 已经注册的观察者做出相应的反应。 2.zookeeper的数据结构(树)? 讲一下基于…
暂无图片
编程学习 ·

Java设计模式-5.适配器设计模式

在使用监听器的时候,需要定义一个类事件监听器接口,通常接口中有多个方法,而程序中不一定都用到,但又必须重写很繁琐,定义监听器时只要继承适配器,然后重写需要的方法。 适配器原理:适配器就是一个类,实现了监听器接口,所有抽象方法都重写了,但是方法都是空的,只重写…
暂无图片
编程学习 ·

【区间 dp】A023_LC_合并石头的最低成本(穷举分割点)

一、Problem 有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头。 每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆石头的总数。 找出把所有石头合并成一堆的最低成本。如果不可能,返回 -1 。 Input: stones = [3,2,4,1], K = 2 Output: 20 Ex…
暂无图片
编程学习 ·

VsCode中自动调整格式

VsCode中使用了Prettier插件后会在保存后自动格式化样式 如果遇到不需要调整的代码时候,只要在前添加如下代码,就不会格式化 –// prettier-ignore
暂无图片
编程学习 ·

1、线程与进程区别

1、线程与进程区别(1)拥有资源进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。(2) 调度线程是是CPU调度和分派的基本单位;(3) 系统开销进程创建、撤销、上下文切换时的开销要大于线程