Linux 用户逻辑卷管理指南

10 位读者喜欢这篇文章。
Perl tricks for system administrators

Opensource.com

管理磁盘空间一直是系统管理员的一项重要任务。磁盘空间耗尽曾经是一系列漫长而复杂的任务的开始,这些任务旨在增加磁盘分区可用的空间。这也需要使系统脱机。这通常涉及安装新的硬盘驱动器,引导到恢复或单用户模式,在新硬盘驱动器上创建分区和文件系统,使用临时挂载点将数据从太小的文件系统移动到新的、更大的文件系统,更改 /etc/fstab 文件的内容以反映新分区的正确设备名称,然后重新启动以在正确的挂载点上重新挂载新的文件系统。

我必须告诉你,当 LVM(逻辑卷管理器)首次出现在 Fedora Linux 中时,我强烈抵制它。我的最初反应是,我不需要在我和硬盘驱动器之间添加这个额外的抽象层。事实证明我错了,逻辑卷管理非常有用。

LVM 允许非常灵活的磁盘空间管理。它提供诸如在文件系统已挂载且处于活动状态时向逻辑卷及其文件系统添加磁盘空间的功能,并且它允许将多个物理硬盘驱动器和分区集合到一个卷组中,然后可以将其划分为逻辑卷。

卷管理器还允许减少分配给逻辑卷的磁盘空间量,但是有一些要求。首先,必须卸载卷。其次,文件系统本身必须先缩小尺寸,然后才能缩小其所在卷的尺寸。

重要的是要注意,文件系统本身必须允许调整大小,此功能才能起作用。EXT2、3 和 4 文件系统都允许在增加文件系统大小时进行在线(已挂载)和离线(未挂载)调整大小,以及在缩小大小时进行离线调整大小。您应该检查您打算使用的文件系统的详细信息,以验证它们是否可以调整大小,尤其是它们是否可以在线调整大小。

动态扩展文件系统

我总是喜欢在 VirtualBox 虚拟机中运行新的发行版几天或几周,以确保当我在我的生产机器上开始安装它时不会遇到任何灾难性问题。几年前的一天早上,我开始在我的主工作站上的虚拟机中安装新发布的 Fedora 版本。我以为我在主机文件系统中分配了足够的磁盘空间来安装 VM。但我没有。大约在安装的三分之一处,我用完了该文件系统上的空间。幸运的是,VirtualBox 检测到空间不足的情况并暂停了虚拟机,甚至显示了一条错误消息,指示问题的确切原因。

请注意,此问题不是由于虚拟磁盘太小,而是主机计算机上的逻辑卷空间不足,以至于属于虚拟机的虚拟磁盘没有足够的空间在主机的逻辑卷上扩展。

由于大多数现代发行版默认使用逻辑卷管理,并且我的卷组上有一些可用空间,因此我能够将额外的磁盘空间分配给适当的逻辑卷,然后在运行时扩展主机的的文件系统。这意味着我不必重新格式化整个硬盘驱动器并重新安装操作系统,甚至不必重新启动。我只是将一些可用空间分配给适当的逻辑卷并调整了文件系统的大小——所有这些都是在文件系统在线和运行程序(虚拟机仍在使用的主机文件系统)的情况下完成的。在调整逻辑卷和文件系统的大小后,我恢复运行虚拟机,安装继续进行,就像没有发生任何问题一样。

尽管这种类型的问题可能永远不会发生在您身上,但在关键程序运行时磁盘空间耗尽的情况已经发生在许多人身上。虽然许多程序,尤其是 Windows 程序,不如 VirtualBox 那样编写良好且具有弹性,但 Linux 逻辑卷管理使恢复成为可能,而不会丢失任何数据,也无需重新启动耗时的安装。

LVM 结构

图 1 说明了逻辑卷管理器磁盘环境的结构,如下所示。逻辑卷管理能够将多个单独的硬盘驱动器和/或磁盘分区组合成单个卷组 (VG)。然后可以将该卷组细分为逻辑卷 (LV) 或用作单个大卷。然后可以在逻辑卷上创建常规文件系统,例如 EXT3 或 EXT4。

