逻辑卷

LVM 概述

LVM(逻辑卷管理)是一种在Linux系统中用于管理磁盘存储的技术。它提供了一种灵活的方式来管理磁盘空间,并允许管理员对存储资源进行动态调整和分配,而无需重新分区或重新格式化文件系统。

LVM的核心概念包括物理卷(PV)、卷组(VG)、逻辑卷(LV)和物理区段(PE)。物理卷是实际的存储设备,可以是硬盘、硬盘分区或者RAID设备。多个物理卷可以被组合成卷组,形成一个逻辑存储池。逻辑卷是从卷组中分配的逻辑存储空间单元,它们可以动态调整大小和移动。物理区段是物理卷和逻辑卷的最小可分配单元。

使用LVM,管理员可以执行以下操作:

  1. 创建卷组:将物理卷组合成卷组,形成一个逻辑存储池。
  2. 创建逻辑卷:从卷组中分配逻辑卷,并为其分配存储空间。逻辑卷可以根据需求进行动态调整和移动。
  3. 扩展和缩减逻辑卷:在需要增加或减少存储空间时,可以扩展或缩减逻辑卷的大小。
  4. 快照:创建逻辑卷的快照,以捕捉某个时间点的数据状态。快照可用于数据恢复、备份和测试等用途。
  5. 迁移和复制:可以将逻辑卷从一个物理卷迁移到另一个物理卷,或者复制逻辑卷以实现数据的冗余和高可用性。

LVM提供了一种高度灵活和动态的存储管理方式,它使得管理员可以根据需要调整和分配存储资源,而无需对文件系统进行重新分区或重新格式化。这对于服务器环境、虚拟化环境和需要灵活管理存储的场景非常有用。

  • LVM 优点:速度快、具有可扩展性
  • LVM 缺点:因为逻辑性比较复杂,恢复较困难,不过通过raid技术 以及备份也可以尽量避免这些问题

LVM 相关术语

这些概念和组件一起构成了LVM的核心架构,通过它们,管理员可以更灵活地管理存储空间,实现动态调整和分配存储资源的能力。

PV(Physical Volume)

  • PV 代表物理卷,是LVM管理的最底层存储设备;

  • 物理卷是LVM中的基本存储单元,可以是硬盘、硬盘分区或者RAID组成的设备。

  • 物理卷是LVM管理的最底层,它们被组合成卷组(VG)。

  • 物理卷是实际存储数据的设备。

VG(Volume Group)

  • VG 代表卷组,由多个物理卷组成,提供存储空间给逻辑卷;

  • 卷组是一组物理卷(PV)的集合。

  • 卷组是一个逻辑概念,它将物理存储空间组织在一起,并为逻辑卷(LV)提供存储空间

  • 通过将多个物理卷添加到卷组中,可以扩展卷组的容量。

  • 卷组提供了一个池子,用于存储逻辑卷。

LV(Logical Volume)

  • LV 代表逻辑卷,是从卷组中分配的逻辑存储空间单元,用于存储数据。

  • 逻辑卷是从卷组中分配的逻辑存储空间单元。

  • 逻辑卷可以看作是类似于传统硬盘分区的概念,但是具有更大的灵活性。

  • 逻辑卷可以动态调整大小,可以创建、删除和移动,而无需对物理存储进行重新分区。

  • 逻辑卷是实际上用于存储数据的逻辑单元。

PE(Physical Extent)

  • 物理区段
  • 物理区段是物理卷的最小可分配单元。物理卷被划分为相等大小的物理区段,每个物理区段通常为4MB或更小。逻辑卷通过分配物理区段来占用物理卷的存储空间。

LE(Logical Extent)

  • 逻辑区段
  • 逻辑区段是逻辑卷的最小可分配单元,对应于物理区段。逻辑区段的大小与物理区段的大小相同。逻辑卷被划分为逻辑区段,它们与物理区段一一对应。

PE Size

  • 物理区段大小
  • 物理区段大小是指物理卷中每个物理区段的大小。它是LVM中的一个参数,可以在创建卷组时指定。物理区段大小的选择会影响逻辑卷的最小分配单位。

Extent Allocation Policy

  • 区段分配策略
  • 区段分配策略确定了如何在卷组中分配逻辑区段。常见的策略有"cling"(尽量将逻辑区段分配到一个物理卷上)和"normal"(在所有物理卷之间均匀分配逻辑区段)等。

Snapshot

  • 快照
  • 快照是逻辑卷的一种副本,用于捕捉某个时间点的逻辑卷数据。快照可以用于数据恢复、备份和测试等用途。

LVM 相关工具

  • lvm2,LVM2(逻辑卷管理器2)是LVM的实现,它提供了一组工具来管理和操作逻辑卷。
  • 这些工具提供了在命令行界面上进行LVM管理和操作的能力。使用这些工具,管理员可以创建、删除、扩展、移动和监视逻辑卷和卷组,以实现灵活的存储管理。
# 创建逻辑卷前需安装此工具包
yum -y install lvm2

物理卷(PV)相关工具

pvscan

  • 扫描系统中的物理卷,并更新物理卷列表。

pvscan命令是LVM中用于扫描系统中的物理卷(PV)的命令。它用于检测和识别系统中存在的物理卷,并显示其相关信息。下面是pvscan命令的详细解释:

pvscan [选项]

选项:

  • -v, --verbose:显示详细的执行过程信息。
  • -a, --all:扫描所有可用的物理卷,包括未激活的物理卷。

注意事项:

  • 执行pvscan命令将扫描系统中的物理卷,并在输出中显示它们的相关信息。
  • 如果未指定选项,则pvscan命令默认只扫描已激活的物理卷。

示例用法:

  • 扫描系统中的物理卷:pvscan
  • 显示所有可用的物理卷,包括未激活的:pvscan -a

pvscan命令通常用于识别和列出系统中可用的物理卷。通过执行pvscan命令,您可以获取有关物理卷的信息,例如设备路径、卷组、分配的空间等。

pvdisplay

  • 显示物理卷的信息,如设备路径、容量和占用情况等。
  • 也可以使用 pvs 命令获取其简要信息

