RAID1系统如何确定使用哪个磁盘作为源,以及在镜像时使用哪个磁盘作为目的地?
例如,假定以下情况:使用两个磁盘A和B创buildRAID1arrays。将磁盘Creplace为A,并将其添加到arrays中。 随着时间的推移,文件被修改了。 现在B被删除,A被重新插入。
RAID1系统是否意识到A和C不同步? 那C是比A更新的? 如果没有,是否有安全的方法来避免磁盘A插入时立即启动镜像过程?
编辑:我应该清楚,在我的情况下,我假设A没有失败,当它被删除,所以,据我所知,neigther A和C是“脏”,当RAID1系统必须决定哪种方式之间镜像。 (我没有假设位图,但我知道这可能是相关的。)
你正在谈论使用mdadm的软件镜像。 你没有写你是否使用位图。 我假设您使用位图(在另一种情况下,每当磁盘丢失/重新连接时,将从第一个块开始重新镜像)。
在位图的情况下,这些位图将被存储在每个磁盘上 – 既可以作为镜像磁盘本身的内部位图,也可以存储在外部位图(如果指定了一个)。
现在这也是你的问题的答案:一开始,所有的位都被标记为“脏” – 即需要重新同步。 每一位代表物理磁盘上的一个块。 所以这些位图的状态很重要。
您可以使用cat /proc/mdstat查看这些位图的状态。
请注意,如果创build镜像,则创build位图不是标准操作。 你可以用mdadm --grow改变它。
会发生什么是两个磁盘串联写入,并交替阅读。 它是一个多主系统,从而导致镜像读取性能的提高。
当一个卷变坏时,这个arrays被认为是degraded 。 然后你添加一个新的磁盘; RAID控制器知道这个驱动器不包含卷的一部分(它是dirty ),并且arrays开始从arrays中的其他地方复制它应该存储到其上的数据(这个过程被称为rebuilding )。 对于RAID 1,只有一个地方可以复制它。 重build完成后,新卷clean ,系统容错,多主机再次normal 。
如果其他原始磁盘在重build完成之前被移除或失败,则会有数据丢失(如果已移除但未死,则可以轻松恢复)。 但是,如果在完成重build并添加新磁盘后将其删除,则arrays将会经历完全相同的降级到重build过程。
尽pipe这代表了绝大多数情况下磁盘出现故障或被删除和添加的情况,但是这个过程稍微简化了一些。 例如,卷的部分通常也可能被标记为脏。