如何使用LVM在Ubuntu 18.04上管理存储设备

简介

逻辑卷管理(Logical Volume Management,简称LVM)是一种存储设备管理技术,使用户能够将组件存储设备的物理布局聚合并抽象化,以实现灵活的管理。利用设备映射器 Linux 内核框架,最新版本 LVM2 可以将现有存储设备分组,并根据需要从组合的空间分配逻辑单元。

在这个教程中,您将学习如何通过显示卷和潜在目标的信息来管理LVM,创建和销毁各种类型的卷,并通过调整大小或转换来修改现有卷。

先决条件 (Xianjue tiaojian)

要跟进,您需要在Ubuntu 18.04服务器上配置一个具有sudo权限的非root用户。您可以按照我们的Ubuntu 18.04服务器初始设置指南开始操作。

此外,如果您对LVM组件和概念不熟悉,可以查看我们的LVM入门指南获取更多信息。

当你准备好了,使用sudo用户登录到你的服务器。

步骤1 – 显示物理卷、卷组和逻辑卷的信息。

了解系统上各种LVM组件的信息对于管理物理和逻辑卷至关重要。LVM提供了多种工具,用于显示LVM堆栈中每个层的信息。

显示关于所有LVM兼容块存储设备的信息

要显示LVM潜在可管理的所有可用块存储设备,请使用lvmdiskscan命令。

  1. sudo lvmdiskscan

 

Output

/dev/sda [ 200.00 GiB] /dev/sdb [ 100.00 GiB] 2 disks 2 partitions 0 LVM physical volume whole disks 0 LVM physical volumes

请注意可以用作LVM物理卷的设备。

当您向LVM添加新的存储设备时,这很可能是您的第一步。

显示物理卷的信息

将一个标题写入存储设备,将其标记为可用作LVM组件。带有这些标题的设备被称为物理卷。

您可以使用lvmdiskscan命令,配合-l选项,显示系统上的所有物理设备,该命令只会返回物理卷。

  1. sudo lvmdiskscan -l

 

Output

WARNING: only considering LVM devices /dev/sda [ 200.00 GiB] LVM physical volume /dev/sdb [ 100.00 GiB] LVM physical volume 2 LVM physical volume whole disks 0 LVM physical volumes

pvscan命令类似于在所有可用设备中搜索LVM物理卷。输出格式包含少量额外信息。

  1. sudo pvscan

 

Output

PV /dev/sda VG LVMVolGroup lvm2 [200.00 GiB / 0 free] PV /dev/sdb VG LVMVolGroup lvm2 [100.00 GiB / 10.00 GiB free] Total: 2 [299.99 GiB] / in use: 2 [299.99 GiB] / in no VG: 0 [0 ]

如果您需要关于您的卷的额外详细信息,可以使用pvs和pvdisplay命令获取。

pvs 命令具有高度可配置性,可以以许多不同的格式显示信息。由于其输出可以精确控制,因此在需要脚本化或自动化时经常使用。它的基本输出类似于之前的命令,提供了一个便于一目了然的汇总信息。

  1. sudo pvs

 

Output

PV VG Fmt Attr PSize PFree /dev/sda LVMVolGroup lvm2 a– 200.00g 0 /dev/sdb LVMVolGroup lvm2 a– 100.00g 10.00g

要获取更多详细且易读的输出,pvdisplay命令是一个不错的选择。

  1. sudo pvdisplay

 

Output

— Physical volume — PV Name /dev/sda VG Name LVMVolGroup PV Size 200.00 GiB / not usable 4.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 51199 Free PE 0 Allocated PE 51199 PV UUID kRUOyU-0ib4-ujPh-kAJP-eeQv-ztRL-4EkaDQ — Physical volume — PV Name /dev/sdb VG Name LVMVolGroup PV Size 100.00 GiB / not usable 4.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 25599 Free PE 2560 Allocated PE 23039 PV UUID udcuRJ-jCDC-26nD-ro9u-QQNd-D6VL-GEIlD7

要发现已映射到每个卷的逻辑范围,请在pvdisplay命令中加入-m选项。

  1. sudo pvdisplay -m

 

Output

