一、什么是RAID:
1、RAID-0(等量模式,stripe):性能最佳
2、RAID-1(映射模式,mirror):完整备份
3、RAID 1+0,RAID 0+1
4、RAID5:性能与数据备份的均衡考虑(重点)
RAID5 怎么工作:
RAID 6 可以支持两颗磁盘损坏
SPare Disk(预留磁盘功能): 为了让系统可以实时的在坏掉硬盘时主动的重建,因此就需要预备磁盘(spare disk)的辅助。所谓的 spare disk 就是一颗或多颗没有包含在原本磁盘阵列等级中的磁盘,这颗磁盘平时并不会被磁盘阵列所使用,当磁盘阵列有任何磁盘损毁时,则这颗 spare disk 会被主动的拉进磁盘阵列中,并将坏掉的那颗硬盘移出磁盘阵列!然后立即重建数据系统。 磁盘阵列的优点:
二、Software,hardware RAID: . 为何磁盘阵列又分为硬件与软件呢? 所谓的硬件磁盘阵列(hardware RAID)是通过磁盘阵列卡来达成阵列的目的。磁盘阵列卡上面有一块专门的芯片在处理 RAID 的任务,因此在性能方面会比较好。在很多任务(例如 RAID 5 的同位检查码计算)磁盘阵列并不会重复消耗原本系统的 I/O 总线,理论上性能会较佳。此外目前一般的中高阶磁盘阵列卡都支持热拔插,亦即在不关机的情况下抽换损坏的磁盘,对于系统的复原与数据的可靠性方面非常的好用。
而软件磁盘阵列主要是通过软件来仿真阵列的任务,因此会损耗较多的系统资源,比如说 CPU 的运算与 I/O 总线的资源等。不过目前我们的个人计算机实在已经非常快速了,因此以前的速度限制现在已经不存在! 我们的 CentOS 提供的软件磁盘阵列为 mdadm 这套软件,这套软件会以 partition 或 disk 为磁盘的单位,也就是说,你不需要两颗以上的磁盘,只要有两个以上的分区(partition)就能够设计你的磁盘阵列了。 此外, mdadm 支持刚刚我们前面提到的RAID0/RAID1/RAID5/spare disk 等!而且提供的管理机制还可以达到类似热拔插的功能,可以线上(文件系统正常使用)进行分区的抽换!使用上也非常的方便!
三、软件磁盘阵列的配置: 也唠叨那么多了,下来我们就来配置一下软件磁盘阵列: 大概步骤:
开始配置: 1、分区
[root@raid5 /]# gdisk /dev/sdb # 通过gdisk命令创建分区,也可使用fdisk
Command (? for help): n # 添加一个新分区
Partition number (1-128, default 1): 1 # 分区号为1
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +1G # 大小为1G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): # GUID号
Changed type of partition to 'Linux filesystem'
#依照此上命令创建四个分区
Command (? for help): P # 查看创建好的分区
.......................// 省略部分
Number Start (sector) End (sector) Size Code Name
1 2048 2099199 1024.0 MiB 8300 Linux filesystem
2 2099200 4196351 1024.0 MiB 8300 Linux filesystem
3 4196352 6293503 1024.0 MiB 8300 Linux filesystem
4 6293504 8390655 1024.0 MiB 8300 Linux filesystem
5 8390656 10487807 1024.0 MiB 8300 Linux filesystem
# 保存退出
[root@raid5 /]# lsblk # 查看磁盘列表
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─cl-root 253:0 0 50G 0 lvm /
├─cl-swap 253:1 0 2G 0 lvm [SWAP]
└─cl-home 253:2 0 47G 0 lvm /home
sdb 8:16 0 20G 0 disk # 看到我们sdb磁盘上已经分出了四个分区
├─sdb1 8:17 0 1G 0 part
├─sdb2 8:18 0 1G 0 part
├─sdb3 8:19 0 1G 0 part
└─sdb4 8:20 0 1G 0 part
└─sdb5 8:21 0 1G 0 part # 第五个是预留磁盘
sr0 11:0 1 1024M 0 rom
2、创建
[root@raid5 /]# mdadm --create /dev/md0 --auto=yes --level=5 --chunk=256K --raid-devices=4 --spare-devices=1 /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4 /dev/sdb5
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
--create:为创建RAID的选项
--auto=yes:决定创建后面接的软件磁盘阵列设备,即md [0-9]
--chunk=256K:决定这个设备的chunk大小,也可以当成 stripe 大小,一般是64K或512K
--raid-devices=4:使用几个磁盘或分区作为磁盘阵列的设备
--spare-devices=1:使用几个磁盘或分区作为备用设备
--level=5:设置这组磁盘阵列的等级,建议只用0、1、5即可
--detail:后面所接的那个磁盘阵列设备的详细信息
[root@raid5 /]# mdadm --detail /dev/md0
/dev/md0: # RAID的设备文件名
Version : 1.2
Creation Time : Thu Nov 7 20:26:03 2019 # 创建时间
Raid Level : raid5 # RAID 的等级
Array Size : 3142656 (3.00 GiB 3.22 GB) # 整组RAID的可用容量
Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB) # 每颗磁盘的容量
Raid Devices : 4 # 组成RAID的磁盘数量
Total Devices : 5 # 包括spare的总磁盘数
Persistence : Superblock is persistent
Update Time : Thu Nov 7 20:26:08 2019
State : clean # 目前这个磁盘阵列的使用状态
Active Devices : 4 # 启动的设备数量
Working Devices : 5 # 目前使用于此阵列的设备数
Failed Devices : 0 # 损坏的设备数
Spare Devices : 1 # 预留磁盘的数量
Layout : left-symmetric
Chunk Size : 256K # 这就是chunk的小区块容量
Name : raid5:0 (local to host raid5)
UUID : facfa60d:c92b4ced:3f519b65:d135fd98
Events : 18
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
2 8 19 2 active sync /dev/sdb3
5 8 20 3 active sync /dev/sdb4
4 8 21 - spare /dev/sdb5 # 看到sdb5作为备用设备在候场区
# 最后五行就是这五个设备目前的状况,RaidDevice 指的是此Raid内的磁盘顺序
[root@raid5 /]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb4[5] sdb5[4](S) sdb3[2] sdb2[1] sdb1[0] # 第一行
3142656 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU] # 第二行
unused devices: <none>
第一行部分:指出 md0 为 raid5 ,且使用了 sdb1,sdb2,sdb3,sdb4,等四颗磁盘设备。每个设备后面的中括号 [] 内的数字为此磁盘在 RAID 中的顺序(RaidDevice);至于 sdb5 后面的 [S] 则代表 sdb5 为 spare 之意。 第二行部分:此磁盘阵列拥有 3142656 个block(每个 block 单位为 1K),所以总容量约为 3GB,使用 RAID 5 等级,写入磁盘的小区块(chunk)大小为 256K,使用 algorithm 2 磁盘阵列演算法。 [m/n] 代表此阵列需要 m 个设备,且 n 个设备正常运行。因此本 md0 需要 4 个设备且这 4 个设备均正常运行。后面的 [UUUU] 代表的是四个所需的设备(就是 [m/n] 里面的 m)的启动情况,U 代表正常运行,若为 _ 则代表不正常。
3、格式化并挂载使用
[root@raid5 /]# mkfs.xfs -f -d su=256k,sw=3 -r extsize=768k /dev/md0 # 要注意,这块格式化的是 md0
meta-data=/dev/md0 isize=512 agcount=8, agsize=98176 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=785408, imaxpct=25
= sunit=128 swidth=384 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=1572864 blocks=0, rtextents=0
[root@raid5 /]# mkdir /srv/raid
[root@raid5 /]# mount /dev/md0 /srv/raid/
[root@raid5 /]# df -TH /srv/raid/ # 看到我们已经挂载成功了
Filesystem Type Size Used Avail Use% Mounted on
/dev/md0 xfs 3.3G 34M 3.2G 2% /srv/raid
4、仿真RAID错误的救援 俗话说“天有不测风云,人有旦夕祸福”,谁也不知道你的磁盘阵列内的设备啥时候会出错,因此了解一下软件磁盘阵列的救援是必须的!下面我们就来模仿一下RAID错误并救援。
[root@raid5 /]# cp -a /var/log/ /srv/raid/ # 先复制一些数据到挂载点
[root@raid5 /]# df -TH /srv/raid/ ; du -sm /srv/raid/* # 看到里面已经有了数据
Filesystem Type Size Used Avail Use% Mounted on
/dev/md0 xfs 3.3G 39M 3.2G 2% /srv/raid
5 /srv/raid/log
[root@raid5 /]# mdadm --manage /dev/md0 --fail /dev/sdb3
mdadm: set /dev/sdb3 faulty in /dev/md0 # 显示已经成为了错误的设备
.............................. // 省略部分内容
Update Time : Thu Nov 7 20:55:31 2019
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 1 # 出错一个磁盘
Spare Devices : 0 # 这里预备已经变为0,说明已经顶替工作了,这里截得有点慢了,不然还是1
............................ // 省略部分内容
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
4 8 21 2 active sync /dev/sdb5 # 这里可以看到sdb5 已经顶替工作了
5 8 20 3 active sync /dev/sdb4
2 8 19 - faulty /dev/sdb3 # sdb3 死掉了
接下来就可以将坏磁盘拔掉,更换新的磁盘了
[root@raid5 /]# mdadm --manage /dev/md0 --remove /dev/sdb3 # 模拟拔掉旧磁盘
mdadm: hot removed /dev/sdb3 from /dev/md0
[root@raid5 /]# mdadm --manage /dev/md0 --add /dev/sdb3 # 插入新磁盘
mdadm: added /dev/sdb3
[root@raid5 /]# mdadm --detail /dev/md0 # 查看
........................... // 省略部分内容
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
4 8 21 2 active sync /dev/sdb5
5 8 20 3 active sync /dev/sdb4
6 8 19 - spare /dev/sdb3 # 我们会发现sdb3 已经作为预备磁盘在此等待了
5、设置开机自启动RAID并自动挂载
[root@raid5 /]# mdadm --detail /dev/md0 | grep -i uuid
UUID : facfa60d:c92b4ced:3f519b65:d135fd98
[root@raid5 /]# vim /etc/mdadm.conf
ARRAY /dev/md0 UUID=facfa60d:c92b4ced:3f519b65:d135fd98
# RAID设备 识别码内容
[root@raid5 /]# blkid /dev/md0
/dev/md0: UUID="bc2a589c-7df0-453c-b971-1c2c74c39075" TYPE="xfs"
[root@raid5 /]# vim /etc/fstab # 设置开机自动挂载
............................ // 省略部分内容
/dev/md0 /srv/raid xfs defaults 0 0
#开头也可填写为UUID
[root@raid5 /]# df -Th /srv/raid/ # 可以进行重启测试
Filesystem Type Size Used Avail Use% Mounted on
/dev/md0 xfs 3.0G 37M 3.0G 2% /srv/raid