管理磁盘空间一直是系统管理员的一项重要任务。磁盘空间耗尽曾经是一系列漫长而复杂的任务的开始,这些任务旨在增加磁盘分区可用的空间。 这也需要使系统脱机。 这通常涉及安装新的硬盘驱动器,启动到恢复模式或单用户模式,在新硬盘驱动器上创建分区和文件系统,使用临时挂载点将数据从太小的文件系统移动到新的、更大的文件系统,更改 /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 文件系统中的大量空间,并允许我独立管理 VM 的磁盘空间。
添加新逻辑卷的基本步骤如下。
- 如有必要,安装新的硬盘驱动器。
- 可选:在硬盘驱动器上创建分区。
- 从完整的硬盘驱动器或硬盘驱动器上的分区创建物理卷 (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 添加适当的条目以挂载文件系统。
- 挂载文件系统。
示例
此示例描述了如何在 LVM 环境中使用 CLI 调整现有逻辑卷的大小。它向 /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 条评论