通常在制作云上使用的虚拟机时,如果不进行任何干预,安装出来的虚拟机默认是带有swap分区的,同时采用lvm来管理磁盘,通过这种方式制作出来的虚拟机镜像,直接在云上使用会有很多问题,其中一个就是根分区无法实现自动扩容,只能通过手工操作完成。而且在openstack中,swap分区通常是由一个单独的swap磁盘来提供,而不应该是做镜像的时候提供。
本文的目的是实现在Linux虚拟机(本文采用centos7.6)中自动完成根分区的扩容,而无需人工介入。
1. 启动方式与分区关系:
2. MBR分区与GPT分区:
3. EXT4文件系统与XFS文件系统:
综合前面的分析,本文主要介绍GPT分区+XFS文件系统的根分区扩容,不采用LVM的方式进行磁盘管理。
安装CentOS操作系统时,选择手动分区,分区信息如下图所示,/boot/efi分区为UEFI启动必须的分区,大小200MB;另外一个分区为根分区,Device Type选择为Standard Partition,File System选择为xfs,系统盘分为几个分区不重要,重要的是必须确保根分区为磁盘的最后一个分区,另外不建议创建swap分区:
系统安装完成后,启动虚拟机,执行命令可以看到如下的分区信息
[root@localhost ~]# parted /dev/vda print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 211MB 210MB fat16 EFI System Partition boot
2 211MB 21.5GB 21.3GB xfs
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 253:0 0 20G 0 disk
├─vda2 253:2 0 19.8G 0 part /
└─vda1 253:1 0 200M 0 part /boot/efi
按照openstack社区文档 https://docs.openstack.org/image-guide/centos-image.html 对虚拟机进行配置,配置完成不要执行关机操作;
安装GPT分区工具,否则执行growpart命令时会提示“no tools available to resize disk with 'gpt'”:
[root@localhost ~]# yum install gdisk
修改默认语言为英语,否则执行growpart命令会报错
[root@localhost ~]# echo "export LANG=en_US.UTF-8" >> /etc/profile
安装其他需要的工具...
在前面创建的centos7.6虚拟机镜像中,虚拟机系统盘只有20GB。接下来在openstack环境中,利用该镜像创建一个拥有400GB系统盘的虚拟机。虚拟机创建并启动完成后,通过下面的命令可以看出,cloudinit自动完成了根分区的扩容:
[root@centos ~]# parted /dev/vda print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 429GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 211MB 210MB fat16 EFI System Partition boot
2 211MB 429GB 429GB xfs
[root@centos ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 400G 0 disk
├─vda2 253:2 0 399.8G 0 part /
└─vda1 253:1 0 200M 0 part /boot/efi
cloudinit会根据根分区的挂载点来查找到实际的根分区磁盘,即上面的/dev/vda2,并对/dev/vda磁盘的第2个分区即/dev/vda2进行扩容。如果采用lvm来管理磁盘的话,查找到的根分区挂载点就是/dev/mapper/centos-root,这个分区是一个逻辑上的分区,因此cloudinit无法对其进行扩容。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有