在RHEL/CentOS 7/8 Linux中调整根LVM分区大小

时间:2020-02-23 14:40:20  来源:igfitidea点击:

在本文中,我将通过示例分享逐步指南,以在RHEL/CentOS 7/8 Linux上调整根LVM分区的大小。
增加或者减小分区大小的基本要求是不得安装各个分区。
现在,我们无法卸载根分区,因此无法在线调整大小。
我们必须启动到救援模式才能调整根LVM分区的大小。

说明:

如果我们希望"调整非LVM根分区的大小",那么我们必须遵循以下第2条简单的方法,通过示例在Linux中调整(扩展或者缩小)非LVM主分区的大小。

警告:

即使我已经在环境中测试并验证了这些步骤,我们仍应避免在生产环境中缩小或者减小此类主分区(例如/)的LVM大小。
由于这些都不受Red Hat,SuSE等任何供应商的正式支持,它也可能会破坏系统。

实验室环境

我已经验证了本文的步骤,以在RHEL/CentOS 7和8 Linux环境上(扩展和收缩)调整根LVM分区(ext4)的大小。
屏幕快照是从Linux服务器上安装的Oracle VirtualBox上运行的CentOS 8节点捕获的。

我有一个非常简单的环境,分区最少。

[root@centos-8 ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               2.4G     0  2.4G   0% /dev
tmpfs                  2.4G     0  2.4G   0% /dev/shm
tmpfs                  2.4G  8.6M  2.4G   1% /run
tmpfs                  2.4G     0  2.4G   0% /sys/fs/cgroup
/dev/mapper/rhel-root   14G  1.8G   11G  15% /
/dev/sda1              488M  130M  323M  29% /boot
tmpfs                  479M     0  479M   0% /run/user/0

以下是可用的逻辑卷。

如我们所见,我没有创建太多逻辑卷。

[root@centos-8 ~]# lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rhel -wi-ao----  13.56g
  swap rhel -wi-ao---- 956.00m

第1步:备份数据(可选,但建议)

由于我们计划收缩根LVM分区,因此在开始该过程之前备份数据非常重要。

好像出了什么问题,我们最终都会得到一个无法使用的系统。

启动救援模式

我们不能在不重新引导的情况下在线收缩根LVM分区。
另外,根据环境,我们还需要RHEL/CentOS 7/8 ISO DVD才能进入救援模式。

我其中使用的是CentOS 8,因此我将使用CentOS 8的原始DVD进入救援模式。

说明:

我们也可以在没有救援镜像的情况下启动到rescue.target或者Emergency.target,但这不会收缩根LVM分区,因为/分区将处于挂载状态并收缩一个分区重要的是,各个分区未安装

使用抢救DVD引导Linux节点后,就可以启用SSH并以抢救模式配置网络。

在此示例中,我禁用了一致的网络设备命名并分配了静态IP地址,但是我们也可以通过使用ip = dhcp来使用DHCP。

有关使用的语法的更多信息,我们可以检查网络引导选项

在下一个屏幕中,选择" 3"以跳到shell。
确保未安装文件系统。
如果选择1或者2,则根分区将挂载在/mnt/sysimage上,这将不允许我们调整根LVM分区的大小。

由于我已启用SSH并为救援模式配置了网络,因此我已使用Putty进行了连接。

如我们所见,当前系统已通过LIVE DVD挂载,因此我们的LVM根分区未处于挂载状态,因此我们可以减小或者增大根分区大小。

另请阅读:

如何为每个用户配置基于ssh主机的身份验证(CentOS/RHEL 7/8)

[anaconda root@centos-8 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             2.4G     0  2.4G   0% /dev
tmpfs                2.5G   12K  2.5G   1% /dev/shm
tmpfs                2.5G   17M  2.5G   1% /run
tmpfs                2.5G     0  2.5G   0% /sys/fs/cgroup
/dev/sr0             6.7G  6.7G     0 100% /run/install/repo
/dev/mapper/live-rw  2.9G  1.8G  1.2G  61% /
tmpfs                2.5G  724K  2.5G   1% /tmp

激活逻辑卷

接下来,我们必须先激活逻辑卷,然后才能收缩根LVM文件系统。

[anaconda root@centos-8 ~]# vgchange -ay
  2 logical volume(s) in volume group "rhel" now active

列出可用的逻辑卷和卷组:

[anaconda root@centos-8 ~]# lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rhel -wi-------  13.56g
  swap rhel -wi------- 956.00m                                                                                                                           
[anaconda root@centos-8 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  rhel   1   2   0 wz--n- <14.50g    0

执行文件系统检查

下一步运行文件系统检查,以确保文件系统正确且未损坏。

如果没有文件系统检查,则无法收缩根LVM分区或者任何其他分区。

[anaconda root@centos-8 ~]# e2fsck -f /dev/mapper/rhel-root
e2fsck 1.44.3 (10-July-2016)
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/mapper/rhel-root: 49755/522240 files (0.2% non-contiguous), 502880/2097152 blocks

因此,我们的文件系统检查已通过。

调整根LVM分区的大小

在应急模式下启动后,我们可以调整根LVM分区或者无法在default.target中卸载运行时的任何其他分区的大小,例如启动分区。
在以下示例中,我们将减小根LVM分区的大小,并增加根LVM分区的大小。

在Linux中减少或者缩小根LVM分区大小

接下来使用resize2fs来调整根LVM分区的大小。
目前,我的/文件系统为13.5 GB,我想将根分区大小减小到7GB

[anaconda root@centos-8 ~]# resize2fs /dev/mapper/rhel-root 7G
resize2fs 1.44.3 (10-July-2016)
Resizing the filesystem on /dev/mapper/rhel-root to 1835008 (4k) blocks.
The filesystem on /dev/mapper/rhel-root is now 1835008 (4k) blocks long.

接下来,使用与上述命令相同的大小(7G)的lvreduce来减小根分区的大小。

[anaconda root@centos-8 ~]# lvreduce -L 7G /dev/mapper/rhel-root
  WARNING: Reducing active logical volume to 7.00 GiB.
  THIS Jan DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce rhel/root? [y/n]: y
  Size of logical volume rhel/root changed from 13.56 GiB (3472 extents) to 7.00 GiB (1792 extents).
  Logical volume rhel/root successfully resized.

因此,调整大小的根LVM分区成功。
我们可以将根文件系统挂载在/mnt/sysimage上以验证大小

[anaconda root@centos-8 ~]# mount /dev/mapper/rhel-root /mnt/sysimage/

如我们所见,我的根分区现在是7GB

[anaconda root@centos-8 ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               2.4G     0  2.4G   0% /dev
tmpfs                  2.5G   12K  2.5G   1% /dev/shm
tmpfs                  2.5G   17M  2.5G   1% /run
tmpfs                  2.5G     0  2.5G   0% /sys/fs/cgroup
/dev/sr0               6.7G  6.7G     0 100% /run/install/repo
/dev/mapper/live-rw    2.9G  1.8G  1.2G  61% /
tmpfs                  2.5G  724K  2.5G   1% /tmp
/dev/mapper/rhel-root  6.9G  1.8G  4.8G  27% /mnt/sysimage

在Linux中增加根分区大小

现在,要扩展根分区的大小,我将使用相同的节点。
其中我们将从7G的根分区大小增加1GB到8G。

[anaconda root@centos-8 ~]# lvextend -L +1G /dev/mapper/rhel-root
  Size of logical volume rhel/root changed from 7.00 GiB (1792 extents) to 8.00 GiB (2048 extents).
  Logical volume rhel/root successfully resized.

lvextend命令成功执行,接下来我们将执行resize2fs以增加根分区大小

[anaconda root@centos-8 ~]# resize2fs /dev/mapper/rhel-root
resize2fs 1.44.3 (10-July-2016)
Resizing the filesystem on /dev/mapper/rhel-root to 2097152 (4k) blocks.
The filesystem on /dev/mapper/rhel-root is now 2097152 (4k) blocks long.

resize2fs之后,我们可以验证必须挂载根分区的更改。
由于我们处于救援模式,因此将其安装在/mnt/sysimage上。

[anaconda root@centos-8 ~]# mount /dev/mapper/rhel-root /mnt/sysimage/

接下来使用df命令,我们可以成功地增加根分区的大小

[anaconda root@centos-8 ~]# df -h /mnt/sysimage/
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root  7.9G  1.8G  5.7G  24% /mnt/sysimage

验证根分区的新大小

现在,上面的命令将仅挂载根分区。
接下来,我们将挂载所有其他分区,以在启动到default.target之前正确地验证我们的更改。

[anaconda root@centos-8 ~]# mount -o bind /dev /mnt/sysimage/dev
[anaconda root@centos-8 ~]# mount -o bind /usr /mnt/sysimage/usr
[anaconda root@centos-8 ~]# mount -o bind /sys /mnt/sysimage/sys
[anaconda root@centos-8 ~]# mount -t proc /proc /mnt/sysimage/proc
[anaconda root@centos-8 ~]# mount -o bind /dev/shm /mnt/sysimage/dev/shm

由于我们已经挂载了根分区,因此接下来我们将挂载启动分区。
现在,如果系统上还有其他分区,那么也可以挂载它们。

[anaconda root@centos-8 ~]# mount /dev/sda1 /mnt/sysimage/boot

接下来使用chroot将文件系统更改为/mnt/sysimage

[anaconda root@centos-8 ~]# chroot /mnt/sysimage/

在将节点重新启动到" default.target"之前,请验证是否一切正常。

[anaconda root@centos-8 /]# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root  7.9G  1.8G  5.7G  24% /
/dev/sda1              488M  130M  323M  29% /boot
devtmpfs               2.4G     0  2.4G   0% /dev
/dev/mapper/live-rw    2.9G  1.8G  1.2G  61% /usr
tmpfs                  2.5G   12K  2.5G   1% /dev/shm