— Physical volume — PV Name /dev/sda VG Name LVMVolGroup PV Size 200.00 GiB / not usable 4.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 51199 Free PE 38395 Allocated PE 12804 PV UUID kRUOyU-0ib4-ujPh-kAJP-eeQv-ztRL-4EkaDQ — Physical Segments — Physical extent 0 to 0: Logical volume /dev/LVMVolGroup/db_rmeta_0 Logical extents 0 to 0 Physical extent 1 to 5120: Logical volume /dev/LVMVolGroup/db_rimage_0 Logical extents 0 to 5119 . . .

在管理时,这非常有用,可以确定哪些数据存储在哪个物理磁盘上。

显示有关卷组的信息

LVM同样也有许多工具可以展示关于卷组的信息。

通过使用vgscan命令,您可以扫描系统以查找可用的卷组。当需要时,它还会重新建立缓存文件。在将卷组导入新系统时,使用该命令非常方便。

  1. sudo vgscan

 

Output

Reading all physical volumes. This may take a while… Found volume group “LVMVolGroup” using metadata type lvm2

这个命令的输出信息并不多,但它应该能够找出系统上的每个可用卷组。要显示更多信息,可以使用 vgs 和 vgdisplay 命令。

和其物理容量对应,vgs命令同样灵活多用,可以以多种格式显示大量信息。由于其输出可以进行操作,因此在需要脚本或自动化时经常使用。例如,一些有用的输出修改包括显示物理设备和逻辑卷路径。

  1. sudo vgs -o +devices,lv_path

 

Output

VG #PV #LV #SN Attr VSize VFree Devices Path LVMVolGroup 2 4 0 wz–n- 299.99g 10.00g /dev/sda(0) /dev/LVMVolGroup/projects LVMVolGroup 2 4 0 wz–n- 299.99g 10.00g /dev/sda(2560) /dev/LVMVolGroup/www LVMVolGroup 2 4 0 wz–n- 299.99g 10.00g /dev/sda(3840) /dev/LVMVolGroup/db LVMVolGroup 2 4 0 wz–n- 299.99g 10.00g /dev/sda(8960) /dev/LVMVolGroup/workspace LVMVolGroup 2 4 0 wz–n- 299.99g 10.00g /dev/sdb(0) /dev/LVMVolGroup/workspace

类似地,如果需要更冗长易读的输出,请使用vgdisplay命令。添加-v标志可以提供有关构建卷组的物理卷和使用卷组创建的逻辑卷的信息。

  1. sudo vgdisplay -v

 

Output

Using volume group(s) on command line. — Volume group — VG Name LVMVolGroup . . . — Logical volume — LV Path /dev/LVMVolGroup/projects . . . — Logical volume — LV Path /dev/LVMVolGroup/www . . . — Logical volume — LV Path /dev/LVMVolGroup/db . . . — Logical volume — LV Path /dev/LVMVolGroup/workspace . . . — Physical volumes — PV Name /dev/sda . . . PV Name /dev/sdb . . .

Vgdisplay命令非常有用,因为它能够将LVM堆栈中许多不同元素的信息联系在一起。

显示关于逻辑卷的信息

为了显示有关逻辑卷的信息,LVM有一组相关的工具。

与其他LVM组件一样,lvscan选项会扫描系统并输出有关找到的逻辑卷的最少信息。

  1. sudo lvscan

 

Output

ACTIVE ‘/dev/LVMVolGroup/projects’ [10.00 GiB] inherit ACTIVE ‘/dev/LVMVolGroup/www’ [5.00 GiB] inherit ACTIVE ‘/dev/LVMVolGroup/db’ [20.00 GiB] inherit ACTIVE ‘/dev/LVMVolGroup/workspace’ [254.99 GiB] inherit

为了获取更完整的信息,lvs命令在脚本中具有灵活且强大的使用能力。

  1. sudo lvs

 

Output

LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert db LVMVolGroup -wi-ao—- 20.00g projects LVMVolGroup -wi-ao—- 10.00g workspace LVMVolGroup -wi-ao—- 254.99g www LVMVolGroup -wi-ao—- 5.00g

要找到条纹的数量和逻辑卷类型,请使用 –segments 选项。

  1. sudo lvs –segments

 

Output

LV VG Attr #Str Type SSize db LVMVolGroup rwi-a-r— 2 raid1 20.00g mirrored_vol LVMVolGroup rwi-a-r— 3 raid1 10.00g test LVMVolGroup rwi-a-r— 3 raid5 10.00g test2 LVMVolGroup -wi-a—– 2 striped 10.00g test3 LVMVolGroup rwi-a-r— 2 raid1 10.00g

lvdisplay 命令生成的输出是最易读的。

