LVM深度解析:概念、术语与实战操作指南
引言
逻辑卷管理(LVM)是一种存储设备管理技术,它允许用户对组成存储设备的物理布局进行汇集和抽象,从而实现灵活管理。利用Linux内核的设备映射器框架,当前版本的LVM2可以将现有存储设备集合成组,并根据需要分配逻辑单元。
LVM的主要优势在于提供更高级别的抽象、灵活性和控制。逻辑卷可以拥有有意义的名称,例如“数据库”或“根备份”。卷还可以根据空间需求动态调整大小,并在运行时在物理设备之间迁移或导出。LVM还提供了诸如快照、条带化和镜像等高级功能。
在本指南中,您将学习LVM的工作原理,并练习基本命令,以便在裸金属机器上快速启动并运行。
逻辑卷管理(LVM)架构和术语解释
在深入研究LVM管理命令之前,了解LVM如何组织存储设备以及它使用的一些术语是非常重要的。
LVM存储管理结构
LVM通过在物理存储设备之上构建抽象层来实现功能。LVM使用的基本层次,从最原始开始,分别是:
- 物理卷(Physical Volumes): LVM工具中物理卷的前缀是
pv...
。这些是物理块设备或其他类似磁盘的设备(例如,由设备映射器创建的其他设备,如RAID阵列),LVM将其用作更高级别抽象的原始构建材料。物理卷是常规存储设备。LVM会在设备上写入一个头部信息,以将其分配给管理。 - 卷组(Volume Groups): LVM工具中卷组的前缀是
vg...
。LVM将物理卷组合成称为卷组的存储池。卷组抽象了底层设备的特性,并作为一个统一的逻辑设备运行,具有组成物理卷的总存储容量。 - 逻辑卷(Logical Volumes): LVM工具中逻辑卷的前缀是
lv...
,通用的LVM工具可能以lvm...
开头。一个卷组可以被划分为任意数量的逻辑卷。逻辑卷在功能上等同于物理磁盘上的分区,但具有更大的灵活性。逻辑卷是用户和应用程序将与之交互的主要组件。
LVM可以将物理卷合并为卷组,以统一系统上可使用的存储空间。然后,管理员可以将卷组分割为任意的逻辑卷,作为灵活的分区。
理解范围(Extent)
同一个卷组中的每个卷都被分成固定大小的小块,被称为“范围”(extent)。范围的大小由卷组确定,所有卷都遵循相同的范围大小。
物理卷上的范围被称为“物理范围”(physical extents),而逻辑卷上的范围被称为“逻辑范围”(logical extents)。逻辑卷是LVM在逻辑与物理范围之间维护的映射。由于这种关系,范围大小代表了LVM可以分配的最小空间量。
逻辑卷管理(LVM)的灵活性和强大性主要归功于逻辑范围(extents)。LVM呈现的逻辑范围作为一个统一的设备,不必与连续的物理范围一一对应。LVM可以在不影响用户的情况下复制和重新组织组成逻辑卷的物理范围。通过添加或移除范围,逻辑卷还可以扩展或缩小。
常见使用情况
现在你对LVM使用的一些术语和结构很熟悉,你可以探索一些常见的LVM使用方法。你将开始使用两个物理磁盘来创建四个逻辑卷的过程。
将物理设备标记为物理卷
首先通过扫描系统来查找LVM可以访问和管理的块设备。您可以使用以下命令来完成这个操作:
sudo lvmdiskscan
输出将返回LVM可以与之交互的所有可用块设备。
/dev/ram0 [ 64.00 MiB]
/dev/sda [ 200.00 GiB]
/dev/ram1 [ 64.00 MiB]
. . .
/dev/ram15 [ 64.00 MiB]
/dev/sdb [ 100.00 GiB]
2 disks
17 partitions
0 LVM physical volume whole disks
0 LVM physical volumes
在这个例子中,请注意当前有两个硬盘和17个分区。这些分区主要是/dev/ram*
分区,用作系统的RAM磁盘以提升性能。在这个例子中,硬盘是/dev/sda
,拥有200G的空间,以及/dev/sdb
,拥有100G的空间。
警告:请务必仔细检查您打算与逻辑卷管理器一起使用的设备上是否已经存有任何重要数据。使用这些设备时,逻辑卷管理器将覆盖当前内容。如果您的服务器上有重要数据,请在继续之前备份数据。
现在,您已经了解到您想要使用的物理设备,可以使用pvcreate
命令将其标记为LVM中的物理卷。
sudo pvcreate /dev/sda /dev/sdb
Physical volume "/dev/sda" successfully created
Physical volume "/dev/sdb" successfully created
这将在设备上写入一个LVM头,表示它们已经准备好被添加到卷组。
运行pvs
命令来验证LVM是否已注册物理卷。
sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sda lvm2 --- 200.00g 200.00g
/dev/sdb lvm2 --- 100.00g 100.00g
请注意,这两个设备都在“PV”列下,“PV”代表物理卷。
将物理卷添加到卷组中
现在您已经从您的设备创建了物理卷,您可以创建卷组。大多数情况下,每个系统只有一个卷组,以便在分配方面获得最大的灵活性。以下卷组示例被命名为LVMVolGroup
。您可以自由选择您的卷组名称。
运行以下命令来创建卷组并将您的两个物理卷添加到其中:
sudo vgcreate LVMVolGroup /dev/sda /dev/sdb
这是文章《LVM概念、术语和操作介绍》的第2部分(共3部分)。
Volume group "LVMVolGroup" successfully created
再次检查pvs
命令的输出,您会发现物理卷现已与新的卷组关联。
- sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sda LVMVolGroup lvm2 a-- 200.00g 200.00g
/dev/sdb LVMVolGroup lvm2 a-- 100.00g 100.00g
使用vgs
命令可以列出卷组的简要摘要:
- sudo vgs
VG #PV #LV #SN Attr VSize VFree
LVMVolGroup 2 0 0 wz--n- 299.99g 299.99g
您的卷组目前包含两个物理卷,零个逻辑卷,并拥有底层设备的综合容量。
从卷组池中创建逻辑卷
现在您有了一个可用的卷组,可以将其用作分配逻辑卷的池。与传统分区不同,使用逻辑卷时,您无需了解卷的布局,因为逻辑卷管理器(LVM)会自动为您映射和处理这些。您只需提供卷的大小和名称即可。
在下面的示例中,您将从卷组中创建四个独立的逻辑卷:
- 10G 的“projects”卷
- 5G 的“www”卷用于Web内容
- 20G 的“db”卷用于数据库
- “workspace”卷将填充所有剩余空间
要创建逻辑卷,请使用lvcreate
命令。您必须传入要从中提取的卷组,并可以使用-n
选项为逻辑卷命名。要直接指定大小,可以使用-L
选项。如果您希望按扩展单元(extent)指定大小,可以使用-l
选项。
使用-L
选项创建前三个逻辑卷:
- sudo lvcreate -L 10G -n projects LVMVolGroup
- sudo lvcreate -L 5G -n www LVMVolGroup
- sudo lvcreate -L 20G -n db LVMVolGroup
Logical volume "projects" created.
Logical volume "www" created.
Logical volume "db" created.
通过从vgs
命令中选择自定义输出,您可以查看逻辑卷及其与卷组之间的关系。
- sudo vgs -o +lv_size,lv_name
VG #PV #LV #SN Attr VSize VFree LSize LV
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 10.00g projects
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 5.00g www
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 20.00g db
在这个例子中,输出的最后两列显示了分配给逻辑卷的空间大小。
现在,您可以使用-l
标志将卷组中的剩余空间分配给“workspace”卷。在这里,可以使用扩展单元进行操作。您还可以提供一个百分比和单位来更好地表达您的意图。在这个例子中,我们将分配所有剩余的可用空间,因此可以传入100%FREE
。
- sudo lvcreate -l 100%FREE -n workspace LVMVolGroup
Logical volume "workspace" created.
通过使用定制的vgs
命令检查卷组信息,您会注意到所有可用空间都已被使用。
- sudo vgs -o +lv_size,lv_name
VG #PV #LV #SN Attr VSize VFree LSize LV
LVMVolGroup 2 4 0 wz--n- 299.99g 0 10.00g projects
LVMVolGroup 2 4 0 wz--n- 299.99g 0 5.00g www
LVMVolGroup 2 4 0 wz--n- 299.99g 0 20.00g db
LVMVolGroup 2 4 0 wz--n- 299.99g 0 264.99g workspace
“workspace”分区已创建,并且LVMVolGroup
卷组已完全分配。
格式化和挂载逻辑卷
LVM概念、术语和操作介绍(第3部分,共3部分)
现在您已经拥有了逻辑卷,可以像使用普通块设备一样使用它们。
逻辑设备可以在 /dev
目录中找到,就像其他存储设备一样。您可以通过两种路径访问它们:
/dev/volume_group_name/logical_volume_name
/dev/mapper/volume_group_name-logical_volume_name
要使用 Ext4 文件系统格式化您的四个逻辑卷,请运行以下命令:
- sudo mkfs.ext4 /dev/LVMVolGroup/projects
- sudo mkfs.ext4 /dev/LVMVolGroup/www
- sudo mkfs.ext4 /dev/LVMVolGroup/db
- sudo mkfs.ext4 /dev/LVMVolGroup/workspace
或者,您也可以运行以下命令:
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-projects
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-www
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-db
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-workspace
格式化后,创建挂载点。
- sudo mkdir -p /mnt/{projects,www,db,workspace}
然后将逻辑卷挂载到适当的位置。
- sudo mount /dev/LVMVolGroup/projects /mnt/projects
- sudo mount /dev/LVMVolGroup/www /mnt/www
- sudo mount /dev/LVMVolGroup/db /mnt/db
- sudo mount /dev/LVMVolGroup/workspace /mnt/workspace
为了使挂载点持久化,请使用您偏好的文本编辑器将其添加到 /etc/fstab
文件中。以下示例使用 nano:
- sudo nano /etc/fstab
只需要选择一种方式。请将以下内容添加到 /etc/fstab
文件中:
. . .
/dev/LVMVolGroup/projects /mnt/projects ext4 defaults,nofail 0 0
/dev/LVMVolGroup/www /mnt/www ext4 defaults,nofail 0 0
/dev/LVMVolGroup/db /mnt/db ext4 defaults,nofail 0 0
/dev/LVMVolGroup/workspace /mnt/workspace ext4 defaults,nofail 0 0
编辑完文件后,保存并退出。如果您正在使用 nano,请按下 Ctrl+X
,然后按 Y
,最后按下回车键。
操作系统应该在启动时自动挂载 LVM 逻辑卷。
结论
现在您已经理解了 LVM 管理的各种组件,如何创建灵活的存储系统以及如何在 LVM 设置中启动和运行存储设备。
要了解更多关于使用 LVM 的信息,请查看我们关于在 Ubuntu 18.04 上使用 LVM 的指南。