最近做linux上使用mdadm做软raid5,发现一个问题。当raid5失效后,使用参数force可以强制将失效的raid变成降级的raid。这其实是很有用处的,因为当raid失效后数据就不能写入,所以原来数据是没有丢失。所以这个可以避免数据的丢失。
但是在使用中却发现有两点不满意,下面举例说明:使用sda sdb sdc sdd组成raid5,remove sda,raid降级;remove sdb raid降级。
步骤
1:mdadm -A -s -f
可以恢复,恢复后raid组成盘:sdb sdc sdd
2:不做步骤1;如果将sdb移除;使用命令mdadm -A -s -f
可以恢复,恢复后raid组成盘:sda sdc sdd
问题:
sda是造成raid降级的磁盘,如果降级和失效间隔长,那么中间数据变化很大。所以这种方式恢复出来是没有意义的,毕竟数据完成是基本。
查看mdadm代码:Assemble.c:
/* Choose the newest best drive which is not up-to-date, update the superblock and add it.*/
恢复很简单,仅仅选择组成盘修改superblock中的events成最新即可。但是就是这个选择是根据系统中目前存在的进行选择,而没有进一步判断是否是造成失效还是造成降级。
当然,也可以认为这些工作是由用户完成。用户来选择合适的磁盘恢复。
恢复磁盘仅仅修改superblock中的events,其他数据并没有改变。所以造成super