故事前景
有一vmware虚拟机,磁盘大小设置为默认的20GB,安装的是CentOS7.4,安装CentOS默认使用GPT分区格式建立LVM分区。分区格式如下图所示:
系统根分区"/",其大小为17G,现觉得空间过小,满足不了使用需求**,因此产生了基于LVM技术对它进行扩容的想法。以下是具体的操作过程。
1. 增加磁盘空间
增加磁盘空间,可以调整原磁盘的大小,或者给虚拟机添加新的硬盘,操作期间都先关闭虚拟机。
我选择的是直接将原有的磁盘空间加大。操作如下图所示:
将原磁盘大小由20GB,拖动至100GB。确认以后,vmware会弹出提示:新的磁盘需要在虚拟机系统中进行相应操作后才能使用。(大致意思,对话框没有截图)
2. 进行LVM扩容
启动虚拟机,进入以后"df -h"查看分区和调整前一样。然后按如下顺序开始LVM扩容操作。
2.1 给新增加的硬盘建立分区
因为系统使用GPT分区格式建立的分区,所以这里使用"parted"指令完成对新增加硬盘空间的分区工作。(parted指令需要yum install parted安装)
系统中只有一块硬盘,刚才也只是将这块硬盘大小增加了,所以其设备名仍为前面图中的"/dev/sda",然后使用"parted /dev/sda"完成LVM分区操作。如果是新增加了另一块磁盘,则先通过"parted -l"查找到系统识别出来的磁盘设备名,再进行后续操作。
-
print
查看现有分区
-
mkpart primary 21.5GB 100%
21.5GB是原有磁盘最后一个分区的位置,放在此处作为新建分区的起始位置,100%则表示整块磁盘的最大容量的位置处,简而言之就是将新增加的磁盘空间全部划为一个分区。
-
name 4 addpart
4表示分区编号,在原有的三个分区之上又新建了一个分区,所以其编号自然为4,"addpart"自定义的分区名称,此步也可省略。
-
set 4 lvm
将新建的分区设置为lvm分区。
然后使用"quit"退出"parted"交互模式。parted区别于fdisk的地方,除了支持超过2T大小的分区外就是它的操作执行后即刻生效,无需显示地执行"w"操作。
2.2 LVM分区扩容
"parted"分区完成以后,使用fdisk也可以看到新建分区(sda4)的相关信息,如下可见原磁盘(/dev/sda)新增了80GB空间。
-
pvcreate /dev/sda4
将/dev/sda4创建为新的PV。
-
pvdisplay
查看磁盘中的PV信息。
从上可以看到两个PV都属于同一个名为"centos"的VG。 -
vgextend centos /dev/sda4
扩容VG的大小,让centos这个VG包含新增的磁盘(/dev/sda4)。
-
vgdisplay
查看VG的大小。
-
lvextend -L 80G /dev/centos/root
80G表示将名为root的LV扩充到80GB,显然不够准确,增加了80GB空间,不应该是扩充至80GB。还可以使用+80GB,或者+unit 表示增加多个单位(扇区)。以下是我lvextend扩容过程。
-
resize2fs /dev/centos/root
调整名为root的lv的大小,使其识别到新lv的大小。但出现错误"resize2fs: Bad magic number in super-block" centos为vg名,root为lv名。
出现此错误的原因是resize2fs只支持ext2,ext3,ext4文件系统分区大小调整。 -
xfs_growfs /dev/mapper/centos-root
通过"mount"指令可以查询到CentOS7默认使用的是xfs文件系统,因此此处使用xfs_growfs指令调整其大小即可。"xfs_growfs"是xfs文件专用的扩容工具。
3. 验证扩容结果
-
df -h
查看扩容的根分区大小。
从上面可以看到根分区扩容成功,重启后系统也工作正常,原磁盘数据未见损坏。