假设我有一个来自两个分区的软件raid1arrays。 我从计算机中取出一个硬盘,并将其放入另一台计算机,并将一些数据复制到镜像分区。
当我把硬盘放回原来的位置时会发生什么? 新的数据会被镜像到另一个驱动器上吗? 如果是,控制器如何检查/注意驱动器上有新的数据? 当然,它不能在每次启动时检查整个分区。
另外,当我在与上面相同的场景中删除文件时会发生什么? 它会被从其他驱动器删除,还是会被复制回来?
这是在一台Ubuntu机器上,通过将硬盘取出,我的意思是这台计算机在完成时完全closures,而且只有在硬盘恢复正常后才能重新启动。
如果raid控制器不能识别这个变化,因为在这个过程中电源是closures的,有没有办法指示它重buildarrays? 比方说,raid是从/ dev / sda1和/ dev / sdb1构build的,我closures了计算机,然后拔出sdb驱动器,将数据复制到它,然后放回去,现在我要指示控制器重新构build数组,使用/ dev / sdb1“作为主”。
关于这个问题的两个答案是失败的,重build是正确的,希望这将会发生。 这是最好的情况。
另一种可能性是软件没有注意到,然后它仍然认为驱动器是同步的。 (例如,如果您在closures电源的情况下执行此特技,则可能发生这种情况)最终结果很可能是损坏,唯一的修复方法是从备份进行格式化和恢复。
请记住,RAID在磁盘级别工作,它不知道关于文件系统的任何事情。 只是一堆行业。 当文件系统请求块10时,RAID层知道块10被存储在disk1和disk2的块10上。 不知何故,它会select一个磁盘或另一个磁盘,并读取块10.除了因为修改磁盘背后的磁盘,磁盘1和磁盘2上的块10是不同的。 哎呀。 您可以预期在每个块的基础上混合使用disk1和disk2,包括用于存储文件系统元数据的块。
我build议你最好的select,从这个恢复,鉴于格式和从备份恢复不是一个选项:
(a)立即映像两个驱动器。 备份很重要。 或者,您可能只想在副本上工作。
(b)如果错误之后arrays还没有处于读/写模式,只需拉动修改过的驱动器即可。 重新build立一个新的空白驱动器。
(c)如果arrays处于读/写模式,则select一个驱动器并将其从arrays中取出。 重build到一个新的驱动器。
(d)如果你完全不关心哪个驱动器,(当然用你的arrays号代替X):这迫使重新同步。
echo repair > /sys/block/mdX/md/sync_action
(e)在现在重build的数组上强制fsck。
(f)尽你所能地validation你的数据。 例如,运行debsums来检查操作系统的完整性,为没有MD5总和的东西提供所有需要的包文件。
请注意,驱动器需要空白,或者至less擦除所有的RAID信息,否则重build将无法正常工作。
将驱动器从活动的RAIDarrays断开连接时,将在其configuration中看到该驱动器失败。 当您插入一个新的驱动器(或同一个驱动器)时,它会将其视为arrays中的“新build”,并从已知的剩余驱动器中重build内容,因此对内容所做的任何更改都将被覆盖。 如果在arrays处于脱机状态时对驱动器执行此操作,则所做的更改将打乱arrays控制器用来跟踪更改的校验和,同样会看到驱动器失败并尝试重build。
如果要将文件复制到arrays中,则需要通过控制器(不pipe是软件还是硬件)进行操作。
这是一个Linux或Windows的问题? 你的具体实现是什么?
通常情况下,被删除的驱动器是失败的,当添加回来,你必须“不公正”。 这通常意味着发生故障的磁盘将使用来自工作磁盘的所有数据重新初始化。 所以,从本质上来说,在这种情况下,对所删除的磁盘所做的所有更改可能都会丢失
通常,当arrays处于活动状态时,将磁盘从RAID-1arrays中拔出时,arrays将被视为不同步。
如果您重新插入已取出的磁盘,它将以与插入一个全新磁盘的过程大致相同的过程进行 – 活动驱动器的内容将被逐个复制,直到新驱动器完全相同重复,然后arrays将回到它的“正常”操作状态作为活RAID-1arrays。
据推测,你是问arrays是否会检测到这是最近被删除的驱动器,并以某种方式简化了同步过程。 答案是否定的 。 控制器将不得不重新复制一切 。
请注意,如果在卸下驱动器时arrays不在线,则通常可以安全地重新连接驱动器,然后使arrays联机,而无需重新同步。
你的磁盘arrays将被破坏,因为两个磁盘中的文件系统将有不同的数据,而且当系统第一次尝试在磁盘的一个分区中写入新文件时,它不仅会弄乱文件系统的表,数据也在其中。
如果你有mdadm raid 1和你开车a和b
1)closures服务器A 2)将驱动器B放入服务器B 3)使用mdadm写入服务器B中的驱动器B 4)closures电源B 5)使用A和B引导服务器A.
最有可能发生的事情是它会注意到A和B校验和是不同的,并且用B开始数组,并且A将被认为是错误的 – 因为B的校验和将是更近的。
然后你将A添加到数组中,B将被复制到A上。
我不知道你为什么要这么做。