我只想骂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.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)