RAID磁盘阵列及CentOS7启动流程

1. 磁盘阵列

1.1

RAID,磁盘阵列磁盘通过硬件和软件的形式组合成一个容量巨大的磁盘组,提升整个磁盘的系统效能;RAID常见类型:

RAID类型

最低磁盘个数

空间利用率

各自的优缺点

级别

说明

RAID0

条带卷

2+

100%

读写速度快,不容错

RAID1

镜像卷

2

50%

读写速度一般。容错

RAID5

带奇偶校验的条带卷

3+

(n-1/n)

读写速度快,容错,允许坏一块盘

RAID10

RAID1的安全+RAID0的快速

4

50%

读写速度快,容错

RAID基本思想:把好几块硬盘通过一定组合方式把它组合起来,成为一个新的硬盘阵列组,从而使它能够达到高性能硬盘的要求。

 

1.2  RAID的三个关键技术

镜像:提供了数据的安全性;

条带(块大小也可以说是条带的粒度):它的存在的就是提供了数据并发性;

数据的校验:提供了数据的安全。

 

1.3 RAID工作原理

1) RAID0:条带(strping),是最早出现的RAID模式,需磁盘数量:2块以上(大小最好相同),是组建磁盘阵列中最简单的一种形式,只需要2块以上的硬盘即可。

特点:本低,可以提高整个磁盘的性能。RAID 0没有提供冗余或错误修复能力,速度快,任何一个磁盘的损坏将损坏全部数据;磁盘利用率为100%。

 

2)RAID1:mirroring(镜像卷),磁盘两块以上;原理:是把一个磁盘的数据镜像到另一个磁盘上,即数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,(同步);至少需要两块硬盘;磁盘利用率为50%,即2块100G的磁盘构成RAID1只能提供100G的可用空间。如下图:

 

3)RAID5:需要三块或以上硬盘,可以提供热备盘实现故障的恢复;只损坏一块,没有问题。但如果同时损坏两块磁盘,则数据将都会损坏。 空间利用率: (n-1)/n  ,2/3  如下图所示:

奇偶校验信息的作用:当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。

异或运算:所谓的“奇偶校验”可以简单理解为二进制运算中的“异或运算”,通常用 xor 标识。

 

最左边的是原始数据,右边分别是三块硬盘,假设第二块硬盘出了故障,通过第一块硬盘上的 1 和第三块硬盘上的 1 xor 2,就能够还原出 2。同理可以还原出 3 和 8。至于5 xor 6,直接5和6运算出来即可。
    

4)RAID10:嵌套RAID级别,镜像+条带; RAID 10是将镜像和条带进行两级组合的RAID级别,第一级是RAID1镜像对,第二级为RAID 0。比如我们有8块盘,它是先两两做镜像,形成了新的4块盘,然后对这4块盘做RAID0;当RAID10有一个硬盘受损其余硬盘会继续工作,这个时候受影响的硬盘只有2块

 

1.4  RAID 硬盘失效处理

热备和热插拔。

 

1)热备:HotSpare,当冗余的RAID组中某个硬盘失效时,在不干扰当前RAID系统的正常使用的情况下,用RAID系统中另外一个正常的备用硬盘自动顶替失效硬盘,及时保证RAID系统的冗余性。备用盘有全局式和专用式,全局式备用硬盘为系统中所有冗余的RAID组共享,专用式备用硬盘位系统中某一组冗余RAID组专用。下图所示位一个全局热备的示例,该热备盘由系统中两个RAID组共享,可自动顶替任何一个RAID中的一个失效硬盘。

 

2)热插拔:HotSwap,在不影响系统正常运转的情况下,用正常的物理硬盘替换RAID系统中失效硬盘。

 

1.5  RAID-0-1-5-10搭建及使用-删除RAID及注意事项

RAID的实现方式

面试题:我们做硬件RAID,是在装系统前还是之后? 

答:先做阵列才装系统 ,一般服务器启动时,有显示进入配置RAID的提示。

 

硬RAID:需要RAID卡,我们的磁盘是接在RAID卡的,由它统一管理和控制。数据也由它来进行分配和维护;它有自己的cpu,处理速度快。

软RAID:通过操作系统实现。

 

2. 创建阵列方式

硬件:磁盘阵列盒

软件:mdadm

 

3. mdadm命令

  linux内核中有一个md(multiple devices)模块在底层管理RAID设备,它会在应用层给我们提供一个应用程序的工具mdadm,mdadm是linux下用于创建和管理软件RAID的命令。

mdadm命令常见参数

-a