当添加-m标志时,该工具还会显示有关逻辑卷如何拆分和分布的信息。

  1. sudo lvdisplay -m

 

Output

— Logical volume — LV Path /dev/LVMVolGroup/projects LV Name projects VG Name LVMVolGroup LV UUID IN4GZm-ePJU-zAAn-DRO3-1f2w-qSN8-ahisNK LV Write Access read/write LV Creation host, time lvmtest, 2016-09-09 21:00:03 +0000 LV Status available # open 1 LV Size 10.00 GiB Current LE 2560 Segments 1 Allocation inherit Read ahead sectors auto – currently set to 256 Block device 252:0 — Segments — Logical extents 0 to 2559: Type linear Physical volume /dev/sda Physical extents 0 to 2559 . . .

在这个例子中,/dev/LVMVolGroup/projects逻辑卷完全包含在/dev/sda物理卷内。如果您需要移除底层设备并希望将数据移动到特定位置,这些信息将会很有用。

步骤2 – 创建或扩展LVM组件

本部分讨论了如何创建和扩展物理卷、卷组和逻辑卷。

从原始存储设备创建物理卷

要使用具有LVM的存储设备,首先必须将其标记为物理卷。这将指定LVM可以在卷组内使用该设备。

首先,使用lvmdiskscan命令查找LVM可以访问和使用的所有块设备。

  1. sudo lvmdiskscan

 

Output

/dev/sda [ 200.00 GiB] /dev/sdb [ 100.00 GiB] 2 disks 2 partitions 0 LVM physical volume whole disks 0 LVM physical volumes

在这里,请注意适合转换为LVM物理卷的设备。

Warning

警告:请确保您仔细检查您打算与LVM一起使用的设备上没有任何重要数据已经写入。使用这些设备在LVM中将覆盖当前内容。如果您的服务器上有重要数据,请在继续之前备份。

使用pvcreate将存储设备标记为LVM物理卷。您可以一次传入多个设备。

  1. sudo pvcreate /dev/sda /dev/sdb

 

该命令将在所有目标设备上写入一个LVM头,将它们标记为LVM物理卷。

从物理卷中创建一个新的卷组。

要从LVM物理卷创建一个新的卷组,请使用vgcreate命令。您需要提供卷组名称,然后至少一个LVM物理卷。

  1. sudo vgcreate volume_group_name /dev/sda

 

这个例子使用一个初始的物理卷创建了你的卷组。如果你愿意,你可以在创建时传入多个物理卷。

  1. sudo vgcreate volume_group_name /dev/sda /dev/sdb /dev/sdc

 

通常情况下,每台服务器只需要一个卷组。所有由LVM管理的存储都可以加入到该池中,然后从中分配逻辑卷。

如果您觉得不同卷需要使用不同的扩展大小,那么您可能希望拥有多个卷组。通常情况下,您不需要设置扩展大小(默认的 4M 大小对于大多数情况已足够),但如果需要的话,您可以在卷组创建时通过传递 -s 选项进行设置。

  1. suod vgcreate -s 8M volume_group_name /dev/sda

 

这将创建一个新的卷组,其扩展大小为8兆。

在现有的卷组中添加一个物理卷。

使用vgextend命令通过添加附加物理卷来扩展卷组。此命令接受卷组和要添加的物理卷作为参数。如果您愿意,可以一次传入多个设备。

  1. sudo vgextend volume_group_name /dev/sdb

 

物理卷将被添加到卷组中,扩大存储池的可用容量。

通过指定大小创建一个逻辑卷

使用lvcreate命令从卷组存储池创建逻辑卷。使用-L选项指定逻辑卷的大小,然后使用-n选项指定一个名称,并传入卷组以分配空间。

例如,要从LVMVolGroup卷组创建一个名为test的10G逻辑卷,可以输入以下命令:

  1. sudo lvcreate -L 10G -n test LVMVolGroup

 

如果卷组有足够的空闲空间以容纳卷容量,就会创建新的逻辑卷。

利用所有剩余的空闲空间创建一个逻辑卷。

如果你希望使用卷组内剩余的可用空间创建一个卷,可以使用vgcreate命令,并使用-n选项为卷组命名并将其传递给命令,类似于前面的步骤。而不是传递一个大小值,可以使用-l 100%FREE选项,这将使用卷组内剩余的可分配范围来创建逻辑卷。

  1. sudo lvcreate -l 100%FREE -n test2 LVMVolGroup

 

