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 ::
Raid level : raid10
array Size : (39.97 GiB 42.91 GB)
Used Dev Size : (19.98 GiB 21.46 GB)
Raid Devices :
Total Devices :
Persistence : Superblock is persistent
Update Time : Thu apr ::
State : clean
active Devices :
Working Devices :
Failed Devices :
Spare Devices :
layout : near=
Chunk Size : 512K
Consistency Policy : unknown
Name : localhost.localdomain: (local to host localhost.localdomain)
UUiD : 807aee75:479287b8:930103d6:cbf2a76a
Events :
Number Major Minor RaidDevice State
active sync set-a /dev/sdb
active sync set-B /dev/sdc
active sync set-a /dev/sdd
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. (-Dec-)
Filesystem label=
OS type: linux
Block size= (log=)
Fragment size= (log=)
Stride= blocks, Stripe width= blocks
inodes, blocks
blocks (5.00%) reserved for the super user
First data block=
Maximum filesystem blocks=
block groups
blocks per group, fragments per group
inodes per group
Superblock backups stored on blocks:
, , , , , , , , ,
,
allocating group tables: done
Writing inode tables: done
Creating journal ( 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

RAID磁盘阵列及CentOS7启动流程的更多相关文章

  1. RAID磁盘阵列及CentOS7系统启动流程(week2_day3)--技术流ken

    RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意. 磁盘阵列是由很多价格较便宜的磁盘,以硬件( ...

  2. RAID磁盘阵列及CentOS7系统启动流程

    磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意,,数据读取无影响.将数据切割成许多区段,分别存放在各个硬盘 ...

  3. 末学者笔记--Linux中RAID磁盘阵列及centos7启动过程

    <一>RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意. 磁盘阵列是由很多价格较便 ...

  4. 20190411RAID磁盘阵列及CentOS7系统启动流程

    RAID磁盘阵列及CentOS7系统启动流程(week2_day3)   RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构 ...

  5. Centos7启动流程及systemd中Nginx启动配置

    Centos7启动流程: 1.post(Power-On-Self-Test) 加电自检 主要实现的功能是检测各个外围硬件设备是否存在而且能够正常运行起来,实现这一自检功能的是固化在主板上的ROM(主 ...

  6. Linux操作系统-CentOS7启动流程和服务管理

    Linux操作系统-CentOS7启动流程和服务管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.systemd POST --> Boot Sequence --&g ...

  7. CentOS7启动流程

    同样我也找了一张CentOS7的启动流程图. 第一步.硬件启动阶段 这一步和CentOS6差不多,详细请看CentOS6启动流程(含详细流程图) 第二步.GRUB2引导阶段 从这一步开始,CentOS ...

  8. centos7启动流程(从加电开始)

    图片来自于https://blog.csdn.net/qq_27754983/article/details/75212666 1. UEFI或BIOS启动 服务器加电后,CPU 自动重置成初始状态, ...

  9. centOS7服务管理与启动流程

    centOS7服务管理与启动流程 centOS7启动流程 systemd简介 unit对象 unit类型 特性 service unit文件格式 service unit file文件通常由三部分组成 ...

随机推荐

  1. Apache Kylin 是什么?

    Apache Kylin的官网 http://kylin.apache.org/cn/ - 可扩展超快OLAP引擎:  Kylin是为减少在Hadoop上百亿规模数据查询延迟而设计 - Hadoop ...

  2. js、css外部文件的相对路径问题

    如果js.css外部文件有使用到相对路径时,需要注意其相对路径的基准是不一样的. 比如说,在index.html中引用到了外部的js和css文件,这两个文件都通过相对路径引用了某一张图片:这些文件所在 ...

  3. 贪心 Codeforces Round #304 (Div. 2) B. Soldier and Badges

    题目传送门 /* 题意:问最少增加多少值使变成递增序列 贪心:排序后,每一个值改为前一个值+1,有可能a[i-1] = a[i] + 1,所以要 >= */ #include <cstdi ...

  4. AWVS11使用教程——Acunetix Web Vulnerability Scanner 11.x

    AWVS11使用教程 一:普通扫描. 二:报告生成. 三:登陆扫描. Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的网络漏洞扫描工具,它通过网络爬虫测 ...

  5. mongoDB内置文档定义

    在最近的设计数据库时,犯了一个低级的错误,就是设置内置文档是定义了错误了,导致数据取不出,去找了很多资料都无法解决.最后看了一了一下自己设置的model文件.配置错误,所以导致数据取不出了. 数据库时 ...

  6. javascript回调函数那些事~

    什么是回调函数? 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直 ...

  7. java课程设计全程实录——第0天

    本次课设计划在5月25日完成.目前还剩18天. 第0天主要完成事项如下: 搭建开发环境 制定开发进度规划表 阅读前人的课设 详细: 1.IDE的下载,安装,以及配合使用的阿里巴巴编程规约插件的安装与测 ...

  8. Android studio 时间选择器

    相当简单加载 gradle文件然后做一个textview即可. 1.首先我们要在build.gradle中写上这一行代码: compile 'com.feezu.liuli:timeselector: ...

  9. lavarel功能总结

    详细可参见笔记:laraval学习笔记(二) 路由 route 绑定模型,绑定参数 模版 blade .blade.php后缀,有laravel自己的模版语法 模型 model 如果用create创建 ...

  10. Quartz使用二 通过属性传递数据

    上一篇介绍了通过context.getJobDetail().getJobDataMap()方式获取传递的数据,其实可以通过定义属性来传递参数 package org.tonny.quartz; im ...