管理磁盘空间一直是系统管理员的一项重要任务。磁盘空间耗尽曾经是一系列漫长而复杂的任务的开始,目的是增加磁盘分区可用的空间。这也需要使系统脱机。这通常涉及安装新的硬盘驱动器,引导到恢复或单用户模式,在新硬盘驱动器上创建分区和文件系统,使用临时挂载点将数据从太小的文件系统移动到新的、更大的文件系统,更改 /etc/fstab 文件的内容以反映新分区的正确设备名称,然后重新启动以在正确的挂载点上重新挂载新的文件系统。
我不得不告诉你,当 LVM(逻辑卷管理器)首次在 Fedora Linux 中出现时,我强烈抵制它。我的最初反应是我不需要在我自己和硬盘驱动器之间添加这个额外的抽象层。事实证明我错了,逻辑卷管理非常有用。
LVM 允许非常灵活的磁盘空间管理。它提供的功能包括在文件系统已挂载并处于活动状态时向逻辑卷及其文件系统添加磁盘空间的能力,并且它允许将多个物理硬盘驱动器和分区集合到一个卷组中,然后可以将其划分为逻辑卷。
卷管理器还允许减少分配给逻辑卷的磁盘空间量,但是有一些要求。首先,必须卸载该卷。其次,文件系统本身必须先缩小尺寸,然后才能缩小其所在卷的尺寸。
重要的是要注意,文件系统本身必须允许调整大小,此功能才能工作。EXT2、3 和 4 文件系统都允许在增加文件系统大小时进行在线(已挂载)和离线(已卸载)调整大小,以及在减小大小时进行离线调整大小。您应该查看您打算使用的文件系统的详细信息,以验证它们是否可以调整大小,尤其是它们是否可以在线调整大小。
动态扩展文件系统
我总是喜欢在 VirtualBox 虚拟机中运行新的发行版几天或几周,以确保当我在我的生产机器上开始安装它时不会遇到任何灾难性问题。几年前的一个早上,我开始在我的主工作站上的虚拟机中安装新发布的 Fedora 版本。我以为我为主机文件系统分配了足够的磁盘空间,虚拟机将在其中安装。我没有。大约在安装的三分之一处,我的该文件系统空间不足。幸运的是,VirtualBox 检测到空间不足的情况并暂停了虚拟机,甚至显示了一条错误消息,指示问题的确切原因。
请注意,此问题不是由于虚拟磁盘太小造成的,而是主机计算机上的逻辑卷空间不足,因此属于虚拟机的虚拟磁盘没有足够的空间在主机的逻辑卷上扩展。
由于大多数现代发行版默认使用逻辑卷管理,并且我的卷组上有一些可用空间,因此我能够将额外的磁盘空间分配给相应的逻辑卷,然后在运行时扩展主机的的文件系统。这意味着我不必重新格式化整个硬盘驱动器并重新安装操作系统,甚至不必重新启动。我只是将一些可用空间分配给相应的逻辑卷并调整了文件系统的大小——所有这些都是在文件系统在线且正在运行的程序(虚拟机)仍在使用的主机文件系统上完成的。在调整逻辑卷和文件系统的大小后,我恢复运行虚拟机,安装继续进行,就像没有发生任何问题一样。
虽然这种类型的问题可能永远不会发生在您身上,但在关键程序运行时磁盘空间不足的情况已经发生在许多人身上。虽然许多程序,尤其是 Windows 程序,不像 VirtualBox 那样编写良好且具有弹性,但 Linux 逻辑卷管理使在不丢失任何数据且不必重新启动耗时的安装的情况下恢复成为可能。
LVM 结构
图 1 说明了逻辑卷管理器磁盘环境的结构,如下所示。逻辑卷管理能够将多个单独的硬盘驱动器和/或磁盘分区组合成一个卷组 (VG)。然后可以将该卷组细分为逻辑卷 (LV),或者用作单个大卷。然后可以在逻辑卷上创建常规文件系统,例如 EXT3 或 EXT4。
在图 1 中,两个完整的物理硬盘驱动器和一个来自第三个硬盘驱动器的分区已组合成一个卷组。已从卷组中的空间创建了两个逻辑卷,并且在每个逻辑卷上都创建了一个文件系统,例如 EXT3 或 EXT4 文件系统。
图 1:LVM 允许将分区和整个硬盘驱动器组合成卷组。
向主机添加磁盘空间相当简单,但在我的经验中,这种情况发生的相对较少。下面列出了所需的基本步骤。您可以创建一个全新的卷组,也可以将新空间添加到现有卷组,并扩展现有逻辑卷或创建新逻辑卷。
添加新的逻辑卷
有时,有必要向主机添加新的逻辑卷。例如,在注意到包含我的 VirtualBox 虚拟机虚拟磁盘的目录正在填满 /home 文件系统后,我决定创建一个新的逻辑卷来存储虚拟机数据,包括虚拟磁盘。这将释放我的 /home 文件系统中的大量空间,并且还允许我独立管理虚拟机的磁盘空间。
添加新逻辑卷的基本步骤如下。
- 如有必要,安装新的硬盘驱动器。
- 可选:在硬盘驱动器上创建分区。
- 从完整的硬盘驱动器或硬盘驱动器上的分区创建物理卷 (PV)。
- 将新的物理卷分配给现有卷组 (VG) 或创建新的卷组。
- 从卷组中的空间创建新的逻辑卷 (LV)。
- 在新逻辑卷上创建文件系统。
- 将适当的条目添加到 /etc/fstab 以挂载文件系统。
- 挂载文件系统。
现在详细说明。以下序列取自我在教授 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 文件中添加适当的条目,并挂载文件系统。
您还应该检查以验证卷是否已正确创建。您可以使用 df、lvs 和 vgs 命令来执行此操作。
在 LVM 文件系统中调整逻辑卷的大小
自 Unix 的第一个版本问世以来,调整文件系统大小的需求就一直存在,并且在 Linux 中也没有消失。然而,随着逻辑卷管理,它变得更容易了。
- 如有必要,安装新的硬盘驱动器。
- 可选:在硬盘驱动器上创建分区。
- 从完整的硬盘驱动器或硬盘驱动器上的分区创建物理卷 (PV)。
- 将新的物理卷分配给现有卷组 (VG) 或创建新的卷组。
- 从卷组中的空间创建一个或多个逻辑卷 (LV),或者使用卷组中一些或全部新空间扩展现有逻辑卷。
- 如果您创建了新的逻辑卷,请在其上创建文件系统。如果向现有逻辑卷添加空间,请使用 resize2fs 命令来扩大文件系统以填充逻辑卷中的空间。
- 将适当的条目添加到 /etc/fstab 以挂载文件系统。
- 挂载文件系统。
示例
此示例描述了如何使用 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
您应该检查以验证调整大小是否已正确执行。您可以使用 df、lvs 和 vgs 命令来执行此操作。
提示
多年来,我学到了一些可以使逻辑卷管理比现在更容易的事情。希望这些提示对您有所帮助。
- 除非您有明确的理由使用其他文件系统,否则请使用扩展文件系统。并非所有文件系统都支持调整大小,但 EXT2、3 和 4 支持。EXT 文件系统也非常快速高效。在任何情况下,如果默认调整参数不符合要求,知识渊博的系统管理员也可以对其进行调整以满足大多数环境的需求。
- 使用有意义的卷和卷组名称。
- 使用 EXT 文件系统标签。
我知道,像我一样,许多系统管理员都抵制了向逻辑卷管理的转变。我希望这篇文章能鼓励您至少尝试一下 LVM。我真的很高兴我这样做了;自从我进行切换以来,我的磁盘管理任务变得容易得多。
8 条评论