RAID1 系统在镜像时如何确定使用哪个磁盘作为源以及使用哪个磁盘作为目标?
例如,假设以下场景:使用两个磁盘 A 和 B 创建了一个 RAID1 阵列。磁盘 C 被替换为 A,并将其添加到阵列中。随着时间的推移,文件被修改。现在 B 被移除,A 被重新插入。
RAID1 系统是否会意识到 A 和 C 不同步?并且 C 比 A 更新?如果不能,有没有一种安全的方法可以避免在插入磁盘 A 时立即启动镜像过程?
编辑:我应该澄清的是,在我的场景中,我假设 A 在被移除时没有发生故障,因此,据我所知,当 RAID1 系统必须决定在它们之间以哪种方式进行镜像时,A 和 C 都不是“脏的”。 (我假设没有位图,但我知道这可能相关。)
答案1
实际情况是,两个磁盘同时写入,交替读取。这是一个多主系统,由此可以实现镜像带来的读取性能提升。
当一个卷损坏时,阵列被称为degraded
。然后您添加一个新磁盘;RAID 控制器知道此驱动器不包含其卷部分(它是dirty
),并且阵列开始从阵列中的其他地方复制它应该存储的数据(此过程称为rebuilding
);对于 RAID 1,只有一个其他位置可以复制它。重建完成后,新卷是clean
,系统再次具有容错和多主功能(normal
)。
如果在重建完成之前移除或损坏了另一个原始磁盘,则数据会丢失(如果移除但没有损坏,则可以轻松恢复)。但是,如果在重建完成后移除该磁盘并添加新磁盘,则阵列将经历完全相同的过程,从降级到重建正常。
虽然这稍微简化了一点,但它代表了磁盘发生故障或以其他方式移除和添加的绝大多数情况。例如,通常也可能将卷的某些部分标记为脏。
答案2
您正在谈论使用 的软件镜像mdadm
。您没有写是否使用位图。我假设您确实使用了位图(在另一种情况下,每当磁盘丢失/重新连接/无论发生什么情况,完整的重新镜像都会从第一个块开始)。
对于位图来说,这些位图将存储在每个磁盘中 - 作为镜像磁盘本身上的内部位图,或者存储在外部位图上(如果您指定了一个) - 再次,这是每个磁盘的。
现在这也是你问题的答案:一开始,所有位都被标记为“脏” - 即需要重新同步。每个位代表物理磁盘上的一个块。因此这些位图的状态很重要。
您可以使用 查看这些位图的状态cat /proc/mdstat
。
请注意,如果您创建镜像,则创建位图不是标准操作。您可以随后使用 进行更改mdadm --grow
。
答案3
如果您在任何时候使用一个驱动器启动它,它通常会在驱动器上有一个类似写入计数器的东西,因此它会选择较高的一个作为主驱动器。
因此,如果您将驱动器 A 取出一周,但继续使用驱动器 B 运行,那么它会在这段时间内进行一些写入,并具有更高的写入计数器。然后它将成为主驱动器。
一些控制器将根据上次启动时的情况进行判断。如果某个驱动器丢失了一周,然后又重新出现,则现在被认为不同步。
如果您要同时移除两个驱动器,则将取决于控制器将执行的操作。最有可能只是显示您可以导入的外部阵列。