前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 18.04上使用LVM管理存储设备

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

原创
作者头像
林岑影
修改2018-10-29 18:27:55
8.2K1
修改2018-10-29 18:27:55
举报

介绍

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

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

先决条件

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

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

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

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

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

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

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

代码语言:javascript
复制
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从而来显示系统上的所有物理设备,仅返回物理卷:

代码语言:javascript
复制
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物理卷。输出格式有点不同,它包含少量附加信息:

代码语言:javascript
复制
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命令具有高度可配置性,可以以多种不同格式显示信息。由于可以严格控制其输出,因此在需要编写脚本或自动化时经常使用它。它的基本输出提供了类似于早期命令的有用的一目了然的摘要:

代码语言:javascript
复制
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命令通常是更好的选择:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
sudo vgscan
Output  Reading all physical volumes.  This may take a while...
  Found volume group "LVMVolGroup" using metadata type lvm2

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

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

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

代码语言:javascript
复制
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选件扫描系统并输出有关其找到的逻辑卷的最少信息:

代码语言:javascript
复制
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命令灵活,功能强大且易于在脚本中使用:

代码语言:javascript
复制
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选项:

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

代码语言:javascript
复制
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可以查看和使用的所有块设备:

代码语言:javascript
复制
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。您可以一次传入多个设备:

代码语言:javascript
复制
sudo pvcreate /dev/sda /dev/sdb

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

从物理卷创建新卷组

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

代码语言:javascript
复制
sudo vgcreate volume_group_name /dev/sda

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

代码语言:javascript
复制
sudo vgcreate volume_group_name /dev/sda /dev/sdb /dev/sdc

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

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

代码语言:javascript
复制
suod vgcreate -s 8M volume_group_name /dev/sda

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

将物理卷添加到现有卷组

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

代码语言:javascript
复制
sudo vgextend volume_group_name /dev/sdb

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

通过指定大小创建逻辑卷

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

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

代码语言:javascript
复制
sudo lvcreate -L 10G -n test LVMVolGroup

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

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

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

代码语言:javascript
复制
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:指定操作应从现有逻辑卷而不是新的独立逻辑卷创建快照。

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

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

代码语言:javascript
复制
sudo lvcreate --type striped -i 2 -L 10G -n striped_vol LVMVolGroup

要创建镜像卷,请使用该raid1类型。如果您需要两组以上的数据,请使用该-m选项。此示例用-m 2来创建总共三组数据(LVM将其计为具有两个镜像的一个原始数据集)。您将需要至少三个物理卷才能成功:

代码语言:javascript
复制
sudo lvcreate --type raid1 -m 2 -L 20G -n mirrored_vol LVMVolGroup

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

代码语言:javascript
复制
sudo lvcreate -s -L 10G -n snap_test LVMVolGroup/test

注意:要将逻辑卷还原为快照的时间点,请使用以下lvconvert --merge命令:

代码语言:javascript
复制
sudo lvconvert --merge LVMVolGroup/snap_test

这将使快照的原点恢复到拍摄快照时的状态。

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

增加逻辑卷的大小

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

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

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

代码语言:javascript
复制
sudo lvresize -L +5G --resizefs LVMVolGroup/test

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

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

代码语言:javascript
复制
sudo lvresize -L +5G LVMVolGroup/test
sudo resize2fs /dev/LVMVolGroup/test

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

删除或缩小LVM组件

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

减小逻辑卷的大小

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

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

代码语言:javascript
复制
df -h
Filesystem                         Size  Used Avail Use% Mounted on
. . .
/dev/mapper/LVMVolGroup-test       4.8G  521M  4.1G  12% /mnt/test

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

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

代码语言:javascript
复制
cd ~
sudo umount /dev/LVMVolGroup/test

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

代码语言:javascript
复制
sudo fsck -t ext4 -f /dev/LVMVolGroup/test

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

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

代码语言:javascript
复制
sudo resize2fs -p /dev/LVMVolGroup/test 3G

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

代码语言:javascript
复制
sudo lvresize -L 3G LVMVolGroup/test

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

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

代码语言:javascript
复制
sudo fsck -t ext4 -f /dev/LVMVolGroup/test

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

代码语言:javascript
复制
sudo mount /dev/LVMVolGroup/test /mnt/test

您的逻辑卷现在应该减小到适当的大小。

删除逻辑卷

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

首先,卸载当前挂载的逻辑卷:

代码语言:javascript
复制
cd ~
sudo umount /dev/LVMVolGroup/test

然后,键入以下命令删除逻辑卷:

代码语言:javascript
复制
sudo lvremove LVMVolGroup/test

系统将要求您确认该程序。如果您确定要删除逻辑卷,请键入y

删除卷组

要删除整个卷组(包括其中的所有逻辑卷),请使用该vgremove命令。

在删除卷组之前,通常应使用上述过程删除逻辑卷。至少,您必须确保卸载卷组包含的任何逻辑卷:

代码语言:javascript
复制
sudo umount /dev/LVMVolGroup/www
sudo umount /dev/LVMVolGroup/projects
sudo umount /dev/LVMVolGroup/db

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

代码语言:javascript
复制
sudo vgremove LVMVolGroup

系统将提示您确认是否要删除卷组。如果您仍有任何逻辑卷,则会在删除之前为您提供单独的确认提示。

删除物理卷

如果要从LVM管理中删除物理卷,则需要的过程取决于LVM当前是否正在使用该设备。

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

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

代码语言:javascript
复制
sudo pvmove /dev/sda

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

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

代码语言:javascript
复制
sudo vgreduce LVMVolGroup /dev/sda

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

代码语言:javascript
复制
sudo pvremove /dev/sda

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

结论

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

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


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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 先决条件
  • 显示有关物理卷,卷组和逻辑卷的信息
    • 显示有关所有LVM兼容块存储设备的信息
      • 显示有关物理卷的信息
        • 显示卷组的信息
          • 显示有关逻辑卷的信息
          • 创建或扩展LVM组件
            • 从原始存储设备创建物理卷
              • 从物理卷创建新卷组
                • 将物理卷添加到现有卷组
                  • 通过指定大小创建逻辑卷
                    • 从剩余的所有可用空间创建逻辑卷
                      • 使用高级选项创建逻辑卷
                        • 增加逻辑卷的大小
                        • 删除或缩小LVM组件
                          • 减小逻辑卷的大小
                            • 删除逻辑卷
                              • 删除卷组
                                • 删除物理卷
                                • 结论
                                相关产品与服务
                                云硬盘
                                云硬盘(Cloud Block Storage,CBS)为您提供用于 CVM 的持久性数据块级存储服务。云硬盘中的数据自动地在可用区内以多副本冗余方式存储,避免数据的单点故障风险,提供高达99.9999999%的数据可靠性。同时提供多种类型及规格,满足稳定低延迟的存储性能要求。
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档