如题所示的场景出现在工作中的一次扩容操作的事件中,现在,在自己的环境中重演整个过程,并列出解决这些问题可能的一种解决方法。

背景说明:
在本文的环境中,LVM的PV的创建是通过类似“pvcreate /dev/sdc”的方式,将整个磁盘直接化成了PV,而不是先分区,再做PV。所以,这也是导致后面fdisk看到的磁盘空间与pvdisplay看到的PV大小不一致时,不太好处理的原因,没办法通过新建分区的方式,将磁盘扩展的那部分空间用起来。

在对LVM进行扩容的时候(当前的PV/VG,空间都不够用,需要物理上扩大容量),如果你使用的是VMware虚拟化技术构建的服务器,那么你将面临两种选择:
1. 新增一块新的虚拟磁盘文件(或者设备)
2. 在原有的虚拟磁盘文件上执行“扩展”,如下:
pv_vmware_1
(图一)
当前我的虚拟机是RUNNING的,所以,上面的按钮都是灰色的。

如果你是新增的一块新的磁盘设备,那么LVM的扩容没什么好说的,根以前的操作一样。
如果不清楚,可以查看我的这篇文档的记录:http://d-prototype.com/archives/1249

本文的重点在于,你选择的如果是在原有磁盘设备上“扩展”你将面临一个很尴尬的选择:磁盘设备的容量上去了,但是PV并没有变化,也不能删了PV重建,因为PV里面是有数据的。
具体的情况在下面的过程中,会特别指出来。

下面开始:
——————————————
先看看扩容前我的系统的情况:
磁盘大小,在“图一”中已经看到了,我的目标磁盘是“硬盘 3”,在执行扩容前,当前的大小为:5 GB。

看看Linux系统中的状态:

可以看到:
虚拟机硬件的“硬盘 3”,在Linux中被识别为“/dev/sdc”。
我们将它做成了PV,并利用该PV,制作了逻辑卷组:vg_cloudcontrol。
我们在卷组“vg_cloudcontrol”下创建了逻辑卷:/dev/vg_cloudcontrol/lv_cc
并将逻辑卷“/dev/vg_cloudcontrol/lv_cc”格式化成了ext4文件系统,挂载在:/mnt_lvm。

挂载点“/mnt_lvm”当前的最大空间为:3.4 G。
我的目标是:将其最大空间,扩展到:5.4 G。

首先,关闭虚拟机,对磁盘文件做扩容,而不是新增一个新的磁盘文件。
pv_vmware_2

pv_vmware_3

pv_vmware_4
如上,扩容成功后,启动虚拟机。

然后,进入Linux系统,查看并继续接下来的操作:

如上,这里可以看到:
1. /dev/sdc的空间已经上去了,扩展到了:7516 MB。
2. 但是PV,却没有变化,还是:5.00 GiB。

这就是我文首处提到的尴尬了。
1. 你如果选择删除PV – /dev/sdc,然后重新执行pvcreate,那么PV – /dev/sdc的容量肯定会扩上去,但是以前PV上的数据就没了。
2. PV相关的操作中,是没有VG或者LV那样,类似vgextend或lvextend的命令的,并没有一个命令是:pvextend。
如下:

解决这个问题,需要用到的命令是pvresize。
具体解决方法如下:
1. 重新刷新当前PV的大小:

可以看到,PV没有经过删除操作,现在也识别到了全部的/dev/sdc的空间。

2. pvresize成功后,vgdisplay是可以看到与pv相关联的vg的空间被自动的扩展了。
如下:

3. 然后,就可以像普通的LVM扩展那样,开始扩容LV了。

4. 最后,让LV的空间扩容在文件系统上生效:

至此,LVM的扩容就完成了。
2016年5月26日09:06:49

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

隐藏
变装