磁盘管理

磁盘管理

磁盘(Disk)在计算机硬件中扮演的是持久存储数据的角色。

## 一、 硬盘的分类
### 1. 按接口分类:

接口 | 描述 | 理论读取数据速率 | IOPS | 适用场景
—— | —— | ———————— | ——– | ———–
IDE(ata) | 并口 | 133MB/s | 100 | 家用级
SCSI | 并口 | Ultrascsi320: 320MB/s;Ultrascsi640: 640MB/s | 150-200 | 企业级
SATA | 串口 | SATA3: 6Gbps(1024*6/8=768MB/s) | 100 | 家用级
SAS | 串口 | 6Gbps(1024*6/8=768MB/s | 150-200 | 企业级
USB | 串口 | 3.0: 480MB/s |  |家用级

### 2. 按运转原理分类

存储机制 | 运行原理
———— | ————
机械硬盘 | 由马达驱动,使得钢化玻璃盘片旋转
固态硬盘 | 并行开启多个FLASH通道进行存取操作

## 二、机械硬盘组成及运作原理

(1) 磁道(track)
盘片上存在同轴的多条同心圆磁道,每条磁道周长不一样。
这样给磁道间带来一些区别:
a. 每条磁道上存储数据的多少不等
b. 单位时间内各磁道上走过的路径长度不等,读取速度不同

数据读取步骤
a. 等待磁头臂移动到需要读取数据的磁道上
b. 等待磁盘旋转到指定数据读取位置
c. 读取数据

硬盘转速:转速越快,步骤b时间越短
5400, 7200, 10000, 15000,单位是rpm/min,意思是转/分钟

平均寻道时间:我们把(步骤a + 步骤b)叫做平均寻道时间,是衡量机械硬盘速度的重要指标之一。

(2) 扇区(sector)
在每个磁道上按照固定大小(512bytes)切分,每个部分叫一个扇区。

(3) 柱面(cyllnder)
不同盘面上的同一个编号的磁道共同构成一个圆柱体,叫做一个柱面

为了方便读取,在磁盘分区时,是按照柱面进行划分的。

 

设备文件:FHS
/dev
设备文件:关联至设备的驱动程序,设备的访问入口

设备号:
major:主设备号,区分设备类型,用于标明设备所需要的驱动程序
minor:次设备号,区分同种类型下的不同设备;是特定设备的访问入口

mknod命令: 创建字符设备或者块设备
语法:mknod [OPTIONS]… NAME TYPE [MAJOR MINOR]
-m MODE: 创建后的设定文件的访问权限

磁盘的设备名称:

接口类型 | 名称
———— | ——
IDE | /dev/hd[a-z]
SCSI, SATA, USB, SAS | /dev/sd[a-z]

> 注意:CentOS6、7统统将硬盘设备文件标识为/dev/sd[a-z]#

引用设备的方式
(1) 设备文件名
(2) 卷标
(3) UUID

磁盘分区:
1. MBR(master boot record)
其中,MBR:使用第0号扇区,也就是sector 0,大小为512字节,分为三个部分
(1) 前446字节:bootloader,程序,引导启动操作系统的程序
(2) 中间64字节:partition allocation table,分区表,每16字节标识一个分区,最多只能有四个分区
(3) 最后2字节:用来声明当前MBR区域是否有效,MBR区域的有效性标识;55AA为有效,否则无效

2. GPT(GUID Partition Table)
GPT全名Globally Unique Identifier Partition Table Format(GUID分区表),是源于EFI(可扩展固件接口) 使用的磁盘分区架构。现在用最直白的语言说明之——   二者比较:MBR磁盘最多允许存在4个主分区,并且支持磁盘最大容量为2TB;而GPT磁盘最多可允许存在128个主分区(在Windows系统中),支持磁盘的最大容量为18EB(1EB=1024PB=1024*1024TB)。每个GPT磁盘都存在Protective MBR,用来防止不能识别GPT分区的磁盘管理工具的破坏。对于Windows系统来说,“GPT分区方案”中的几个分区:MSR分区、ESP分区。前面提到的Protective MBR,在Windows系统中即为MSR分区,是必须存在的一个分区;ESP分区(非必须存在),是采用UEFI BIOS电脑的系统中,存放启动文件的分区(当然,还有其他文件)。    GPT “优缺点”并存。优点:支持更大的硬盘、更多的分区、单个分区大小更大、每个分区存在GUID、分区表自带备份。当然,GUID分区表也存在着不足,那就是目前仍有一部分操作系统不支持读写GPT磁盘(比如32位windows xp),不能从GPT磁盘启动(目前只有基于EFI的系统支持从GPT磁盘启动),但从长远发展来看,EFI的电脑将会普及,GPT分区将会成为主流。

传统BIOS与新型EFI/UEFI BIOS的基本认识:

传统BIOS的全称是Basic Input Output System,译为“基本输入输出系统”,是电脑主板ROM芯片上的一段代码。按下电源后,计算机会进行加电自检(检测硬件是否正常)、初始化硬件(使硬件按照PC的架构工作)、启动OS Loader加载操作系统(由BIOS读取MBR上的Loader)、向系统及软件提供服务、硬件中断处理(硬件出现错误指令->中断一下->由BIOS提供正确执行结果)。   有必要澄清一下BIOS和CMOS的概念,上文说到BIOS是一段“代码”,当属软件范畴;而CMOS(Complementary Metal Oxide Semiconductor)译为“互补金属氧化物半导体”,是主板上的一块RAM芯片,当属硬件范畴。CMOS中存放系统参数,通常有“BIOS设置、CMOS设置”等不确切的说法,准确的说法应是:通过BIOS设置程序对CMOS参数进行设置。   新一代的电脑主板采用UEFI BIOS,EFI(Extensible Firmware Interfaces,译为可扩展固件接口)的概念最早由Intel提出,UEFI是EFI的升级版。EFI/UEFI BIOS与传统BIOS不同之处在于,可以用鼠标操作,具有多国语言版,开机自检后还会加载硬件在EFI中的驱动程序,不用操作系统负责驱动的加载工作,可视之为“微型系统”。   总结:新一代的BIOS取代传统BIOS是有依据的,坚信:新事物必将取代旧事物。但就目前来说仍是“传统BIOS”的天下。

## 三、RAID磁盘冗余
RAID(Redundant Arrays of Inexpensive Disks),廉价冗余磁盘阵列。后由于其费用增加,英文全称改为Redundant Arrays of Independent Disks,独立冗余磁盘阵列。其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。
RAID控制器接到服务器传送来的存储请求后,将数据按照设定好的大小分块(chunk),这个数据块和数据存储在文件系统中的块(block)不一样,这个chunk块,是为了将数据分散存储到不同的磁盘中而划分的。
### 1. RAID能够解决的问题以及提供的解决方案

需要解决的问题 | 解决方案
——————— | ———–
磁盘损坏造成的数据丢失问题 | 磁盘冗余
单块磁盘数据存取速度慢(硬件I/O速率低下)的问题 | 磁盘并行读写,增加缓存,提供设备独自的UPS供电

### 2. RAID的分类及其特性
#### (1) 按实现方式划分

分类 | 描述
—— | ——
外接式磁盘阵列 | 主板通过PCI或PCI-E的扩展接口连接RAID Adapter(适配器),来实现外挂磁盘阵列的方式
内接式磁盘阵列 | 主板上集成RAID Controller(控制器),自我实现磁盘冗余功能
软件模拟磁盘阵列 | 硬件上并没有RAID Controller,是通过软件方式模拟出来,来实现冗余磁盘阵列的功能的实现方式
#### (2) 按级别划分
多块磁盘组织在一起的工作方式有很多种,它们各有特点,具体详见:
**JBOD**

![JBOD.png](http://upload-images.jianshu.io/upload_images/7430414-6c0bf7afda64d4ee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

JBOD(Just a Bunch Of Disks),只是一组磁盘合在一起看作一个磁盘。当第一块磁盘写满后就继续用第二块,第二块写满后用第三块,依此类推。

**RAID0**

![RAID0.png](http://upload-images.jianshu.io/upload_images/7430414-d07c86ff343b0b42.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

将多个磁盘合并成一个大的磁盘,不具有冗余,并行I/O,速度最快。RAID 0亦称为带区集。它是将多个磁盘并列起来,成为一个大磁盘。在存放数据时,其将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中,所以在所有的级别中,RAID 0的速度是最快的。但是RAID 0没有冗余功能,如果一个磁盘(物理)损坏,则所有的数据都会丢失,危险程度与JBOD相当。
理论上越多的磁盘性能就等于“单一磁盘性能”ד磁盘数”,但实际上受限于总线I/O瓶颈及其它因素的影响,RAID性能会随边际递减,也就是说,假设一个磁盘的性能是50MB每秒,两个磁盘的RAID 0性能约96MB每秒,三个磁盘的RAID 0也许是130MB每秒而不是150MB每秒,所以两个磁盘的RAID 0最能明显感受到性能的提升。
Size = 2 x min(S1,S2,…)
但如果是以软件方式来实现RAID,则磁盘的空间则不见得受限于此(例如Linux Software RAID),通过软件实现可以经由不同的组合而善用所有的磁盘空间。
Size = sum of all disk
**RAID1**

![RAID1.png](http://upload-images.jianshu.io/upload_images/7430414-a0986128b056b63b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,另外写入速度有微小的降低。只要一个磁盘正常即可维持运作,可靠性最高。RAID 1就是镜像,其原理为在主硬盘上存放数据的同时也在镜像硬盘上写一样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘的工作。因为有镜像硬盘做数据备份,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。但无论用多少磁盘做RAID 1,仅算一个磁盘的容量,是所有RAID中磁盘利用率最低的一个级别。

如果用两个不同大小的磁盘建RAID 1,可用空间为较小的那个磁盘,较大的磁盘多出来的空间也可以分区成一个区来使用,不会造成浪费。
Size = min(S1,S2,S3…)
**RAID4**
![RAID4.png](http://upload-images.jianshu.io/upload_images/7430414-68944c8f5dfc359b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
至少需要三块磁盘来组建RAID4阵列,我们假设一共N块磁盘,前N-1块磁盘存储业务数据,最后第N块磁盘存储校验数据(异或运算),这样一来,阵列中任何一块磁盘损坏,都可以通过异或运算再计算出缺失的磁盘上的数据,通过这种方式来保护数据,防止数据丢失。
但这种方式有一个很严重的弊端:所有的校验位都存储在同一块磁盘上,这样一来,如果存储业务数据的盘坏了一块,业务仍然可以继续,但是业务数据每次都需要异或运算之后计算出来再提供出去,会极大的消耗资源,而且校验位都在同一块磁盘上,也会造成这块磁盘的读写操作会比其他存放业务数据的盘多,会提高校验盘的损坏概率。
Size = (N-1) x min(S1,S2,…,SN)

**RAID5**

![RAID5.png](http://upload-images.jianshu.io/upload_images/7430414-669cc279a0dcebff.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

RAID Level 5是一种储存性能、数据安全和存储成本兼顾的存储解决方案。它使用的是Disk Striping(硬盘分区)技术。RAID 5至少需要三颗硬盘,RAID 5不是对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具有和RAID 0相近似的数据读取速度,只是因为多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢,若使用“回写高速缓存”可以让性能改善不少。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较便宜。
Size = (N-1) x min(S1,S2,…,SN)
**RAID6**
![RAID6.png](http://upload-images.jianshu.io/upload_images/7430414-ac29517409f54f08.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
类似于RAID5,只是相比RAID5的一个校验位,又多了一个校验位,也就是说RAID组中如果一共有N块磁盘,N-2块存放业务数据,剩下2块存放校验数据,允许同时损坏两块磁盘。

 

**RAID 10 / RAID 01**

 

RAID 10是先镜像再分区数据,先将所有硬盘分为两组,视为是RAID 0的最低组合,然后将这两组各自视为RAID 1运作。也就是先做RAID1,然后做RAID0。

![RAID10.png](http://upload-images.jianshu.io/upload_images/7430414-71e4e0f5770b4eb9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
RAID 01则是跟RAID 10的程序相反,是先分区再将数据镜射到两组硬盘。它将所有的硬盘分为两组,变成RAID 1的最低组合,而将两组硬盘各自视为RAID 0运作。也就是先做RAID0,然后做RAID1。
![RAID01.png](http://upload-images.jianshu.io/upload_images/7430414-c0f772799c7ed969.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
当RAID 10有一个硬盘受损,其余硬盘会继续运作。RAID 01只要有一个硬盘受损,同组RAID 0的所有硬盘都会停止运作,只剩下其他组的硬盘运作,可靠性较低。如果以六个硬盘建RAID 01,镜射再用三个建RAID 0,那么坏一个硬盘便会有三个硬盘脱机。因此,RAID 10远较RAID 01常用,零售主板绝大部份支持RAID 0/1/5/10,但不支持RAID 01。

最后说说为什么RAID10比RAID 01好且靠谱:

RAID0+1是先做两个RAID0,然后再做RAID1,因此RAID0+1允许坏多个盘,但只能在坏在同一个RAID0中,不允许两个RAID0都有坏盘。
RAID1+0是先做RAID1,然后再做RAID0,因此RAID1+0允许坏多个盘,只要不是一对磁盘坏就可以啦。
因此说RAID1+0比RAID0+1安全得多,因为在同一对磁盘中,两块磁盘都坏掉的概率很低。
RAID 0和RAID 1分别用于增强存储性能(RAID 0 条带)和数据安全性(RAID 1 镜像),而RAID 0+1和RAID 10兼顾了RAID 0和RAID 1的优点,它在提供RAID 1一样的数据安全保证的同时,也提供了与RAID 0近似的存储性能。虽然RAID 0+1和RAID 10基本原理相近,都是RAID0和RAID1的结合,不过还是有些区别。

在MySQL数据库中,通常我们选用RAID 10。

**总结**

RAID级别 | 可用空间 | 允许坏盘个数 | 磁盘数限制 | 读写性能
————- | ———— | ———— | ————– | ————–
JBOD | Size = S1+S2+…+SN | 0 | 2+ | 读写性能均没有变化
RAID0 | Size = 2 x min(S1,S2,…) | 0 | 2+ | 读、写性能均有提升
RAID1 | Size = min(S1,S2,S3…) | N-1 | 2+ | 读性能有提升,写性能略有下降
RAID4 | Size = (N-1) x min(S1,S2,…,SN) | 1 | 3+ | 读、写性能均有提升
RAID5 | Size = (N-1) x min(S1,S2,…,SN) | 1 | 3+ | 读、写性能均有提升
RAID6 | Size = (N-2) x min(S1,S2,…,SN) | 2 | 4+ | 读、写性能均有提升
RAID1+0 | Size = N x min(S1,S2,…,SN)/2 | 每个RAID1剩一块健康盘即可 | 4+ | 读、写性能均有提升
RAID0+1 | Size = N x min(S1,S2,…,SN)/2 | RAID1有一个健康的RAID0组即可 | 4+ | 读、写性能均有提升

### 3. 软RAID的实现
#### (1) 软RAID在CentOS 6 系统上的实现
CentOS 6 上是结合内核中的md(multi devices)实现的
管理工具:
mdadm(一款模式化的工具,有很多种模式)
语法: mdadm [mode] <raiddevice> [OPTIONS] <component-devices>

支持的RAID级别:LINEAR(相当于JBOD)、RAID0(有时写成Striping)、RAID1(有时写成Monitoring)、RAID4、RAID5、RAID6、RAID10;

查看MD状态:
方法一:
~]# cat /proc/mdstat
Personalities :
unused devices: <none>
方法二:
~]# ls /dev | grep “md”

mdadm命令:
语法:mdadm [mode] <raiddevice> [options] <component-devices>

mdadm的模式分类

模式 | 选项
—— | ——
创建模式(Create)| -C
装配模式(assemble)|-A
监控模式(follower)|-F
管理模式|-f, -r, -a

**创建模式下的选项**

选项 | 含义
—— | ——
-n # | 使用#个块设备来创建此RAID
-l # | 指名要创建的RAID级别
-a {yes\|no} | 是否自动创建目标RAID的设备文件
-c CHUNK_SIZE | 指明chunk块大小
-x # | 指明空闲盘的个数
-D | 查看RAID设备的详细信息

**管理模式下的选项**

选项 | 含义
—— | ——
-f | 手动设定磁盘状态为错误
-a | 添加磁盘
-r | 从RAID中移除指定磁盘

**查看md的状态**
~]# cat /proc/mdstat

**停止md设备**
~]# mdadm -S /dev/md#

示例:创建一个10G可用空间的RAID5,并测试将一块磁盘设置为坏盘后的运行状态和结果;
“`
~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

 

Command (m for help): n
Partition type:
p   primary (2 primary, 0 extended, 2 free)
e   extended
Select (default p): e
Partition number (3,4, default 3):
First sector (23070720-209715199, default 23070720):
Using default value 23070720
Last sector, +sectors or +size{K,M,G} (23070720-209715199, default 209715199):
Using default value 209715199
Partition 3 of type Extended and of size 89 GiB is set

Command (m for help): n
Partition type:
p   primary (2 primary, 1 extended, 1 free)
l   logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (23072768-209715199, default 23072768):
Using default value 23072768
Last sector, +sectors or +size{K,M,G} (23072768-209715199, default 209715199): +5G
Partition 5 of type Linux and of size 5 GiB is set

Command (m for help): n
Partition type:
p   primary (2 primary, 1 extended, 1 free)
l   logical (numbered from 5)
Select (default p): l
Adding logical partition 6
First sector (33560576-209715199, default 33560576):
Using default value 33560576
Last sector, +sectors or +size{K,M,G} (33560576-209715199, default 209715199): +5G
Partition 6 of type Linux and of size 5 GiB is set

Command (m for help): n
Partition type:
p   primary (2 primary, 1 extended, 1 free)
l   logical (numbered from 5)
Select (default p): l
Adding logical partition 7
First sector (44048384-209715199, default 44048384):
Using default value 44048384
Last sector, +sectors or +size{K,M,G} (44048384-209715199, default 209715199): +5G
Partition 7 of type Linux and of size 5 GiB is set

Command (m for help): n
Partition type:
p   primary (2 primary, 1 extended, 1 free)
l   logical (numbered from 5)
Select (default p): l
Adding logical partition 8
First sector (54536192-209715199, default 54536192):
Using default value 54536192
Last sector, +sectors or +size{K,M,G} (54536192-209715199, default 209715199): +5G
Partition 8 of type Linux and of size 5 GiB is set

Command (m for help): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x277399ec

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568    23070719     1048576   82  Linux swap / Solaris
/dev/sdb3        23070720   209715199    93322240    5  Extended
/dev/sdb5        23072768    33558527     5242880   83  Linux
/dev/sdb6        33560576    44046335     5242880   83  Linux
/dev/sdb7        44048384    54534143     5242880   83  Linux
/dev/sdb8        54536192    65021951     5242880   83  Linux

Command (m for help): t
Partition number (1-3,5-8, default 8): 5
Hex code (type L to list all codes): fd
Changed type of partition ‘Linux’ to ‘Linux raid autodetect’

Command (m for help): t
Partition number (1-3,5-8, default 8): 6
Hex code (type L to list all codes): fd
Changed type of partition ‘Linux’ to ‘Linux raid autodetect’

Command (m for help): t
Partition number (1-3,5-8, default 8): 7
Hex code (type L to list all codes): fd
Changed type of partition ‘Linux’ to ‘Linux raid autodetect’

Command (m for help): t
Partition number (1-3,5-8, default 8):
Hex code (type L to list all codes): fd
Changed type of partition ‘Linux’ to ‘Linux raid autodetect’

Command (m for help): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x277399ec

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568    23070719     1048576   82  Linux swap / Solaris
/dev/sdb3        23070720   209715199    93322240    5  Extended
/dev/sdb5        23072768    33558527     5242880   fd  Linux raid autodetect
/dev/sdb6        33560576    44046335     5242880   fd  Linux raid autodetect
/dev/sdb7        44048384    54534143     5242880   fd  Linux raid autodetect
/dev/sdb8        54536192    65021951     5242880   fd  Linux raid autodetect

# 此处需要将磁盘调整成Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

~]# kpartx -af /dev/sdb

查看MD状态:
~]# cat /proc/mdstat
Personalities :
unused devices: <none>

~]# mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sdb{5,6,7,8}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb7[4] sdb8[3](S) sdb6[1] sdb5[0]
10477568 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[=============>…….]  recovery = 68.7% (3601792/5238784) finish=0.1min speed=200099K/sec

unused devices: <none>

~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb7[4] sdb8[3](S) sdb6[1] sdb5[0]
10477568 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

~]# mke2fs -t 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
655360 inodes, 2619392 blocks
130969 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 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

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

~]# mount /dev/md0 /mydata

~]# df -lh
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        50G  4.7G   46G  10% /
devtmpfs        3.8G     0  3.8G   0% /dev
tmpfs           3.9G   84K  3.9G   1% /dev/shm
tmpfs           3.9G  9.0M  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/md0        9.8G   37M  9.2G   1% /mydata
/dev/sda1       297M  152M  146M  51% /boot
tmpfs           781M     0  781M   0% /run/user/0
tmpfs           781M   12K  781M   1% /run/user/42

如果想实现自动挂载,建议使用UUID进行识别磁盘设备,因为/dev/md0这个设备名有可能下次会改变。

~]# blkid /dev/md0
/dev/md0: UUID=”7be0a3cd-7766-4d19-9120-7e514d004a67″ TYPE=”ext4″
~]# vim /etc/fstab
添加如下行:
UUID=7be0a3cd-7766-4d19-9120-7e514d004a67 /mydata                 ext4    defaults        0 0

~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 29 16:42:09 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Sun Oct  8 01:10:03 2017
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 512K

Name : sapbcs.mageedu.com:0  (local to host sapbcs.mageedu.com)
UUID : 88e887e8:8a782316:380d87b9:c476ca72
Events : 24

Number   Major   Minor   RaidDevice State
0       8       21        0      active sync   /dev/sdb5
1       8       22        1      active sync   /dev/sdb6
4       8       23        2      active sync   /dev/sdb7

3       8       24        –      spare   /dev/sdb8

手工设置/dev/sdb7为坏盘
~]# mdadm /dev/md0 -f /dev/sdb7
mdadm: set /dev/sdb7 faulty in /dev/md0

 

~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 29 16:42:09 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Mon Oct  9 14:48:58 2017
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 512K

Name : sapbcs.mageedu.com:0  (local to host sapbcs.mageedu.com)
UUID : 88e887e8:8a782316:380d87b9:c476ca72
Events : 43

Number   Major   Minor   RaidDevice State
0       8       21        0      active sync   /dev/sdb5
1       8       22        1      active sync   /dev/sdb6
3       8       24        2      active sync   /dev/sdb8

4       8       23        –      faulty   /dev/sdb7

手工设置/dev/sdb8为坏盘
~]# mdadm /dev/md0 -f /dev/sdb8
mdadm: set /dev/sdb8 faulty in /dev/md0

~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 29 16:42:09 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Mon Oct  9 14:52:34 2017
State : clean, degraded
Active Devices : 2
Working Devices : 2
Failed Devices : 2
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 512K

Name : sapbcs.mageedu.com:0  (local to host sapbcs.mageedu.com)
UUID : 88e887e8:8a782316:380d87b9:c476ca72
Events : 45

Number   Major   Minor   RaidDevice State
0       8       21        0      active sync   /dev/sdb5
1       8       22        1      active sync   /dev/sdb6
–       0        0        2      removed

3       8       24        –      faulty   /dev/sdb8
4       8       23        –      faulty   /dev/sdb7
此时RAID5仍然处于工作状态,只是在降级运行

将坏盘移除
~]# mdadm /dev/md0 -r /dev/sdb7
mdadm: hot removed /dev/sdb7 from /dev/md0
~]# mdadm /dev/md0 -r /dev/sdb8
mdadm: hot removed /dev/sdb8 from /dev/md0

~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 29 16:42:09 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 2
Persistence : Superblock is persistent

Update Time : Mon Oct  9 14:57:04 2017
State : clean, degraded
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 512K

Name : sapbcs.mageedu.com:0  (local to host sapbcs.mageedu.com)
UUID : 88e887e8:8a782316:380d87b9:c476ca72
Events : 47

Number   Major   Minor   RaidDevice State
0       8       21        0      active sync   /dev/sdb5
1       8       22        1      active sync   /dev/sdb6
–       0        0        2      removed

再将两块标记的坏盘加回来
~]# mdadm /dev/md0 -a /dev/sdb7
mdadm: added /dev/sdb7

~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb7[3] sdb6[1] sdb5[0]
10477568 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[===>……………..]  recovery = 19.1% (1004672/5238784) finish=0.3min speed=200934K/sec

unused devices: <none>

~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 29 16:42:09 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent

Update Time : Mon Oct  9 14:58:21 2017
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 512K

Rebuild Status : 52% complete

Name : sapbcs.mageedu.com:0  (local to host sapbcs.mageedu.com)
UUID : 88e887e8:8a782316:380d87b9:c476ca72
Events : 57

Number   Major   Minor   RaidDevice State
0       8       21        0      active sync   /dev/sdb5
1       8       22        1      active sync   /dev/sdb6
3       8       23        2      spare rebuilding   /dev/sdb7

~]# mdadm /dev/md0 -a /dev/sdb8
mdadm: added /dev/sdb8

~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 29 16:42:09 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Mon Oct  9 14:59:15 2017
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 512K

Name : sapbcs.mageedu.com:0  (local to host sapbcs.mageedu.com)
UUID : 88e887e8:8a782316:380d87b9:c476ca72
Events : 67

Number   Major   Minor   RaidDevice State
0       8       21        0      active sync   /dev/sdb5
1       8       22        1      active sync   /dev/sdb6
3       8       23        2      active sync   /dev/sdb7

4       8       24        –      spare   /dev/sdb8

“`

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88075

(0)
上一篇 2017-10-27 09:41
下一篇 2017-10-27 09:44

相关推荐

  • linux用户与用户组

    一.用户 用户是能够获取系统资源的权限的集合. 二.linux用户组的分类: a.管理员root  :具有使用系统所有权限的用户,其UID为0. b.Centos 6普通用户:即一般用户,其使用系统的权限受限,其UID为500-60000之间Centos7UID为1000-60000之间。 c.Centos 6系统用户:保障系统运行的用户,一般不提…

    Linux干货 2016-10-24
  • 权限管理和文本过滤

    1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限 [root@study ~]# cp -r /etc/skel/ /home/tuser1|chmod -R 700 tuser1/ [root@…

    Linux干货 2016-11-20
  • 第一周作业

    1、描述计算机的组成及其功能。
    2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。
    3、描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。
    4、说明Linux系统上命令的使用格式;详细介绍ifconfig、echou、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相应的示例来阐述。
    5、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的。
    6、请罗列Linux发行版的基础目录名称命名法则及共用规定。

    Linux干货 2017-12-03
  • lvs应用

    练习一:负载均衡一个php应用: 测试是否需要会话保持; 是否需要用到共享存储;    为了检测是否需要会话保持和共享存储,要在两台主机上分别配置LAMP环境;这样就使得两者之间没有了共享存储;负载均衡使用nat模型的wlc算法,并且不使用lvs的长连接选项。数据库故意使用了相同的账号密码来进行安装。 步骤一:配置环境: 使用yum分别安…

    Linux干货 2016-11-11
  • 使用ext_skel和phpize构建php5扩展

    首先声明:我们要构建的是扩展或者模块名为hello_module.该模块提供一个方法:hello_word. 1、php环境的搭建 我们一般使用源码包编译安装,而不是binary包安装。因为使用PHP的二进制分发包安装有些冒险,这些版本倾向于忽略./configure的两个重要选项,它们在开发过程中很便利: 第一个–enable-debug。这个…

    Linux干货 2015-05-28