raid
2016年05月26日

概述

磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。
磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。
磁盘阵列还能利用同位检查(Parity Check)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。
硬件raid
需要主板raid芯片或者独立的raid卡支持,并且内核需要编译进去raid硬件的驱动
开机进bios,修改硬盘类型创建raid.

软件raid

mdadm

mdadm --create --auto=yes /dev/md0 --raid-devices=2 --level=1 /dev/sdx /dev/sdy

注意:末尾的设备列表的第一个设备里的内容会覆盖后续设备的内容.
所以,如果需要恢复数据内容,一定要将有数据的设备放在第一个!!!

# 查看状态
mdadm --detail /dev/md0
# 关闭raid
mdadm --stop /dev/md0 

假设sda完好无损,sdb无法使用.换上一块新的硬盘.

mdadm --stop /dev/md0
mdadm --create --auto=yes /dev/md0 --raid-devices=2 --level=1 /dev/sda /dev/sdb

整个硬盘的所有数据会完整的复制到sdb上(包括分区结构).类似dd
例如:
测试在raid创建完成后,fdisk /dev/md0 创建多个分区,并在里边添加文件
然后重启删掉sdb硬盘,添加一块新的硬盘重新构建raid1.
构建完成时,md0的所有分区(md0p1,md0p2…md0pn)和分区内的数据自动恢复

如果使用板载raid1,应该是当做一个硬盘处理,安装的时候并无不同。
注意编译内核的时候,选择合适的Intel Raid驱动。(dmesg看sda怎么来的,实在不行,使用genkernel)
如果使用软raid,可以参考gentoo的官方文档,需要把grub 分别 install到两个硬盘才可以
导出分区表
sfdisk -d /dev/sda sda_table.txt

恢复分区表
sfdisk /dev/sda < sda_table.txt

BUG解决

软Raid创建的时候出现

mdadm -C --verbose /dev/md0 -l0 -n11 /dev/sd[bcdefghijkl]

mdadm: super1.x cannot open /dev/sdb: Device or resource busy
mdadm: failed container membership check
mdadm: device /dev/sdb not suitable for any style of array

用一下命令可以解决:

ls /dev/md*
/dev/md127

然后停止对应的md设备:

mdadm --stop /dev/md127

意思就是停止Raid,停止先前创建的,停止Raid后不提示就用上面的命令md127是生成Raid重启后有的