Contents

在LVM中添加磁盘

1. 概述

当我们需要比最初计划更多的存储空间时,LVM 可以提供帮助。

**Linux 内核的逻辑卷管理器让我们可以抽象我们的磁盘分区。*我们没有将存储卷分配给写入物理磁盘分区表的分区,而是根据需要灵活分配空间。而且我们不会一次使用一个磁盘,而是使用存储池。这意味着如果空间不足,我们可以增加或缩小/usr/var*卷。

在本教程中,我们将向我们的存储池(又名卷组)添加一个新的物理磁盘,并使用添加的存储来扩展我们现有的文件系统。

2. 情况

假设我们一直在使用 Ubuntu Server 20.04 LTS。默认情况下,我们服务器的存储已分区为传统的 1GB 分区用于*/boot*,其余大部分分配给 LVM 卷组。

我们可以用*lsblk *查看它:

# lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT /dev/vda
NAME                      SIZE TYPE FSTYPE      MOUNTPOINT
vda                        25G disk             
├─vda1                      1M part             
├─vda2                      1G part ext4        /boot
└─vda3                     24G part LVM2_member 
  └─ubuntu--vg-ubuntu--lv  20G lvm  ext4        /

从这个输出中,我们看到*/dev/vd3*有 24G,但只有 20G 被分配给挂载在根目录的逻辑卷。这给了我们在“空间不足”紧急情况下的回旋余地。保留未分配空间的另一个原因:LVM 快照,便于从一致状态进行备份。

让我们看看使用df 这样的传统工具我们的文件系统是什么样子的:

# df -hT -text4
Filesystem                        Type  Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv ext4   20G  6.2G   13G  34% /
/dev/vda2                         ext4  976M  107M  803M  12% /boot

具有长名称的逻辑卷看起来就像 Linux 的块设备或分区。

现在,如果它开始填满怎么办?

3. 物理的、分组的和逻辑的

在过去简单分区的糟糕日子里,我们必须将所有内容复制到一个更大的分区中以添加更多存储空间。我们可能不得不一直让我们的服务器离线。

当我们使用 LVM 时,我们可以在任何物理驱动器之间切换我们的逻辑卷。我们可以安全地调整任何逻辑卷的大小,然后调整它们的文件系统。

Linux 的 LVM 系统包含三个层次:物理卷、卷组和逻辑卷。lvm 命令让我们可以将系统作为一个整体来工作。

但是这些级别中的每一个都可以使用一组命令来创建、检查、修改等:

  • pv命令操作物理卷
  • vg命令操作卷组
  • lv命令操作逻辑卷

3.1.检查我们的逻辑卷

让我们看看使用 LVM 工具的存储。

使用pvdisplay ,我们看到旧式硬盘分区,它已被标记为 LVM 物理卷:

# pvdisplay
  --- Physical volume ---
  PV Name               /dev/vda3
  VG Name               ubuntu-vg
  PV Size               <24.00 GiB / not usable 0   
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              6143
  Free PE               1023
  Allocated PE          5120
  PV UUID               qYYC7J-VjMf-niyu-m9C3-KU1n-bys8-1cA0GO

我们还注意到它是 ubuntu-vg Volume Group 的成员。

PE代表物理范围。范围是文件系统测量块设备的一种方式:起始块和块长度。

使用vgdisplay ,我们会看到一些类似的信息。我们可以验证我们的卷组只包含我们的一个物理卷(驱动器分区/dev/vda3):

# vgdisplay | grep PV
  Max PV                0
  Cur PV                1
  Act PV                1

我们想在我们的 VG 中添加另一个 PV。然后我们可以让我们的逻辑卷知道它。

现在,lvdisplay 告诉我们它的名称、它使用的 VG 以及预留了多少存储空间:

# lvdisplay ubuntu-lv
  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                QsSEyX-tpie-TBuw-sI6w-g6jN-Tp60-da7xjP
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2021-08-22 01:13:58 +0000
  LV Status              available
  # open                 1
  LV Size                20.00 GiB
  Current LE             5120
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

3.2. 添加存储

假设我们添加了另一个硬盘驱动器。我们可能希望使用 RAID 来获得更快和/或更可靠的存储 。但是现在,让我们添加更多。通过添加这样的另一个驱动器来增加我们的存储空间称为线性模式。

首先,我们将新硬盘标记为与 LVM 一起使用。由于这是物理层,我们将使用pv命令pvcreate

# pvcreate /dev/vdd
  Physical volume "/dev/vdd" successfully created.
# pvdisplay
  --- Physical volume ---
  PV Name               /dev/vda3
  VG Name               ubuntu-vg
  PV Size               <24.00 GiB / not usable 0   
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              6143
  Free PE               1023
  Allocated PE          5120
  PV UUID               qYYC7J-VjMf-niyu-m9C3-KU1n-bys8-1cA0GO
   
  "/dev/vdd" is a new physical volume of "25.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/vdd
  VG Name               
  PV Size               25.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               LYx1BE-udTE-imd2-1Ujx-ibph-kZyE-x9nWln

我们注意到pvdisplay深思熟虑地告诉我们我们的 PV 是“新的”并且尚未附加到任何卷组。

接下来,我们将物理卷/dev/vdd添加到卷组ubuntu-vg*中。*

我们将使用 LVM 命令vgextend

# vgextend ubuntu-vg /dev/vdd
  Volume group "ubuntu-vg" successfully extended
# vgdisplay ubuntu-vg 
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               48.99 GiB
  PE Size               4.00 MiB
  Total PE              12542
  Alloc PE / Size       5120 / 20.00 GiB
  Free  PE / Size       7422 / 28.99 GiB
  VG UUID               oLnK3Q-OHRI-sMbw-72IM-qj2J-rJCj-olnalT

**最后,我们可以调整逻辑卷ubuntu-lv 的大小。**现在,它有 20GiB。让我们添加 95% 的可用空间,节省其余空间。

我们将使用lvresize 做到这一点:

# lvresize --extents +95%FREE --resizefs ubuntu-vg/ubuntu-lv
  Size of logical volume ubuntu-vg/ubuntu-lv changed from 20.00 GiB (5120 extents) to 47.54 GiB (12171 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 6
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 12463104 (4k) blocks long.

我们使用 extents 选项或*-l来声明一定百分比的空间。我们也可以使用–size或其别名-L*来指定一个硬数字,例如 20G 或要添加的数量,例如 +10G:

# lvresize --size +10G --resizefs ubuntu-vg/ubuntu-lv

–resizefs选项自动扩展您的 ext 或 XFS 文件系统以适应其新空间。我们可以使用特定于文件系统的大小调整工具将其作为一个单独的步骤来完成,但一次完成这一切很方便。

让我们使用非 LVM 工具检查我们的磁盘空间:

# df -hT -text4
Filesystem                        Type  Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv ext4   47G  6.2G   39G  14% /
/dev/vda2                         ext4  976M  107M  803M  12% /boot

还有我们额外的可用空间。

3.3. 进一步的考虑

使用线性模式,像这样组合多个磁盘,会增加我们因硬件故障而丢失数据的风险。RAID 可以提供帮助。

有两种方法。两者都是可行的。我们可以选择一个看起来最直接的。

一种是使用*mdraid *创建 Linux RAID 设备。然后我们可以将其视为任何物理卷,将其添加到卷组,等等。

另一个是使用 lvm 的内置 RAID 命令。

这两种方法都使用相同的 RAID 软件。因此,这实际上是我们更喜欢如何组织存储的问题。

Archlinux 在他们的 wiki 上包含了非常好的细节。