在图 1 中,两个完整的物理硬盘驱动器和一个来自第三个硬盘驱动器的分区已组合成一个卷组。已从卷组中的空间创建了两个逻辑卷,并且在两个逻辑卷中的每一个上都创建了一个文件系统,例如 EXT3 或 EXT4 文件系统。

lvm.png

图 1:LVM 允许将分区和整个硬盘驱动器组合成卷组。

向主机添加磁盘空间相当简单,但在我的经验中,这种情况相对较少发生。下面列出了所需的基本步骤。您可以创建一个全新的卷组,也可以将新空间添加到现有卷组,并扩展现有逻辑卷或创建一个新的逻辑卷。

添加新的逻辑卷

有时,有必要向主机添加新的逻辑卷。例如,在注意到包含我的 VirtualBox 虚拟机的虚拟磁盘的目录正在填满 /home 文件系统后,我决定创建一个新的逻辑卷来存储虚拟机数据,包括虚拟磁盘。这将释放我的 /home 文件系统中的大量空间,并允许我独立管理 VM 的磁盘空间。

添加新逻辑卷的基本步骤如下。

  1. 如有必要,安装新的硬盘驱动器。
  2. 可选:在硬盘驱动器上创建分区。
  3. 从完整的硬盘驱动器或硬盘驱动器上的分区创建物理卷 (PV)。
  4. 将新的物理卷分配给现有卷组 (VG) 或创建新的卷组。
  5. 从卷组中的空间创建新的逻辑卷 (LV)。
  6. 在新逻辑卷上创建文件系统。
  7. 将适当的条目添加到 /etc/fstab 以挂载文件系统。
  8. 挂载文件系统。

现在介绍详细信息。以下序列取自我教授 Linux 文件系统时用作实验项目的一个示例。

示例

此示例演示如何使用 CLI 扩展现有卷组以向其添加更多空间,在该空间中创建新的逻辑卷,并在逻辑卷上创建文件系统。此过程可以在运行的、已挂载的文件系统上执行。

警告:只有 EXT3 和 EXT4 文件系统可以在运行的、已挂载的文件系统上动态调整大小。包括 BTRFS 和 ZFS 在内的许多其他文件系统无法调整大小。

安装硬盘驱动器

如果系统现有硬盘驱动器上的卷组中没有足够的空间来添加所需的空间量,则可能需要添加新的硬盘驱动器并创建空间以添加到逻辑卷。首先,安装物理硬盘驱动器,然后执行以下步骤。

从硬盘驱动器创建物理卷

首先需要创建一个新的物理卷 (PV)。使用下面的命令,该命令假定新硬盘驱动器分配为 /dev/hdd。

pvcreate /dev/hdd

无需在新硬盘驱动器上创建任何类型的分区。可以对新安装的原始磁盘或类型为 83 的 Linux 分区执行逻辑卷管理器识别的物理卷的创建。如果您要使用整个硬盘驱动器,则首先创建分区不会提供任何特别的优势,并且会使用磁盘空间来存储元数据,否则这些元数据可以用作 PV 的一部分。

扩展现有卷组

在本示例中,我们将扩展现有卷组而不是创建新的卷组;您可以选择任一方式。创建物理卷后,扩展现有卷组 (VG) 以包含新 PV 上的空间。在本示例中,现有卷组名为 MyVG01。

vgextend /dev/MyVG01 /dev/hdd

创建逻辑卷

首先从卷组内的现有可用空间创建逻辑卷 (LV)。以下命令创建一个大小为 50GB 的 LV。卷组名称为 MyVG01,逻辑卷名称为 Stuff。

lvcreate -L +50G --name Stuff MyVG01

创建文件系统

创建逻辑卷不会创建文件系统。该任务必须单独执行。以下命令创建一个适合新创建的逻辑卷的 EXT4 文件系统。

mkfs -t ext4 /dev/MyVG01/Stuff

添加文件系统标签

添加文件系统标签可以轻松地在崩溃或其他磁盘相关问题的情况下识别文件系统。

e2label /dev/MyVG01/Stuff Stuff

挂载文件系统

此时,您可以创建一个挂载点,向 /etc/fstab 文件添加适当的条目,并挂载文件系统。

您还应该检查以验证卷是否已正确创建。您可以使用 dflvsvgs 命令来执行此操作。

