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

介绍

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

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

先决条件

为了跟进,您应该可以访问Ubuntu 18.04服务器。您需要具有为管理任务配置sudo权限的非root用户。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

熟悉LVM组件和概念并测试基本的LVM配置。

准备就绪后,请与您的sudo用户一起登录您的服务器。

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

能够轻松获取有关系统中各种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组件。具有这些标头的设备称为物理卷

您可以通过选择该-l选项来使用lvmdiskscan从而来显示系统上的所有物理设备,仅返回物理卷:

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

sudo pvdisplay -m
 --- 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命令可用于扫描系统以查找可用的卷组。它还会在必要时重建缓存文件。将卷组导入新系统时,这是一个很好的命令:

sudo vgscan
Output  Reading all physical volumes.  This may take a while...
  Found volume group "LVMVolGroup" using metadata type lvm2

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

与其物理卷对应物一样,该vgs命令是通用的,可以以各种格式显示大量信息。由于其输出可以轻松操作,因此在需要编写脚本或自动化时经常使用它。例如,一些有用的输出修改是显示物理设备和逻辑卷路径:

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标志还提供有关构建卷组的物理卷的信息,以及使用卷组创建的逻辑卷:

sudo vgdisplay -v
  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选件扫描系统并输出有关其找到的逻辑卷的最少信息:

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命令灵活,功能强大且易于在脚本中使用:

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选项:

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添加的标志时,该工具还显示关于逻辑卷是怎样分解和分布的信息:

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

创建或扩展LVM组件

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

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

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

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

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物理卷,请使用pvcreate。您可以一次传入多个设备:

sudo pvcreate /dev/sda /dev/sdb

这应该在所有目标设备上写入LVM标头,以将它们标记为LVM物理卷。

从物理卷创建新卷组

要从LVM物理卷创建新卷组,请使用该vgcreate命令。您必须提供卷组名称,后跟至少一个LVM物理卷:

sudo vgcreate volume_group_name /dev/sda

此示例将使用单个初始物理卷创建卷组。如果您愿意,可以在创建时传入多个物理卷:

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

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

您可能希望拥有多个卷组的一个原因是,如果您觉得需要为不同的卷使用不同的扩展区大小。通常您不必设置范围大小(大多数用途的默认大小为4M),但是如果需要,可以通过传递-s选项来创建卷组:

suod vgcreate -s 8M volume_group_name /dev/sda

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

将物理卷添加到现有卷组

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

sudo vgextend volume_group_name /dev/sdb

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

通过指定大小创建逻辑卷

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

例如,要创建testLVMVolGroup卷组中命名的10G逻辑卷,请键入:

sudo lvcreate -L 10G -n test LVMVolGroup

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

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

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

sudo lvcreate -l 100%FREE -n test2 LVMVolGroup

这应该耗尽逻辑卷中的剩余空间。

使用高级选项创建逻辑卷

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

  • --type :这指定逻辑卷的类型,它确定如何分配逻辑卷。如果没有足够的基础物理卷来正确创建所选择的地形,则某些可用类型将不可用。一些最常见的类型是:
    • linear:默认类型。使用的基础物理设备(如果不止一个)将简单地相互附加,一个接一个。
    • stripe:与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的主要优点之一是它在配置逻辑卷时提供的灵活性。您可以在不停止系统的情况下轻松调整卷的数量或大小。

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

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

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

在此示例中,LVMVolGroup卷组上的逻辑卷和test逻辑卷的文件系统都将增加5G。

如果您希望手动处理文件系统扩展,可以取出该--resizefs选项,然后使用文件系统的本机扩展实用程序。例如,对于Ext4文件系统,您可以键入:

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

这会给你留下相同的结果。

删除或缩小LVM组件

由于容量减少可能导致数据丢失,因此通过减小或移除组件来缩小可用容量的过程通常会涉及更多。

减小逻辑卷的大小

要缩小逻辑卷,首先应备份数据。因为这会降低可用容量,所以错误可能会导致数据丢失。

准备好后,检查当前使用的空间:

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

