xiaohouye 2019-11-07
博文大纲
什么是RAID
Software,hardware RAID
软件磁盘阵列的设置
仿真RAID错误的救援模式
开机自动启动RAID并自动挂载
1.什么是RAID:
1.磁盘阵列全名是“ Redundant Arrays of Inexpensive Disks, RAID ”,英翻中的意思是:容错式廉价磁盘阵列。
2.RAID 可以通过一个技术(软件或硬件),将多个较小的磁盘整合成为一个较大的磁盘设备;而这个较大的磁盘功能可不止是储存而已,他还具有数据保护的功能呢。
3.整个 RAID 由于选择的等级(level)不同,而使得整合后的磁盘具有不同的功能
这种模式如果使用相同型号与容量的磁盘来组成时,效果较佳。
这种模式的 RAID 会将磁盘先切出等量的区块(名为chunk,一般可设置 4K~1M 之间),然后当一个文件要写入 RAID 时,该文件会依据 chunk 的大小切割好,之后再依序放到各个磁盘里面去。
由于每个磁盘会交错的存放数据,因此当你的数据要写入 RAID 时,数据会被等量的放置在各个磁盘上面。
这种模式也是需要相同的磁盘容量的,最好是一模一样的磁盘。
如果是不同容量的磁盘组成 RAID-1 时,那么总容量将以最小的那一颗磁盘为主!这种模式主要是“让同一份数据,完整的保存在两颗磁盘上头”
举例来说,如果我有一个 100MB 的文件,且我仅有两颗磁盘组成 RAID-1 时,那么这两颗磁盘将会同步写入 100MB 到他们的储存空间去。因此,整体 RAID 的容量几乎少了 50%。由于两颗硬盘内容一模一样,好像镜子映照出来一样,所以我们也称他为 mirror 模式
由于两颗磁盘内的数据一模一样,所以任何一颗硬盘损毁时,你的数据还是可以完整的保留下来的!
最大优点 备份
RAID-0 的性能佳但是数据不安全,RAID-1 的数据安全但是性能不佳,那么能不能将这两者整合起来设置 RAID 呢?
RAID 1+0 就是:
(1)先让两颗磁盘组成 RAID 1,并且这样的设置共有两组;
(2)将这两组 RAID 1 再组成一组 RAID 0。这就是 RAID 1+0
RAID 0+1 就是:
(1)先让两颗磁盘组成RAID 0,并且这样的设置共有两组;
(2) 将这两组RAID 0 再组成一组RAID 1 。这就是RAID 0+1
RAID-5 至少需要三颗以上的磁盘才能够组成这种类型的磁盘阵列。
这种磁盘阵列的数据写入有点类似 RAID-0 ,不过每个循环的写入过程中(striping),在每颗磁盘还加入一个同位检查数据(Parity),这个数据会记录其他磁盘的备份数据,用于当有磁盘损毁时的救援。
每个循环写入时,都会有部分的同位检查码(parity)被记录起来,并且记录的同位检查码每次都记录在不同的磁盘,因此,任何一个磁盘损毁时都能够借由其他磁盘的检查码来重建原本磁盘内的数据喔!不过需要注意的是,由于有同位检查码,因此 RAID 5 的总容量会是整体磁盘数量减一颗。
原本的 3 颗磁盘只会剩下(3-1)=2 颗磁盘的容量。
当损毁的磁盘数量大于等于两颗时,这整组 RAID 5 的数据就损毁了。因为 RAID 5 默认仅能支持一颗磁盘的损毁情况
读取性能:优 写入性能:一般 RAID5 :支持1颗损坏 RAID6 :支持2颗损坏
为了让系统可以实时的在坏掉硬盘时主动的重建,因此就需要预备磁盘(spare disk)的辅助。所谓的 spare disk 就是一颗或多颗没有包含在原本磁盘阵列等级中的磁盘,这颗磁盘平时并不会被磁盘阵列所使用,当磁盘阵列有任何磁盘损毁时,则这颗 spare disk 会被主动的拉进磁盘阵列中,并将坏掉的那颗硬盘移出磁盘阵列!然后立即重建数据系统。
当磁盘阵列的磁盘损毁时,就得要将坏掉的磁盘拔除,然后换一颗新的磁盘。
Software,hardware RAID:
系统资源,比如说 CPU 的运算与 I/O 总线的资源等。不过目前我们的个人计算机实在已经非常快速了,因此以前的速度限制现在已经不存在!
我们的 CentOS 提供的软件磁盘阵列为 mdadm 这套软件,这套软件会以 partition 或 disk 为磁盘的单位,也就是说,你不需要两颗以上的磁盘,只要有两个以上的分区(partition)就能够设计你的磁盘阵列了。
此外, mdadm 支持刚刚我们前面提到的RAID0/RAID1/RAID5/spare disk 等!而且提供的管理机制还可以达到类似热拔插的功能,可以线上(文件系统正常使用)进行分区的抽换
软件磁盘阵列的设置:
配置RAID
(给服务器添加一块硬盘,创建5个分区(也可以添加5块硬盘每块一个分区))
1.[ ~]# gdisk /dev/sdb //进入硬盘 Creating new GPT entries. 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): Changed type of partition to ‘Linux filesystem‘ 按照上面一样配置再建立4块分区
Command (? for help): p //查看分区表信息 Disk /dev/sdb: 41943040 sectors, 20.0 GiB Logical sector size: 512 bytes Disk identifier (GUID): 6A978C77-4505-4345-ABEC-AE3C31214C6D Partition table holds up to 128 entries First usable sector is 34, last usable sector is 41943006 Partitions will be aligned on 2048-sector boundaries Total free space is 31457213 sectors (15.0 GiB) 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 Command (? for help): wq //保存退出
[ ~]# mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=4 --spare-devices=1 /dev/sd[b-e]1 命令参数: --create #表示要创建raid --auto=yes /dev/md0 #新建立的软件磁盘阵列设备为md0,md序号可以为0-9 --level=5 #磁盘阵列的等级,这里表示创建是的raid5 --raid-devices #添加作为磁盘阵列用的磁盘的块数 --spare-devices #添加作为预备(spare)磁盘的块数 /dev/sd[b-f]1 #磁盘阵列所使用的设备,还可写成/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
[ ~]# cat /proc/mdstat #查看RAID的配置文件 Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdd1[4] sde1[3](S) sdc1[1] sdb1[0] 41908224 blocks super 1.2 level 5, 512k chunk, algorithm 2** [3/3] [UUU]** unused devices: <none> [ ~]# mdadm -D /dev/md0 #查看RAID配置文件详细信息 /dev/md0: Version : 1.2 Creation Time : Sun Jun 30 10:43:20 2019 ** Raid Level : raid5** #阵列类型为raid5 ………… #省略部分内容 Active Devices : 3 #活跃的磁盘数目 Working Devices : 4 #所有的磁盘数目 Failed Devices : 0 #故障的磁盘数目 Spare Devices : 1 #热备份的磁盘数目
Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 4 8 49 2 active sync /dev/sdd1 3 8 65 - spare /dev/sde1 #一块磁盘用于热备份
[ ~]# mkfs.xfs /dev/md0 #格式化磁盘 [ ~]# mkdir /a [ ~]# mount /dev/md0 /a #挂载磁盘 [ ~]# df -hT #查看磁盘大小 ………… #省略部分内容 /dev/md0 xfs 40G 33M 40G 1% /a
[ ~]# vim /etc/fstab #编写文件开机自动挂载 ………… #省略部分内容 /dev/md0 /a xfs defaults 0 0
[ ~]# cd /a [ a]# touch 123.txt 456.txt #创建测试文件 [ a]# mdadm /dev/md0 -f /dev/sdb1 #模拟sdb1损坏 mdadm: set /dev/sdb1 faulty in /dev/md0 [ a]# mdadm -D /dev/md0 #查看/dev/md0详细信息 ………… #省略部分内容 Number Major Minor RaidDevice State 3 8 65 0 spare rebuilding /dev/sde1 1 8 33 1 active sync /dev/sdc1 4 8 49 2 active sync /dev/sdd1 0 8 17 - faulty /dev/sdb1 [ a]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdd1[4] sde1[3] sdc1[1] sdb1[0](F) 41908224 blocks super 1.2 level 5, 512k chunk, algorithm 2 [**3/3] [UUU]** unused devices: <none> [ a]# ll #查看测试的文件 总用量 0 -rw-r--r--. 1 root root 0 6月 30 11:06 123.txt -rw-r--r--. 1 root root 0 6月 30 11:06 456.txt
[ a]# mdadm /dev/md0 -r /dev/sdb1 #移除已损坏的磁盘 mdadm: hot removed /dev/sdb1 from /dev/md0 [ a]# mdadm -D /dev/md0 #查看/dev/md0详细信息 ………… #省略部分内容 Number Major Minor RaidDevice State 3 8 65 0 active sync /dev/sde1 1 8 33 1 active sync /dev/sdc1 4 8 49 2 active sync /dev/sdd1 [ a]# mdadm /dev/md0 -a /dev/sdb1 #添加一块硬盘 mdadm: added /dev/sdb1 [ a]# mdadm -D /dev/md0 #查看/dev/md0详细信息
服务器再添加一块磁盘,重启之后再加上:
[ a]# mdadm /dev/md0 -a /dev/sdf1 mdadm: added /dev/sdf1 [ a]# mdadm -D /dev/md0 ………… #省略部分内容 Number Major Minor RaidDevice State 3 8 65 0 active sync /dev/sde1 1 8 33 1 active sync /dev/sdc1 4 8 49 2 active sync /dev/sdd1 5 8 17 - spare /dev/sdb1 6 8 81 - spare /dev/sdf1
[ a]# mdadm /dev/md0 -G -n4 #-n用来指定raid中活动盘的数量。最好保证要有足够的热备盘添加。 [ a]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sun Jun 30 10:43:20 2019 Raid Level : raid5 Array Size : 41908224 (39.97 GiB 42.91 GB) #磁盘容量已将发生变化 Used Dev Size : 20954112 (19.98 GiB 21.46 GB) Raid Devices : 4 Total Devices : 5 Persistence : Superblock is persistent Update Time : Sun Jun 30 11:22:00 2019 State : clean #构建完成 ………… #省略部分内容 Number Major Minor RaidDevice State 3 8 65 0 active sync /dev/sde1 1 8 33 1 active sync /dev/sdc1 4 8 49 2 active sync /dev/sdd1 6 8 81 3 active sync /dev/sdf1 5 8 17 - spare /dev/sdb1 #此时raid中已经由四块硬盘了
[ a]# df -hT #查看之后,容量并没有发生变化 ………… #省略部分内容 /dev/md0 xfs 40G 33M 40G 1% /a [ a]# resize2fs /dev/md0 #(resizefx适用于ext3,ext4等文件系统不适用于xfs文件系统) #resize2fs命令用于更新磁盘 resize2fs 1.42.9 (28-Dec-2013) resize2fs: Bad magic number in super-block 当尝试打开 /dev/md0 时 找不到有效的文件系统超级块. [ a]# xfs_growfs /dev/md0 #对文件系统进行扩容 meta-data=/dev/md0 isize=512 agcount=16, agsize=654720 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=10475520, imaxpct=25 = sunit=128 swidth=256 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=5120, version=2 = sectsz=512 sunit=8 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 10475520 to 15715584 [ a]# df -hT 文件系统 类型 容量 已用 可用 已用% 挂载点 ………… #省略部分内容 /dev/md0 xfs 60G 33M 60G 1% /a #再次查看容量已经发生变化