pvdisplay命令是LVM中用于显示物理卷(PV)的详细信息的命令。它提供了有关物理卷的各种属性和配置的详细信息。下面是pvdisplay命令的详细解释:

pvdisplay [选项] [<物理卷路径>...]

选项:

  • -v, --verbose:显示详细的执行过程信息。

参数:

  • <物理卷路径>(可选):指定要显示信息的物理卷的路径。如果未提供物理卷路径,则pvdisplay命令将显示系统中所有物理卷的信息。

注意事项:

  • 执行pvdisplay命令将显示指定物理卷的详细信息,包括卷组、分配的空间、使用情况等。
  • 如果未指定物理卷路径,则pvdisplay命令默认显示系统中所有物理卷的信息。

示例用法:

  • 显示系统中所有物理卷的信息:pvdisplay
  • 显示指定物理卷的信息:pvdisplay /dev/sdb1
  • 显示多个物理卷的信息:pvdisplay /dev/sdb1 /dev/sdc1

通过执行pvdisplay命令,您可以获取有关物理卷的详细信息,包括设备路径、卷组、分配的空间、空闲空间、使用情况等。这些信息对于管理和监视LVM中的物理卷非常有用。

pvcreate

  • 用于创建物理卷(PV),将物理设备(如硬盘或分区)标记为LVM物理卷。

pvcreate命令是LVM中用于创建物理卷(PV)的命令。物理卷是硬盘或分区上的逻辑存储单元,pvcreate命令用于将磁盘或分区初始化为LVM可用的物理卷。下面是pvcreate命令的详细解释:

pvcreate [选项] <物理卷路径>...

选项:

  • -v, --verbose:显示详细的执行过程信息。

参数:

  • <物理卷路径>:指定要创建的物理卷的路径。例如/dev/sdb1,其中/dev/sdb1是物理卷的设备路径。

注意事项:

  • 在执行pvcreate之前,确保要创建物理卷的磁盘或分区没有被使用。
  • 执行pvcreate命令后,指定的磁盘或分区将被初始化为LVM可用的物理卷。

示例用法:

  • 创建物理卷:pvcreate /dev/sdb1
  • 同时创建多个物理卷:pvcreate /dev/sdc1 /dev/sdd1

请注意,在实际使用pvcreate命令时,需要替换示例中的/dev/sdX为实际的磁盘或分区设备路径。

pvresize

  • 调整物理卷的大小,可以扩展或缩减物理卷的容量。

pvresize命令是LVM中用于调整物理卷(PV)的大小的命令。它允许管理员修改物理卷的大小,以适应磁盘空间的变化。下面是pvresize命令的详细解释:

pvresize [选项] <物理卷路径>...

选项:

  • -v, --verbose:显示详细的执行过程信息。

参数:

  • <物理卷路径>:指定要调整大小的物理卷的路径。例如/dev/sdb1,其中/dev/sdb1是物理卷的设备路径。

注意事项:

  • 在执行pvresize之前,确保物理卷上没有逻辑卷(LV)占用空间。
  • 执行pvresize命令后,物理卷的大小将被调整以匹配其所在磁盘上的可用空间。

示例用法:

  • 调整物理卷的大小:pvresize /dev/sdb1
  • 同时调整多个物理卷的大小:pvresize /dev/sdc1 /dev/sdd1

请注意,在实际使用pvresize命令时,需要替换示例中的/dev/sdX为实际的物理卷设备路径。同时,建议在调整物理卷大小之前,先进行数据备份以防止意外数据丢失。

pvmove

  • 将数据从一个物理卷迁移到另一个物理卷,用于实现存储的迁移和重平衡。

pvmove命令是LVM中用于移动数据并重新分配物理卷(PV)上的逻辑卷(LV)的命令。它可以将逻辑卷上的数据从一个物理卷移动到另一个物理卷,以便对存储进行重新分布或替换故障磁盘。下面是pvmove命令的详细解释:

pvmove [选项] <源物理卷路径> [<目标物理卷路径>]

选项:

  • -v, --verbose:显示详细的执行过程信息。

参数:

  • <源物理卷路径>:指定要移动数据的源物理卷的路径。
  • <目标物理卷路径>(可选):指定目标物理卷的路径,即要将数据移动到的物理卷。如果未指定目标物理卷路径,则pvmove命令将在同一卷组内自动选择目标物理卷。

注意事项:

  • 在执行pvmove之前,确保目标物理卷足够大以容纳源物理卷上的数据。
  • 执行pvmove命令后,pvmove会逐步移动数据,将其从源物理卷复制到目标物理卷,并最终从源物理卷中删除数据。

示例用法:

  • 将源物理卷/dev/sdb1上的数据移动到目标物理卷/dev/sdc1pvmove /dev/sdb1 /dev/sdc1
  • 将源物理卷上的数据自动移动到同一卷组中的其他可用物理卷:pvmove /dev/sdb1

请注意,在实际使用pvmove命令时,需要替换示例中的/dev/sdX为实际的物理卷设备路径。同时,执行pvmove命令可能需要一定的时间,具体取决于数据量和系统负载。建议在执行pvmove命令之前进行备份,并确保系统和数据的安全性。

卷组(VG)相关工具

vgscan

  • 扫描系统中的卷组,并更新卷组列表。

vgscan命令是LVM中用于扫描系统中的卷组(VG)的命令。它用于检测和识别系统中存在的卷组,并更新LVM的内部缓存。下面是vgscan命令的详细解释:

vgscan [选项]

选项:

  • -v, --verbose:显示详细的执行过程信息。
  • -a, --activate:在扫描过程中激活发现的卷组。

注意事项:

  • 执行vgscan命令将扫描系统中的卷组,并在输出中显示它们的相关信息。
  • 默认情况下,vgscan命令只扫描已知的卷组,但不激活它们。可以使用-a选项来激活发现的卷组。

示例用法:

  • 扫描系统中的卷组:vgscan
  • 扫描并激活发现的卷组:vgscan -a

vgscan命令通常用于识别和更新LVM配置中的卷组。通过执行vgscan命令,您可以获取有关卷组的信息,例如名称、物理卷、逻辑卷等。这对于在系统上添加或更改卷组配置后,使LVM意识到新的或修改后的卷组是非常有用的。

