ubuntu操作系统包含一个名为cloud-initramfs-growroot的软件,该软件可以在虚拟机启动的过程中自动扩充root分区的大小,该功能可以说是云主机标配的一个功能。
这里需要指出的是,growroot软件包只是扩充了硬盘分区的大小,此时登录云主机用df -h命令还看不到可用容量的增加,还需运行resize2fs命令来对文件系统的大小进行扩充,该过程可以手动进行,也可借助于cloudinit等软件包自动进行。
(1)实例
看一个具体的ubuntu server虚拟机,磁盘分区如下:
从上图可以看到,硬盘总的block数为212860928,但sda1分区的大小只有3141839。
安装cloud-initramfs-growroot:
apt-get install cloud-initramfs-growroot
重启系统后,再次查看硬盘分区,可以看到sda1的分区得到了扩大,但此时调用df -h,文件系统的大小并无变化。
接下来,运行resize2fs命令,让文件系统识别扩充的空间:
(2)原理
要理解这其中的原理,我们首先看看cloud-initramfs-growroot包里都有什么内容:
如图,内容很简单 ,包含了一些initramfs中需要执行的一些脚本,具体内容可以查看相关文件。安装该软件包时,首先会进行相关文件的拷贝,然后运行update-initramfs命令对当前initramfs文件进行更新。
(3)手动安装
对于某些操作系统,官方源不包含cloud-initramfs-growroot,需要手动安装。
首先:从github上下载最新代码并拷贝到指定的位置,并更改可执行权限,如图:
运行update-initramfs -u,并查看磁盘分区大小
可以看到,磁盘的大小和分区的大小不一致。
此时,扩充分区大小的脚本已经更新到initramfs文件中,重启虚拟机后,运行resize2fs工具,
over