方法如何在Linux上扩展和调整LVM分区的大小

逻辑卷管理器(LVM)允许Linux内核有效地管理大型磁盘驱动器。这使用户可以从多个磁盘创建分区,并在几秒钟内在线扩展文件系统的大小。

本文向您展示了如何在不丢失数据的情况下扩展和调整LVM分区的大小。

如果在Linux上使用LVM,请按照以下步骤在线扩展LVM分区而不会丢失数据:

注意:这些命令必须以root特权运行。

目录

  • 方案1:
  • 1)使用现有磁盘扩展LVM
  • 方案2:
  • 用新磁盘扩展存储
  • 如何调整/缩小LVM
  • 1)卸载文件系统
  • 2)执行文件系统检查
  • 3)调整文件系统大小
  • 4)LV尺寸减小
  • 结论

方案1:

1)使用现有磁盘扩展LVM

在这种情况下,现有存储具有未使用的分区,该分区将用于扩展另一个LVM分区。

一个检查卷组详细信息

首先,使用vgdisplay命令显示卷组的详细信息(然后称为VG)。

# vgdisplay

显示卷组详细信息

您会看到有49.21 GB的可用空间。

使用添加查看VG详细信息 -v vgdisplay命令参数。

# vgdisplay -v

VG详细信息

b。扩展存储

/dev/vg_devmachine/data 24.41 GB。假设您要再添加10 GB /data 分区。要扩展逻辑卷,只需告诉lvextend命令要将大小增加多少(以下为+10)。 -L 参数。

# lvextend -L+10G /dev/vg_devmachine/data

扩展LVM

仅针对RHEL 3的注意事项: 您必须先卸载分区,更改才能生效。

# unmount /dev/VolGroup00/LogVol00

在此示例中,您可以卸载 /data 通过键入以下内容来创建分区:

# unmount /dev/vg_devmachine/data

接下来,您需要激活更改。使用resize2fs命令。此命令用于在线调整ext2 / ext3 / ext4文件系统的大小。

# resize2fs /dev/vg_devmachine/data

注意事项: 在RHEL 4上,可以使用ext2online命令来调整分区的大小。

# ext2online /dev/mapper/vg_devmachine-data

但是,在上述RHEL 5中,该命令已由resize2fs命令代替。

激活变更

要检查它,运行 vgdisplay -v 再次强调 /dev/vg_devmachine/data

扩展后的新VG显示屏

现在您可以看到LV大小已增加到34.41 GB。

如果您使用的是RHEL 3,请不要忘记重新安装该分区。

方案2:

用新磁盘扩展存储

在这种情况下,我们添加了新的存储。 /dev/sdb Linux系统100 GB的容量。然后使用它扩展现有的LVM分区。将LVM分区扩展到另一个磁盘的命令保持不变。但是,如果您向系统添加更多的物理存储,则需要让OS(Linux)知道。

一个创建一个物理分区

添加新磁盘时,系统需要识别某些操作。 Internet上有几种分区工具,例如fdisk和parted。本文使用fdisk,在大多数Linux发行版中都可用。首先是创建一个新分区

# fdisk /dev/sdb

创建新分区

按下 n 创建一个新分区。

创建新分区

假设您创建两个新分区。按下 p1 创建一个新的主分区。将大小设置为50G。

重复第二个分区。按下 p2 创建第二个主分区。对于大小(最后一个圆柱体…问题),您无需输入值。如以下示例所示,将剩余空间考虑在内

指定大小

完成后,按提交更改 w 按钮

提交变更

现在 fdisk -l,让我们来看看 /dev/sdb1/dev/sdb2 将显示分区。

将会出现一个新分区

b。创建物理卷(PV)作为LVM的基础

创建物理分区后,下一步就是创建物理卷(PV)。 PV用作LVM的主机。物理磁盘分为一个或多个物理卷(PV)

# pvcreate /dev/sdb1 /dev/sdb2

创建PV

如果未发现错误,则可以使用pvscan命令检查结果。

# pvscan

扫描可用的PV

您将看到两个空PV。如果为空,则PV不属于任何卷组。

c。扩展卷组(VG)

通过组合一个或多个PV来创建逻辑卷组(VG)。已经有一个名为vg_devmachine的VG。其容量为95.11 GB和39.21 GB可用空间。要扩展vg_devmachine,可以使用vgextend命令。

# vgextend vg_devmachine /dev/sdb1

扩展卷组