这应该利用完逻辑卷中剩余的空间。

创建带有高级选项的逻辑卷

可以使用一些高级选项来创建逻辑卷。您可能希望考虑的一些选项是:

  • –type: This specifies the type of logical volume, which determines how the logical volume is allocated. Some available types will not be available if there are not enough underlying physical volumes to correctly create the chosen topography. Some of the most common types are:linear: The default type. The underlying physical devices used, if more than one, will be appended to each other, one after the other.
    striped: Similar to RAID 0, the striped topology divides data into chunks and spread in a round-robin fashion across the underlying physical volumes. This can lead to performance improvements, but might lead to greater data vulnerability. This requires the -i option and a minimum of two physical volumes.
    raid1: Creates a mirrored RAID 1 volume. By default, the mirror will have two copies, but more can be specified by the -m. This requires a minimum of two physical volumes.
    raid5: Creates a RAID 5 volume. This requires a minimum of three physical volumes.
    raid6: Creates a RAID 6 volume. This requires a minimum of four physical volumes.
  • -m: Specifies the number of additional copies of data to keep. A value of “1” specifies that one additional copy is maintained, for a total of two sets of data.
  • -i: Specifies the number of stripes that should be maintained. This is required for the striped type, and can modify the default behavior of some of the other RAID options.
  • -s: Specifies that the action should create a snapshot from an existing logical volume instead of a new independent logical volume.

为了演示,首先创建一个条带磁盘卷。对于此方法,您必须指定至少两个条带。这种拓扑和条带计数需要至少两个具备可用容量的物理磁盘卷。

  1. sudo lvcreate –type striped -i 2 -L 10G -n striped_vol LVMVolGroup

 

要创建镜像卷,请使用RAID1类型。如果您需要超过两个数据集,请使用-m选项。这个例子使用-m 2来创建总共三个数据集。LVM将其视为一个原始数据集和两个镜像。您需要至少三个物理卷才能成功执行此操作。

  1. sudo lvcreate –type raid1 -m 2 -L 20G -n mirrored_vol LVMVolGroup

 

创建一个卷快照时,您必须提供要快照的原始逻辑卷,而不是卷组。快照在最初不会占用太多空间,但随着对被跟踪的逻辑卷的更改,其大小会增长。此过程中使用的大小是快照的最大大小。超过此大小的快照将无法使用,但接近其容量的快照可以扩展。

  1. sudo lvcreate -s -L 10G -n snap_test LVMVolGroup/test

 

Note

请注意:要将逻辑卷恢复到快照的时间点,请使用lvconvert –merge命令:
sudo lvconvert –merge LVMVolGroup/snap_test

这将使快照的原始状态回到创建快照时的状态。

有许多选择可以大幅改变你的逻辑卷的功能。

扩大逻辑卷的大小 de

LVM的一个主要优点是在提供逻辑卷配额方面的灵活性。您可以在不停机的情况下动态调整卷的数量或大小。

要增加现有逻辑卷的大小,请使用lvresize命令。使用-L标志来指定新的大小。您还可以使用相对大小,通过添加+大小来实现。在这种情况下,LVM会增加所指定的数量的逻辑卷的大小。要自动调整逻辑卷上使用的文件系统的大小,请传入–resizefs标志。

为了正确提供要扩展的逻辑卷的名称,您需要给出卷组,后面跟着一个斜杠,再跟着逻辑卷。

  1. sudo lvresize -L +5G –resizefs LVMVolGroup/test

 

在这个例子中,LVMVolGroup卷组上的测试逻辑卷的逻辑容量和文件系统都将增加5G。

如果您希望手动处理文件系统的扩展,请移除–resizefs选项,然后使用文件系统的本机扩展工具。例如,对于Ext4文件系统,请写:

  1. sudo lvresize -L +5G LVMVolGroup/test
  2. sudo resize2fs /dev/LVMVolGroup/test

 

这将返回相同的结果。

步骤三 – 删除或缩小LVM组件

由于容量的减少可能导致数据丢失,因此缩小可用容量的程序,无论是通过缩小组件的大小还是删除组件,通常会涉及更为复杂的操作。

减小逻辑卷的大小

为了缩小逻辑卷,您应该首先备份您的数据。因为这会减少可用容量,错误可能导致数据丢失。

当你准备好时,请检查当前使用了多少空间。

  1. df -h

 

Output