vgdisplay

  • 显示卷组的信息,如卷组名称、物理卷列表、总容量和可用容量等。
  • 也可以使用 vgs 命令获取其简要信息

vgdisplay命令是LVM中用于显示卷组(VG)的详细信息的命令。它提供了有关卷组的各种属性、物理卷(PV)、逻辑卷(LV)以及卷组配置的详细信息。下面是vgdisplay命令的详细解释:

vgdisplay [选项] [<卷组名称>...]

选项:

  • -v, --verbose:显示详细的执行过程信息。

参数:

  • <卷组名称>(可选):指定要显示信息的卷组的名称。如果未提供卷组名称,则vgdisplay命令将显示系统中所有卷组的信息。

注意事项:

  • 执行vgdisplay命令将显示指定卷组的详细信息,包括卷组的名称、物理卷、逻辑卷、分配的空间、使用情况等。
  • 如果未指定卷组名称,则vgdisplay命令默认显示系统中所有卷组的信息。

示例用法:

  • 显示系统中所有卷组的信息:vgdisplay
  • 显示指定卷组的信息:vgdisplay myvg
  • 显示多个卷组的信息:vgdisplay myvg1 myvg2

通过执行vgdisplay命令,您可以获取有关卷组的详细信息,包括名称、物理卷、逻辑卷、分配的空间、空闲空间、使用情况等。这些信息对于管理和监视LVM中的卷组非常有用。

vgcreate

  • 用于创建卷组(VG),将多个物理卷组合成一个逻辑存储池。

vgcreate命令是LVM中用于创建卷组(VG)的命令。卷组是由一个或多个物理卷(PV)组成的逻辑存储池,vgcreate命令用于创建并配置卷组的各种属性。下面是vgcreate命令的详细解释:

vgcreate [选项] <卷组路径> [<物理卷路径>...]

选项:

  • -s, --physicalextentsize <区段大小>:指定卷组的物理区段大小。
  • -c, --clustered:创建一个支持集群的卷组。
  • -v, --verbose:显示详细的创建过程信息。

参数:

  • <卷组路径>:指定要创建的卷组的路径。例如/dev/vgname,其中vgname是卷组名称。
  • <物理卷路径>(可选):指定要添加到卷组中的物理卷的路径。可以指定一个或多个物理卷路径,用空格分隔。

注意事项:

  • 在执行vgcreate之前,物理卷(PV)必须已经存在。
  • 执行vgcreate命令后,将创建一个新的卷组,并将指定的物理卷添加到卷组中。

示例用法:

  • 创建一个名为myvg的卷组,并将物理卷/dev/sdb1添加到其中:vgcreate /dev/myvg /dev/sdb1
  • 创建一个支持集群的卷组,并指定物理区段大小为4MB:vgcreate -c -s 4M /dev/myvg /dev/sdb1 /dev/sdc1

请注意,在实际使用vgcreate命令时,需要替换示例中的vgname/dev/sdX为实际的卷组名称和物理卷路径。

vgextend

  • 将物理卷添加到现有的卷组中,以扩展卷组的容量。

vgextend命令是LVM中用于扩展卷组(VG)的命令。它允许管理员将一个或多个物理卷(PV)添加到现有的卷组中,从而增加卷组的可用存储空间。下面是vgextend命令的详细解释:

vgextend [选项] <卷组路径> [<物理卷路径>...]

选项:

  • -v, --verbose:显示详细的执行过程信息。

参数:

  • <卷组路径>:指定要扩展的卷组的路径。例如/dev/vgname,其中vgname是卷组名称。
  • <物理卷路径>:指定要添加到卷组中的物理卷的路径。可以指定一个或多个物理卷路径,用空格分隔。

注意事项:

  • 在执行vgextend之前,卷组(VG)必须已经存在。
  • 执行vgextend命令后,指定的物理卷将被添加到卷组中,并扩展卷组的可用存储空间。

示例用法:

  • 将物理卷/dev/sdc1添加到名为myvg的卷组中:vgextend /dev/myvg /dev/sdc1
  • 将多个物理卷同时添加到卷组中:vgextend /dev/myvg /dev/sdc1 /dev/sdd1

请注意,在实际使用vgextend命令时,需要替换示例中的vgname/dev/sdX为实际的卷组名称和物理卷路径。

vgremove

  • 删除卷组,释放其占用的存储空间。

vgremove命令是LVM中用于移除卷组(VG)的命令。它用于从系统中完全删除指定的卷组,包括所有相关的逻辑卷和物理卷。下面是vgremove命令的详细解释:

vgremove [选项] <卷组名称>

选项:

  • -v, --verbose:显示详细的执行过程信息。

参数:

  • <卷组名称>:指定要删除的卷组的名称。

注意事项:

  • 执行vgremove命令将删除指定的卷组,并且无法撤消该操作。所有与该卷组相关联的逻辑卷和物理卷也将被删除。
  • 在执行vgremove之前,请确保已备份卷组中的所有数据,因为该命令将永久删除数据。

示例用法:

  • 删除卷组myvgvgremove myvg

请注意,在实际使用vgremove命令时,需要替换示例中的myvg为实际的卷组名称。执行vgremove命令前,请再次确认您要删除的卷组,以免意外删除重要数据。

逻辑卷(LV)相关工具

lvscan

  • 扫描系统中的逻辑卷,并更新逻辑卷列表。

lvscan命令是LVM中用于扫描系统中的逻辑卷(LV)的命令。它用于检测和识别系统中存在的逻辑卷,并显示其相关信息。下面是lvscan命令的详细解释:

lvscan [选项]

选项:

  • -v, --verbose:显示详细的执行过程信息。
  • -a, --activate:在扫描过程中激活发现的逻辑卷。

注意事项:

  • 执行lvscan命令将扫描系统中的逻辑卷,并在输出中显示它们的相关信息。
  • 默认情况下,lvscan命令只扫描已知的逻辑卷,但不激活它们。可以使用-a选项来激活发现的逻辑卷。

示例用法:

  • 扫描系统中的逻辑卷:lvscan
  • 扫描并激活发现的逻辑卷:lvscan -a