用vgdisplay检查。您可以看到vg_devmachine的大小增加了。

d。扩展LVM分区

在此阶段,使用与上一个命令相同的命令。让我们扩展 /home 分区。再添加30 GB。

再次,首先使用lvdisplay命令检查当前容量。

# lvdisplay

显示/ home的LV

增加更多30G /home 您需要扩展分区,即分区。

# lvextend -L+30G /dev/vg_devmachine/home

扩展/主分区

接下来,您需要激活更改。

# resize2fs /dev/vg_devmachine/home

激活变更

如何调整/缩小LVM

缩小卷之前,请确保已备份了安装点。缩小卷可能会导致数据损坏。要减小逻辑卷的大小,请首先卸载文件系统。然后,您可以使用lvreduce命令缩小音​​量。缩小卷后,重新挂载文件系统。本文中的示例适用于centos 7。

在此示例中,名为 /dev/vg-01/lv_stripe 大小为1Gb。我想将LV大小减小到800MB。在继续缩小文件系统之前,请注意以下几点:

  • 确保文件系统的当前磁盘使用率小于您要减小逻辑卷的大小。
  • 在使用LVM更改大小之前,请始终备份文件系统数据。该命令中的一个简单错误可能会损坏文件系统并导致数据丢失。

要将LV大小减小到800MB,您需要按照以下步骤操作:

  • 卸载文件系统(用于需要从Live CD引导以完成任务的根卷)
  • 在更改文件系统的大小之前,请使用fsck命令进行检查。
  • 在缩小LV大小之前,将文件系统大小调整为800MB
  • 将逻辑卷的大小减少800MB。
  • 挂载文件系统

现在,您可以执行上述每个步骤。

1)卸载文件系统

在下面的示例中,有一个逻辑卷 /dev/vg-01/lv_stripe 它将被安装在安装点上。/mnt/lv_stripe 您可以检查是否已安装该卷 df -hP 指挥部

# df -hP 
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/centos-root        18G  5.2G   13G  30% /
devtmpfs                      897M     0  897M   0% /dev
tmpfs                         912M  156K  912M   1% /dev/shm
tmpfs                         912M  9.0M  903M   1% /run
tmpfs                         912M     0  912M   0% /sys/fs/cgroup
/dev/sda1                     497M  189M  309M  38% /boot
tmpfs                         183M   24K  183M   1% /run/user/1000
/dev/mapper/vg--01-lv_stripe 1008M   55M  902M   6% /mnt/lv_stripe

看最后一行,逻辑卷已安装。在文件系统上运行fsck之前,必须先将其卸载。可以卸载文件系统 /mnt/lv_stripe 如下。

# umount /mnt/lv_stripe

用df命令确认

# df -hP 
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/centos-root        18G  5.2G   13G  30% /
devtmpfs                      897M     0  897M   0% /dev
tmpfs                         912M  156K  912M   1% /dev/shm
tmpfs                         912M  9.0M  903M   1% /run
tmpfs                         912M     0  912M   0% /sys/fs/cgroup
/dev/sda1                     497M  189M  309M  38% /boot
tmpfs                         183M   24K  183M   1% /run/user/1000

2)执行文件系统检查

在继续减少文件系统之前,必须运行fsck命令以避免文件系统数据不一致。强制检查,即使文件系统看起来干净 -f 可选的。可以按照以下步骤进行:

# e2fsck -f /dev/vg-01/lv_stripe 
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg-01/lv_stripe: 14/65536 files (7.1% non-contiguous), 18146/262144 blocks

文件系统每5个步骤应通过此操作,检查文件系统是否没有问题。

注意:fsck.ext4建议用于较新版本的Ubuntu,因为默认情况下它使用ext4文件系统。

3)调整文件系统大小

在减小逻辑卷的大小之前,必须缩小其中的文件系统。命令resize2fs可以用于此目的,如下所示:将文件系统减少到800MB。我们将使用 -p 在脱机调整大小时,可以选择为每个resize2fs操作打印百分比完成条。

# resize2fs -p /dev/vg-01/lv_stripe 800M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg-01/lv_stripe to 204800 (4k) blocks.
Begin pass 3 (max = 8)
Scanning inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/vg-01/lv_stripe is now 204800 blocks long.

4)LV尺寸减小

收缩常驻文件系统后,可以按如下所示减小LV:

