1.什么是RAID?
RAID是容错廉价磁盘阵列,可以将多个小磁盘整合为一个较大的磁盘设备,不仅可以扩大磁盘的容量,还可以实现数据保护。
2.RAID等级
RAID根据等级的不同,实现的功能和性能也有所不同
RAID0 至少需要两块磁盘,在写数据前现将数据分为等大小的区块(chunk),然后将数据交叉存放到不同的设备中。优点是数据的读写性能好,缺点是如果有一块磁盘的数据损毁,整个文件就损毁了。
RAID1 镜像模式,可以实现数据的完整备份,写数据的时候,将同一份数据完整的写到两块不同的磁盘上,磁盘的空间利用率为50%,读性能好,写性能较差。最大的优点是可以实现数据的完整备份。
RAID 1+0 需要四块磁盘,先用两块磁盘实现RAID1,再用两个RAID1实现RAID0
RAID 0+1 需要四块磁盘,先用两块磁盘实现RAID0,再用两个RAID1实现RAID0
RAID5 至少需要三块以上的磁盘实现,当任何一块磁盘有数据损毁的时候,可以通过同位检查码(parity)将数据恢复。举个例子 1+2=3,3可以看做是parity,当数据1损毁的时候,可以通过3-2=1得到损毁的数据(当然,具体实现肯定要比这复杂)。注意RAID5仅仅支持一块磁盘的损毁情况。
3.RAID的预备磁盘
为了可以更快的抽换损毁的磁盘,可以准备预备磁盘,该磁盘平时不被RAID使用,当有数据损毁的时候,这块磁盘可以被主动拉入磁盘阵列替换损毁的磁盘。如果支持热插拔,则可以在线替换,不同关机。
4.软件磁盘阵列
平时生产环境中使用的都是硬件磁盘阵列,磁盘阵列的管理通过磁盘阵列卡中的芯片实现,性能很好,缺点是磁盘阵列卡一般都很贵。
软件磁盘阵列可以通过软件mdadm实现,但是会消耗较多的系统资源,性能较差。软件磁盘阵列的设备名为/dev/md#,我们可以通过软件磁盘阵列达到学习的目的。
5.软件磁盘阵列的设置
下面我们通过mdadm来演练一下,达到学习的目的。
mdadm的格式为
mdadm --detail /dev/md# #查看某个RAID设备的详细信息
mdadm --create --auto=yes /dev/md# --level=N --raid-devices=N
--spare-devices=N
具体参数的含义:
--create #创建RAID设备
--auto=yes #后面指定软件磁盘阵列设备
--level=N #设置级别 建议只是用0 1 5
--raid-devices=N #设置几个磁盘设备作为RAID设备
--spare-devices=N #设置几个磁盘作为预备设备
下面实际演练一下,不实际操作永远得不到直观的经验,马哥的名言。。。。。。
mdadm --create --auto=yes /dev/md0 --level=1 --raid-device=2 --spare-devices=1 /dev/sda{9,10,11}
mdadm --detail /dev/md0
格式化RAID设备并且挂载
mke2fs -j /dev/md0
mkdir /mnt/raid
mount /dev/md0 /mnt/raid
df /mnt/raid #查看一下该设备我们可以看到设备的容量是100M ,因为我们创建的是RAID1设备,另一个100M的分区是作为镜像存在的。
下面我们模拟损毁一块磁盘,来实现热插拔的功能
mdadm --manage /dev/md0
--add 设备 #添加设备
--remove 设备 #删除设备
--fail 设备 #模拟损毁后面的设备
mdadm --manage /dev/md0 --fail /dev/sda9 #很显然9换下去了,11换上来了。
下面将出错的磁盘移除
mdadm --manage /dev/md0 --remove /dev/sda9
6.如何正确的关闭RAID设备
关闭RAID设备不能简单的将其分区删掉,必须按照步骤,否则会是文件系统出错
umount /mnt/raid #先卸载
sed -i "/^\/dev\/md0/d" /mnt/raid #如果设置了自动挂载,将/mnt/raid哪一行删掉
mdadm --stop /dev/md0 #关闭raid设备
cat /proc/mdstat #确实不存在任何的数组设备
vim /etc/mdadm.conf #将开头的ARRAY那一行注释掉。