一、背景

最近发现在OpenStack环境中创建虚拟机时,在选择“源”页面给虚拟机分配了较大的虚拟磁盘(容量大于制作RAW格式镜像时的容量)后,进入虚拟机的操作系统后,它默认的根分区的大小还是制作RAW镜像时的大小,**那要怎么将现在分配的较大虚拟磁盘空间挂载到根目录上,给根目录扩容呢?**我的办法如下,也许还有其他更好的办法,以后发现了再记录。
—2021年2月1日更新:如果在制作RAW镜像时安装cloud-utils组件则可以在openstack创建虚拟机实现根目录扩容(还未验证过)

二、环境

(1)写此博客用的是X86构架的OpenStack-T环境
(2)制作的OpenStack虚拟机RAW格式镜像用的是LVM来管理分区
(3)虚拟机安装的操作系统是:Ubuntu 18.04.3 LTS

三、操作

3.1 创建虚拟机选择“源”时,给虚拟机分配较大容量磁盘(卷)

在这里插入图片描述
其他的虚拟机参数不是此博客关注的内容,就不再截图了。

3.2 进入虚拟机系统内发现根分区仍没有使用多分配的磁盘空间

#列出所有的块设备
lsblk

在这里插入图片描述

3.3 将虚拟磁盘剩余空间划分到一个主分区

#使用fdisk 命令对虚拟磁盘/dev/vda划分分区
fdisk /dev/vda

在这里插入图片描述
以下是关于主分区与、扩展分区、逻辑分区的一点知识:

创建新分区时,一定要选择创建primary分区(即主分区)。我先前认为既然是扩容逻辑卷,就应该创建扩展分区,
这样操作后导致重启虚拟机报“lvmid xxx-xxx-xxx... not found”直接进入rescue grub命令行。后来出现了这
个问题后,才意识到将扩展分区扩充到主分区(虽然已经格式化成逻辑卷)中但是它们不一定是相邻的区域,重启
后导致主分区不连续【这是我猜测的原因】。我记得主分区好像最多只能有4个,扩展分区可以有几十个,从扩展
分区中划分出来的逻辑分区可以有无数个

在这里插入图片描述

3.4 创建物理卷

#将主分区初始化为一个物理卷,以给LVM使用
pvcreate /dev/vda2
#查看所有的物理卷的简略信息
pvs
#查看所有物理卷的详细信息,注意查看当前挂载到/目录的逻辑分区所在的卷组名(我的是ubuntu-vg)
pvdisplay

##你也可以使用 vgdisplay 或 vgs 来查看当前存在的所有卷组

在这里插入图片描述

3.5 将新创建的物理卷加入卷组

#将上述创建的物理卷添加到卷组ubuntu-vg中
vgextend ubuntu-vg /dev/vda2
#查看所有的物理卷
pvdisplay

在这里插入图片描述

3.6 将卷组所有可用容量分配给该逻辑卷

#将逻辑卷/dev/ubuntu-vg/root所在卷组(即ubuntu-vg)中所有(100%)可用容量(FREE)扩容给逻辑卷/dev/ubuntu-vg/root
lvextend -l +100%FREE /dev/ubuntu-vg/root
lsblk
#查看根目录的使用情况
df ./ -TH

在这里插入图片描述

3.7 将新加入的blocks格式化,扩容成功

#将逻辑卷/dev/ubuntu-vg/root中新增的blocks格式化,不会损坏此逻辑卷以前的blocks
resize2fs /dev/ubuntu-vg/root
df -TH

在这里插入图片描述

3.8 重启

我已经重启测试过,可以再次正常进入系统且扩容结果保留、系统正常工作。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