如何在 Ubuntu 16.04 上使用 LVM 管理存储设备如何在 Ubuntu 16.04 上使用 LVM 管理存储设备如何在 Ubuntu 16.04 上使用 LVM 管理存储设备如何在 Ubuntu 16.04 上使用 LVM 管理存储设备
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

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

介绍

LVM,即逻辑卷管理,是一种存储设备管理技术,它使用户能够汇集和抽象组件存储设备的物理布局,以便更轻松、更灵活地进行管理。利用设备映射器 Linux 内核框架,当前迭代 LVM2 可用于将现有存储设备分组,并根据需要从组合空间分配逻辑单元。

在本指南中,我们将介绍如何使用 LVM 管理您的存储设备。我们将向您展示如何显示有关卷和潜在目标的信息,如何创建和销毁各种类型的卷,以及如何通过调整大小或转换来修改现有卷。我们将使用 Ubuntu 16.04 服务器来演示这些操作。

先决条件

为了继续学习,您应该可以访问 Ubuntu 16.04 服务器。您将需要为管理任务配置具有 sudo 权限的非根用户。您可以按照我们的 Ubuntu 16.04 初始服务器设置指南创建必要的帐户。

要熟悉 LVM 组件和概念并测试基本的 LVM 配置,请在开始本教程之前遵循我们对 LVM 指南的介绍。

准备就绪后,使用 sudo 用户登录到您的服务器。

显示有关物理卷、卷组和逻辑卷的信息

能够轻松获得有关系统中各种 LVM 组件的信息非常重要。幸运的是,LVM 工具套件提供了大量工具来显示有关 LVM 堆栈中每一层的信息。

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

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

  1. sudo lvmdiskscan
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

忽略 /dev/ram* 设备(Linux ram 磁盘实现的一部分),我们可以看到可以用作 LVM 物理卷的设备。

这可能是您添加新存储设备以与 LVM 一起使用时的第一步。

显示有关物理卷的信息

标头被写入存储设备以将它们标记为可自由用作 LVM 组件。具有这些标头的设备称为物理卷。

您可以使用带有 -l 选项的 lvmdiskscan 显示系统上的所有物理设备,这只会返回物理卷:

  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 选项传递给 pvdisplay:

  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 物理卷中。如果您需要移除该底层设备并希望将数据移至特定位置,则此信息很有用。

创建或扩展 LVM 组件

本节将讨论如何创建和扩展物理卷、卷组和逻辑卷。

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

为了在 LVM 中使用存储设备,必须首先将它们标记为物理卷。这指定 LVM 可以使用卷组中的设备。

首先,使用 lvmdiskscan 命令查找 LVM 可以看到和使用的所有块设备:

  1. sudo lvmdiskscan
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

在这里,忽略/dev/ram*设备,我们可以看到适合在物理卷中为LVM打开的设备。

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

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

  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

这将创建一个具有 8M extent 大小的新卷组。

将物理卷添加到现有卷组

要通过添加额外的物理卷来扩展卷组,请使用 vgextend 命令。此命令采用一个卷组,后跟要添加的物理卷。如果您愿意,可以一次传入多个设备:

  1. sudo vgextend volume_group_name /dev/sdb

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

通过指定大小创建逻辑卷

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

例如,要从 LVMVolGroup 卷组创建名为 test 的 10G 逻辑卷,请键入:

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

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

从所有剩余可用空间创建逻辑卷

如果您希望使用卷组中的剩余可用空间创建卷,请使用带有 -n 选项的 vgcreate 命令来命名并像以前一样传入卷组.不要传入大小,而是使用 -l 100%FREE 选项,该选项使用卷组中的剩余范围来形成逻辑卷:

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

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

使用高级选项创建逻辑卷

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

  • --type:指定逻辑卷的类型,决定逻辑卷的分配方式。如果没有足够的基础物理体积来正确创建所选地形,则某些可用类型将不可用。一些最常见的类型是:
    • 线性:默认类型。使用的底层物理设备(如果不止一个)将简单地一个接一个地附加到彼此。
    • 条带化:与 RAID 0 类似,条带化拓扑将数据分成块,并以循环方式分布在底层物理卷中。这可以提高性能,但可能会导致更大的数据漏洞。这需要下面描述的 -i 选项和至少两个物理卷。
    • raid1:创建镜像 RAID 1 卷。默认情况下,镜像将有两个副本,但可以通过下面描述的 -m 选项指定更多副本。至少需要两个物理卷。
    • raid5:创建 RAID 5 卷。至少需要三个物理卷。
    • raid6:创建 RAID 6 卷。至少需要四个物理卷。

    我们将提供这些选项的一些示例来演示它们通常是如何使用的。

    要创建条带卷,您必须至少指定两个条带。此拓扑和条带数至少需要两个具有可用容量的物理卷:

    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

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

    1. sudo lvconvert --merge LVMVolGroup/snap_test

    这将使快照的来源恢复到拍摄快照时的状态。

    如您所见,有许多选项可以显着改变逻辑卷的运行方式。

    增加逻辑卷的大小

    LVM 的主要优点之一是它在供应逻辑卷方面提供的灵活性。您可以在不停止系统的情况下轻松地即时调整卷的数量或大小。

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

    要正确提供要扩展的逻辑卷的名称,您需要提供卷组,后跟斜杠,然后是逻辑卷:

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

    在此示例中,LVMVolGroup 卷组上的test 逻辑卷的逻辑卷和文件系统都将增加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 ~
    2. sudo umount /dev/LVMVolGroup/test

    卸载后,检查文件系统以确保一切正常。使用 -t 选项传入文件系统类型。我们将使用 -f 来检查文件系统是否正常:

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

    检查文件系统后,您可以使用文件系统的本机工具减小文件系统的大小。对于 Ext4 文件系统,这将是 resize2fs 命令。传入文件系统的最终大小:

    警告:此处最安全的选择是选择比当前使用量大很多的最终尺寸。给自己一些缓冲空间以避免数据丢失并确保您有适当的备份。

    1. sudo resize2fs -p /dev/LVMVolGroup/test 3G

    操作完成后,通过将相同大小传递给带有 -L 标志的 lvresize 命令来调整逻辑卷的大小:

    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。

    删除卷组

    要删除整个卷组,包括其中的所有逻辑卷,请使用 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

    您现在应该能够将移除的存储设备用于其他目的或将其从系统中完全移除。

    结论

    到目前为止,您应该对如何使用 LVM 在 Ubuntu 16.04 上管理存储设备有了实际的了解。您应该知道如何获取有关现有 LVM 组件状态的信息、如何使用 LVM 组成您的存储系统以及如何修改卷以满足您的需要。请随意在安全的环境中测试这些概念,以更好地了解它们如何组合在一起。

©2015-2025 艾丽卡 support@alaica.com