介绍
LVM,或称为逻辑卷管理,是一种存储设备管理技术,使用户能够汇集和抽象化组件存储设备的物理布局,以便进行灵活的管理。利用设备映射器 Linux 内核框架,当前版本的 LVM2 可用于将现有存储设备汇集到组中,并根据需要从合并空间中分配逻辑单元。
LVM 的主要优点包括增加的抽象化、灵活性和控制性。逻辑卷可以具有有意义的名称,如“数据库”或“根备份”。卷还可以根据空间需求的变化动态调整大小,并在运行系统内在物理设备之间迁移或导出。LVM 还提供了诸如快照、分带和镜像等高级功能。
在本指南中,您将了解 LVM 的工作原理,并练习一些基本命令,快速在裸机上运行起来。
LVM 结构和术语
在深入研究 LVM 管理命令之前,了解 LVM 如何组织存储设备以及它所使用的一些术语是很重要的。
LVM 存储管理结构
LVM通过在物理存储设备之上叠加抽象层来实现其功能。LVM使用的基本层次,从最原始的开始,依次为:
-
物理卷:物理卷的LVM实用程序前缀是
pv...
。这些物理块设备或其他类似磁盘的设备(例如,由设备映射器创建的其他设备,如RAID阵列)被LVM用作更高层次抽象的原始构建材料。物理卷是常规存储设备,LVM会在设备上写入标头以进行管理。 -
卷组:卷组的LVM实用程序前缀是
vg...
。LVM将物理卷组合成称为卷组的存储池。卷组抽象了底层设备的特性,并作为具有组件物理卷合并存储容量的统一逻辑设备。 -
逻辑卷:逻辑卷的 LVM 实用程序前缀是 `
lv...
`,通用 LVM 实用程序可能以 `lvm...
` 开头。卷组可以被切割成任意数量的逻辑卷。逻辑卷在功能上相当于物理磁盘上的分区,但具有更灵活的特性。逻辑卷是用户和应用程序将要与之交互的主要组件。
LVM 可用于将物理卷组合成卷组,以统一系统上可用的存储空间。随后,管理员可以将卷组分割成任意的逻辑卷,这些逻辑卷充当灵活的分区。
了解 Extents
每个卷组中的每个卷都被分割成称为extents(区段)的小固定大小块。 Extents的大小由卷组确定。组内的所有卷都符合相同的extent大小。
物理卷上的extents称为物理extents,而逻辑卷的extents称为逻辑extents。逻辑卷是LVM在逻辑和物理extents之间维护的映射。由于这种关系,extent大小代表LVM可以分配的最小空间。
Extents是LVM灵活性和强大性的基础。LVM呈现的逻辑extents作为一个统一的设备,它们不必映射到连续的物理extents。LVM可以复制和重新组织组成逻辑卷的物理extents,而不会对用户造成任何中断。逻辑卷还可以通过向卷添加extents或从卷中删除extents来扩展或收缩。
常见用例
现在您对LVM使用的一些术语和结构有了了解,可以探索一些常见的LVM使用方式。您将从一个使用两个物理磁盘形成四个逻辑卷的过程开始。
将物理设备标记为物理卷
首先通过扫描系统以让 LVM 能够访问和管理块设备。您可以使用以下命令执行此操作:
- sudo lvmdiskscan
输出将返回 LVM 可以交互的所有可用块设备:
Output /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个分区。这些分区主要是用作系统中的RAM磁盘以提高性能的/dev/ram*
分区。此示例中的磁盘是/dev/sda
,拥有200G的空间,和/dev/sdb
,拥有100G。
警告:确保仔细检查您打算与 LVM 一起使用的设备上没有已经写入的重要数据。在 LVM 中使用这些设备将覆盖当前内容。如果您的服务器上有重要数据,请在继续之前备份。
现在您知道要使用的物理设备,请使用pvcreate
命令将它们标记为 LVM 中的物理卷:
- sudo pvcreate /dev/sda /dev/sdb
Output Physical volume "/dev/sda" successfully created
Physical volume "/dev/sdb" successfully created
这将向设备写入 LVM 头,以指示它们已准备好被添加到卷组中。
通过运行pvs
来验证 LVM 是否已经注册了物理卷:
- sudo pvs
Output PV VG Fmt Attr PSize PFree
/dev/sda lvm2 --- 200.00g 200.00g
/dev/sdb lvm2 --- 100.00g 100.00g
请注意,这两个设备均出现在PV
列下,该列代表物理卷。
将物理卷添加到卷组
现在,您已经从您的设备创建了物理卷,您可以创建一个卷组。在大多数情况下,每个系统通常只有一个卷组,以实现最大的灵活性分配。以下卷组示例命名为LVMVolGroup
,您可以根据需要命名您的卷组。
要创建卷组并将您的两个物理卷添加到其中,请运行:
- sudo vgcreate LVMVolGroup /dev/sda /dev/sdb
Output Volume group "LVMVolGroup" successfully created
再次检查pvs
的输出,将指示您的物理卷现在与新卷组关联:
- sudo pvs
Output 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
Output VG #PV #LV #SN Attr VSize VFree
LVMVolGroup 2 0 0 wz--n- 299.99g 299.99g
您的卷组目前有两个物理卷,零个逻辑卷,并具有底层设备的组合容量。
从卷组池创建逻辑卷
现在您有一个可用的卷组,可以将其用作从中分配逻辑卷的池。与传统的分区不同,在使用逻辑卷时,您不需要了解卷的布局,因为LVM会为您映射和处理此操作。您只需要提供卷的大小和名称。
在以下示例中,您将从卷组中创建四个单独的逻辑卷:
- 10G“项目”卷
- 5G“www”卷用于Web内容
- 20G“db”卷用于数据库
- “工作空间”卷,将填充剩余空间
要创建逻辑卷,请使用lvcreate
命令。您必须传递要提取的卷组,并可以使用-n
选项为逻辑卷命名。要直接指定大小,可以使用-L
选项。如果您希望根据范围的数量来指定大小,则可以使用-l
选项。
使用-L
选项创建前三个逻辑卷:
- sudo lvcreate -L 10G -n projects LVMVolGroup
- sudo lvcreate -L 5G -n www LVMVolGroup
- sudo lvcreate -L 20G -n db LVMVolGroup
Output Logical volume "projects" created.
Logical volume "www" created.
Logical volume "db" created.
您可以通过从vgs
命令中选择自定义输出来查看逻辑卷及其与卷组的关系:
- sudo vgs -o +lv_size,lv_name
Output 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"
卷,该标志按照extent工作。您还可以提供百分比和单位以更好地表达您的意图。在这个例子中,分配剩余的可用空间,因此您可以传入100%FREE
:
- sudo lvcreate -l 100%FREE -n workspace LVMVolGroup
Output Logical volume "workspace" created.
使用自定义vgs
命令检查卷组信息,注意您已经使用了所有可用空间:
- sudo vgs -o +lv_size,lv_name
Output 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
卷组已完全分配。
格式化和挂载逻辑卷
现在您有了逻辑卷,可以像普通块设备一样使用它们。
逻辑设备在/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
. . .
/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+c
,然后y
,然后ENTER
。
操作系统现在应在启动时自动挂载LVM逻辑卷。
结论
现在,您已经了解了LVM管理的各种组件,以创建灵活的存储系统,并了解了如何在LVM设置中启动存储设备。
要了解更多关于使用LVM的信息,请查阅我们的Ubuntu 18.04中使用LVM的指南。