前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​云主机根分区自动扩容

​云主机根分区自动扩容

原创
作者头像
jiang
发布2020-06-27 14:39:01
3.6K0
发布2020-06-27 14:39:01
举报
文章被收录于专栏:yuncoderyuncoder

通常在制作云上使用的虚拟机时,如果不进行任何干预,安装出来的虚拟机默认是带有swap分区的,同时采用lvm来管理磁盘,通过这种方式制作出来的虚拟机镜像,直接在云上使用会有很多问题,其中一个就是根分区无法实现自动扩容,只能通过手工操作完成。而且在openstack中,swap分区通常是由一个单独的swap磁盘来提供,而不应该是做镜像的时候提供。

本文的目的是实现在Linux虚拟机(本文采用centos7.6)中自动完成根分区的扩容,而无需人工介入。

1. 启动方式与分区关系:

  • ARM架构的服务器上,虚拟机只能采用UEFI启动,因此对应的磁盘分区必须是GPT分区;
  • X86架构的服务器上,虚拟机通常还是BIOS启动的,因此对应的磁盘分区是MBR分区,当然X86架构上也是支持UEFI的启动方式的;

2. MBR分区与GPT分区:

  • MBR分区仅支持最大2T的磁盘,每个磁盘最多4个主分区或3个主分区加1个扩展分区;
  • GPT分区支持大于2T的磁盘,最大可支持18EB磁盘,每个磁盘最多128个分区;

3. EXT4文件系统与XFS文件系统:

  • EXT4最大文件系统大小为1EB,最大单个文件大小为16TB,最大包含64,000个子目录;
  • XFS最大文件系统大小为8EB,最大单个文件大小为16EB,centos7.0开始作为默认文件系统;

综合前面的分析,本文主要介绍GPT分区+XFS文件系统的根分区扩容,不采用LVM的方式进行磁盘管理。

制作虚拟机模板

安装CentOS操作系统时,选择手动分区,分区信息如下图所示,/boot/efi分区为UEFI启动必须的分区,大小200MB;另外一个分区为根分区,Device Type选择为Standard Partition,File System选择为xfs,系统盘分为几个分区不重要,重要的是必须确保根分区为磁盘的最后一个分区,另外不建议创建swap分区

centos-parted.png
centos-parted.png

系统安装完成后,启动虚拟机,执行命令可以看到如下的分区信息

代码语言:txt
复制
[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'”:

代码语言:txt
复制
[root@localhost ~]# yum install gdisk

修改默认语言为英语,否则执行growpart命令会报错

代码语言:txt
复制
[root@localhost ~]# echo "export LANG=en_US.UTF-8" >> /etc/profile

安装其他需要的工具...

验证磁盘自动扩容

在前面创建的centos7.6虚拟机镜像中,虚拟机系统盘只有20GB。接下来在openstack环境中,利用该镜像创建一个拥有400GB系统盘的虚拟机。虚拟机创建并启动完成后,通过下面的命令可以看出,cloudinit自动完成了根分区的扩容:

代码语言:txt
复制
[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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 制作虚拟机模板
  • 验证磁盘自动扩容
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档