逻辑卷
LVM 概述
LVM(逻辑卷管理)是一种在Linux系统中用于管理磁盘存储的技术。它提供了一种灵活的方式来管理磁盘空间,并允许管理员对存储资源进行动态调整和分配,而无需重新分区或重新格式化文件系统。
LVM的核心概念包括物理卷(PV)、卷组(VG)、逻辑卷(LV)和物理区段(PE)。物理卷是实际的存储设备,可以是硬盘、硬盘分区或者RAID设备。多个物理卷可以被组合成卷组,形成一个逻辑存储池。逻辑卷是从卷组中分配的逻辑存储空间单元,它们可以动态调整大小和移动。物理区段是物理卷和逻辑卷的最小可分配单元。
使用LVM,管理员可以执行以下操作:
- 创建卷组:将物理卷组合成卷组,形成一个逻辑存储池。
- 创建逻辑卷:从卷组中分配逻辑卷,并为其分配存储空间。逻辑卷可以根据需求进行动态调整和移动。
- 扩展和缩减逻辑卷:在需要增加或减少存储空间时,可以扩展或缩减逻辑卷的大小。
- 快照:创建逻辑卷的快照,以捕捉某个时间点的数据状态。快照可用于数据恢复、备份和测试等用途。
- 迁移和复制:可以将逻辑卷从一个物理卷迁移到另一个物理卷,或者复制逻辑卷以实现数据的冗余和高可用性。
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/sdc1:pvmove /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之前,请确保已备份卷组中的所有数据,因为该命令将永久删除数据。
示例用法:
- 删除卷组
myvg:vgremove 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命令时,需要替换示例中的vgname和lvname为实际的卷组名称和逻辑卷名称。
lvremove
- 删除逻辑卷,释放其占用的存储空间。
vgremove命令是LVM中用于移除卷组(VG)的命令。它用于从系统中完全删除指定的卷组,包括所有相关的逻辑卷和物理卷。下面是vgremove命令的详细解释:
vgremove [选项] <卷组名称>
选项:
-v, --verbose:显示详细的执行过程信息。
参数:
<卷组名称>:指定要删除的卷组的名称。
注意事项:
- 执行
vgremove命令将删除指定的卷组,并且无法撤消该操作。所有与该卷组相关联的逻辑卷和物理卷也将被删除。 - 在执行
vgremove之前,请确保已备份卷组中的所有数据,因为该命令将永久删除数据。
示例用法:
- 删除卷组
myvg:vgremove myvg
请注意,在实际使用vgremove命令时,需要替换示例中的myvg为实际的卷组名称。执行vgremove命令前,请再次确认您要删除的卷组,以免意外删除重要数据。
逻辑卷 实现
大体流程:
- 物理硬盘或分区(分区需要将类别改成8e)逻辑的组合在一起成为物理卷(PV)
- 然后放入到卷组(VG)中,再将其中的空间划分成一个一个的(PE)
- 最后将多个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% /mntLV 扩展
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卷组 扩展
当卷组空间瓶颈从而导致无法扩展逻辑卷时就需扩展卷组再扩展逻辑卷
-
首先将新的或者旧的磁盘创建分区并将ID设置为8e
-
再将分区创建为物理卷
pvcreate devname -
使用创建的物理卷扩展卷组
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-t98fCFlv
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-t98fCFlv
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% /