zoukankan      html  css  js  c++  java
  • RAID磁盘阵列及CentOS7系统启动流程

    1.RAID概念

    磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。 磁盘阵列是由很多价格较便宜的磁盘,以硬件(RAID卡)或软件(MDADM)形式组合成一个容量巨大的磁盘组,利用多个磁盘组合在一起,提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。 磁盘阵列还能利用同位检查(Parity Check)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据。

    注:RAID可以预防数据丢失,但是它并不能完全保证你的数据不会丢失,所以大家使用RAID的同时还是注意备份重要的数据

    RAID的创建有两种方式:软RAID(通过操作系统软件来实现)和硬RAID(使用硬件阵列卡);了解raid1、raid5和raid10。不过随着云的高速发展,供应商一般可以把硬件问题解决掉。

    RAID几种常见的类型

    级别

    说明

    最低磁盘个数

    空间利用率

    优缺点

    RAID0

    条带卷

    2+

    100%

    读写速度快,不容错

    RAID1

    镜像卷

    2

    50%

    读写速度一般,容错

    RAID5

    带奇偶校验的条带卷

    3+

    (n-1)/n

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

    RAID10

    RAID1的安全+RAID0的高速

    4

    50%

    读写速度快,容错

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

    2.RAID有三个关键技术

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

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

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

    3.Raid相对于单个磁盘优点

    RAID-0的工作原理

    条带 (strping),也是我们最早出现的RAID模式

    需磁盘数量:2块以上(大小最好相同),是组建磁盘阵列中最简单的一种形式,只需要2块以上的硬盘即可.

    特点:成本低,可以提高整个磁盘的性能。RAID 0没有提供冗余或错误修复能力,速度快.

    任何一个磁盘的损坏将损坏全部数据;磁盘利用率为100%。

    clip_image002

    RAID-1

    mirroring(镜像卷),需要磁盘两块以上

    原理:是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,(同步)

    RAID 1 mirroring(镜像卷),至少需要两块硬盘

    磁盘利用率为50%,即2块100G的磁盘构成RAID1只能提供100G的可用空间。如下图

    clip_image003

    RAID-5

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

    clip_image004

    奇偶校验信息的作用:

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

    扩展:异或运算

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

    clip_image005

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

    一句话解释 raid 5 的数据恢复原理就是:都是用公式算出来的。

    嵌套RAID级别

    RAID-10镜像+条带

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

    clip_image006

    4.RAID硬盘失效处理

    一般两种处理方法:热备和热插拔

    热备:HotSpare

    定义:当冗余的RAID组中某个硬盘失效时,在不干扰当前RAID系统的正常使用的情况下,用RAID系统中另外一个正常的备用硬盘自动顶替失效硬盘,及时保证RAID系统的冗余性

    全局式:备用硬盘为系统中所有的冗余RAID组共享

    专用式:备用硬盘为系统中某一组冗余RAID组专用

    如下图所示:是一个全局热备的示例,该热备盘由系统中两个RAID组共享,可自动顶替任何一个RAID中的一个失效硬盘

    clip_image007

    热插拔:HotSwap

    定义:在不影响系统正常运转的情况下,用正常的物理硬盘替换RAID系统中失效硬盘。

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

    RAID的实现方式

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

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

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

    软RAID:通过操作系统实现

    Mdadm命令详解

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

    mdadm命令常见参数解释:

    参数

    作用

    -a

    检测设备名称添加磁盘

    -n

    制定设备数量

    -l

    指定RAID级别

    -C

    创建

    -v

    显示过程

    -f

    模拟设备损坏

    -r

    移除设备

    -Q

    查看摘要信息

    -D

    查看详细信息

    -S

    停止RAID磁盘阵列

    实战搭建raid10阵列

    新添加4块硬盘a

    clip_image008

    第一步:查看磁盘

    [root@ken ~]# ls /dev/sd*

    /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc /dev/sdd /dev/sde

    第二步:下载mdadm

    [root@ken ~]# yum install mdadm -y

    第三步:创建raid10阵列

    [root@ken ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sd{b,c,d,e} #创建阵列名称必须为md…格式,

    mdadm: layout defaults to n2

    mdadm: layout defaults to n2

    mdadm: chunk size defaults to 512K

    mdadm: size set to 20954112K

    mdadm: Fail create md0 when using /sys/module/md_mod/parameters/new_array

    mdadm: Defaulting to version 1.2 metadata

    mdadm: array /dev/md0 started.

    第四步:格式磁盘阵列为xfs

    [root@localhost ~]# mkfs.xfs /dev/md0

    meta-data=/dev/md0 isize=512 agcount=8, agsize=196480 blks

    = sectsz=512 attr=2, projid32bit=1

    = crc=1 finobt=0, sparse=0

    data = bsize=4096 blocks=1571328, 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@localhost ~]# mkdir /raid10

    [root@localhost ~]# mount /dev/md0 /raid10

    [root@localhost ~]# df -h

    文件系统 容量 已用 可用 已用% 挂载点

    /dev/mapper/centos-root 17G 1.2G 16G 7% /

    devtmpfs 476M 0 476M 0% /dev

    tmpfs 488M 0 488M 0% /dev/shm

    tmpfs 488M 7.7M 480M 2% /run

    tmpfs 488M 0 488M 0% /sys/fs/cgroup

    /dev/sda1 1014M 130M 885M 13% /boot

    tmpfs 98M 0 98M 0% /run/user/0

    /dev/md0 6.0G 33M 6.0G 1% /raid10

    第六步:查看/dev/md0的详细信息

    [root@localhost ~]# mdadm -D /dev/md0

    /dev/md0:

    Version : 1.2

    Creation Time : Thu Apr 11 14:54:41 2019

    Raid Level : raid10

    Array Size : 6285312 (5.99 GiB 6.44 GB)

    Used Dev Size : 3142656 (3.00 GiB 3.22 GB)

    Raid Devices : 4

    Total Devices : 4

    Persistence : Superblock is persistent

    Update Time : Thu Apr 11 14:56:17 2019

    State : clean

    Active Devices : 4

    Working Devices : 4

    Failed Devices : 0

    Spare Devices : 0

    Layout : near=2

    Chunk Size : 512K

    Consistency Policy : resync

    Name : localhost.localdomain:0 (local to host localhost.localdomain)

    UUID : d1a1afdb:d20d542f:881989f0:d3cb26e4

    Events : 19

    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@ken ~]# echo "/dev/md0 /raid10 xfs defaults 0 0" >> /etc/fstab

    损坏磁盘阵列及修复

    之所以在生产环境中部署RAID 10磁盘阵列,是为了提高硬盘存储设备的读写速度及数据的安全性,但由于我们的硬盘设备是在虚拟机中模拟出来的,因此对读写速度的改善可能并不直观。

    在确认有一块物理硬盘设备出现损坏而不能继续正常使用后,应该使用mdadm命令将其移除,然后查看RAID磁盘阵列的状态,可以发现状态已经改变。

    第一步:模拟设备损坏

    [root@ken ~]# mdadm /dev/md0 -f /dev/sdb

    mdadm: set /dev/sdb faulty in /dev/md0

    [root@ken ~]# mdadm -D /dev/md0

    /dev/md0:

    Version : 1.2

    Creation Time : Thu Feb 28 19:08:25 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 Feb 28 19:15:59 2019

    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 : ken:0 (local to host ken)

    UUID : c5df1175:a6b1ad23:f3d7e80b:6b56fe98

    Events : 30

    Number Major Minor RaidDevice State

    - 0 0 0 removed

    8 32 1 active sync set-B /dev/sdc

    8 48 2 active sync set-A /dev/sdd

    8 64 3 active sync set-B /dev/sde

    8 16 - faulty /dev/sdb

    第二步:添加新的磁盘

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

    [root@ken ~]# reboot

    [root@ken ~]# umount /raid10

    [root@ken ~]# mdadm /dev/md0 -a /dev/sdb

    mdadm: added /dev/sdb

    [root@ken ~]# mdadm -D /dev/md0

    /dev/md0:

    Version : 1.2

    Creation Time : Thu Feb 28 19:08:25 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 Feb 28 19:19:14 2019

    State : clean, degraded, recovering

    Active Devices : 3

    Working Devices : 4

    Failed Devices : 0

    Spare Devices : 1

    Layout : near=2

    Chunk Size : 512K

    Consistency Policy : resync

    Rebuild Status : 7% complete #这里显示重建进度

    Name : ken:0 (local to host ken)

    UUID : c5df1175:a6b1ad23:f3d7e80b:6b56fe98

    Events : 35

    Number Major Minor RaidDevice State

    8 16 0 spare rebuilding /dev/sdb #rebuilding重建中

    8 32 1 active sync set-B /dev/sdc

    8 48 2 active sync set-A /dev/sdd

    8 64 3 active sync set-B /dev/sde

    再次查看发现已经构建完毕

    [root@ken ~]# mdadm -D /dev/md0

    /dev/md0:

    Version : 1.2

    Creation Time : Thu Feb 28 19:08:25 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 Feb 28 19:20:52 2019

    State : clean

    Active Devices : 4

    Working Devices : 4

    Failed Devices : 0

    Spare Devices : 0

    Layout : near=2

    Chunk Size : 512K

    Consistency Policy : resync

    Name : ken:0 (local to host ken)

    UUID : c5df1175:a6b1ad23:f3d7e80b:6b56fe98

    Events : 51

    Number Major Minor RaidDevice State

    8 16 0 active sync set-A /dev/sdb

    8 32 1 active sync set-B /dev/sdc

    8 48 2 active sync set-A /dev/sdd

    8 64 3 active sync set-B /dev/sde

    实战搭建raid5阵列+备份盘

    clip_image009

    第一步:查看磁盘

    root@ken ~]# ls /dev/sd*

    /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc /dev/sdd /dev/sde

    第二步:创建RAID5阵列

    [root@ken ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sd{b,c,d,e}

    mdadm: layout defaults to left-symmetric

    mdadm: layout defaults to left-symmetric

    mdadm: chunk size defaults to 512K

    mdadm: size set to 20954112K

    mdadm: Fail create md0 when using /sys/module/md_mod/parameters/new_array

    mdadm: Defaulting to version 1.2 metadata

    mdadm: array /dev/md0 started.

    第三步:格式化为xfs

    [root@localhost ~]# mkfs.xfs /dev/md0

    meta-data=/dev/md0 isize=512 agcount=8, agsize=196480 blks

    = sectsz=512 attr=2, projid32bit=1

    = crc=1 finobt=0, sparse=0

    data = bsize=4096 blocks=1571328, 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@ken ~]# mount /dev/md0 /raid5

    [root@ken ~]# df -h

    Filesystem Size Used Avail Use% Mounted on

    /dev/mapper/centos-root 17G 1.2G 16G 7% /

    devtmpfs 476M 0 476M 0% /dev

    tmpfs 488M 0 488M 0% /dev/shm

    tmpfs 488M 7.7M 480M 2% /run

    tmpfs 488M 0 488M 0% /sys/fs/cgroup

    /dev/sda1 1014M 130M 885M 13% /boot

    tmpfs 98M 0 98M 0% /run/user/0

    /dev/md0 40G 49M 38G 1% /raid5

    第五步:查看阵列信息

    可以发现有一个备份盘/dev/sde

    [root@ken ~]# mdadm -D /dev/md0

    /dev/md0:

    Version : 1.2

    Creation Time : Thu Feb 28 19:35:10 2019

    Raid Level : raid5

    Array Size : 41908224 (39.97 GiB 42.91 GB)

    Used Dev Size : 20954112 (19.98 GiB 21.46 GB)

    Raid Devices : 3

    Total Devices : 4

    Persistence : Superblock is persistent

    Update Time : Thu Feb 28 19:37:11 2019

    State : active

    Active Devices : 3

    Working Devices : 4

    Failed Devices : 0

    Spare Devices : 1

    Layout : left-symmetric

    Chunk Size : 512K

    Consistency Policy : resync

    Name : ken:0 (local to host ken)

    UUID : b693fe72:4452bd3f:4d995779:ee33bc77

    Events : 76

    Number Major Minor RaidDevice State

    8 16 0 active sync /dev/sdb

    8 32 1 active sync /dev/sdc

    8 48 2 active sync /dev/sdd

    8 64 - spare /dev/sde

    第六步:模拟/dev/sdb磁盘损坏

    可以发现/dev/sde备份盘立即开始构建

    [root@ken ~]# mdadm /dev/md0 -f /dev/sdb

    mdadm: set /dev/sdb faulty in /dev/md0

    [root@ken ~]# mdadm -D /dev/md0

    /dev/md0:

    Version : 1.2

    Creation Time : Thu Feb 28 19:35:10 2019

    Raid Level : raid5

    Array Size : 41908224 (39.97 GiB 42.91 GB)

    Used Dev Size : 20954112 (19.98 GiB 21.46 GB)

    Raid Devices : 3

    Total Devices : 4

    Persistence : Superblock is persistent

    Update Time : Thu Feb 28 19:38:41 2019

    State : active, degraded, recovering

    Active Devices : 2

    Working Devices : 3

    Failed Devices : 1

    Spare Devices : 1

    Layout : left-symmetric

    Chunk Size : 512K

    Consistency Policy : resync

    Rebuild Status : 2% complete

    Name : ken:0 (local to host ken)

    UUID : b693fe72:4452bd3f:4d995779:ee33bc77

    Events : 91

    Number Major Minor RaidDevice State

    8 64 0 spare rebuilding /dev/sde

    8 32 1 active sync /dev/sdc

    8 48 2 active sync /dev/sdd

    8 16 - faulty /dev/sdb

    6.centos7系统启动过程及相关配置文件

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

    2.加载MBR到内存

    3.GRUB阶段

    4.加载内核和initramfs模块

    5.内核开始初始化,使用systemd来代替centos6以前的init程序

    (1)执行initrd.target

    包括挂载/etc/fstab文件中的系统,此时挂载后,就可以切换到根目录了

    (2)从initramfs根文件系统切换到磁盘根目录

    (3)systemd执行默认target配置

    centos7表面是有“运行级别”这个概念,实际上是为了兼容以前的系统,每个所谓的“运行级别”都有对应的软连接指向,默认的启动级别时/etc/systemd/system/default.target,根据它的指向可以找到系统要进入哪个模式

    模式:

    0 ==> runlevel0.target, poweroff.target

    1 ==> runlevel1.target, rescue.target

    2 ==> runlevel2.target, multi-user.target

    3 ==> runlevel3.target, multi-user.target

    4 ==> runlevel4.target, multi-user.target

    5 ==> runlevel5.target, graphical.target

    6 ==> runlevel6.target, reboot.target

    (4)systemd执行sysinit.target

    有没有很眼熟?是的,在CentOS6上是被叫做rc.sysint程序,初始化系统及basic.target准备操作系统

    (5)systemd启动multi-user.target下的本机与服务器服务

    (6)systemd执行multi-user.target下的/etc/rc.d/rc.local

    6.Systemd执行multi-user.target下的getty.target及登录服务

    getty.target我们也眼熟,它是启动终端的systemd对象。如果到此步骤,系统没有被指定启动图形桌面,到此就可以结束了,如果要启动图形界面,需要在此基础上启动桌面程序

    7.systemd执行graphical需要的服务

    CentOS6,7启动区别

    系统启动和服务器守护进程管理器,它不同于centos5的Sysv init,centos6的Upstart(Ubuntu制作出来),systemd是由Redhat的一个员工首先提出来的,它在内核启动后,服务什么的全都被systemd接管,kernel只是用来管理硬件资源,相当于内核被架空了,因此linus很不满意Redhat这种做法。

    需要记住的:1.BIOS初始化,post开机自检

    2.加载MBR到内存

    3.grub阶段(可省略 )

    4.加载内核和initramfs模块

    5.内核初始化,使用centos7系统使用的是systemd替换了centos6当中的init

    6.登陆服务

  • 相关阅读:
    Python入门-函数进阶
    Python入门-初始函数
    Leetcode300. Longest Increasing Subsequence最长上升子序列
    Leetcode139. Word Break单词拆分
    Leetcode279. Perfect Squares完全平方数
    Leetcode319. Bulb Switcher灯泡开关
    Leetcode322. Coin Change零钱兑换
    二叉树三种遍历两种方法(递归和迭代)
    Leetcode145. Binary Tree Postorder Traversal二叉树的后序遍历
    Leetcode515. Find Largest Value in Each Tree Row在每个树行中找最大值
  • 原文地址:https://www.cnblogs.com/liangzb310/p/11025064.html
Copyright © 2011-2022 走看看