在这个例子中,它看起来像目前正在使用的空间略高于521M。使用此选项可帮助您估计可以将音量减小到的大小。

接下来,卸载文件系统。与扩展不同,应在卸载时执行文件系统收缩:

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

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

sudo lvresize -L 3G LVMVolGroup/test

您将收到有关数据丢失可能性的警告。如果准备就绪,请键入y继续。

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

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

如果一切正常,您可以使用常用的mount命令重新安装文件系统:

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当前是否正在使用该设备。

如果正在使用物理卷,则必须将位于设备上的物理盘区移动到其他位置。这要求卷组具有足够的其他物理卷来处理物理盘区。如果使用更复杂的逻辑卷类型,即使有足够的可用空间以容纳拓扑,也可能需要具有其他物理卷。

如果卷组中有足够的物理卷来处理物理盘区,请通过键入以下内容将它们移出要删除的物理卷:

sudo pvmove /dev/sda

此过程可能需要一段时间,具体取决于卷的大小和要传输的数据量。

将扩展区重新定位到对等卷后,可以通过键入以下内容从卷组中删除物理卷:

sudo vgreduce LVMVolGroup /dev/sda

这将从卷组中删除空出的物理卷。完成此操作后,您可以通过键入以下内容从存储设备中删除物理卷标记:

sudo pvremove /dev/sda

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

结论

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

更多Ubuntu教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Use LVM To Manage Storage Devices on Ubuntu 18.0

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逻辑熊猫带你玩Python

与虚拟机交互文件的3种方式

大家好,我是公众号逻辑熊猫带你玩Python的小编LogicPanda,今天的主题是“与虚拟交互文件的3种方法”。

39330
来自专栏漏斗社区

CTF内存取证入坑指南!稳!

最近,斗哥在刷CTF题目。突然刷到了内存取证类,了解到了一款牛逼的工具——Volatility,在kali linux也默认安装好了这个工具,正好可以好好学习一...

62970
来自专栏张善友的专栏

用Sysctl 调整Linux操作系统的性能

Sysctl是一个允许您改变正在运行中的Linux系统的接口。它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统...

258100
来自专栏格子的个人博客

Tomcat目录文件列表功能和定制化

先说一下背景。 某天,产品小伙伴过来提了一个需求:能不能把公司的需求文档以列表的方式展示出来,当开发者需要哪个的时候,自己在目录中寻找并点击进入(需要哪个点哪...

34430
来自专栏逆向技术

为异常处理做准备,熟悉一下WinDbg工具

            为异常处理做准备,熟悉一下WinDbg工具 马上开始异常处理第二讲,但是在讲解之前,还有熟悉一下我们的WinDbg工具,当然你如果熟悉这...

252110
来自专栏枕边书

PHP 调用 Go 服务的正确方式 - Unix Domain Sockets

问题 可能是由于经验太少,工作中经常会遇到问题,探究和解决问题的过程总想记录一下,所以我写博客经常是问题驱动,首先介绍一下今天要解决的问题: 服务耦合 我们在开...

394110
来自专栏大宽宽的碎碎念

聊聊BIO,NIO和AIO (1)到底什么是“IO Block”BIONIOIO多路复用用epoll实现的IO多路复用epoll的优势水平触发和边沿触发再来思考一下什么是“Block”总结

66080
来自专栏Golang语言社区

PHP调用Go服务的正确方式 - Unix Domain Sockets

作者:枕边书 链接:http://www.cnblogs.com/zhenbianshu/p/7265415.html 來源:博客园 问题 可能是由于经验太少,...

47590
来自专栏玄魂工作室

Kali Linux Web渗透测试手册(第二版) - 2.3 - 使用Nmap进行扫描和识别应用服务

thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt,

26730
来自专栏Seebug漏洞平台

WinDbg 漏洞分析调试(一)

0x00 引子 最近开始要在部门内进行 WinDbg 漏洞分析方面的专题showcase,打算将每次分享的内容整理成文章,希望能写一个系列。另外,鉴于笔者还在学...

40340

扫码关注云+社区

领取腾讯云代金券