分步教程:使用新分区扩展 LVM

本教程将介绍如何扩展现有的逻辑卷管理器(Logical Volume Manager,LVM)配置:先创建新的磁盘分区,将这些分区转换为 LVM 物理卷,再把它们加入现有卷组,最后扩展逻辑卷和文件系统。

下面的示例使用两块 NVMe 磁盘 /dev/nvme0n1/dev/nvme2n1,并假设新分区分别是 /dev/nvme0n1p2/dev/nvme2n1p2。请将设备名称、卷组名称、逻辑卷名称、分区编号和容量大小替换为你自己系统中的实际值。

前提条件

  • 拥有 root 或 sudo 权限。
  • 已对重要数据进行当前备份。
  • 已存在一个 LVM 卷组和逻辑卷。
  • 已使用 lsblkpvsvgslvs 确认正确的磁盘设备。
  • 有足够的未分配磁盘空间用于创建新分区。

在修改分区表之前,先检查当前布局:

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,请使用交互式 fdiskparted,并适当设置分区类型。即使没有分区类型标志,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 支撑的文件系统。

Leave a Reply