将 RAID 超级块放在设备末端有什么风险?

将 RAID 超级块放在设备末端有什么风险?

我想使用 mdadm 设置 RAID 1 阵列来存储备份(我将使用 rsnapshot 进行实际备份)。我读到使用元数据 0.9 或 1.0 格式的 RAID 1 很有优势,因为它们将超级块放在设备的末尾,这样即使不使用 mdadm 也可以读取文件系统。这对于备份应用程序来说似乎很有吸引力,因为这意味着如果发生 RAID 故障,我仍然可以从各个磁盘恢复数据。但是,Linux RAID 维基对这一主题发表了以下听起来令人恐惧的言论:

如果您对 raid 内容进行任何类型的自动安装/自动检测/自动激活,则将超级块放在设备末尾是危险的;在某些情况下(在 blkid 的情况下:如果超级块已损坏),raid 组件可能会被检测为有效的文件系统(或其他格式),其中可能包含过时的数据。这将使阵列不同步并危及数据。

有人能解释一下这是什么意思吗?我应该对此有多担心?这是否意味着如果我将超级块放在最后并在 fstab 中列出没有该noauto选项的 RAID 设备,我会面临数据丢失的风险?或者这是指其他类型的自动化?

答案1

因此,这就是将 RAID 超级块放在设备末端的处理方式。当您使用 mdadm 设置 RAID 1 阵列进行备份时,使用元数据 0.9 或 1.0 格式很不错,因为它将超级块放在设备末端。这意味着您仍然可以读取文件系统而无需 mdadm,如果您的 RAID 出现问题并且您需要从各个磁盘恢复数据,这将非常方便。

但是,有一个问题。Linux RAID Wiki 中说将超级块放在末尾可能会有风险,这听起来很吓人。基本上,如果您正在运行任何自动安装或自动检测功能,您的 RAID 组件可能会被视为有效文件系统,即使它们已损坏。这可能会弄乱您的阵列并弄乱您的数据。

那么,你应该担心吗?嗯,这要视情况而定。如果你打算在 fstab 中列出 RAID 设备而不使用 noauto 选项,那么如果出现问题,你可能会面临数据丢失的风险。这有点像为某些不好的事情敞开大门。

但如果你不做任何花哨的自动安装操作,那么可能没问题。关键在于权衡自动设置的便利性与数据不同步和丢失的潜在风险。

希望这能让事情变得清楚一点!

答案2

无需 mdadm 即可读取文件系统任何状况之下如果您使用的是 RAID1。如果超级块在开头,则需要做一点工作才能读取它。在正常操作期间,这种需要永远不会发生;一旦您拥有 RAID,您就绝不能访问它周围的数据,因此无法意外安装它的优势非常重要。在正确构建的系统中,这种需要根本不会发生;例如,从我自己的经验来看,我几乎不记得有这种需要。

会发生什么?假设你从一个 RAID 支路挂载了文件系统,执行了一些写入操作。一些数据和元数据更改,但它不会反映在任何 RAID 元数据中,因此 RAID 层不可能知道媒体中发生了某些更改。然后,您再次组装 RAID 并尝试访问文件系统。对于 RAID 层来说,两条腿看起来是平等的;它会将读取分散到它们两者。但是,元数据不一致!如果这样使用,即使是最可靠的文件系统也很容易发生严重故障。因此,您必须防止意外直接访问 RAID 层周围的 RAID 启用媒体,以便它帮助您避免灾难 — 而不是导致灾难。

我不明白你在说什么“备份应用程序”。这种访问肯定是不是自动化是合理的。并且,RAID 不是备份,这已经说过很多次了,所以我不知道该说什么,我不明白为什么人们仍然这么想。

不要为可能需要绕过 RAID 层的情况设计存储子系统。不要为取证而设计。相反,进行适当的备份以便永远不需要恢复。例如,您可以定期将整个文件系统映像转储到备份存储(与此阵列分开)。或者定期复制文件。可以实现自动化并成为备份。并且可以(并且将会)使您免于首先恢复 RAID 周围的数据。

相关内容