本教程将介绍如何扩展现有的逻辑卷管理器(Logical Volume Manager,LVM)配置:先创建新的磁盘分区,将这些分区转换为 LVM 物理卷,再把它们加入现有卷组,最后扩展逻辑卷和文件系统。
下面的示例使用两块 NVMe 磁盘 /dev/nvme0n1 和 /dev/nvme2n1,并假设新分区分别是 /dev/nvme0n1p2 和 /dev/nvme2n1p2。请将设备名称、卷组名称、逻辑卷名称、分区编号和容量大小替换为你自己系统中的实际值。
前提条件
- 拥有 root 或
sudo权限。 - 已对重要数据进行当前备份。
- 已存在一个 LVM 卷组和逻辑卷。
- 已使用
lsblk、pvs、vgs和lvs确认正确的磁盘设备。 - 有足够的未分配磁盘空间用于创建新分区。
在修改分区表之前,先检查当前布局:
lsblk
sudo pvs
sudo vgs
sudo lvs
在本教程中,示例卷组为 vg_storage,示例逻辑卷为 /dev/vg_storage/lv_storage。
第 1 步:必要时卸载文件系统
如果你准备修改的分区已挂载,请先卸载它们。不要卸载无关的已挂载文件系统;除非你非常清楚自己在做什么,否则也不要卸载当前正在从中启动的文件系统。
sudo umount /dev/nvme0n1pX
sudo umount /dev/nvme2n1pX
将 X 替换为相应的分区编号。如果磁盘中用于创建新分区的位置只有空闲空间,通常可以跳过此步骤。
第 2 步:使用 fdisk 创建新分区
以下命令会在每块磁盘上创建一个新的 465G 主分区。这里以非交互方式使用 fdisk,这很方便,但也没有容错余地。运行命令前请确认目标设备名称。
对于 /dev/nvme0n1:
echo -e "nnpnnn+465Gnw" | sudo fdisk /dev/nvme0n1
对于 /dev/nvme2n1:
echo -e "nnpnnn+465Gnw" | sudo fdisk /dev/nvme2n1
输入序列的含义如下:
n:创建新分区。p:创建主分区。- 空行:接受默认分区编号。
- 空行:接受默认起始扇区。
+465G:按fdisk的解释创建一个 465 GiB 或类似 GiB 大小的分区。w:将更改写入磁盘。
如果你的系统使用 GPT,并且你希望明确将分区类型标记为 Linux LVM,请使用交互式 fdisk 或 parted,并适当设置分区类型。即使没有分区类型标志,LVM 通常也能检测到可用的物理卷,但设置该标志可以让未来查看磁盘布局的人更容易理解。
写入分区表后,让内核重新读取它:
sudo partprobe /dev/nvme0n1
sudo partprobe /dev/nvme2n1
如果磁盘正忙,导致内核无法重新加载分区表,则可能需要重启后新分区才会正确出现。
第 3 步:验证新分区
确认新分区已经创建:
lsblk
你应该能看到新分区,例如:
/dev/nvme0n1p2
/dev/nvme2n1p2
同时确认分区编号与接下来计划使用的路径一致。如果新分区不是 p2,请相应调整后续命令。
第 4 步:创建物理卷
在新分区上创建 LVM 物理卷:
sudo pvcreate /dev/nvme0n1p2 /dev/nvme2n1p2
验证它们:
sudo pvs
第 5 步:扩展卷组
将新的物理卷加入现有卷组。假设卷组名称为 vg_storage:
sudo vgextend vg_storage /dev/nvme0n1p2 /dev/nvme2n1p2
检查新增的可用空间:
sudo vgs
第 6 步:扩展逻辑卷
使用卷组中的全部空闲空间扩展逻辑卷:
sudo lvextend -l +100%FREE /dev/vg_storage/lv_storage
你可以用以下命令验证新的逻辑卷大小:
sudo lvs
许多系统也支持使用 lvextend -r 在扩展逻辑卷的同时调整文件系统大小,但下面单独执行 resize 步骤可以让流程更明确。
第 7 步:调整文件系统大小
调整文件系统大小,使其能够使用新加入的逻辑卷空间。
对于 ext4:
sudo resize2fs /dev/vg_storage/lv_storage
对于 XFS,文件系统必须处于挂载状态,并且需要通过挂载点而不是块设备来调整大小。例如,如果逻辑卷挂载在 /mnt/storage:
sudo xfs_growfs /mnt/storage
如果不确定文件系统类型,请检查:
lsblk -f
最后,确认可用空间:
df -h
完整命令序列
确切的命令序列取决于你的设备名称、分区编号、卷组、逻辑卷和文件系统类型。对于本教程中的示例:
# Inspect current disks and LVM state
lsblk
sudo pvs
sudo vgs
sudo lvs
# Create new partitions on /dev/nvme0n1 and /dev/nvme2n1
echo -e "nnpnnn+465Gnw" | sudo fdisk /dev/nvme0n1
echo -e "nnpnnn+465Gnw" | sudo fdisk /dev/nvme2n1
# Re-read partition tables
sudo partprobe /dev/nvme0n1
sudo partprobe /dev/nvme2n1
# Verify the new partitions
lsblk
# Create physical volumes
sudo pvcreate /dev/nvme0n1p2 /dev/nvme2n1p2
# Extend the volume group
sudo vgextend vg_storage /dev/nvme0n1p2 /dev/nvme2n1p2
# Extend the logical volume
sudo lvextend -l +100%FREE /dev/vg_storage/lv_storage
# Resize an ext4 filesystem
sudo resize2fs /dev/vg_storage/lv_storage
# Verify the result
sudo pvs
sudo vgs
sudo lvs
df -h
此流程通过将新分区作为物理卷加入 LVM,扩展现有卷组,增大逻辑卷,并调整文件系统大小以使用新增容量,从而扩展由 LVM 支撑的文件系统。
