[Openstack] CentOS 6.5 cloud-init growpart/resizefs does not work on first boot.

Juerg Haefliger juergh at gmail.com
Wed Aug 6 11:08:18 UTC 2014


On Wed, Aug 6, 2014 at 9:11 AM, sylecn <sylecn at gmail.com> wrote:
>
>
>
>
> On Wed, Aug 6, 2014 at 2:05 PM, Juerg Haefliger <juergh at gmail.com> wrote:
>>
>> Hi,
>>
>>
>> On Wed, Aug 6, 2014 at 4:35 AM, sylecn <sylecn at gmail.com> wrote:
>> >
>> > Hi stackers,
>> >
>> > I have come across this problem of growpart/resizefs not working with
CentOS 6.5 Cloud image on first boot.
>>
>> Which kernel version are you running in the guest?
>>
>>
>>
>> > Here is the relevant config in cloud.cfg
>> > ==============================
>> >
>> > growpart:
>> >   mode: auto
>> >   devices: ["/"]
>> > resize_rootfs: True
>> > resize_rootfs_tmp: /dev
>> >
>> > cloud_init_modules:
>> >  - bootcmd
>> >  - write-files
>> >  - growpart
>> >  - resizefs
>>
>> Growpart called by cloud-init only works for kernels >3.8. Only newer
kernels support changing the partition size of a mounted partition. When
using an older kernel the resizing of the root partition happens in the
initrd stage before the root partition is mounted and the subsequent
cloud-init growpart run is a no-op.
>>
>>
>> > Here is the relevant log on first boot:
>> > ============================
>> > [CLOUDINIT] helpers.py[DEBUG]: Running config-growpart using lock
(<cloudinit.helpers.DummyLock object at 0x1ed06d0>)
>> > [CLOUDINIT] util.py[DEBUG]: Running command ['growpart', '--help']
with allowed return codes [0] (shell=False, capture=True)
>> > [CLOUDINIT] util.py[DEBUG]: Reading from /proc/1108/mountinfo
(quiet=False)
>> > [CLOUDINIT] util.py[DEBUG]: Read 521 bytes from /proc/1108/mountinfo
>> > [CLOUDINIT] util.py[DEBUG]: Reading from
/sys/class/block/vda1/partition (quiet=False)
>> > [CLOUDINIT] util.py[DEBUG]: Read 2 bytes from
/sys/class/block/vda1/partition
>> > [CLOUDINIT] util.py[DEBUG]: Reading from
/sys/devices/pci0000:00/0000:00:05.0/virtio2/block/vda/dev (quiet=False)
>> > [CLOUDINIT] util.py[DEBUG]: Read 6 bytes from
/sys/devices/pci0000:00/0000:00:05.0/virtio2/block/vda/dev
>> > [CLOUDINIT] util.py[DEBUG]: Running command ['growpart', '--dry-run',
'/dev/vda', '1'] with allowed return codes [0] (shell=False, capture=True)
>> > [CLOUDINIT] util.py[DEBUG]: Running command ['growpart', '/dev/vda',
'1'] with allowed return codes [0] (shell=False, capture=True)
>> > [CLOUDINIT] util.py[DEBUG]: resize_devices took 0.076 seconds
>> > [CLOUDINIT] cc_growpart.py[DEBUG]: '/' NOCHANGE: no change necessary
(/dev/vda, 1)
>> > [CLOUDINIT] helpers.py[DEBUG]: Running config-resizefs using lock
(<cloudinit.helpers.DummyLock object at 0x1ed08d0>)
>> > [CLOUDINIT] util.py[DEBUG]: Reading from /proc/1108/mountinfo
(quiet=False)
>> > [CLOUDINIT] util.py[DEBUG]: Read 521 bytes from /proc/1108/mountinfo
>> > [CLOUDINIT] cc_resizefs.py[DEBUG]: resize_info: dev=/dev/vda1
mnt_point=/ path=/
>> > [CLOUDINIT] cc_resizefs.py[DEBUG]: Resizing / (ext4) using resize2fs
/dev/vda1
>> > [CLOUDINIT] util.py[DEBUG]: Running command ('resize2fs', '/dev/vda1')
with allowed return codes [0] (shell=False, capture=True)
>> > [CLOUDINIT] util.py[DEBUG]: Resizing took 0.004 seconds
>> >
>> > In the base image, I have upgraded cloud-init to 0.7.4-1.el6, and
installed cloud-utils, cloud-initramfs-tools. After the first *reboot*,
growpart/resizefs does their job and the root file system is grown to disk
size.
>>
>> There is no cloud-initramfs-tools package for CentOS. You need
cloud-utils-growpart and dracut-modules-growroot from EPEL6 for the initrd
based partition resizing.
>>
>>
>> > After a reboot, the relevant cloud-init logs:
>> > ===================================
>> > cc_growpart.py[DEBUG]: '/' NOCHANGE: no change necessary (/dev/vda, 1)
>> > util.py[DEBUG]: Resizing took 13.776 seconds
>> > cc_resizefs.py[DEBUG]: Resized root filesystem (type=ext4, val=True)
>>
>> These are log messages from cloud-init's growpart run. Can you post the
boot messages from initrd growpart?
>>
>>
>> ...Juerg
>>
> Hi Juerg,
>
> I didn't know about initrd based growpart. I see both
cloud-utils-growpart and dracut-modules-growroot are installed in the base
image (via yum info).
> Do I need any config on kernel modules or build a special initrd to make
growpart work on first boot?

