修改centos6&rhel6.5支持auto resize the root partition

来源:互联网 发布:吴江js华腾公寓自提柜 编辑:程序博客网 时间:2024/06/05 07:27

在用openstack创建boot from image(create new volume)的vm时,发现如果image选择centos6或者rhel6.5的话,创建出来的vm的根分区无法自动扩展到volume的大小,而是保持imgae原有的大小。后面搜了搜原因,发现是内核版本低的缘故,cloud-init在内核>3.8的情况下才起作用。于是索性自己做一个自动扩容的功能在镜像里,使得使用者不感知。

扩容这个动作在系统启动的时候只执行一次即可,所以需要先创建一个flag标志(本文使用firstrun文件作为flag),扩容脚本执行完毕后删除flag即可,达到执行一次的目的。

touch /root/firstrun

编辑firstrun.sh文件,扩容方法使用fdisk:

#!/usr/bin/env bashLOG=/root/firstrun.loglsblk>> $LOGif [ -e /root/firstrun ]then    echo "$(date) auto enlarge vda1"  >> $LOGfdisk /dev/vda <<ENDudnp12048pwEND    rm -rf /root/firstrun    lsblk>> $LOG    echo "$(date) firstrun.sh finished"  >> $LOG    rebootfi

这里将firstrun.sh文件放在/home/目录下,是因为我发现rhel6.5不支持rc.local以root形式运行脚本,所以放在/root下不执行,centos6未测试。

将功能做在rc.local阶段,rc.local文件是系统初始化及服务启动完毕后,最后一个执行的脚本,所以在这里执行比较合适。

编辑rc.local文件:

touch /var/lock/subsys/localsleep 30;sh /home/firstrun.shLOG=/root/firstrun.logresize2fs  /dev/vda1 >>$LOG  2>&1echo "$(date) rc.local finished" >> $LOG

完毕,这样使用的镜像就可以自动扩容了。