这是个老问题,而且也并不限于Vagrant box环境,实际上对于Virtualbox环境来讲是通用的。

针对Vagrant – Ubuntu 环境

最简单的办法适用于Ubuntu虚拟机。Virtualbox – Ubuntu虚拟环境在这方面最为省心。下面用Vagrant box的序列来讲解如果超简便地随心所欲扩容。

假定你已经创建了Vagrant下的Ubuntu虚拟机实例:

vagrant init ubuntu/xenial
vagrant up
vagrant ssh

当虚拟机启动时,你会查看到ubuntu的box所带来的是一个10GB的系统盘,现在我们要扩容它到40GB,首先还是进到Vagrantfile所在的目录用 vagrant halt 关机,然后在virtualbox app的界面中选中对应的虚拟机,进入设置-存储页面,找到vmdk磁盘镜像文件所在的位置,然后用命令行进入那个文件夹,例如:`$HOME/VirtualBox VMs/demovm_osdd_1496389870606_49381/ubuntu-xenial-16.04-cloudimg.vdi` ,现在我们开始调整镜像文件:

VBoxManage clonehd ubuntu-xenial-16.04-cloudimg.vmdk ubuntu-xenial-16.04-cloudimg.vdi -format VDI
VBoxManage modifyhd ubuntu-xenial-16.04-cloudimg.vdi --resize 40000

现在我们建立了一个原镜像文件的副本,但是是vdi格式,并且调整了镜像的尺寸,整个过程耗时不多,非常有效。

下面就是在virtualbox中该虚拟机的设置-存储页面中,用新的vdi副本替换vmdk的镜像文件就行了。

然后就可以vagrant up && vagrant ssh进入虚拟机,检查一下,你的 / 已经40GB了。

这是很爽的一次体验,我也没想到现在比以前easy的多了。

[补充]

然而,这并没有最后完成工作,你还需要下载gparted的光盘iso,并在这个虚拟机中以gparted iso引导后进行分区的resizing才能真的完成扩容。好在gparted的分区调整非常简单和快速,所以这里不再赘述了。

把前面扩容的虚拟机导出为box

vagrant package --output ubuntu-xenial-40g.box

使用这个新的box

vagrant box add ubuntu-xenial-40g.box --name ubuntu-xenial-40g

mkdir u16-40 && cd $_
vagrant init 'ubuntu-xenial-40g'
vagrant up

OK. 这篇文章先结束了。