为什么一个RAID 10设备需要初始化?

当创build一个Linux软件raid设备作为raid10设备,我很困惑,为什么它必须被初始化。 同样的问题适用于raid1或raid0,真的。

最终大多数人会把某种文件系统置于其上,文件系统不应该承担磁盘数据的任何状态。 每次写操作都会影响到raid10或raid1设置中的两个磁盘,其中写入了N个镜像。 任何突袭10初始化应该没有任何理由,因为它会随着时间的推移而发生。

我可以理解为什么对于需要奇偶校验的RAID5 / 6设置,但是即使如此,这似乎也可以懒散地完成。

这只是让人们感觉好点吗?

作为镜像的RAID 1依赖于镜像中的所有磁盘是彼此完全相同的副本。 拿你的随机硬盘,和另一个随机硬盘,你可能有不同的数据,从而违反了这个推定。 这就是为什么需要初始化。 它只是将第一个驱动器的内容复制给其他人。 请注意,在某些情况下,您可以避免初始化驱动器 – 通常情况下,全新的设备已经遍布各处,因此您可以忽略它。 mdadm选项--assume-clean做到这一点,但警告你:

  --assume-clean 

告诉mdadm数组已经存在,并已知是干净的。 在尝试从主要故障中恢复时可能很有用,因为除非实际写入数组,否则不会影响任何数据。 如果要避免初始重新同步,也可以在创buildRAID1或RAID10时使用,但不推荐这种做法 – 虽然通常是安全的。 只有在你真的知道你在做什么的时候才使用它。

如果你不这样做,驱动器和读取之间会有差异,不知道驱动器将读取什么。 您应该对文件系统非常安全(但是请注意下文),因为在您读取设备中的任何内容之前,大多数情况下您可能会写入,然后您就清楚了。

请注意,至lessLinux的mdadm将在后台初始化数组。 你可以在第一秒之内高兴地创buildFS。 性能将会受到影响,直到初始化完成,但这就是一切。

但:

a)在执行mkfs一些实用程序会检查驱动器上是否有某些东西。 虽然这只涉及一些着名的驱动区域,但是在你写任何东西之前它会读取,从而使你处于危险之中。

b)如果您定期重新同步arrays,则RAID设备对您的FS不了解。 它只是读取每个设备的每个块,并比较这些块。 如果你没有使用写入时复制的FS(例如ZFS或BTRFS),并且永远不会填满你的FS,那么对于一个块从FS的angular度来看,多年来一直保持未初始化是完全合理的。

为什么与RAID1设备重新同步?

出于同样的原因,您需要与RAID5设备或任何其他级别(RAID0除外)重新同步。 它读取所有数据并比较/validationRAID校验和(在RAID 5或6中)。 如果有一点被翻转(因为HD内存自动翻转,因为你和你的5邻居的手机只是偶然地干扰这个特定区域的盘片,无论什么),它会检测到不一致,但将无法帮你。 如果OTOH,其中一个硬盘驱动器会简单地报告“我无法读取该块”,这很可能是一个故障的驱动器,你只是早期检测到故障,并减less了你在降级模式下运行的时间(从驱动器故障,而不是从你注意到)。 如果一个驱动器出现故障,Raid将不会帮助您,如果您没有注意到当月第一次故障,那么另一个驱动器将失败。

RAID10

现在,对于RAID10,以上全部成立。 毕竟RAID10只是一个聪明的方式,告诉我“我将两个RAID1设备放入RAID0对”。

警告:

这是所有未定义的行为。 为什么我在Linux上使用mdadm进行检查,其他软件的RAID实现可能会有所不同。 我使用的其他版本的Linux内核和/或mdadm工具也可能会有不同的performance。

请记住,RAID 1是一面镜子,而RAID 10则是一面镜子。

问题是,每个镜像中的哪个磁盘上的数据是有效的? 在新创build的arrays中,这是不可知的,因为磁盘可能有不同的数据。

请记住,RAID的运行水平非常低, 它对文件系统或磁盘上可能存储的任何数据一无所知。 甚至可能没有正在使用的文件系统。

因此,这些arrays中的初始化包括将每个镜像中的一个磁盘的数据原样复制到另一个磁盘。

这也意味着该数组从创build时刻开始就可以安全使用,并且可以在后台初始化; 大多数RAID控制器(和Linux mdraid)都有这个选项,或者自动执行。

简单地说,因为从一开始就不会有两个新的磁盘相互镜像完美的副本。

他们需要变成彼此的完美副本。

另外,初始化包括设置具有关于arraysconfiguration的信息的元数据超级块。

/ proc / mdstat文件应该告诉你设备已经启动,镜像正在被重build,并且ETA完成了重build。 重build是使用空闲的I / O带宽完成的。 所以,你的系统应该仍然是响应式的,尽pipe你的磁盘LED也会显示很多活动。

重build过程是透明的,所以即使镜子正在重build,您也可以使用该设备。

需要初始同步,因为在定期检查期间,镜像之间的任何差异都会显示为错误。

你应该定期检查。