假设我有两个相同的磁盘,并在它们上设置了一个 LVM 逻辑卷(无镜像)。问题:当其中一个磁盘发生故障时会发生什么?
- 我将丢失所有磁盘上的所有数据
- 我将丢失损坏的磁盘中的数据,但我可以从仍在工作的磁盘中获取数据
- 其他的东西(什么)
?
预先感谢您的澄清。
从我读到的 LVM 文章中提及 RAID 的内容来看,这表明我将失去一切,而另一方面,缩小 LV 则表明相反的情况。
更新
好读: http://www.redhat.com/magazine/009jul05/features/lvm2/
根据这篇文章,使用线性映射(默认情况下,这是我的情况)并且没有镜像,如果发生故障,您应该仅丢失损坏磁盘中的数据。我希望这是真的,最终我发现了:-/
答案1
最坏也是最有可能的情况是你会失去一切。如果您有一个跨越两个驱动器的逻辑卷,并且丢失了一个没有镜像的驱动器,那么您实际上已经删除了一半的文件系统。
从此时起,根据您在卷上运行的文件系统,它会稍微好一些。假设您没有使用条带化,这会杀死您的任何机会,您可能能够通过在第二个驱动器上运行恢复软件来恢复部分数据。我没有这种情况的个人经验,但如果您使用的是更“强大”的文件系统之一(即ext3
或ext4
),理论上应该可以获取仅位于仍在运行的驱动器上的部分或大部分文件。
您的情况会有所不同,具体取决于您在 LVM 上使用的文件系统以及文件在磁盘上的排列方式。如果它们在两个磁盘上都存在碎片,那么您仍然会丢失这些文件。
答案2
由于您担心的是使用 LVM 造成的数据丢失,因此使用可供选择的 (3) 个 LV 配置来讨论两个磁盘之一的丢失是很有用的:
低压类型:
线性: 这默认创建 LV 时的选项,无需提供任何开关来创建下面的其他两种类型的 LV。在线性 LV 中,如果物理卷 (PV) 从卷组 (VG) 中删除,您只会丢失该 PV 上的 LV。但是,如果 LV 跨越多种的PV 及其使用的任何 PV(磁盘)都会丢失,整个 LV 将丢失。这是合乎逻辑的:文件系统跨越 2 个 PV,因此如果丢失任一磁盘,文件系统都会遭受灾难性损坏。任何位于 或 上的 LV不是跨越失踪的PV成员将生存。
条纹:指定“-我“开关。虽然这提供了更好的写入性能,全部数据在条带 PV 上循环写入。如果条带中的任何 PV 丢失,也会丢失全部LV 驻留在全部PV。
镜像:指定“-m创建 LV 时进行切换。这类似于 RAID1:提高容错能力以防止数据丢失,但使用两倍的空间。
最后,在管理数据时(LVM、RAID 或根本没有抽象),您的表现取决于您的能力已被证明备份。
检查物理范围的映射方式
要查看您的数据如何与其所在的 PV 进行映射:
pvdisplay -m
检查 LV 是否是条带化的(多个 PV)
如果您有多个 PV 并且需要确定 LV 是否跨它们进行条带化:
lvs -o+lv_layout,stripes
简化说明示例:
正如你在插图中看到的,自从 LV ”变量“需要所有三个 PV 的范围,如果任何 PV 丢失,则 LV 上的文件系统”变量“将会遭受灾难性的破坏。
有用的参考资料:
http://manpages.ubuntu.com/manpages/xenial/man8/lvcreate.8.html
答案3
我同意 Matthew Scharley 的观点 - 假设线性映射,最有可能的情况是从一半输给全部。
当你可能当单个磁盘损坏时能够恢复部分数据,就像使用单个硬盘丢失文件系统上的一半块一样。文件系统的 fsck 在恢复数据时肯定会遇到很大的问题,并且需要很长时间才能完成 - 很可能根本无法恢复。
您可以使用“文件雕刻”类型的软件从此类损坏的文件系统中提取数据,但其成功将取决于磁盘上文件的碎片程度。
看https://serverfault.com/questions/279571/lvm-dangers-and-caveats了解有关 LVM 数据丢失风险的更多信息,以及有关 LVM 恢复工具(包括文件雕刻工具)的一些链接以及其他经验。