lvscan命令通常用于识别和列出系统中可用的逻辑卷。通过执行lvscan命令,您可以获取有关逻辑卷的信息,例如卷组、分配的空间、使用情况等。这些信息对于管理和监视LVM中的逻辑卷非常有用。

lvdisplay

  • 显示逻辑卷的信息,如逻辑卷名称、所属卷组、容量和路径等。
  • 也可以使用 lvs 命令获取其简要信息

lvdisplay命令是LVM中用于显示逻辑卷(LV)的详细信息的命令。它提供了有关逻辑卷的各种属性、卷组(VG)、物理卷(PV)以及逻辑卷配置的详细信息。下面是lvdisplay命令的详细解释:

lvdisplay [选项] [<逻辑卷路径>...]

选项:

  • -v, --verbose:显示详细的执行过程信息。

参数:

  • <逻辑卷路径>(可选):指定要显示信息的逻辑卷的路径。如果未提供逻辑卷路径,则lvdisplay命令将显示系统中所有逻辑卷的信息。

注意事项:

  • 执行lvdisplay命令将显示指定逻辑卷的详细信息,包括逻辑卷的路径、卷组、分配的空间、使用情况等。
  • 如果未指定逻辑卷路径,则lvdisplay命令默认显示系统中所有逻辑卷的信息。

示例用法:

  • 显示系统中所有逻辑卷的信息:lvdisplay
  • 显示指定逻辑卷的信息:lvdisplay /dev/myvg/mylv
  • 显示多个逻辑卷的信息:lvdisplay /dev/myvg/mylv1 /dev/myvg/mylv2

通过执行lvdisplay命令,您可以获取有关逻辑卷的详细信息,包括路径、卷组、物理卷、分配的空间、空闲空间、使用情况等。这些信息对于管理和监视LVM中的逻辑卷非常有用。

lvcreate

  • 用于创建逻辑卷(LV),从卷组中分配逻辑存储空间给逻辑卷。

lvcreate命令是LVM中用于创建逻辑卷(LV)的命令。逻辑卷是从卷组中分配的逻辑存储空间单元,lvcreate命令用于创建并配置逻辑卷的各种属性。下面是lvcreate命令的详细解释:

lvcreate [选项] <卷组路径> [<大小>]

选项:

  • -L, --size <大小>:指定逻辑卷的大小。可以使用单位(如K、M、G、T)来表示大小,例如-L 10G表示创建一个大小为10GB的逻辑卷。
  • -l, --extents <区段数量>:指定逻辑卷的大小,使用区段数量来表示。区段数量可通过vgdisplay命令查看。
  • -n, --name <逻辑卷名称>:指定逻辑卷的名称。
  • -r, --readahead <读取提前量>:指定逻辑卷的读取提前量。

参数:

  • <卷组路径>:指定要创建逻辑卷的卷组的路径。例如/dev/vgname,其中vgname是卷组名称。
  • <大小>(可选):指定逻辑卷的大小。如果未提供该参数,则默认使用卷组中未分配的所有可用空间。

注意事项:

  • 在执行lvcreate之前,卷组(VG)必须已经存在。
  • 执行lvcreate命令后,逻辑卷会在指定的卷组中分配相应大小的存储空间。
  • 默认情况下,逻辑卷的名称与其设备路径相同,可以使用-n选项来指定自定义的逻辑卷名称。

示例用法:

  • 创建一个大小为20GB的逻辑卷:lvcreate -L 20G /dev/vgname
  • 创建一个使用10个区段的逻辑卷:lvcreate -l 10 /dev/vgname
  • 创建一个大小为1TB并命名为mylv的逻辑卷:lvcreate -L 1T -n mylv /dev/vgname

请注意,在实际使用lvcreate命令时,需要替换示例中的vgname为实际的卷组名称。

lvextend

  • 扩展逻辑卷的大小,增加逻辑卷可用的存储空间。

lvextend命令是LVM中用于扩展逻辑卷(LV)大小的命令。它允许管理员增加逻辑卷的可用存储空间,以满足需要更多存储的要求。下面是lvextend命令的详细解释:

lvextend [选项] <逻辑卷路径> [<物理卷路径>]

选项:

  • -L, --size <大小>:指定扩展后的逻辑卷大小。可以使用单位(如K、M、G、T)来表示大小,例如-L 10G表示扩展为10GB。
  • -l, --extents <区段数量>:指定扩展后的逻辑卷大小,使用区段数量来表示。区段数量可通过vgdisplay命令查看。
  • -r, --resizefs:在扩展逻辑卷后自动调整文件系统的大小。仅适用于支持在线调整的文件系统,如ext3、ext4、XFS等。

参数:

  • <逻辑卷路径>:指定要扩展的逻辑卷的路径。例如/dev/vgname/lvname,其中vgname是卷组名称,lvname是逻辑卷名称。
  • <物理卷路径>(可选):指定要用于扩展逻辑卷的物理卷的路径。如果未提供该参数,则默认使用卷组中其他可用的物理卷。

注意事项:

  • 在执行lvextend之前,逻辑卷所在的卷组(VG)必须有足够的未分配空间或者添加了新的物理卷。
  • 执行lvextend命令后,逻辑卷的文件系统大小通常不会自动调整,除非使用了-r选项并且文件系统支持在线调整。
  • 在进行逻辑卷扩展时,需要确保文件系统上的数据已备份,以防止意外数据丢失。

示例用法:

  • 扩展逻辑卷为20GB:lvextend -L 20G /dev/vgname/lvname
  • 扩展逻辑卷使用10个区段:lvextend -l +10 /dev/vgname/lvname
  • 扩展逻辑卷并自动调整文件系统大小:lvextend -r -L +5G /dev/vgname/lvname

请注意,在实际使用lvextend命令时,需要替换示例中的vgnamelvname为实际的卷组名称和逻辑卷名称。

lvremove

  • 删除逻辑卷,释放其占用的存储空间。

vgremove命令是LVM中用于移除卷组(VG)的命令。它用于从系统中完全删除指定的卷组,包括所有相关的逻辑卷和物理卷。下面是vgremove命令的详细解释:

vgremove [选项] <卷组名称>

选项:

  • -v, --verbose:显示详细的执行过程信息。

