对于 镜像在启动时候resize根分区的需求,社区提供了如下的两种决方案(非xen虚拟化):
1)使用cloud-init/cloud-tools
对于image需要确定如下:
—镜像原始分区表
—镜像基于原始分区表的文件系统
然后在镜像启动过程中:
—修改分区表,使其识别到额外的分区——在分区表里,新增一个入口,创建一个lvm的物理卷,增加到VG里面,接下来就可以给root分区进行扩容了,并resize FS了
最简单的方法来实现这个以上的过程就是在image里面安装:
—cloud-utils包,通过growpart 工具来进行扩分区
—cloud-initramfs-growroot包,for Ubuntu/Debian/Fedora/CentOS/RHEL/SUSE,之类在第一次启动时候支持resizeFS的OS
—cloud-init包
在这些包安装后,在image启动的时候可以resize。建议原始的分区是ext3/ext4/xfs格式的非LVM分区。
2)不使用cloud-init/cloud-tools
如果无法安装cloud-init/cloud-tools,又要能够支持resize,那么就只有使用脚本在启动的时候进行分区表的修改。建议使用lvm来管理分区。由于linux内核的限制,对于raw格式的disk,是没有办法修改分区表的,但是可以作用于lvm分区。具体操作如下:
—检查disk是否有额外的可用空间,分析“parted /dev/sda”的输出,脚本—print free
—创建一个新的额外的lvm分区,例如“parted /dev/sda”—脚本mkpart lvm
—创建一个新的物理卷,例如“pvcreate /dev/sda6”
—对VG进行扩容,例如“vgextend vg00 /dev/sda6”
—对根分区lv进行扩容,例如“lvextend /dev/mapper/node-root /dev/sda6”
—对根分区进行resize,例如“resize2fs /dev/mapper/node-root”