Ubuntu 18.04 LVM存储管理终极指南:分区、扩容与维护

简介

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

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

先决条件

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

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

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

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

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

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

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

sudo lvmdiskscan
输出
/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会在存储设备上写入一个标题,将其标记为可用作LVM组件。带有这些标题的设备被称为物理卷。

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

sudo lvmdiskscan -l
输出
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物理卷。输出格式包含少量额外信息。

sudo pvscan
输出
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 ]

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

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

sudo pvs
输出
PV         VG        Fmt  Attr PSize   PFree
/dev/sda   LVMVolGroup lvm2 a--  200.00g     0
/dev/sdb   LVMVolGroup lvm2 a--  100.00g 10.00g

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

sudo pvdisplay
输出
--- 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选项。

sudo pvdisplay -m
输出

— 物理卷 —

PV 名称 /dev/sda

VG 名称 LVMVolGroup

PV 大小 200.00 GiB / 不可用 4.00 MiB

可分配 yes

PE 大小 4.00 MiB

总 PE 51199

空闲 PE 38395

已分配 PE 12804

PV UUID kRUOyU-0ib4-ujPh-kAJP-eeQv-ztRL-4EkaDQ

— 物理段 —

物理扩展 0 到 0: 逻辑卷 /dev/LVMVolGroup/db_rmeta_0 逻辑扩展 0 到 0

物理扩展 1 到 5120: 逻辑卷 /dev/LVMVolGroup/db_rimage_0 逻辑扩展 0 到 5119

. . .

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

显示卷组信息

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

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

  1. sudo vgscan
输出

正在读取所有物理卷。这可能需要一些时间…

找到卷组 “LVMVolGroup” 使用元数据类型 lvm2

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

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

  1. sudo vgs -o +devices,lv_path
输出

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
输出

正在使用命令行上的卷组。

— 卷组 —

VG 名称 LVMVolGroup

. . .

— 逻辑卷 —

LV 路径 /dev/LVMVolGroup/projects

. . .

— 逻辑卷 —

LV 路径 /dev/LVMVolGroup/www

. . .

— 逻辑卷 —

LV 路径 /dev/LVMVolGroup/db

. . .

— 逻辑卷 —

LV 路径 /dev/LVMVolGroup/workspace

. . .

— 物理卷 —

PV 名称 /dev/sda

. . .

PV 名称 /dev/sdb

. . .

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

显示逻辑卷信息

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

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

  1. sudo lvscan
输出

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
输出

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
输出
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
输出
--- 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
输出
/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中将覆盖当前内容。如果您的服务器上有重要数据,请在继续之前备份。

使用 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. sudo 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

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

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

创建使用卷组剩余空间的逻辑卷

如果你希望使用卷组内剩余的可用空间创建一个逻辑卷,可以使用lvcreate命令,并使用-n选项为逻辑卷命名。与指定具体大小不同,你可以使用-l 100%FREE选项,这将利用卷组内所有剩余的可分配空间来创建逻辑卷。

sudo lvcreate -l 100%FREE -n test2 LVMVolGroup

这条命令会充分利用逻辑卷组中所有剩余的空间。

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

创建逻辑卷时,你可以使用一些高级选项来满足特定需求。以下是一些你可能需要考虑的常用选项:

  • --type: 此选项指定逻辑卷的类型,它决定了逻辑卷的分配方式。如果底层物理卷不足以正确创建所选拓扑,某些可用类型将无法使用。一些最常见的类型包括:
    • linear: 默认类型。如果使用多个底层物理设备,它们将一个接一个地附加在一起。
    • striped: 类似于RAID 0,条带化拓扑将数据分成块,并以轮询方式分散到各个底层物理卷中。这可以提高性能,但可能导致更高的数据脆弱性。此类型需要-i选项和至少两个物理卷。
    • raid1: 创建一个镜像RAID 1卷。默认情况下,镜像将有两个副本,但可以通过-m选项指定更多。此类型需要至少两个物理卷。
    • raid5: 创建一个RAID 5卷。此类型需要至少三个物理卷。
    • raid6: 创建一个RAID 6卷。此类型需要至少四个物理卷。
  • -m: 指定要保留的额外数据副本数量。值为“1”表示维护一个额外副本,总共有两套数据。
  • -i: 指定应维护的条带数量。这是striped类型所必需的,并且可以修改其他一些RAID选项的默认行为。
  • -s: 指定此操作应从现有逻辑卷创建快照,而不是创建一个新的独立逻辑卷。

创建条带化逻辑卷

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

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

创建镜像逻辑卷

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

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

创建逻辑卷快照

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

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

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

sudo lvconvert --merge LVMVolGroup/snap_test

这将使快照的原始状态恢复到创建快照时的状态。LVM提供了许多选项,可以显著改变逻辑卷的功能。

扩大逻辑卷的大小

动态调整LVM逻辑卷大小:扩展与收缩指南

LVM(逻辑卷管理)的一大优势在于其在提供逻辑卷配额方面的灵活性。您可以在不停机的情况下动态调整卷的数量或大小,这对于服务器管理和存储优化至关重要。

扩展LVM逻辑卷

要增加现有逻辑卷的大小,请使用lvresize命令。通过-L标志指定新的大小。您也可以使用相对大小,例如添加+5G,LVM将按指定数量增加逻辑卷的大小。为了自动调整逻辑卷上使用的文件系统大小,请同时传入--resizefs标志。

为正确指定要扩展的逻辑卷,您需要提供卷组名称,后跟一个斜杠,再跟逻辑卷名称,例如卷组名/逻辑卷名

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

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

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

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

这将达到相同的扩展效果。

收缩LVM逻辑卷与删除LVM组件

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

减小逻辑卷的大小

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

准备就绪后,请检查当前使用了多少空间:

df -h

输出示例:

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

在这个示例中,目前已使用了超过521MB的空间。利用此信息来帮助您估算可以缩小卷的尺寸。

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

cd ~

接下来,卸载文件系统:

sudo umount /dev/LVMVolGroup/test

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

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

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

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

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

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

sudo lvresize -L 3G LVMVolGroup/test

如果您已做好准备,请输入“y”来继续操作,这会提醒您数据丢失的可能性。

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

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

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

sudo mount /dev/LVMVolGroup/test /mnt/test

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

删除一个逻辑卷

(此部分原文缺失,根据标题推测应包含删除逻辑卷的步骤。)

移除逻辑卷

如果您不再需要某个逻辑卷,可以使用lvremove命令将其删除。

首先,如果逻辑卷当前已挂载,请务必将其卸载。

cd ~
sudo umount /dev/LVMVolGroup/test

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

sudo lvremove LVMVolGroup/test

系统会提示您确认操作。如果您确定要删除该逻辑卷,请按y键。

移除卷组

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

在删除卷组之前,您应该按照前面讨论的步骤删除其中的逻辑卷。至少,您必须确保卸载卷组中包含的任何逻辑卷。

sudo umount /dev/LVMVolGroup/www
sudo umount /dev/LVMVolGroup/projects
sudo umount /dev/LVMVolGroup/db

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

sudo vgremove LVMVolGroup

系统会提示您确认是否要删除该卷组。如果卷组中仍存在逻辑卷,系统会针对每个逻辑卷分别询问您是否确认删除。

移除物理卷

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

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

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

sudo pvmove /dev/sda

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

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

sudo vgreduce LVMVolGroup /dev/sda

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

sudo pvremove /dev/sda

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

结论

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

bannerAds