磁盘(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