参数:

  • <卷组名称>:指定要删除的卷组的名称。

注意事项:

  • 执行vgremove命令将删除指定的卷组,并且无法撤消该操作。所有与该卷组相关联的逻辑卷和物理卷也将被删除。
  • 在执行vgremove之前,请确保已备份卷组中的所有数据,因为该命令将永久删除数据。

示例用法:

  • 删除卷组myvgvgremove myvg

请注意,在实际使用vgremove命令时,需要替换示例中的myvg为实际的卷组名称。执行vgremove命令前,请再次确认您要删除的卷组,以免意外删除重要数据。

逻辑卷 实现

大体流程:

  1. 物理硬盘或分区(分区需要将类别改成8e)逻辑的组合在一起成为物理卷(PV)
  2. 然后放入到卷组(VG)中,再将其中的空间划分成一个一个的(PE)
  3. 最后将多个PE的组成称为逻辑卷(LV)

创建物理卷(PV)

  • 将现有的块设备创建成物理卷(可以是磁盘,也可以是分区)
#查看目前存在的物理卷
pvs
pvscan
pvdisplay #显示的更详细

#创建物理卷
pvcreate 设备名或者分区名,支持多个(分区需修改类型为8e)

范例:使用分区创建物理卷

准备磁盘

# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb    8:16   0  30G  0 disk 

基于准备的磁盘创建分区

# fdisk /dev/sdb
...
Command (m for help): n #添加一个新分区
...
Select (default p): p #设置为主分区
Partition number (1-4, default 1): 1 #编号为1
First sector (2048-62914559, default 2048): #起始位置默认
Last sector, +sectors or +size{K,M,G,T,P} (2048-62914559, default 62914559): +10G #增加10G的分区
...
Command (m for help): p #可以看到type类型默认为83,
...
Command (m for help): t #修改默认类型
...
Hex code (type L to list all codes): 8e #修改成8e,8e表示逻辑卷
...
Command (m for help): w #存盘退出

#查看创建的结果
# fdisk -l /dev/sdb
...
Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1        2048 20973567 20971520  10G 8e Linux LVM

基于分区创建物理卷

# pvcreate /dev/sdb1 
  Physical volume "/dev/sdb1" successfully created.
  
#查看创建的结果
# pvs
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sdb1     lvm2 ---  10.00g 10.00g
  
# pvscan 
  PV /dev/sdb1                      lvm2 [10.00 GiB]
  Total: 1 [10.00 GiB] / in use: 0 [0   ] / in no VG: 1 [10.00 GiB]

# pvdisplay
  "/dev/sdb1" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               tG2qG8-yfJA-Sexa-LSxB-Ct6K-Iale-YNKedi

范例:使用整块硬盘创建物理卷

准备磁盘

# lsblk /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc    8:32   0  30G  0 disk 

基于磁盘创建物理卷

# pvcreate /dev/sdc 
  Physical volume "/dev/sdc" successfully created.

# pvscan 
  PV /dev/sdb1                      lvm2 [10.00 GiB]
  PV /dev/sdc                       lvm2 [30.00 GiB] #
  Total: 2 [40.00 GiB] / in use: 0 [0   ] / in no VG: 2 [40.00 GiB]

# pvs
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sdb1     lvm2 ---  10.00g 10.00g
  /dev/sdc      lvm2 ---  30.00g 30.00g #

# pvdisplay
  "/dev/sdb1" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               tG2qG8-yfJA-Sexa-LSxB-Ct6K-Iale-YNKedi
   
  "/dev/sdc" is a new physical volume of "30.00 GiB" #
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               30.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               sNGIAO-0ffD-0ipU-Ex5h-2H1x-0Ra4-3Zkl8j

创建卷组(VG)

  • 将一个或多个孤立的物理卷组合在一起( 组合完成后卷组中包含多个PE)
  • PE:Physical Extent 物理盘区,大小可以指定,不指定也有默认值
#查看目前存在的卷组
vgs
vgdisplay #显示的更详细

#创建卷组
vgcreate vgname devname [devname...]

范例:创建卷组

查看现有物理卷
# pvdisplay
  "/dev/sdb1" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               tG2qG8-yfJA-Sexa-LSxB-Ct6K-Iale-YNKedi
   
  "/dev/sdc" is a new physical volume of "30.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               30.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               sNGIAO-0ffD-0ipU-Ex5h-2H1x-0Ra4-3Zkl8j
基于现有物理卷创建卷组
  • 创建卷组时后面可以添加多个物理卷,从而将多个物理卷整合为一个卷组
#创建卷组
# vgcreate test_vg /dev/sdb1 
  Volume group "test_vg" successfully created
# vgcreate test_vg2 /dev/sdc
  Volume group "test_vg2" successfully created

#查看创建后的结果
# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdc
  VG Name               test_vg2
  PV Size               30.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB #每个PE的大小
  Total PE              7679 #PE的总数
  Free PE               7679 #剩余可用的PE数量
  Allocated PE          0
  PV UUID               sNGIAO-0ffD-0ipU-Ex5h-2H1x-0Ra4-3Zkl8j
   
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               test_vg
  PV Size               10.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              2559
  Free PE               2559
  Allocated PE          0
  PV UUID               tG2qG8-yfJA-Sexa-LSxB-Ct6K-Iale-YNKedi

# vgdisplay 
  --- Volume group ---
  VG Name               test_vg2
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <30.00 GiB
  PE Size               4.00 MiB
  Total PE              7679
  Alloc PE / Size       0 / 0   
  Free  PE / Size       7679 / <30.00 GiB
  VG UUID               QGfwik-xQMe-xHdC-cqJn-D3as-T7CV-eCBBrw
   
  --- Volume group ---
  VG Name               test_vg
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <10.00 GiB
  PE Size               4.00 MiB
  Total PE              2559
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2559 / <10.00 GiB
  VG UUID               RCgTsA-0K5j-p2tB-DNhj-hBZD-M8e8-NJxoyY

创建逻辑卷(LV)

  • 将卷组中的PE组合成逻辑卷
#查看目前存在的物理卷
lvs
lvdisplay #显示的更详细

