背景说明
cloud-init 的一项功能是自动扩展linux的指定分区。比如linux镜像是20G,在部署instance时选择的flavor磁盘定义是40G,那么instance部署时cloud-init会自动将制定分区扩到 40G。
环境准备
1) 该功能依赖growpart,所以需要在开始前,在镜像中安装包:
yum install –y cloud-utils-growpart |
2) 查看需要扩容的磁盘分区
# mount |grep /dev/vd /dev/vda1 on / type ext4 (rw,relatime,seclabel,data=ordered) /dev/vda3 on /var type ext4 (rw,relatime,seclabel,data=ordered) |
cloud-init配置
cloud-init配置开机启动命令:
# cat /etc/cloud/cloud.cfg ….
bootcmd: - [ cloud-init-per, once, grow-partition, growpart, /dev/vda, 3 ] - [ cloud-init-per, once, resize-filesystem, resize2fs, /dev/vda3 ] |
简单来说就是,在系统第一次启动的时候,执行命令:
growpart /dev/vda 3 resize2fs /dev/vda3 |
即可。
----------------------------cloud-init常用配置和命令:更多配置参考文章:https://blog.csdn.net/qq_37242520/article/details/106421730
system_info:
distro: sles
default_user:
name: linux //登录操作系统使用的用户名
lock_passwd: True //True表示禁用密码登录方式,注意部分操作系统此处配置为1表示禁用
gecos: redhat
groups: [adm, audio, cdrom, dialout, dip, floppy, lxd, netdev, plugdev, sudo, video] //可选项,将用户添加到其他组,groups必须是操作系统etc/group中已存在的组
sudo: ["ALL=(ALL) NOPASSWD:ALL"] //表示当前用户具有root用户的所有权限
shell: /bin/bash //shell执行采用bash方式
paths:
cloud_dir: /var/lib/cloud/
templates_dir: /etc/cloud/templates/
ssh_svcname: sshd
systemctl status cloud-init-local
systemctl status cloud-init
# 后两个服务貌似不常用
systemctl status cloud-config
systemctl status cloud-final
lvm类型的系统盘扩容脚本
如果是lvm类型的系统盘,可以通过如下脚本扩容:
# cat extend_root_fs echo "[] linux-rootfs-resize ..." lvm vgchange --sysinit -an #lvm_lv_root=$( echo $(df -h | grep '/$') | sed " ") lvm_lv_root=$(echo $(df -h | grep '/$') | awk -F ' ' '{print $1}') lvm_pv_path=$(lvm pvs --noheadings |awk '{print $1}') lvm_pv_temp=$(echo ${lvm_pv_path}|sed "s/dev//g") lvm_pv_dev=$(echo ${lvm_pv_temp}| sed "s/[^a-z]//g") lvm_pv_part=$(echo ${lvm_pv_temp}| sed "s/[^0-9]//g") growpart -v /dev/${lvm_pv_dev} ${lvm_pv_part} partprobe -s /dev/${lvm_pv_dev} lvm pvresize -v ${lvm_pv_path} lvm vgchange --sysinit -ay lvm lvextend -v -l +100%FREE ${lvm_lv_root} |
然后执行:
./ extend_root_fs
再重启系统即可。