在 LVM 文件系统中调整逻辑卷大小

自 Unix 的第一个版本问世以来,调整文件系统大小的需求就一直存在,并且在 Linux 中也没有消失。然而,通过逻辑卷管理,它变得更容易了。

  1. 如有必要,安装新的硬盘驱动器。
  2. 可选:在硬盘驱动器上创建分区。
  3. 从完整的硬盘驱动器或硬盘驱动器上的分区创建物理卷 (PV)。
  4. 将新的物理卷分配给现有卷组 (VG) 或创建新的卷组。
  5. 从卷组中的空间创建一个或多个逻辑卷 (LV),或使用卷组中部分或全部新空间扩展现有逻辑卷。
  6. 如果您创建了新的逻辑卷,请在其上创建文件系统。如果向现有逻辑卷添加空间,请使用 resize2fs 命令来扩大文件系统以填充逻辑卷中的空间。
  7. 将适当的条目添加到 /etc/fstab 以挂载文件系统。
  8. 挂载文件系统。

示例

本示例描述了如何使用 CLI 在 LVM 环境中调整现有逻辑卷的大小。它向 /Stuff 文件系统添加了大约 50GB 的空间。此过程只能在 Linux 2.6 内核(及更高版本)以及 EXT3 和 EXT4 文件系统上对已挂载的活动文件系统使用。我不建议您在任何关键系统上这样做,但它是可以完成的,而且我这样做过很多次;即使在根 (/) 文件系统上也是如此。请自行判断。

警告:只有 EXT3 和 EXT4 文件系统可以在运行的、已挂载的文件系统上动态调整大小。包括 BTRFS 和 ZFS 在内的许多其他文件系统无法调整大小。

安装硬盘驱动器

如果系统现有硬盘驱动器上没有足够的空间来添加所需的空间量,则可能需要添加新的硬盘驱动器并创建空间以添加到逻辑卷。首先,安装物理硬盘驱动器,然后执行以下步骤。

从硬盘驱动器创建物理卷

首先需要创建一个新的物理卷 (PV)。使用下面的命令,该命令假定新硬盘驱动器分配为 /dev/hdd。

pvcreate /dev/hdd

无需在新硬盘驱动器上创建任何类型的分区。可以对新安装的原始磁盘或类型为 83 的 Linux 分区执行逻辑卷管理器识别的物理卷的创建。如果您要使用整个硬盘驱动器,则首先创建分区不会提供任何特别的优势,并且会使用磁盘空间来存储元数据,否则这些元数据可以用作 PV 的一部分。

将 PV 添加到现有卷组

在本示例中,我们将使用新的 PV 来扩展现有卷组。创建物理卷后,扩展现有卷组 (VG) 以包含新 PV 上的空间。在本示例中,现有卷组名为 MyVG01。

vgextend /dev/MyVG01 /dev/hdd

扩展逻辑卷

从卷组内的现有可用空间扩展逻辑卷 (LV)。以下命令将 LV 扩展 50GB。卷组名称为 MyVG01,逻辑卷名称为 Stuff。

lvextend -L +50G /dev/MyVG01/Stuff

扩展文件系统

如果您使用 -r 选项,扩展逻辑卷也会扩展文件系统。如果您不使用 -r 选项,则必须单独执行该任务。以下命令调整文件系统大小以适合新调整大小的逻辑卷。

resize2fs /dev/MyVG01/Stuff

您应该检查以验证调整大小是否已正确执行。您可以使用 dflvsvgs 命令来执行此操作。

提示

多年来,我学到了一些可以使逻辑卷管理比现在更轻松的事情。希望这些提示对您有所帮助。

  • 除非您有明确的理由使用其他文件系统,否则请使用扩展文件系统。并非所有文件系统都支持调整大小,但 EXT2、3 和 4 支持。EXT 文件系统也非常快速高效。无论如何,如果默认调整参数不符合大多数环境的需求,知识渊博的系统管理员可以对其进行调整以满足需求。
  • 使用有意义的卷和卷组名称。
  • 使用 EXT 文件系统标签。

我知道,像我一样,许多系统管理员一直抵制转向逻辑卷管理。我希望本文能鼓励您至少尝试 LVM。我真的很高兴我这样做了;自从我切换以来,我的磁盘管理任务变得容易多了。

