为了避免关键区数据的丢失,mdadm有以下措施: 1. 关闭对阵列关键区的写操作; 2. 在重新条带化之前备份关键区的信息; 3. 若发生掉电等情况时,可以继续之前的重新条带化; 4. 最后作废备份的关键区信息,回复对关键区的写操作; Mdadm提供了一个机制用于对重新条带化过程中发生了中断的阵列恢复关键区。 例如为RAID5增加磁盘这样的动作就需要重新条带化,重新条带化和重塑是不一样的概念,重新条带化需要改变关键区的信息,因为整个RAID阵列的底层数据分布和架构都发生了改变,但是重塑却不同,它不会改变阵列的大小(例如Chunk Size等),不会改变关键区信息,重塑发生在磁盘的扇区上,用于对阵列中的磁盘的数据分布进行调整。
4.18 在线拉伸RAID5: 本小节主要讲如何在线拉伸RAID5阵列,即在线地为RAID5增加磁盘数,以实现RAID阵列的容量增长。 在2.6.17和更新的linux内核中,软件级RAID5才能在文件系统在线的情况下为阵列增加磁盘。在增加磁盘之前需要为原阵列中的数据做重塑(Reshaping),RAID5的重塑过程将比较慢,可以通过以下的内核参数优化重塑的速度,这是RAID数据传输的最小值限制,默认是1000: # echo 25000 > /proc/sys/dev/raid/speed_limit_min 首先先向RAID5阵列添加一块新的磁盘: # mdadm --add /dev/md0 /dev/hda8 重塑RAID5阵列: # mdadm --grow /dev/md0 --raid-devices=4 监控重塑的过程和估算重塑完成的时间: # watch -n 1 'cat /proc/mdstat' 拉伸RAID阵列上的文件系统: # resize2fs /dev/md0
4.19 关键扇区备份: 重塑操作的第一阶段就是对震了关键区的备份,默认地,关键区将备份到阵列的空闲磁盘上,如果没有空闲磁盘则会备份到内存中,但是关键区备份在内存是不够安全的,一旦发生断电,内存中的关键区备份也将损毁。 可以用以下命令在重塑阵列的过程中将关键区备份到一个文件中: # mdadm --grow /dev/md0 --raid-devices=4 --backup-file=/tmp/md0.tmp 当磁盘重新条带化完成时,mdadm将自动删除该关键区备份文件。 若在重新条带化对关键区进行操作的时候发生了系统崩溃或掉电的情况,则可以利用关键区备份文件进行恢复,命令如下: # mdadm --assemble /dev/md0 --backup-file=/tmp/md0.tmp /dev/sd[a-d]
4.20 在RAID5中拉伸磁盘的大小: 本小节要讲的是如何将一个RAID5阵列中的每一个磁盘都替换成更大的磁盘,或者更换老化的磁盘,做这样的拓展的操作思路是这样的,首先在阵列中停用某块磁盘,然后把磁盘拆下来,换上一个更大容量的新磁盘,将新磁盘添加到阵列中,此时将进行RAID的修复动作,等到修复完成时,再用以上的方法替换掉其余两块磁盘,至此,RAID阵列中的全部磁盘都换成了大容量的新磁盘。下一步是拉伸RAID阵列,之后是拉伸RAID上的文件系统。 值得注意的时,在新磁盘还没有完成数据修复之前,千万不要急着停用下一块磁盘,我们知道,RAID5阵列坏了2个磁盘便彻底损坏了。 停用RAID5阵列中的/dev/vg0/disk1: # mdadm --manage /dev/md0 --fail /dev/vg0/disk1 --remove /dev/vg0/disk1 将新磁盘添加到RAID5阵列: # mdadm --manage /dev/md0 --add /dev/vg0/disk2 监控数据修复的过程: |