Linux 用户逻辑卷管理指南

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

Opensource.com

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

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

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

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

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

动态扩展文件系统

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

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

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

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

LVM 结构

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

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

lvm.png

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

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

添加新的逻辑卷

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

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

  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 擦除了当时机器上每个磁盘的分区表。它也破坏了我所有的备份驱动器。我丢失了超过一 TB 的数据,无法恢复。从那以后我就再也没有接触过 Centos 或 LVM。

Steve,在安装系统时,始终建议对所有数据进行完整备份。如果出现问题,在任何系统安装过程中丢失一切的机会始终存在。您应该在测试虚拟机中安装和测试 CentOS 和 LVM,并习惯它们的功能。将虚拟 PV 投入虚拟机并将它们添加到您的卷组和逻辑卷中的能力可以让您对 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(未验证)

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