David Both
David Both 是一位开源软件和 GNU/Linux 倡导者、培训师、作家和演讲者。他自 1996 年以来一直从事 Linux 和开源软件工作,自 1969 年以来一直从事计算机工作。他是“系统管理员 Linux 哲学”的坚定拥护者和传播者。

8 条评论

我曾经尝试过 LVM。我当时正在安装 Centos,在分区步骤中我选择了 LVM ...
我不知道我做错了什么,但是 LVM 破坏了当时机器上每个磁盘的分区表。它也破坏了我所有的备份驱动器。我丢失了超过 1TB 的数据,并且无法恢复。从那以后,我就没有碰过 Centos 或 LVM。

Steve,在安装系统时,始终建议对所有数据进行完整备份。如果出现问题,在任何系统安装过程中丢失所有数据的机会始终存在。您应该在测试 VM 中安装和测试 CentOS 和 LVM,并熟悉它们的功能。将虚拟 PV 投入 VM 并将其添加到您的卷组和逻辑卷的能力可以让您对 LVM 的功能有很好的感觉。一旦您了解如何使用它,它真的值得。

回复 作者 Steve Dupuis (未验证)

免责声明:我在 Red Hat 从事 LVM 工作。

Steve,如果没有包含安装程序日志的错误报告,就不可能知道哪里出了问题,我理解您不想提交报告,但我认为您错误地将问题归咎于 LVM。我相当肯定 LVM 没有破坏任何东西,因为它根本不会写入随机磁盘 [1]。破坏磁盘是安装程序的工作,并且它通常 [2] 在用户要求这样做后才这样做。正如您所说“我不知道我做错了什么”,尽管内核、LVM 和安装程序中存在错误,但大多数时候都是用户破坏了自己的数据,却责怪工具 [3] :-(

[1]:我并不是说这是不可能的,只是在我看到的这几年中,我没有看到过一个这样的错误。(除非您有“备份”并且所有内容都在单个精简池中,这可能会过度填充和/或损坏,但我只是不认为情况是这样。)另一方面,我们每周都会收到有关 LVM 拒绝触摸某些磁盘的报告(大多数情况下,当系统中有重复的 UUID 时,它无法在不冒数据损坏风险的情况下安全地继续进行。)

[2]:我说是“通常”是有原因的 - 我记得 Fedora 中一个特别糟糕的错误,当安装程序在重新进入分区屏幕后恢复磁盘顺序时,因此它格式化了最后一个磁盘而不是第一个磁盘 - https://bugzilla.redhat.com/show_bug.cgi?id=1166598 - 但这个错误在 Beta 测试期间被捕获,因为这些糟糕的事情通常都是这样。正如我所说,这一个是相当糟糕的,更常见的是“只是”引导加载程序损坏,并且任何这些错误都足以阻止最终版本发布,并且它们很少通过。

[3]:通常与使用 `--force` 选项相关。

回复 作者 Steve Dupuis (未验证)

LVM 非常棒。我在家中使用它,只要它是默认设置,但在工作中它是必不可少的!文件服务器空间不足?将另一个驱动器放入塔式机箱,将其添加到池中,并扩展文件系统。它很棒,而且容易,并且可以即时完成(好吧,硬件添加可能取决于其他因素,但软件部分肯定是)。非常惊人。

我曾尝试使用 LVM 范例几次,坦率地说,它从未达到我在网上看到的那些热情的推荐。我不否认它的实用性;我只是说它对我来说并没有那么有用。这篇文章并没有消除这种看法,尤其是当文章(和热情的评论者)中指定的第一个操作是“如有必要,安装新的硬盘驱动器”时。LVM 确实有它的用武之地,但它不是许多人一直在推销的灵丹妙药,而且完全有可能在没有接触过它的情况下高效地运行中等复杂的家庭环境。

您提到了 ext3 和 ext4,因为它们是大多数 Linux 系统中最流行的或最常用的文件系统,但是您遗漏了 XFS,它是 Red Hat EL 7 及其变体的默认文件系统。您可以使用 xfs_growfs 动态地扩展 XFS 文件系统。

感谢您提供的信息。感谢您指出这一点。

回复 作者 PeterDC (未验证)

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.