了解磁盘故障时 LVM2 的行为?

了解磁盘故障时 LVM2 的行为?

我有一个 LVM2 组,使用以下命令进行 5x4TB 设置:

pvcreate /dev/sd{b,c,d,e,f}
vgcreate vg0 /dev/sd{b,c,d,e,f}
lvcreate -l 100%FREE -n lvol1 vg0

现在我创建了这个怪物,我对它有一些疑问:在默认配置中,它恰好是线性的,如果/dev/sdb失败会发生什么?

  • 我应该对整个数据说再见/dev/sdb还是 LVM 将文件放置在整个设备上而不是尝试填充第一个字节?

  • 我如何知道哪个文件位于哪个设备上?如果我丢失了磁盘,我想知道数据丢失在哪里,以便能够在可能的情况下恢复它。

笔记:

  • 我跟着Gentoo LVM 创建手册
  • 我完全理解 RAIDx(以及我所理解的 LVM)不提供备份;它们最多只能增加针对磁盘故障的恢复能力。我对(软件)RAID5 和磁盘故障有一些经验:幸运的是,一次只有一个发生故障。然而,我对 LVM 没有经验,这就是我问这些问题的原因。

答案1

lvdisplay --maps将告诉您与特定 LV 或其特定范围相对应的物理范围所在的位置。pvdisplay --maps从以光伏为中心的角度呈现相同的信息。

例如,如果pvdisplay --maps指示故障 PV 覆盖特定 LV 的逻辑范围 1000...4000,并且该 VG 的范围大小为 4 MiB,那么您就会知道,如果 PV 完全失败,您的 LV 中将有一个无法访问的大“洞”,从距 LV 开头 4000 MiB 的点开始,一直持续到距该 LV 开头 16000 MiB 的点。

通常,在这种情况下,恢复整个 LV 是最简单的:这样您就可以确保所有文件都处于一致状态。例如,如果文件 A 包含对文件 B 中内容的引用,您可能希望从备份中恢复这两个文件,即使损坏区域上只有一个文件。

但是如果你必须(即你发现你没有可用的备份并且现在陷入了严重的麻烦),你可以使用lvchangevgchange--activationmode partial激活 LV,即使它有部件丢失,这样你就可以安装它来恢复任何东西其余的。应该这样做仅有的用于数据恢复目的。

由于在您的情况下/dev/sdb将是卷组中的第一个 PV,因此它还将保存 LV 的第一部分 - 这是该 LV 的许多关键文件系统元数据可能最终会出现的地方,因此fsck会在你。正如弗罗斯特舒茨所说,photorec很可能从 LV 的其余部分找到任何未碎片的文件。但依赖这一点是糟糕的策略。

您需要考虑备份以及完整恢复所需的时间。如果在磁盘故障后恢复整个 LV 需要花费太多时间,则需要向系统添加冗余以避免这种情况。通常,这意味着获取更多磁盘并将数据放在某种 RAID 阵列上。

但即使您设置了 RAID 阵列,也不要忘记备份。 RAID 可能使磁盘故障易于处理,但在用户/系统管理员“哎呀”的情况下根本没有帮助。RAID 不是备份。

答案2

如果 /dev/sdb 失败会发生什么?

您的 lvol1 将不再起作用。丢失一个驱动器意味着丢失 5 个驱动器的数据。该卷将丢失大量数据(整个磁盘都消失了),并且最有可能的是,无论您在其上使用哪个文件系统都不会喜欢它。

您不应该期望fsck恢复任何东西。它可能会发生,但fsck不是数据恢复工具,它主要用于修复较小的不一致,而不是神奇地解决丢失的数百GB数据。有时fsck非常乐意为您提供一致的(但奇怪的是空的)文件系统。

如果您确实使用fsck或其他任何与此相关的内容,请使用快照或覆盖来执行此操作,以便您可以撤消所做的任何更改。 (数据恢复要求在只读或写时复制模式下工作。)

由于 LVM 是线性的(默认情况下,无论如何),photorec其他工具仍然能够在其他驱动器上找到(未碎片、未加密的)数据。

虽然 LVM 很乐意跨越多个驱动器,但最好创建几个较小的卷。不在丢失驱动器上的卷将保留。较小的文件系统还可以避免 的问题fsck,该问题往往非常消耗资源并且需要很长时间,具体取决于文件系统的大小。

使用未分区的驱动器会带来无意中创建分区表的风险 - 覆盖过程中的其他元数据。您应该始终使用分区表。

无论如何,如果您不想丢失数据,请进行备份。

如果您不想在每次驱动器故障后恢复备份,也可以使用 RAID。

答案3

LVM 不放置任何文件。 LVM 创建一个大型逻辑设备,其数据分布在多个物理设备上。

这就像拥有一个 1GiB 分区,对其进行格式化,在文件系统中创建数据,然后用零覆盖 250MiB 到 500MiB 的范围。

如果文件系统中的数据少于 250MiB,则有可能fsck恢复大部分或全部数据。您可以轻松尝试一下。

相关内容