一、RAID是什么
RAID(Redundant Arrays of Independent Disks)的全称叫做独立磁盘冗余阵列, 见名知意, 就是使用多块独立的磁盘(可以是普通的机械硬盘, 也可以是固态硬盘)构成一个磁盘组, 从而提升磁盘读写性能, 磁盘冗余的能力.
二、常用的RAID级别
多个磁盘有不同的方式来组成阵列, 称之为RAID级别; 不同级别的工作方式也有所不同.
RAID-0: 条带卷(Strip)
RAID-0, 最少需要2块磁盘, 多则不限, 其主要作用是提升磁盘的IO能力, 五冗余能力; 可用空间为“N(磁盘数)x最小磁盘空间”, 比如说有4快磁盘, 其中一块磁盘的空间只有20GB, 其他为40GB, 那么可用空间为“4x20”.
RAID-0示意图如下:
RAID-1: 镜像卷(Mirror)
RAID-1需要2块及以上磁盘, 具有磁盘冗余能力, 提升了磁盘的读性能, 写性能略有下降; 可用空间为“Nx最小磁盘空间/2”.
RAID-1示意图如下:
RAID-5: 分布式奇偶校验的独立磁盘结构
RAID-5需要3块及以上磁盘, 其中一块磁盘做为冗余磁盘, 提升了读写性能, 可用空间为“(N-1)x最小磁盘空间”.
RAID-5示意图:
RAID-6: 带有两种分布式存储的奇偶校验码的独立磁盘结构
RAID-6需要4块及以上磁盘, 其中两块磁盘做为冗余磁盘, 提升了读写性能, 可用空间为“Nx最小磁盘空间/2”.
RAID-10
RAID1和RAID0的结合.
示意图如下:
其他RAID级别请参考维基百科
三、Linux下RAID管理命令
RAID的实现方式通常是通过磁盘阵列卡, 有外接式的, 也有主板自带的, 不过Linux提供了一个软件的RAID实现方式. 该实现方式是通过md(multi devices)模块实现的, 命令为mdadm, 支持raid级别有raid0, raid1, raid4, raid5, raid6, raid10; 具体操作如下:
# 命令用法: mdadm [mode] <raid-device> [options] <component-devices>
# mode:
# 创建: -C
# -n N: 使用N个块设备来创建次RAID
# -l raidlevel: 指明要创建的raid级别
# -a {yes|no}: 是否自动创建目标raid设备的设备文件
# -c CHUNK_SIZE: 指明CHUNK大小
# -x N: 指明空闲盘个数
# 显示raid详细信息: -D
# 装配: -A
# 监控: -F
# 管理:
# -f: 标记指定磁盘为损坏
# -r: 移除磁盘
# -a: 添加磁盘
# <raiddevice>: /dev/mdN
# <component-devices>: 任意块设备
# 创建一个RAID-0
[root@zabbix ~]# mdadm -C -n 2 -l raid0 -a yes -c 128K /dev/md0 /dev/sdb /dev/sdc
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# 观察md的状态:
[root@zabbix ~]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdc[1] sdb[0]
4190208 blocks super 1.2 128k chunks
unused devices: <none>
# 显示raid的详细信息
[root@zabbix ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Jan 5 16:21:15 2018
Raid Level : raid0
Array Size : 4190208 (4.00 GiB 4.29 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Fri Jan 5 16:21:15 2018
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 128K
Consistency Policy : unknown
Name : zabbix.leistudy.com:0 (local to host zabbix.leistudy.com)
UUID : 76b65754:84b7728f:e83f8c0c:b8d25a39
Events : 0
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
# 创建文件系统及是挂载使用
[root@zabbix ~]# mkfs.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=32 blocks, Stripe width=64 blocks
262144 inodes, 1047552 blocks
52377 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 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
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
[root@zabbix ~]# mkdir /backup
[root@zabbix ~]# mount /dev/md0 /backup/
[root@zabbix ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos_docker--package-root 18G 2.5G 15G 15% /
devtmpfs 903M 0 903M 0% /dev
tmpfs 913M 0 913M 0% /dev/shm
tmpfs 913M 8.7M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sda1 497M 124M 373M 25% /boot
tmpfs 183M 0 183M 0% /run/user/0
/dev/md0 3.9G 16M 3.7G 1% /backup
[root@zabbix ~]# mkdir /backup/testfolder
[root@zabbix ~]# touch /backup/file1
# 创建一个RAID-5
[root@zabbix ~]# mdadm -C -n 3 -l raid5 -a yes -c 128K /dev/md1 /dev/sdd /dev/sde /dev/sdf
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
[root@zabbix ~]# cat /proc/mdstat
Personalities : [raid0] [raid6] [raid5] [raid4]
md1 : active raid5 sdf[3] sde[1] sdd[0]
4190208 blocks super 1.2 level 5, 128k chunk, algorithm 2 [3/2] [UU_]
[=================>...] recovery = 88.5% (1856376/2095104) finish=0.0min speed=206265K/sec
md0 : active raid0 sdc[1] sdb[0]
4190208 blocks super 1.2 128k chunks
# 创建一个RAID-10
[root@zabbix ~]# mdadm -C -n 2 -l raid1 -a yes -c 128K /dev/md0 /dev/sdb /dev/sdc
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@zabbix ~]# mdadm -C -n 2 -l raid1 -a yes -c 128K /dev/md1 /dev/sdd /dev/sde
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
[root@zabbix ~]# mdadm -C -n 2 -l raid0 -a yes -c 128k /dev/md2 /dev/md0 /dev/md1
mdadm: invalid chunk/rounding value: 128k
[root@zabbix ~]# mdadm -C -n 2 -l raid0 -a yes /dev/md2 /dev/md0 /dev/md1
mdadm: /dev/md0 appears to contain an ext2fs file system
size=4190208K mtime=Fri Jan 5 16:27:35 2018
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.
[root@zabbix ~]# mdadm -D /dev/md2
/dev/md2:
Version : 1.2
Creation Time : Fri Jan 5 16:33:52 2018
Raid Level : raid0
Array Size : 4188160 (3.99 GiB 4.29 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Fri Jan 5 16:33:52 2018
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Consistency Policy : unknown
Name : zabbix.leistudy.com:2 (local to host zabbix.leistudy.com)
UUID : 7a0186ef:7281a804:78aece49:20d0f0ae
Events : 0
Number Major Minor RaidDevice State
0 9 0 0 active sync /dev/md0
1 9 1 1 active sync /dev/md1
# 测试是否成功, 略去创建文件系统和挂载步骤
[root@zabbix ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos_docker--package-root 18G 2.5G 15G 15% /
devtmpfs 903M 0 903M 0% /dev
tmpfs 913M 0 913M 0% /dev/shm
tmpfs 913M 8.7M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sda1 497M 124M 373M 25% /boot
tmpfs 183M 0 183M 0% /run/user/0
/dev/md2 3.9G 16M 3.7G 1% /mnt/raid10
[root@zabbix ~]# touch /mnt/raid10/file2; mkdir /mnt/raid10/testfoulder
# 停止md设备: mdadm -S /dev/mdN