#创建逻辑卷语法
lvcreate -n <lv_name> -<l|L>l表示PE个数,L表示大小M,G.. <vg_name>

#将剩余空间全部分配的命令
lvextend -r -l +100%free -n </dev/vgname/lvname>

#也可以指定分配的百分比
lvextend -r -l +60%vg -n </dev/vgname/lvname>

范例:基于现有卷组创建逻辑卷

查看现有卷组
# vgdisplay 
  --- Volume group ---
  VG Name               test_vg2
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <30.00 GiB
  PE Size               4.00 MiB
  Total PE              7679
  Alloc PE / Size       0 / 0   
  Free  PE / Size       7679 / <30.00 GiB
  VG UUID               QGfwik-xQMe-xHdC-cqJn-D3as-T7CV-eCBBrw
   
  --- Volume group ---
  VG Name               test_vg
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <10.00 GiB
  PE Size               4.00 MiB
  Total PE              2559
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2559 / <10.00 GiB
  VG UUID               RCgTsA-0K5j-p2tB-DNhj-hBZD-M8e8-NJxoyY
基于现有卷组创建逻辑卷
#基于test_vg卷组创建5g空间的逻辑卷 并将逻辑卷命名为test_lv
# lvcreate -n test_lv -L 5g test_vg
  Logical volume "test_lv" created.

#查看创建的逻辑卷
# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/test_vg/test_lv
  LV Name                test_lv
  VG Name                test_vg
  LV UUID                7UKl4i-Ew1m-OD1z-DLT0-uabF-Qkx3-ygCQnU
  LV Write Access        read/write
  LV Creation host, time nfs-server, 2022-04-04 20:11:35 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
  
#本质上就是在事先的卷组设备上创建软连接执行新的逻辑卷
# ll /dev/test_vg/test_lv 
lrwxrwxrwx 1 root root 7 Apr  4 20:11 /dev/test_vg/test_lv -> ../dm-0

  
#将卷组中的剩余空间全部分配
# lvextend -r -l +100%free -n /dev/test_vg/test_lv
  Size of logical volume test_vg/test_lv changed from 5.00 GiB (1280 extents) to <10.00 GiB (2559 extents).
  Logical volume test_vg/test_lv successfully resized.
fsadm: Cannot get FSTYPE of "/dev/mapper/test_vg-test_lv".
  /usr/sbin/fsadm failed: 1

#再次查看,可以看到test_vg卷组中的空间已全部分配完毕
# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/test_vg/test_lv
  LV Name                test_lv
  VG Name                test_vg
  LV UUID                7UKl4i-Ew1m-OD1z-DLT0-uabF-Qkx3-ygCQnU
  LV Write Access        read/write
  LV Creation host, time nfs-server, 2022-04-04 20:11:35 +0800
  LV Status              available
  # open                 0
  LV Size                <10.00 GiB
  Current LE             2559
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

# vgdisplay 
  --- Volume group ---
  VG Name               test_vg2
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <30.00 GiB
  PE Size               4.00 MiB
  Total PE              7679
  Alloc PE / Size       0 / 0   
  Free  PE / Size       7679 / <30.00 GiB
  VG UUID               QGfwik-xQMe-xHdC-cqJn-D3as-T7CV-eCBBrw
   
  --- Volume group ---
  VG Name               test_vg
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <10.00 GiB
  PE Size               4.00 MiB
  Total PE              2559
  Alloc PE / Size       2559 / <10.00 GiB
  Free  PE / Size       0 / 0   #全部被分配完毕
  VG UUID               RCgTsA-0K5j-p2tB-DNhj-hBZD-M8e8-NJxoyY

后续操作

  • 最后就是创建文件系统然后挂载了(fstab文件格式和正常挂载一样)

查看现有逻辑卷

# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/test_vg/test_lv
  LV Name                test_lv
  VG Name                test_vg
  LV UUID                7UKl4i-Ew1m-OD1z-DLT0-uabF-Qkx3-ygCQnU
  LV Write Access        read/write
  LV Creation host, time nfs-server, 2022-04-04 20:11:35 +0800
  LV Status              available
  # open                 0
  LV Size                <10.00 GiB
  Current LE             2559
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

基于现有逻辑卷创建文件系统

# mkfs.ext4 /dev/test_vg/test_lv
...

挂载

  • 注意:生产中通常使用UUID进行永久挂载,UUID可以使用blkid进行查看
#临时挂载举例
# mount /dev/test_vg/test_lv /mnt/

#查看挂载信息
# df -h /dev/test_vg/test_lv
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/test_vg-test_lv  9.8G   37M  9.3G   1% /mnt

LV 扩展

lvextend -{l|L} l表示PE个数,L表示大小(+M,G..) -n {/dev/vgname/lvname}

# 将剩余空间全部分配的命令
lvextend -r -l +100%free -n {/dev/vgname/lvname}

# 也可以指定分配的百分比
lvextend -r -l +60%vg -n {/dev/vgname/lvname}

# 扩展后还需同步文件系统
# 先查看分区是什么文件系统
blkid lvname

# ext4文件系统执行此命令
resize2fs /mountpoint

# xfs文件系统执行此命令
xfs_growfs /mountpoint

范例:实现逻辑卷扩展

扩展前查看磁盘剩余空间

# 可以看到总大小为9.8G
# df -h /dev/mapper/test_vg-test_lv 
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/test_vg-test_lv  9.8G   37M  9.3G   1% /mnt

查看目前卷组是否有剩余空间

# vgdisplay test_vg
  --- Volume group ---
  VG Name               test_vg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               29.99 GiB
  PE Size               4.00 MiB
  Total PE              7678
  Alloc PE / Size       2559 / <10.00 GiB
  Free  PE / Size       5119 / <20.00 GiB # 还有20g的空间
  VG UUID               RCgTsA-0K5j-p2tB-DNhj-hBZD-M8e8-NJxoyY

将卷组中剩余空间全部分配

# lvextend -r -l +100%free -n /dev/mapper/test_vg-test_lv
  Size of logical volume test_vg/test_lv changed from <10.00 GiB (2559 extents) to 29.99 GiB (7678 extents).
  Logical volume test_vg/test_lv successfully resized.
