在具有 ext4 文件系统的 LVM lv 中,磁盘上的哪个位置为新文件分配了空间?

在具有 ext4 文件系统的 LVM lv 中,磁盘上的哪个位置为新文件分配了空间?

我运行一个使用 LVM2 的多磁盘服务器。几个大磁盘用作一个卷组的 LVM2 物理卷,其中包含一个使用 ext4 格式化的逻辑卷。没什么特别的,只是标准的线性设置。

最近,一个额外的、非常小的磁盘作为物理卷添加到该卷组中,并且我将逻辑卷和其中的 ext4 文件系统扩展到该磁盘上。

该 lv 用于存储使用 rsync 的增量备份,只占用约 30%,很少有文件被从中删除,只有增量写入。

现在,我添加到现有卷组的这个新硬盘意外坏了,而且由于缺少一个物理卷,卷组无法启动。

命运注定,这曾是“如果主服务器发生灾难性故障”—备份,事件发生了,老板不高兴,所以这必须起作用......

根据此(第 3 部分): http://www.novell.com/coolsolutions/appnote/19386.html 可以通过创建一个与故障磁盘具有相同元数据的新 pv 来诱骗 LVM 继续启动,这将使卷可访问,但当然会在文件系统中留下巨大的漏洞。我还没有尝试过,因为它涉及修复(写入)文件系统,如果失败,则无法尝试其他操作。

现在我的问题是:这个设置实际上如何为新数据分配磁盘空间?它是否按照添加到 vg 的顺序从 PV 的开头到结尾线性分配?它是否以某种方式进行条带化以提高性能/平衡负载?

由于这个有缺陷的磁盘后来才被添加到现有的 lvm2 vg 和 lv 中,并且包含半空的 ext4,因此从未有任何数据写入有缺陷的磁盘的可能性有多大?

换句话说:即使没有有缺陷的磁盘,仅通过按原样启动卷组,恢复所有数据的几率有多大?当我将有缺陷的磁盘送去维修时,我是否要花 1500 美元来恢复 250GB 的空闲空间?

有没有办法在不挂载文件系统和打开文件的情况下进行检查,希望它们包含除零以外的其他内容?(将 ext4 内使用的数据块的地址与丢失的 pv 上的地址范围进行比较,诸如此类,最好易于自动化)

我知道在尝试修复 ext4 之前将整个 lv 按位复制到图像文件中可能是一个好主意,但由于这个 lv 非常大并且我刚刚在几个系统上遭遇了重大文件系统故障,所以这可能是我没有的奢侈...

有什么建议么?

答案1

总结一下:我决定尝试一下,在使用 ddrescue 备份所有磁盘后,重新组装了丢失损坏磁盘的 lvm。

结果:68,000 个文件中,大约有 12,000 个完全丢失,另外 38,000 个在恢复后校验和错误(纯属运气,我记录了校验和)。

因此,我可以肯定地说,如果这些文件很重要,那么这不是最好的策略。

此外,修复文件系统需要将近 3 天的处理时间,并且需要超过 Ivy-bridge Xeon 上的 32GB RAM。

我最终还是将驱动器送去维修了。

答案2

问题太多了,我将回答 LVM 部分:

由于您能够添加单个磁盘,我猜它不是条带卷也不是镜像(或者您不会遇到数据丢失的问题),只是普通的(线性)目标。

/etc/lvm/backup/$VG在使用 LV 的机器上有一个元数据备份文件- 查看那里 - 您应该在那里找到所有详细信息。

另外,在对 FS 进行任何操作之前:创建一个快照并使用它来修复 - 这样您就可以返回到以前的状态。

回复:FS 使用情况:我帮不上忙,但正如你所说,没有删除,只是附加文件,我希望 FS 不会对可用空间造成碎片化。你可以尝试查阅维基百科:https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout或搜索 #ext4 IRC 频道。

在进行任何不可逆的更改之前,请转到 freenode 上的 #lvm IRC 频道,您可以在那里找到在线指导。

相关内容