问题描述
在虚拟机中,随着虚拟磁盘的使用,磁盘空间很可能不足,因此需要对虚拟磁盘文件进行扩容。
虚拟机操作系统为 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