检测设备名称;添加磁盘

-n

指定设备数量

-l

指定RAID级别

-C

创建

-v

显示创建过程

-f

模拟设备损坏

-r

移除设备

-Q

查看摘要信息

-D

查看详细信息

-S

停止RAID磁盘阵列

-x

备份盘

 

4. 实验

实验1:搭建RAID10阵列

 

新添加4块硬盘

 

查看磁盘

 

下载mdadm,创建raid10阵列。

格式:mdadm 选项 /dev/md0 -a yes -n 4 -l 10  /dev/sd{b,c,d,e}

其中,-a yes表示检查设备。

 

格式化(指定文件系统类型)磁盘阵列为ext4

 

挂载

 

查看/dev/md0的详细信息

[root@localhost zxj]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu apr 11 01:18:16 2019
        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 : Thu apr 11 03:09:55 2019
             State : clean
    active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0
            layout : near=2
        Chunk Size : 512K
Consistency Policy : unknown
              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUiD : 807aee75:479287b8:930103d6:cbf2a76a
            Events : 17
    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

然后将其写入到配置文件中,实现开机自动挂载 。

 

实验2:破损磁盘阵列及修复

  之所以在生产环境中部署RAID 10磁盘阵列,是为了提高硬盘存储设备的读写速度及数据的安全性,但由于我们的硬盘设备是在虚拟机中模拟出来的,因此对读写速度的改善可能并不直观。在确认有一块物理硬盘设备出现损坏而不能继续正常使用后,应该使用mdadm命令将其移除,然后查看RAID磁盘阵列的状态,可以发现状态已经改变。

 

模拟设备损坏:sdb不可用

 

添加新的磁盘:

在RAID 10级别的磁盘阵列中,当RAID 1磁盘阵列中存在一个故障盘时并不影响RAID 10磁盘阵列的使用。当购买了新的硬盘设备后再使用mdadm命令来予以替换即可,在此期间我们可以在/RAID目录中正常地创建或删除文件。由于我们是在虚拟机中模拟硬盘,所以先重启系统,然后再把新的硬盘添加到RAID磁盘阵列中。

 

 

实验3:搭建raid5阵列+备份盘

虚拟机恢复快照,RAID5最少需要3块硬盘,还要一块备份硬盘,所以新建四块硬盘:

 

查看磁盘:

创建RAID阵列:

 

-x 1:指定一块备份盘;

 

格式化为ext4文件系统:

[root@localhost zxj]# mkfs.ext4  /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477568 blocks
523878 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
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 (32768 blocks): done
Writing superblocks and filesystem accounting information: done  

  

挂载:

查看阵列信息:有一块备份盘

 

 

模拟/dev/sdb损坏,可以看到备份盘/dev/sdc立即开始构建:

 

4. CentOS7 系统启动过程及相关配置文件

总的来说,centos7启动分为5个步骤

  1. uefi或BIOS初始化,开始post(power on self test)开机自检;

  2. 加载MBR到内存;
  3. GRUB阶段;
  4. 加载内核和initramfs模块;
  5. 内核开始初始化,centos7使用systemd来代替centos6及以前的init程序。

POST:加电自检

  当开机按下电源按钮后,计算机开始加电,主板上的BIOS或UEFI基本输入输出程序开始对硬件进行检查,检查内存,CPU等等吧,当检测到错误的时候机器会中断或者启动不了,这个做过电脑维护的人都知道,内存氧化可导至开不了机,还有的机器如果没插鼠标键盘自检也不会通过卡在那里了,不会继续往下走。

Boot sequence:选择引导顺序

  当自检通过后,接着就要选择引导介质或方式,是通过光盘启动,硬盘启动,网络启动,还是U盘启动,这些也是在BIOS中设定的,所以设定的第一启动项是哪个就从那个开始引导,这个装过WINDOWS的都很熟悉了。

Bootloader:引导加载器

  确定引导介质后便开始从介质中装载引导程序如grub2,这个是一个微小程序,我们知道MBR引导记录大小为512字节,其中前446个字节就是Bootloader,主要用来引导用户选择要启动的系统或不同的内核版本,把用户选定的内核装载到RAM中的特定空间中,解压,展开,而后把系统控制权移交给内核。

grub2就是linux中Bootloader程序,由于MBR记录限制,所以grub2分为两个部分:

  1.在MBR引导记录中,大小为446字节,主要功能是引导启动介质的grub主体文件

  2.partition,/boot/grub[2],此为grub的主体。

