介绍
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。 扩展区的大小由卷组确定(组内的所有卷都符合相同的扩展区大小)。
物理卷上的盘区称为物理盘区,而逻辑卷的盘区称为逻辑盘区。 逻辑卷只是 LVM 在逻辑和物理范围之间维护的映射。 由于这种关系,盘区大小代表 LVM 可以分配的最小空间量。
LVM 的大部分灵活性和强大功能都离不开范围。 由 LVM 表示为统一设备的逻辑盘区不必映射到连续的物理盘区。 LVM 可以复制和重组组成逻辑卷的物理范围,而不会对用户造成任何干扰。 也可以通过简单地向卷中添加或删除范围来轻松扩展或缩小逻辑卷。
简单用例
现在您已经熟悉了 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 个分区。 分区主要是 /dev/ram*
分区,将系统用作 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 标头写入设备,以指示它们已准备好添加到卷组。
您可以通过键入以下内容快速验证 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
我们可以通过键入以下内容来查看卷组本身的简要摘要:
sudo vgs
Output VG #PV #LV #SN Attr VSize VFree LVMVolGroup 2 0 0 wz--n- 299.99g 299.99g
如您所见,我们的卷组目前有两个物理卷,零个逻辑卷,并具有底层设备的组合容量。
从卷组池创建逻辑卷
现在我们有了一个可用的卷组,我们可以将它用作我们可以从中分配逻辑卷的池。 与传统分区不同,使用逻辑卷时,您不需要知道卷的布局,因为 LVM 会为您映射和处理它。 您只需要提供卷的大小和名称。
我们将从卷组中创建四个单独的逻辑卷:
- 10G“项目”量
- 5G“www”网页内容量
- 用于数据库的 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
标志将卷组中的其余空间分配给“工作区”卷,该标志在扩展中起作用。 我们还可以提供百分比和单位来更好地传达我们的意图。 在我们的例子中,我们希望分配剩余的空闲空间,所以我们可以传入 100%FREE
:
sudo lvcreate -l 100%FREE -n workspace LVMVolGroup
Output Logical volume "workspace" created.
如果我们重新检查卷组信息,我们可以看到我们已经用完了所有可用空间:
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
,就像使用普通块设备一样:
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
操作系统现在应该在引导时自动安装 LVM 逻辑卷。
结论
希望到此为止,您将对 LVM 管理以创建灵活存储系统的各种组件有相当好的了解。 您还应该对如何在 LVM 设置中启动和运行存储设备有基本的了解。
本指南仅简要介绍了 LVM 为 Linux 系统管理员提供的权力和控制。 要了解有关使用 LVM 的更多信息,请查看我们的 guide to using LVM with Ubuntu 16.04。