resize2fs 1.45.6 (20-Mar-2020) # 已经自动执行了文件系统的同步
Filesystem at /dev/mapper/test_vg-test_lv is mounted on /mnt; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 4
The filesystem on /dev/mapper/test_vg-test_lv is now 7862272 (4k) blocks long.

同步文件系统

  • 空间扩展完毕后还需同步文件系统,否则会因扩展的空间中不包含文件系统而导致无法显示添加的空间
  • 较新版本的lvm工具已经可以自动同步文件系统了(是因为加了-r选项,并且此前的文件系统为ext4)
查看文件系统是否同步
# df -h /dev/mapper/test_vg-test_lv 
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/test_vg-test_lv   30G   44M   29G   1% /mnt
如果不同步执行以下命令
#ext4文件系统执行此命令
resize2fs /mountpoint

#xfs文件系统执行此命令
xfs_growfs /mountpoint

卷组 扩展

当卷组空间瓶颈从而导致无法扩展逻辑卷时就需扩展卷组再扩展逻辑卷

  1. 首先将新的或者旧的磁盘创建分区并将ID设置为8e

  2. 再将分区创建为物理卷

    pvcreate devname
  3. 使用创建的物理卷扩展卷组

    vgextend vgname devname

范例:实现卷组扩展

查看目前卷组使用情况

  • 可以看到卷组空间已经用光,这时将无法继续创建逻辑卷
# vgdisplay test_vg
  --- Volume group ---
  VG Name               test_vg
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <10.00 GiB
  PE Size               4.00 MiB
  Total PE              2559
  Alloc PE / Size       2559 / <10.00 GiB
  Free  PE / Size       0 / 0   #空间已经用光
  VG UUID               RCgTsA-0K5j-p2tB-DNhj-hBZD-M8e8-NJxoyY

准备新的分区或磁盘

  • 这里以使用分区举例
#sdb还有剩余20G的空间
# lsblk /dev/sdb
NAME                MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb                   8:16   0  30G  0 disk 
└─sdb1                8:17   0  10G  0 part 
  └─test_vg-test_lv 253:0    0  10G  0 lvm  /mnt
  
#创建分区
# fdisk /dev/sdb
...
Command (m for help): n  
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 
First sector (20973568-62914559, default 20973568): 
Last sector, +sectors or +size{K,M,G,T,P} (20973568-62914559, default 62914559): 
Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 8e

Changed type of partition 'Linux' to 'Linux LVM'.
Command (m for help): p
Disk /dev/sdb: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x61a98b75

Device     Boot    Start      End  Sectors Size Id Type
/dev/sdb1           2048 20973567 20971520  10G 8e Linux LVM
/dev/sdb2       20973568 62914559 41940992  20G 8e Linux LVM #新创建的分区

Command (m for help): w #存盘退出
The partition table has been altered.
Syncing disks.

基于新的分区或磁盘创建物理卷

#创建新的物理卷
# pvcreate /dev/sdb2 
  Physical volume "/dev/sdb2" successfully created.
  
#查看创建的物理卷
# pvdisplay 
  "/dev/sdb2" is a new physical volume of "<20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               <20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               6K98VX-b2d9-sWHO-BtYe-Tnun-QWAd-8VGvRK

使用新创建的物理卷扩展卷组

# vgextend test_vg /dev/sdb2
  Volume group "test_vg" successfully extended
  
#查看扩展后的结果
# vgdisplay test_vg
  --- Volume group ---
  VG Name               test_vg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               29.99 GiB
  PE Size               4.00 MiB
  Total PE              7678
  Alloc PE / Size       2559 / <10.00 GiB
  Free  PE / Size       5119 / <20.00 GiB #扩展成功
  VG UUID               RCgTsA-0K5j-p2tB-DNhj-hBZD-M8e8-NJxoyY

跨主机迁移卷组

逻辑卷快照

逻辑卷快照原理:拍摄快照就是记录当前的数据状态(只占用很小的一点空间),一旦数据发生修改 才会将旧的数据记录到快照内(从而快照空间增加)

  • 快照会影响性能,所以最好只在测试环境中使用

创建逻辑卷快照

创建前注意事项:使用vgdisplay查看剩余空间是否足够创建快照(剩余空间是否大于逻辑卷空间)

#创建逻辑卷快照,lvname-snapshot也可以起其他名字,起这个名字是为了见名知意,-s表示创建的是快照,-L指定大小,一般等于逻辑卷空间就可以
lvcreate -n lvname-snapshot -s -L 100M /dev/vg0/lvname

#查看快照信息
lvdisplay

逻辑卷快照也可以进行挂载,但是挂载是需要-o nouuid,ro,不加ro的话快照的内容被删除再恢复时也恢复不了,同时恢复时也会影响原有的数据

还原逻辑卷快照

还原结束后会自动删除快照本身

#恢复前需将逻辑卷以及快照的挂载全部取消
lvconvert --merge /dev/vg0/lvname-snapshot #还原

更换硬盘

pvmove devname #移动前只需确保其他卷组有足够的空间来存放PE

vgreduce vgname devname #将设备从卷组里删除

pvremove devname #将设备从物理卷里删除

#最后删除分区信息,再取消挂载(主机挂载配置文件信息要删除)

范例:生产环境通过 LVM 扩容磁盘空间

扩容前

  • / 只剩下1.7G 空间可用
root@nfs-server:~# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               3.9G     0  3.9G   0% /dev
tmpfs                              798M  1.2M  797M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  3.9G  2.1G  1.7G  56% / # 只剩下1.7G 空间可用
tmpfs                              3.9G     0  3.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/loop0                          90M   90M     0 100% /snap/core/8268
/dev/sda2                          974M   80M  828M   9% /boot
tmpfs                              798M     0  798M   0% /run/user/0


root@nfs-server:~# lsblk 
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0                       7:0    0 89.1M  1 loop /snap/core/8268
sda                         8:0    0    1T  0 disk 
├─sda1                      8:1    0    1M  0 part 
├─sda2                      8:2    0    1G  0 part /boot
└─sda3                      8:3    0 1023G  0 part 
  └─ubuntu--vg-ubuntu--lv 253:0    0    4G  0 lvm  /
