在 LVM 中为一个卷设置多个段是否会造成性能损失?

在 LVM 中为一个卷设置多个段是否会造成性能损失?

我们有一个使用 LVM 分割的大驱动器。我们将一个段分配给根文件系统,并将其他几个段分配给其他文件系统。然后我们想向根文件系统添加更多空间,因此我们在未分配的一端切出另一个段并将其添加(这意味着根文件系统由两个不相交的段组成)。

最近,我们遇到了一些 I/O 性能问题,我们认为这可能是非连续根卷造成的。我们正在考虑移动一些东西,使根卷成为一个(连续的)段,希望提高性能(我们的想法是,这将使访问东西变得更容易)。

另一种观点是 LVM 已经解决了这一切,并且不会产生任何影响(除了使驱动器布局的图形更加紧凑)。

我们可能为两段交易量支付的罚款是多少?

答案1

将不连续的 PE 块分配给同一个 LV 应该不会对性能造成明显影响,除非您正在做一些非常古怪的事情,例如使 LV 增量非常小并且多次增大 LV(同时对许多 LV 进行相同的操作)相同的 VG)——这会导致大量碎片。

也就是说,任何卷管理系统(包括 LVM)都可以使读取片段成为可能,否则这些读取可能是顺序的,但我认为这里的情况并非如此。如果您的文件系统位于仅由两个不连续的范围分配组成的 LV 上,而这两个范围在其他方面是连续的,那么它绝对不会导致可察觉的(甚至可能无法测量的)问题。

不能保证您对该 LV 的两次分配是连续的,但除非您的 VG 的未分配 PE 存在一些碎片,否则它们将是连续的。 (只有在频繁添加和删除 LV 到同一个 VG 时才会发生这种情况)

如果这样做成本低廉,那么您可以考虑通过进行文件级备份并从 PV 上重建底层 VG 来对 LV 进行碎片整理。

答案2

将逻辑卷分成多个不相交的物理范围确实有一些头顶上,因为头部必须寻找中间的间隙。然而,单次查找的开销很小,因此在实践中您不会注意到将卷分成两块。如果它被分割成 1000 多个块,那么它可能会开始变成一个少量问题,但实际上,情况不会变得这么糟糕。

相关内容