# lvreduce -L 800M /dev/vg-01/lv_stripe 
  WARNING: Reducing active logical volume to 800.00 MiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_stripe? [y/n]: y
  Size of logical volume vg-01/lv_stripe changed from 1.00 GiB (256 extents) to 800.00 MiB (200 extents).
  Logical volume lv_stripe successfully resized.

这样可以将逻辑卷的大小减小到800MB。更改逻辑卷的大小时,请使用正确的大小(800 MB)。您可以看到逻辑卷的新大小

# lvdisplay /dev/vg-01/lv_stripe 
 --- Logical volume ---
 LV Path /dev/vg-01/lv_stripe
 LV Name lv_stripe
 VG Name vg-01
 LV UUID moX8R0-ME2Q-UFHd-HLIP-rmij-SmTm-3Zupem
 LV Write Access read/write
 LV Creation host, time centos7-srv, 2017-05-01 16:02:21 +0100
 LV Status available
 # open 0
 LV Size 800.00 MiB
 Current LE 200
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 8192
 Block device 253:3

你可以看到 LV Size 800.00 Mib 指示新尺寸的行。您还可以挂载文件系统并使用以下命令进行检查 df -Ph 指挥部

# mount /dev/vg-01/lv_stripe /mnt/lv_stripe/
# df -Ph
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/centos-root        18G  5.2G   13G  30% /
devtmpfs                      897M     0  897M   0% /dev
tmpfs                         912M  156K  912M   1% /dev/shm
tmpfs                         912M  9.0M  903M   1% /run
tmpfs                         912M     0  912M   0% /sys/fs/cgroup
/dev/sda1                     497M  189M  309M  38% /boot
tmpfs                         183M   20K  183M   1% /run/user/1000
/dev/mapper/vg--01-lv_linear  9.7G  3.2M  9.2G   1% /mnt/lv_linear
/dev/mapper/vg--01-lv_mirror  992M  2.8M  938M   1% /mnt/lv_mirror
/dev/mapper/vg--01-lv_stripe  786M   55M  692M   8% /mnt/lv_stripe

注意事项:

请注意,在使用lvreduce命令调整逻辑卷的大小之前,请使用resize2fs命令调整文件系统的大小。 Resize2fs确保文件系统仅使用存储的第一个大小字节。它通过移动文件系统元数据和数据来做到这一点。完成后,在块设备(逻辑卷)的末尾有未被文件系统使用的未使用存储。 Lvextend和lvreduce命令更改逻辑卷的大小。另外,您可以更改文件系统的大小 -r 选择调用resize2fs。这可能是正确的方法,尤其是对于缩小的情况。不幸的是,错误地给lvreduce设置大小是丢失数据的一种简便方法。 -r 防止这种情况发生(以便通知resize2fs相同的大小)。

因此,您可以直接使用lvreduce绕过resize2fs步骤。 -r 可选的。例如,通过执行上述步骤而不使用resize2fs步骤并以以下内容结尾来减少逻辑量: lvreduce -r 命令如:

# umount /mnt/lv_stripe/
# e2fsck -f /dev/vg-01/lv_stripe 
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg-01/lv_stripe: 14/57344 files (7.1% non-contiguous), 17567/204800 blocks
# lvreduce -r -L 500M /dev/vg-01/lv_stripe
  Rounding size (125 extents) up to stripe boundary size for segment (126 extents)
fsck from util-linux 2.23.2
/dev/mapper/vg--01-lv_stripe: clean, 14/57344 files, 17567/204800 blocks
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/vg--01-lv_stripe to 129024 (4k) blocks.
The filesystem on /dev/mapper/vg--01-lv_stripe is now 129024 blocks long.

  Size of logical volume vg-01/lv_stripe changed from 800.00 MiB (200 extents) to 504.00 MiB (126 extents).
  Logical volume lv_stripe successfully resized.

检查逻辑卷的新大小

# lvdisplay /dev/vg-01/lv_stripe | grep "Size"
 LV Size 504.00 MiB

将显示新的尺寸。无需更改文件系统的大小。

结论

LVM分区为您提供了存储灵活性。如果当前分区空间不足,则可以随时动态调整分区大小。我意识到我不需要卸载分区即可扩展lvm,而仅在需要收缩lvm时才需要。一个缺点是,如果物理磁盘出现问题,它将影响卷组和所有创建的LVM分区。

另请阅读:

  • 如何在Linux上配置LVM(pvcreate,lvcreate,vgcreate)
Sidebar