KERNEl + INITRAMFS(INITRD)—>ROOTFS :加载内核

  这时候kernel开始初始化,探测可识别的硬件设备,加载硬件启动程序。以只读方式加载根文件系统

  kernel在内存中加载时,为了模拟系统环境,会生成一个ramdisk文件,来进行下一步操作,等到加载到真正的根文件系统时,就会退出ramdisk,切换到真正的根文件系统中去。

  ramdisk:内存上临时虚拟的系统

  amdisk(虚拟磁盘,双缓冲,双缓存)----> ramfs(虚拟文件系统)

  centos5:initrd

  工具程序:mkinitrd

  centos6,7:initramfs

  工具程序:dracut,mkinitrd

/sbin/init:运行用户空间的第一个应用程序

  init:

       Centos 5: SysV init       配置文件:/etc/inittab

      Centos 6: Upstart         配置文件:/etc/inittab;/etc/init/*.conf(主要)

       Centos 7: systemd        配置文件:/etc/systemd/system;/usr/lib/systemd/system

  至此,内核空间就已经启动完毕,内核启动完成接着开始启动用户态启动过程。systemd是个守护进程,pid号为1,后面所有启动的服务或进程都是systemd的子进程及子进程的子进程。

那么用户态的启动顺序又是什么样的呢?

  设置默认允许级别—>初始化脚本,完成系统初始化--->关闭及启动对应级别下的服务----->设置登录终端----->[启动图形终端]

Systemd新特性:

  系统引导时实现服务并行启动,没有顺序之分

  按需激活进程

  支持系统状态快照

基于依赖关系定义服务控制逻辑

关键特性:

  基于socket的激活机制:socket与服务程序分离;按需激活程序或服务,可并行启动

  基于bus的激活机制:

  基于device的激活机制:当某个硬件设备变得可用时就可激活某设备

  基于path的激活机制

  系统快照:保存各unit的当前状态信息于持久存储设备中

  向后兼容sysv init脚本

不兼容:

  systemctl命令固定不变,非由systemd启动的服务,systemctl无法与之通信

核心概念:unit

  配置文件进行标识和配置,文件中主要包含了系统服务,监听socket,保存的系统快照以及其它与init相关的信息,保存至:

  /usr/lib/systemd/system

  /run/systemd/system

  /etc/systemd/system

unit的类型

  Service unit:文件扩展名为.service 无需执行权限,用于定义系统服务

  Target unit:文件扩展名为.target,用于模拟实现“运行级别”

  Device unit:文件扩展名为.device,用于定义内核识别的设备

  Mount unit:文件扩展名为.mount,定义文件系统挂载点

  Socket unit:文件扩展名为.socket,用于标识进程间通信用的socket文件

  Snapshot unit:文件扩展名为.snapshot,管理系统快照

  Swap unit:文件扩展名为.swap,用于标识swap设备

  automount unit:文件扩展名为.automount,文件系统的自动挂载点

  Path unit:文件扩展名为.path,用于定义文件系统中的一个文件或目录

管理系统服务

  启动:systemctl start name.service

  停止:systemctl stop name .service

  重启:systemctl restart name.service

  重载:systemctl reload name.service

  条件式重启:systemctl try-restart name.service

  查看某服务当前是否运行:systemctl is-active name.service

  查看所有已经激活的服务:systemctl list-units –type service systemctl list-units –type service –-all

  开机自启动:systemctl enable name.service

  开机不启动:systemctl disable name.service

  查看所有服务开机自启动状态:systemctl list-unit-files –-type service

  查看服务是否开机自启:systemctl is-enabled name.service

  查看服务的依赖关系:systemctl list-dependencies name.service

  禁止设定为开机自启:systemctl mask name.service

  取消禁止设定为开机自启:systemctl unmask name.service

Target units:(模拟运行级别)

  unit配置文件,以.target后辍名结尾

  关机:runlevel0.target,poweroff.target

  救援:runlevel1.target,rescue.target

  多用户:multi-user.target

  图形:graphical.target

  重启:reboot.target

  级别切换:systemctl isolate name.target

  查看级别:systemctl list-units –-type target       systemctl get-default

  设置级别:systemctl set-default name.target

  切换至紧急救援模式:systemctl rescue

  切换至emergency模式:systemctl emergency(服务不加载不启动,驱动不加载,更彻底)

其它常用命令

  关机:systemctl halt,systemctl poweroff

  重启:systemctl reboot

  挂起:systemctl suspend

  快照:systemctl hibernate

  快照并挂起:systemctl hybrid-sleep

原文地址:https://www.cnblogs.com/ajunyu/p/10881095.html