2014.10.11

我只想骂csdn!截图直接粘过来居然不能直接显示出来!!!妈蛋!!


1. suse镜像制作完善,根目录未扩展这是个大问题,默认网关没加上

所谓的根目录扩展是这么一个问题,云镜像制作的时候根分区是有大小的,比如10G,但是用这个云镜像创建instance的时候,会选择模板比如20G,模板大小不能比10G小,可以等于,也可以大于,如果大于的话,instance的根分区应该自动扩展为20G,但是如果云镜像没有专门的软件来处理,是不能实现的。

自动扩展根分区的原理:

growpart (growpart --dry-run /dev/vda 1)

resize2fs('resize2fs', '/dev/vda1')

cloud-init打出日志

调试代码:

 try:
        resizer = resizer_factory(mode)
    except (ValueError, TypeError) as e:
        log.debug("growpart unable to find resizer for '%s': %s" % (mode, e))
        if mode != "auto":
            raise e
        return


    resized = util.log_time(logfunc=log.debug, msg="resize_devices",
                            func=resize_devices, args=(resizer, devices))

resize_devices <function resize_devices at 0x1234848> cc_growpart.py

resizer<cloudinit.config.cc_growpart.ResizeGrowPart object at 0x123a790>      





windows2012-test:~ # e2fsck -f /dev/vda1
e2fsck 1.41.9 (22-Aug-2009)
/dev/vda1 is mounted.  


WARNING!!!  Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.


Do you really want to continue (y/n)? yes


/dev/vda1: recovering journal
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information


/dev/vda1: ***** FILE SYSTEM WAS MODIFIED *****
/dev/vda1: ***** REBOOT LINUX *****
/dev/vda1: 61841/655360 files (0.4% non-contiguous), 418057/2621184 blocks


suse:

最初:

(图上的意思是growpart执行之后,cfdisk -P s /dev/vda 中的分区表已经变化了)





明显可以看出,执行了growpart之后,实际上/dev/vda1已经把剩余的磁盘利用上了,但是df -h依然不行


执行resize2fs /dev/vda1

(图上的意思是,执行resize2fs得到:

[root@localhost ~]# resize2fs /dev/vda1
resize2fs 1.41.12 (17-May-2010)
The filesystem is already 2621184 blocks long.  Nothing to do!


说明没有成功


但是,重启之后,在执行resize2fs就正确了


对于cloud-init来说,首先执行growpart,然后立刻执行resize2fs,因此resize2fs总是失败的。


看看ubuntu 14.04:


执行了growpart,果然分区变大,但是df -h不变


果然,对于ubuntu 14.04来说:


直接执行resize2fs /dev/vda1立刻生效,而不像suse,需要重启后方能执行


看看ubuntu 12.04

首先,安装了

apt-get install cloud-initramfs-growroot
apt-get install cloud-initramfs-rescuevol


然后执行:resize2fs /dev/vda1

立刻磁盘扩容了,同时,ubuntu 12.04 默认安装的是cloud-init 0.63,在cloud-init 0.63中没有growpart这个插件,大家仔细看上图,发现growpart的工作实际上已经做了,也就是说cloud-initramfs-growroot和cloud-initramfs-rescuevol已经在开机的过程中将vda1分区扩大了,至少分区表已经变大了,然后调用resize2fs,将对分区的修改落实(具体不详)。

猜测对于centos,可能情况和suse一样,测试之
首先需要安装:cloud-utils,它又依赖于:
Dependencies Resolved

===============================================================================================================================================================================================
 Package                                            Arch                                 Version                                                   Repository                             Size
===============================================================================================================================================================================================
Installing:
 cloud-utils                                        x86_64                               0.27-10.el6                                               epel                                   43 k
Installing for dependencies:
 cloud-utils-growpart                               x86_64                               0.27-10.el6                                               epel                                   25 k
 euca2ools                                          noarch                               2.1.4-1.el6                                               epel                                  326 k
 glusterfs-api                                      x86_64                               3.4.0.57rhs-1.el6_5                                       updates                                55 k
 glusterfs-libs                                     x86_64                               3.4.0.57rhs-1.el6_5                                       updates                               240 k
 libaio                                             x86_64                               0.3.107-10.el6                                            base                                   21 k
 libusb1                                            x86_64                               1.0.9-0.6.rc1.el6                                         base                                   80 k
 m2crypto                                           x86_64                               0.20.2-9.el6                                              base                                  471 k
 python-boto                                        noarch                               2.32.1-1.el6                                              epel                                  1.6 M
 python-crypto                                      x86_64                               2.0.1-22.el6                                              base                                  159 k
 python-paramiko                                    noarch                               1.7.5-2.1.el6                                             base                                  728 k
 qemu-img                                           x86_64                               2:0.12.1.2-2.415.el6_5.14                                 updates                               599 k
 rsync                                              x86_64                               3.0.6-9.el6_4.1                                           base                                  334 k
 usbredir                                           x86_64                               0.5.1-1.el6                                               base                                   40 k

执行growpart

执行resize2fs,遇到了suse遇到的同样问题。

重启,再次执行resize2fs

因此,我们需要找到一个解决问题的办法

使用过的工具:
growpart
resize2fs
fdisk
df
cfdisk
sfdisk
partx
kpartx
partprobe
cat /etc/fstab
貌似都得重启才能生效!


ubuntu 14.04 只安装cloud-guest-utils


只安装cloud-guest-utils,不会自动扩容


再安装cloud-init




总结:

1. df -h

实际的挂载点上挂载了多少空间

2. fdisk -l

当前有哪些物理上的磁盘

3. cfdisk -P s /dev/vda 

显示/dev/vda上的分区表

4. growpart

将磁盘扩容

5. resize2fs


6. linux-rootfs-resize

只适合centos,rhel,debian,当它检测到磁盘扩大时,会调用cloud-utils的工具,将根分区扩大。这个功能完全不依赖于cloud-init,因此我认为cloud-init的growpart和resize2fs完全不是用来growroot的!

7. 


阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页