The initrd needs to be rebuilt after installing the dracut-modules-growroot.


> I didn't see growpart message in dmesg and kernel syslog
(/var/log/messages on the guest) in first boot and 2nd boot.
> /var/log/boot.log also has no information on that. Where can I get the
boot message from initrd growpart?

They should be in /var/log/boot.log. On CentOS 6.3:
[root at centos-6-3 ~]# cat /var/log/boot.log | grep grow
growroot: CHANGED: partition=1 start=2048 old: size=4192256 end=4194304
new: size=20969408,end=20971456


Double-check that you have the growroot pieces in the initrd:
[root at centos-6-3 ~]# lsinitrd
/boot/initramfs-2.6.32-279.19.1.el6.x86_64.img  | grep grow
-rwxr-xr-x   1 root     root         7077 Jan 10  2013 usr/bin/growpart
-rwxr-xr-x   1 root     root         3085 Jan 16  2013
pre-pivot/00growroot.sh


...Juerg


> guest kernel: 2.6.32-431.3.1.el6.x86_64
>
> package version:
> Installed Packages
> Name        : cloud-utils-growpart
> Arch        : x86_64
> Version     : 0.27
> Release     : 10.el6
> Size        : 53 k
> Repo        : installed
> From repo   : epel
> Summary     : Script for growing a partition
> URL         :
https://launchpad.net/cloud-utils/trunk/0.27/+download/cloud-utils-0.27.tar.gz
> License     : GPLv3
> Description : This package provides the growpart script for growing a
partition. It is
>             : primarily used in cloud images in conjunction with the
dracut-modules-growroot
>             : package to grow the root partition on first boot.
>
> Name        : dracut-modules-growroot
> Arch        : noarch
> Version     : 0.20
> Release     : 2.el6
> Size        : 43 k
> Repo        : installed
> From repo   : epel
> Summary     : Automatically resize the root partition on first boot
> URL         :
https://launchpad.net/ubuntu/saucy/+source/cloud-initramfs-tools/0.20ubuntu1/+files/cloud-initramfs-tools_0.20ubuntu1.tar.gz
> License     : GPLv3
> Description : This dracut module will re-write the partition table of a
disk so that the
>             : root partition has as much space as possible, bumping it up
to the edge of the
>             : disk, or the edge of the next partition.
>
> growpart and resize still happens on 2nd boot, not first boot.
>
> --
> YY Inc. is hiring openstack and python developers. Interested? Check
http://soa.game.yy.com/jobs.html
>
> --
> Thanks,
> Yuanle
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack/attachments/20140806/95735ba3/attachment.html>


More information about the Openstack mailing list