简介
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 可以交互的所有可用块设备:
/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
列下都有这两个设备,表示物理卷。
将物理卷添加到卷组
现在你已经从设备创建了物理卷,你可以创建一个卷组。大多数情况下,每个系统只有一个卷组,以便在分配时获得最大的灵活性。以下卷组示例命名为 LVMVolGroup
。你可以根据需要为卷组命名。
要创建卷组并将两个物理卷添加到其中,请运行:
sudo vgcreate LVMVolGroup /dev/sda /dev/sdb
卷组 "LVMVolGroup" 创建成功
再次检查 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” 卷
- 用于数据库的 20G 的 “db” 卷
- “workspace” 卷,将占据剩余空间
要创建逻辑卷,请使用 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
逻辑卷 "projects" 已创建。 逻辑卷 "www" 已创建。 逻辑卷 "db" 已创建。
你可以通过从 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
逻辑卷 "workspace" 已创建。
使用自定义 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
卷组已完全分配。
格式化和挂载逻辑卷
现在你已经有了逻辑卷,可以像普通块设备一样使用它们。
逻辑设备在 /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 指南。