「Linux」- 扩容 VMDK 虚拟磁盘(重启或动态) @20210403

问题描述

在虚拟机中,随着虚拟磁盘的使用,磁盘空间很可能不足,因此需要对虚拟磁盘文件进行扩容。

虚拟机操作系统为 CentOS 7. 4 版本,使用 LVM 进行磁盘管理。

附加说明

建议”操作系统“应与”应用数据“进行分离
建议将系统系统应用数据分离,保存在不同的虚拟磁盘中,而不是放在一起。即操作系统保存在虚拟磁盘中,而应用数据则添加到独立虚拟磁盘或者挂载到外部存储中。这样做可以带来以下好处:
1)在数据迁移时,可以直接将应用数据的虚拟磁盘直接复制,或者直接挂载到新的虚拟机中。
2)在灾难恢复时,如果操作系统损坏,无法启动,可以直接将应用数据的虚拟磁盘挂载到新的虚拟机中。
3)使二者互不影响。即使数据盘IO无法访问,也能够登录系统进行维护。即使操作系统无法访问,我们依旧能够提取数据。

合理规划操作系统磁盘空间
通常在安装时,应该合理规划系统盘空间。随着业务增长,应用数据磁盘扩容不可避免,但是操作系统磁盘可以避免频繁扩容。

第一步、虚拟磁盘扩容

目的:在虚拟机平台中,对虚拟磁盘文件进行扩容。

在 vSphere Client 中,对虚拟磁盘进行扩容,在图形界面直接操作即可,这里不再赘述。

如果使用其他虚拟化平台(KVM),则使用平台相关方法进行扩容即可,这里不再赘述。

第二步、检测磁盘变化

目的:使 Linux 虚拟机检测到磁盘大小的变化

需要登录 Linux 虚拟机进行操作:

# 先执行 lsblk 命令,查看磁盘空间是否增加(通常是没有增加的)
lsblk

# 如果磁盘空间没有发生变化,则重新扫描磁盘:
for i in /sys/class/scsi_disk/*
do
    echo "####### $i"
    echo ‘1‘ > "$i/device/rescan"
done

# 由于知识有限,我们无法确定与磁盘的对应关系,所以只能全部扫描
# 如果能够确定,可以使用下面的命令,替换 “0:0:0:0” 即可
# echo ‘1‘ > "/sys/class/scsi_disk/0:0:0:0/device/rescan"

# 最后,重新查看磁盘空间(lsblk),以确定操作系统检测到磁盘变化。
lsblk

第三步、调整卷组大小

目的:调整卷组大小,将新空间加入卷组中,以在逻辑卷中使用

卷组是物理卷组成的,这里会有两种方案:
1)扩展原有物理卷,但是需要重启,易于后期维护;
2)创建新的物理卷,然后加入 LVM 中,因此无需重启,但是后期维护,需要留意一下。

方案一、扩展原有物理卷

需要使用 fdisk 命令重建分区表,但是重建分区表是个危险的动作。

重建分区表,首先删除旧分区表,然后新建分区表。如果以前没有操作过,建议先测试以了解调整分区表的方法,防止操作误删数据。

重建分区表,对于新人是个危险的动作,对于老人则驾轻就熟,我们这里不记录操作方法,之记录核心步骤:

fdisk "</dev/sdXN>"
# 操作略过……
# 注意事项,重建分区表的过程中,还需要选择磁盘类型,8e,代表 LVM 类型分区
#
# 执行保存命令(w)时,可能会收到如下提示:
#
# WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
# The kernel still uses the old table. The new table will be used at
# the next reboot or after you run partprobe(8) or kpartx(8)
# Syncing disks.
#

partprobe -s
# 但是可能会产生如下错误:
#
# Error: Partition(s) 2 on /dev/sda have been written, but we have been unable to inform
# the kernel of the change, probably because it/they are in use.  As a result, the old
# partition(s) will remain in use.  You should reboot now before making further changes.
#

reboot
# 由于没有找到解决办法,只能重启……这也是为什么要重启的原因

lsblk
# 执行 lsblk 检测磁盘空间增大。

pvresize "</dev/sdXN>"
# 扩大 PV 空间

vgs
# 此时能够看到 VG 空间已经扩大

方案二、创建新的物理卷

详细步骤这里不再赘述,大致流程如下:
1)使用命令 fdisk 创建分区;
2)使用 pvcreate 初始化分区;
3)使用 vgextend 添加 PV 分区;
4)使用 vgs 检查 VG 大小是否发生变化;

第三步、进行卷组扩容

目的:调整卷组大小

执行如下命令调整空间(可以根据自己的需要进行调整参数):

lvextend -l +100%FREE /dev/centos/root
# 将空间全部分配

lvdisplay
# 查看扩容后的大小,此时可以看到逻辑卷已经扩大

第四步、调整文件系统大小

目的:调整文件系统大小,以使用新的空间

接下来进行文件系统大小调整:

resize2fs /dev/centos/root

# 可能会遇到如下错误:
#
# resize2fs 1.42.9 (28-Dec-2013)
# resize2fs: Bad magic number in super-block while trying to open /dev/centos/root
# Couldn‘t find valid filesystem superblock.
#
# 我遇到了这个错误,只能怪自己傻,脑子总想着ext4文件系统,每次提到Linux就想Ext4文件系统。

xfs_growfs /dev/centos/root
# 不同的文件系统需要使用不同的工具,该主机为xfs文件系统,需要使用xfs_growfs命令:

df -h
# 查看文件系统变化

参考文献

How to extend a Linux PV partition online after virtual disk growth
Expanding LVM Partitions in VMware, on the fly


「Linux」- 扩容 VMDK 虚拟磁盘(重启或动态) @20210403

上一篇:TCP协议基本概念


下一篇:Linux软连接和硬链接