sr0                        11:0    1 1024M  0 rom  

vg

  • 查看当前是否存在 vg,以及 vg 是否有剩余空间供 lv 使用;
  • 可以看到目前还有 1019g 的空间可供 lv 使用。
root@nfs-server:~# vgs
  VG        #PV #LV #SN Attr   VSize     VFree    
  ubuntu-vg   1   1   0 wz--n- <1023.00g <1019.00g

root@nfs-server:~# vgdisplay 
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <1023.00 GiB
  PE Size               4.00 MiB
  Total PE              261887
  Alloc PE / Size       1024 / 4.00 GiB
  Free  PE / Size       260863 / <1019.00 GiB
  VG UUID               2ddSFQ-OAXD-hIjU-Pqe0-JKeK-WsrP-t98fCF

lv

root@nfs-server:~# lvs
  LV        VG        Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- 4.00g   


root@nfs-server:~# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                aGz7R2-8ce0-LUkq-vIKw-pJYP-LGh7-OwWY6H
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2023-06-07 06:15:20 +0000
  LV Status              available
  # open                 1
  LV Size                4.00 GiB
  Current LE             1024
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

扩容

root@nfs-server:~# lvextend -r -L +500G -n /dev/ubuntu-vg/ubuntu-lv 
  Size of logical volume ubuntu-vg/ubuntu-lv changed from 4.00 GiB (1024 extents) to 504.00 GiB (129024 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 63
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 132120576 (4k) blocks long.

扩容后

root@nfs-server:~# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               3.9G     0  3.9G   0% /dev
tmpfs                              798M  1.2M  797M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  496G  2.1G  474G   1% /
tmpfs                              3.9G     0  3.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/loop0                          90M   90M     0 100% /snap/core/8268
/dev/sda2                          974M   80M  828M   9% /boot
tmpfs                              798M     0  798M   0% /run/user/0


# lsblk 
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0                       7:0    0 89.1M  1 loop /snap/core/8268
sda                         8:0    0    1T  0 disk 
├─sda1                      8:1    0    1M  0 part 
├─sda2                      8:2    0    1G  0 part /boot
└─sda3                      8:3    0 1023G  0 part 
  └─ubuntu--vg-ubuntu--lv 253:0    0  504G  0 lvm  /
sr0                        11:0    1 1024M  0 rom  

vg

root@nfs-server:~# vgs
  VG        #PV #LV #SN Attr   VSize     VFree   
  ubuntu-vg   1   1   0 wz--n- <1023.00g <519.00g


root@nfs-server:~# vgdisplay 
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <1023.00 GiB
  PE Size               4.00 MiB
  Total PE              261887
  Alloc PE / Size       129024 / 504.00 GiB
  Free  PE / Size       132863 / <519.00 GiB
  VG UUID               2ddSFQ-OAXD-hIjU-Pqe0-JKeK-WsrP-t98fCF

lv

root@nfs-server:~# lvs
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- 504.00g                                                 


root@nfs-server:~# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                aGz7R2-8ce0-LUkq-vIKw-pJYP-LGh7-OwWY6H
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2023-06-07 06:15:20 +0000
  LV Status              available
  # open                 1
  LV Size                504.00 GiB
  Current LE             129024
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

将 vg 中剩余空间全部分配

root@nfs-server:~# lvextend -r -l +100%free /dev/ubuntu-vg/ubuntu-lv 
  Size of logical volume ubuntu-vg/ubuntu-lv changed from 504.00 GiB (129024 extents) to <1023.00 GiB (261887 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 63, new_desc_blocks = 128
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 268172288 (4k) blocks long.


root@nfs-server:~# lsblk
NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop1                       7:1    0 116.8M  1 loop /snap/core/14946
sda                         8:0    0     1T  0 disk 
├─sda1                      8:1    0     1M  0 part 
├─sda2                      8:2    0     1G  0 part /boot
└─sda3                      8:3    0  1023G  0 part 
  └─ubuntu--vg-ubuntu--lv 253:0    0  1023G  0 lvm  /
sr0                        11:0    1  1024M  0 rom  


root@nfs-server:~# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               3.9G     0  3.9G   0% /dev
tmpfs                              798M  1.2M  797M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 1007G  2.2G  964G   1% /
tmpfs                              3.9G     0  3.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda2                          974M   80M  828M   9% /boot
/dev/loop1                         117M  117M     0 100% /snap/core/14946
tmpfs                              798M     0  798M   0% /run/user/0

逻辑卷

扩展磁盘空间

下面是通过逻辑卷(LVM)将新加的 100G 硬盘空间扩展到根目录 ( / ) 的步骤。

# 1. 确认新添加的磁盘
# lsblk 
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                         8:0    0  100G  0 disk 
├─sda1                      8:1    0    1M  0 part 
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0   98G  0 part 
  └─ubuntu--vg-ubuntu--lv 253:0    0   98G  0 lvm  /
sdb                         8:16   0  100G  0 disk  # 新添加的磁盘


# 2. 将整个磁盘创建为物理卷 (PV)
pvcreate /dev/sdb


# 3. 查找当前根目录所在的卷组名称
# vgs
  VG        #PV #LV #SN Attr   VSize   VFree
  ubuntu-vg   1   1   0 wz--n- <98.00g    0 
# lvs
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- <98.00g 


# 4. 扩展卷组
vgextend ubuntu-vg /dev/sdb # 将新的物理卷 /dev/sdb 添加到卷组 ubuntu-vg


# 5. 查看卷组总容量是否已经增加
# vgs
  VG        #PV #LV #SN Attr   VSize   VFree   
  ubuntu-vg   2   1   0 wz--n- 197.99g <100.00g


# 6. 扩展逻辑卷
lvextend -l +100%FREE ubuntu-vg/ubuntu-lv # 将 ubuntu-vg 中所有可用的空间分配给 ubuntu-lv


# 7. 确定要扩展路径所使用的文件系统类型
# df -Th /
Filesystem                        Type  Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv ext4   96G   86G  5.1G  95% /


# 8. 扩展文件系统,如果是 ext4 文件系统
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv


# 9. 验证扩展结果
# df -h /
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv  195G   86G  100G  47% /