Filesystem Size Used Avail Use% Mounted on . . . /dev/mapper/LVMVolGroup-test 4.8G 521M 4.1G 12% /mnt/test

在这个示例中,目前已经使用了超过521M的空间。利用这个来帮助你估算可以减小卷的尺寸。

与扩容不同,缩减文件系统应在卸载时进行。首先,确保您位于根目录下。

  1. cd ~

 

接下来,卸载文件系统。

  1. sudo umount /dev/LVMVolGroup/test

 

卸载后,检查文件系统以确保一切正常工作。使用 -t 选项传入文件系统类型。使用 -f 选项在文件系统出现时进行检查。

  1. sudo fsck -t ext4 -f /dev/LVMVolGroup/test

 

在检查文件系统后,您可以使用文件系统的原生工具来缩小文件系统的大小。对于Ext4文件系统,使用resize2fs命令即可。将文件系统的最终大小传递进去。

Warning

警告:这里最安全的选择是选择一个比您当前使用的尺寸大得多的最终尺寸。给自己一些缓冲空间,以避免数据丢失,并确保已备有备份。
  1. sudo resize2fs -p /dev/LVMVolGroup/test 3G

 

操作完成后,通过使用lvresize命令的-L选项将逻辑卷的大小调整为相同大小。

  1. sudo lvresize -L 3G LVMVolGroup/test

 

如果你已经做好准备,请输入”y”来继续操作,这样可以让你意识到数据丢失的可能性。

在逻辑卷被减少后,再次检查文件系统。

  1. sudo fsck -t ext4 -f /dev/LVMVolGroup/test

 

如果一切正常运行,您可以使用平常的挂载命令重新挂载文件系统。

  1. sudo mount /dev/LVMVolGroup/test /mnt/test

 

你的逻辑卷现在应该已经缩小到适当的尺寸了。

删除一个逻辑卷

如果您不再需要逻辑卷,您可以使用lvremove命令来删除它。

首先,如果逻辑卷当前已挂载,请卸载它。

  1. cd ~
  2. sudo umount /dev/LVMVolGroup/test

 

然后,通过输入以下命令来移除逻辑卷。

  1. sudo lvremove LVMVolGroup/test

 

请确认该程序。如果您确定要删除逻辑卷,请按y键。

移除一个卷组 zǔ)

使用vgremove命令可以删除整个卷组,包括其中的所有逻辑卷。

在删除一个卷组之前,您应使用之前讨论过的步骤来删除逻辑卷。至少,您必须确保卸载卷组中包含的任何逻辑卷。

  1. sudo umount /dev/LVMVolGroup/www
  2. sudo umount /dev/LVMVolGroup/projects
  3. sudo umount /dev/LVMVolGroup/db

 

然后,您可以通过将卷组名称传递给vgremove命令来删除整个卷组。

  1. sudo vgremove LVMVolGroup

 

然后系统会让您确认是否要删除该卷组。如果您还有逻辑卷存在,删除之前会针对每个逻辑卷分别询问您是否确认删除。

移除一个物理卷。

要将物理卷从LVM管理中移除,所需的步骤取决于设备是否当前正在被LVM使用。

如果物理存储卷正在使用中,您需要将位于设备上的物理范围移动到其他位置。这要求卷组拥有足够的其他物理存储卷来处理这些物理范围。如果您正在使用更复杂的逻辑卷类型,即使有足够的可用空间来容纳拓扑结构,您可能仍需要额外的物理存储卷。

当您在卷组中有足够的物理卷来处理物理范围时,通过运行以下命令将其从您希望删除的物理卷中移出:

  1. sudo pvmove /dev/sda

 

根据卷的大小和需要传输的数据量,这个过程可能需要花费一些时间。

一旦范围已经被迁移至对等卷,您可以从卷组中移除物理卷。

  1. sudo vgreduce LVMVolGroup /dev/sda

 

这将从卷组中移除被空置的物理卷。完成后,您可以从存储设备中移除物理卷标记。

  1. sudo pvremove /dev/sda

 

现在您可以将已移除的存储设备用于其他目的,或者完全从系统中移除它。

结论

你现在了解如何在Ubuntu 18.04上使用LVM管理存储设备。你还知道如何获取现有LVM组件状态的信息,如何使用LVM来组织你的存储系统,以及如何修改卷以满足你的需求。请随意在安全环境中测试这些概念,以更好地理解它们之间的关系。

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds