一、简述
RAID(Redundant Array of Independent/Inexpensive Disks):独立冗余磁盘阵列。RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑上的一个整块硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份的技术。
RAID特性
提高IO能力:磁盘并行读写
提高耐用性:磁盘冗余来实现
RAID实现方式
外接式磁盘阵列:通过PCI或PCI-E扩展卡提供适配能力
内接式RAID:主板集成RAID控制器
软件RAID:通过软件方式实现
RAID级别:RAID0,RAID1,RAID2,RAID3,RAID4,RAID5,RAID6,RAID7,RAID5E,RAID5,RAID10/01,RAID50,RAID53,JBOD
二、使用
常用RAID级别:RAID0,RAID1,RAID5,RAID10,RAID50,JBOD
1.级别及其特性
1.1)RAID0(条带卷)
磁盘阵列中存储性能最好的。适用于安全性不高,要求比较高性能的图形工作站或者个人站。
特性
读写性能提升
可用空间:N*min(S1,S2,...)
没有容错功能
磁盘数量:至少2块
工作模式
数据文件被分割成"条带状"(连续以位或字节为单位分割数据),分条存储在多个磁盘上。
1.2)RAID1(镜像卷)
数据盘顺坏,换盘后需要长时间的镜像同步,不影响外界访问,但整个系统性能下降。磁盘控制器负载比较大。适用于安全性较高,且能较快恢复数据的场合。
特性
读性能提升,写性能略有下降
可用空间:1*min(S1,S2,...)
有容错功能
磁盘数量:至少2块
工作模式
通过磁盘数据镜像实现数据的冗余,在成对的独立磁盘上产生互为备份(镜像)的数据。
1.3)RAID5
读取速度接近RAID0,但是安全性更高。安全性上接近RAID1,但是磁盘的利用率更高。可以认为是RAID0和RAID1的一个折中方案。只允许有一块盘出错,可以通过另外多块盘来计算出故障盘的数据,故障之后必须尽快更换。比RAID01的磁盘利用率高,是目前比较常用的一种方案。
特性
读写性能提升
可用空间:N*min(S1,S2,...)
有容错功能:允许一块磁盘出错,出错后显示为降级
磁盘数:至少3块
工作模式
RAID 5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。
1.4)RAID10
特性
读写性能提升
可用空间:N*min(S1,S2,...)/2
有容错功能:每组镜像中最多只能坏一块盘
磁盘数:至少4块
工作模式
最多损坏一对盘,因为出现两块盘同时出现错误的概率较小,故安全性较高。
1.5)RAID50
特性
更高的容错能力,具备更快数据读取速率
工作模式
1.6)JBOD(Just a Bunch Of Disks)
特性
将多块磁盘的空间合并成一个大的连续的空间使用,并不是严格意义上的RAID,其没有容错功能
可用空间:sum(S1,S2,...)
工作模式
2.阵列的建立(mdadm方式)
生产环境中尽量不要使用软件方式来建立磁盘阵列
2.1)mdadm命令
模式化工具,用于管理磁盘设备或在linux上建立RAID,支持的RAID级别有:LINEAR,RAID0,RAID1,RAID4,RAID5,RAID6,RAID10。
~]# mdadm [mode] <raiddevice> [options] <component-devices>
mode
-C:创建
-a {yes|no}:自动创建目标RAID设备的设备文件
-c CHUNK_SIZE:指明块大小
-l #:指明要创建的RAID的级别
-n #:使用#个块设备来创建此RAID
-x #:指明空闲盘的个数
-A:装配
-F:监控
-a,-f,-r:管理
-a:添加磁盘
-f:标记指定的磁盘为损坏
-r:移除磁盘
-D:显示RAID的详细信息
~]# mdadm -D /dev/md#
raiddevice:/dev/md#
options
component-devices:任意块设备
~]# cat /proc/mdstat 观察md的状态
~]# mdadm -S /dev/md# 停止md设备
2.2)案例
创建一个10G可用空间的RAID5?
## 分区 ##
[root@wybaron_host1015 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-62914559,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-62914559,默认为 62914559):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p
分区号 (2-4,默认 2):
起始 扇区 (10487808-62914559,默认为 10487808):
将使用默认值 10487808
Last 扇区, +扇区 or +size{K,M,G} (10487808-62914559,默认为 62914559):+5G
分区 2 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p):
Using default response p
分区号 (3,4,默认 3):
起始 扇区 (20973568-62914559,默认为 20973568):
将使用默认值 20973568
Last 扇区, +扇区 or +size{K,M,G} (20973568-62914559,默认为 62914559):+5G
分区 3 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): p
已选择分区 4
起始 扇区 (31459328-62914559,默认为 31459328):
将使用默认值 31459328
Last 扇区, +扇区 or +size{K,M,G} (31459328-62914559,默认为 62914559):+5G
分区 4 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):l
0 空 24 NEC DOS 81 Minix / 旧 Linu bf Solaris
1 FAT12 27 隐藏的 NTFS Win 82 Linux 交换 / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 隐藏的 C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux 扩展 c7 Syrinx
5 扩展 41 PPC PReP Boot 86 NTFS 卷集 da 非文件系统数据
6 FAT16 42 SFS 87 NTFS 卷集 db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux 纯文本 de Dell 工具
8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt
9 AIX 可启动 4f QNX4.x 第3部分 93 Amoeba e1 DOS 访问
a OS/2 启动管理器 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad 休 eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 扩展 (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC
11 隐藏的 FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq 诊断 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 隐藏的 FAT16 <3 61 SpeedStor ab Darwin 启动 f2 DOS 次要
16 隐藏的 FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 隐藏的 HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST 智能睡眠 65 Novell Netware b8 BSDI swap fd Linux raid 自动
1b 隐藏的 W95 FAT3 70 DiskSecure 多启 bb Boot Wizard 隐 fe LANstep
1c 隐藏的 W95 FAT3 75 PC/IX be Solaris 启动 ff BBT
1e 隐藏的 W95 FAT1 80 旧 Minix
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):1
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):2
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):t
分区号 (1-4,默认 4):
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:32.2 GB, 32212254720 字节,62914560 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xc329d258
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 fd Linux raid autodetect
/dev/sdb2 10487808 20973567 5242880 fd Linux raid autodetect
/dev/sdb3 20973568 31459327 5242880 fd Linux raid autodetect
/dev/sdb4 31459328 41945087 5242880 fd Linux raid autodetect
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
## 通知内核识别分区 ##
[root@wybaron_host1015 ~]# partx -a /dev/sdb
partx: /dev/sdb: error adding partitions 1-4
[root@wybaron_host1015 ~]# partx -a /dev/sdb
partx: /dev/sdb: error adding partitions 1-4
## 创建阵列 ##
[root@wybaron_host1015 ~]# mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb{1,2,3,4}
mdadm: /dev/sdb1 appears to contain an ext2fs file system
size=20971520K mtime=Thu Jan 1 08:00:00 1970
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@wybaron_host1015 ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb3[4] sdb4[3](S) sdb2[1] sdb1[0]
10475520 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
## 格式化并挂载 ##
[root@wybaron_host1015 ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
655360 inodes, 2618880 blocks
130944 blocks (5.00%) reserved for the super user
第一个数据块=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: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@wybaron_host1015 ~]# mkdir data
[root@wybaron_host1015 ~]# mount /dev/md0 data/
########## 工作中建议使用UUID进行挂载和记录 ##########
# [root@wybaron_host1015 ~]# blkid /dev/md0
# /dev/md0: UUID="a3e539bd-e118-4c68-bb50-35db72b5be5d" TYPE="ext4"
######################################################
[root@wybaron_host1015 ~]# mount | tail -n 1
/dev/md0 on /root/data type ext4 (rw,relatime,stripe=256,data=ordered)
[root@wybaron_host1015 ~]# df -lh | grep "/dev/md0"
/dev/md0 9.8G 37M 9.2G 1% /root/data
## 查看阵列信息 ##
[root@wybaron_host1015 ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Tue Oct 9 15:54:30 2018
Raid Level : raid5
Array Size : 10475520 (9.99 GiB 10.73 GB)
Used Dev Size : 5237760 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Tue Oct 9 16:01:44 2018
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : wybaron_host1015:0 (local to host wybaron_host1015)
UUID : 9daab8ce:299b687c:5f559246:8e0d3abe
Events : 18
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
4 8 19 2 active sync /dev/sdb3
3 8 20 - spare /dev/sdb4
## 手动标记损坏磁盘,检测自动替换情况 ##
root@wybaron_host1015 ~]# mdadm /dev/md0 -f /dev/sdb2
mdadm: set /dev/sdb2 faulty in /dev/md0
[root@wybaron_host1015 ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb3[4] sdb4[3] sdb2[1](F) sdb1[0]
10475520 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]
[==================>..] recovery = 94.9% (4974300/5237760) finish=0.0min speed=56652K/sec
unused devices: <none>
[root@wybaron_host1015 ~]# watch -n1 'cat /proc/mdstat'
[root@wybaron_host1015 ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Tue Oct 9 15:54:30 2018
Raid Level : raid5
Array Size : 10475520 (9.99 GiB 10.73 GB)
Used Dev Size : 5237760 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Tue Oct 9 16:08:31 2018
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : wybaron_host1015:0 (local to host wybaron_host1015)
UUID : 9daab8ce:299b687c:5f559246:8e0d3abe
Events : 37
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
3 8 20 1 active sync /dev/sdb4
4 8 19 2 active sync /dev/sdb3
1 8 18 - faulty /dev/sdb2
三、补充
partx命令
通知内核识别分区。
~]# partx [-a|-d|-s|-u] [--nr <n:m> | <分区>] <磁盘>
-a, --add 添加指定的分区或所有分区
-d, --delete 删除指定的分区或所有分区
-s, --show 列出分区
-u, --update 更新指定的分区或所有分区
-b, --bytes 以字节为单位而非易读的格式来打印 SIZE
-g, --noheadings --show 时不打印标题
-n, --nr <n:m> 指定分区范围(例如:--nr 2:4)
-o, --output <type> 定义使用哪个输出列
-P, --pairs 使用 key=“value” 输出格式
-r, --raw 使用原生输出格式
-t, --type <类型> 指定分区类型(dos、bsd、solaris 等)
-v, --verbose 详尽模式
-h, --help 显示此帮助并退出
-V, --version 输出版本信息并退出
可用的列(针对 --show、--raw 或 --pairs):
NR 分区号
START 分区起点(扇区数)
END 分区终点(扇区数)
SECTORS 扇区数
SIZE 易读形式的大小
NAME 分区名
UUID 分区 UUID
TYPE 分区类型 十六进制 或 uuid
FLAGS 分区标志
SCHEME 分区表类型(dos、gpt、...)
watch命令
定时刷新程序或命令执行结果输出至屏幕
~]# watch [options] command
-n, --interval seconds:刷新时间间隔,单位为秒
# 案例
~]# watch -n# 'COMMAND'