在RHEL/CentOS 7/8 Linux中调整根LVM分区大小
在本文中,我将通过示例分享逐步指南,以在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