磁盘管理

磁盘管理

磁盘(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)
N27_sapbcsN27_sapbcs
上一篇 2017-10-27
下一篇 2017-10-27

相关推荐

  • shell与kernel的理解

    Shell 的英文释义是外壳,与kernel 内核名词遥相呼应,一外一内,一壳一核。内核就像瑞士银行的金库,存放着客户的黄金等众多的(硬件)资产,闲杂人等(包括客户)当然是严格禁止入内的,而作为客户要存取金库中的资产则需要通过专门的特定管理人员代为操作完成,并把存取(操作)的结果呈现给客户。在Linux操作系统中,shell的职能就类似于金库的操作人员,客户…

    Linux干货 2016-02-14
  • 3.用户和组管理

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who root     tty1         2016-12-…

    Linux干货 2017-07-16
  • linux 病毒 sfewfesfs

    由于昨天在内网服务器A不小心rm -fr / ,导致服务器A完蛋,重装系统后,不知道啥原因,局域网瘫痪不能上网,最后发现内网服务器A的一个进程sfewfesfs cpu 300%。路由器被网络阻塞啦。 于是百度这个病毒:都说该病毒很变态。第一次中linux病毒,幸亏是内网,感觉比较爽。(总结网络内容,引以为戒) 1、病毒现象 服务器不停向外网发送数据包,占网…

    Linux干货 2015-04-03
  • linux网络属性管理

    Linux网络属性配置 计算机网络:TCP/IP:协议栈(使用)ISO,OSI:协议栈(学习) MAC:Media Access Control48bits:ICANN:24bits, 2^24地址块:2^24 网桥(bridge):MAC地址表静态指定:动态学习:根据原地址学习; 交换机(switch):多端口网桥; IP(Internet protoco…

    Linux干货 2017-10-14
  • bash基础 if elif 多条件判断 for循环

    bash基础 if elif 多条件判断 for循环

    Linux干货 2017-10-31
  • 硬链接与软链接的区别

    硬链接(Hard Link):   硬连接指通过索引节点来进行链接(即一个指针指向文件索引节点)。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种链接就是硬链接。硬链接的作用是允许一个文件拥有多个有效路径…

    Linux干货 2016-10-20