raid
RAID
RAID是用于增加数据存储的性能和可靠性的技术。全程为Redundant Array of Inexpensive Disks(廉价磁盘冗余阵列)
- RAID 0 - strping
- RAID 1 - mirroring
- RAID 5 - striping with parity
- RAID 6 - striping with double parity
- RAID 10 - combining mirroring and striping
准备
mdadm目前是Linux标准RAID管理工具, 能够支持多种模式,可以对RAID进行创建,管理,添加和移除设备等,还能查看RAID设备的详细信息。功能非常强大。
1 | $yum install mdadm -y |
devicemapper 也能创建RAID设备.
用dd创建4个镜像作为loop设备
1 | $dd if=/dev/zero of=disk1.img bs=512 count=4096000 |
RAID level 0 – Striping
Raid 0 将数据进行条带化,同时向多个磁盘(至少2个)写数据.不做数据冗余,理想的情况,每个磁盘使用单独的控制器管理。
优点
1 | mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/loop2 /dev/loop3 |
查看结果
1 | $fdisk -l |
devicemapper
1 | // 创建4设备组成的raid0设备,16384000是4个设备总的Sector数量, 0 是每个设备的偏移量 |
查看结果
1 | $lsblk |
RAID level 1 – Mirroring
RAID 1 数据存储两次,如果一个drive挂了,控制器会使用另外一个drive或者直接拷贝另一个drive的数据给它。
RAID 1的优缺点很明显,值得一提的的是,它不能保证热交换磁盘,也就是说,当一块盘坏了之后,需要将计算机停机,然后才能更换磁盘。
mdadm
1 | $mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/loop2 /dev/loop3 |
devicemapper
devicemapper中mirror与raid1是有差别的
1 | // 4096000是单个设备的sector数量,因为mirror没有扩大容量,2是设备数量, - 表示没有metadata 设备 |
RAID level 5
最为普遍的RAID方式。要求至少3个drive,其中一个drive的一个磁盘作为奇偶校验盘,其他块做striping。所有奇偶校验盘会广泛分布在所有drive上。当有某个盘挂掉后,可以利用其他块以及奇偶校验盘来恢复数据,但如果同一个块中有两个设备挂掉,那么整个RAID就挂了。也就是说,RAID5能够支持单drive失败。
RAID5的优点是兼顾了读写性能和安全性,能够支持单drive的失败情况。缺点在于实现比较复杂,恢复数据比较慢,如果在恢复的过程中其他drive也发生故障,那么整个RAID就挂了。
mdadm
1 | // spare device指定备用磁盘,创建3块盘的RAID5 |
查看信息
1 | `$mdadm --detail /dev/md1/dev/md1: Version : 1.2 Creation Time : Tue Mar 7 16:57:39 2017 Raid Level : raid5 Array Size : 4093952 (3.90 GiB 4.19 GB) Used Dev Size : 2046976 (1999.34 MiB 2096.10 MB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Tue Mar 7 16:57:57 2017 State : clean Active Devices : 3Working Devices : 4 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Name : st-integrat-node00:1 (local to host st-integrat-node00) UUID : 071d2e75:2029e9a2:2e427dd9:d2ab804f Events : 18 Number Major Minor RaidDevice State 0 7 4 0 active sync /dev/loop4 1 7 5 1 active sync /dev/loop5 4 7 6 2 active sync /dev/loop6 3 7 7 - spare /dev/loop7` |
device-mapper
1 | // 这里创建了没有metadata设备的4个设备的raid5,因此大小是3倍磁盘扇区大小,有一个作为奇偶校验。 |
查看结果
1 | // resync 表示正在同步, 4096000/4096000表示全部同步完成。 |
RAID level 6 – Striping with double parity
RAID6改进了RAID5,使用了两块奇偶校验盘,
RAID6的创建过程和RAID5相似.
RAID level 10 – combining RAID 1 & RAID 0
RAID10的优点在于恢复数据速度很快,但相比与RAID5和6,使用设备的代价更大。
mdadm
1 | $mdadm --create --verbose /dev/md1 --level=10 --raid-devices=4 /dev/loop4 /dev/loop5 /dev/loop6 /dev/loop7 |
查看结果
1 | $mdadm --detail /dev/md1 |
device-mapper
1 | // 创建4个drive的RAID10,一半做镜像,所以大小为2倍drive sector大小。 |
查看结果
1 | $dmsetup status test-raid10 |
参考文献
- [1] RAID, https://www.prepressure.com/library/technology/raid/
- [2] Device-mapper, https://wiki.gentoo.org/wiki/Device-mapper
- [3] RAID-Setup, https://raid.wiki.kernel.org/index.php/RAID_setup
- [4] dm-raid, https://www.kernel.org/doc/Documentation/device-mapper/dm-raid.txt
- [5] How To Create RAID Arrays with mdadm on Ubuntu 16.04, https://www.digitalocean.com/community/tutorials/how-to-create-raid-arrays-with-mdadm-on-ubuntu-16-04