问题描述
我在Ubuntu主机服务器上使用VirtualBox由Vagrant管理的VM。我的Vagrant框使用Puppetlabs Debian 6.0.7 basebox,它使用LVM作为其根分区。
默认情况下,磁盘为8GB,这对我来说太小了。我想要:
-
在不破坏和重新创建VM的情况下,增加现有磁盘及其上的文件系统的大小。
-
配置Vagrant,以便将来为该项目创建一个更大的磁盘。
任何人都可以解释如何做到这一点?
最佳解决方案
我个人认为附加一个额外的虚拟硬盘并将其安装到正确的安装点会更容易,例如/opt
并使用rsync
移动你的东西以解决这个问题,毕竟,Puppet(木偶)流浪盒用于测试目的。
原因:VBoxManage modifyhd
仅适用于本机VDI映像。但是,流浪基本盒基本上是使用VMDK
格式导出的OVF /OVA。
The
--resize x
option (where x is the desired new total space in megabytes) allows you to change the capacity of an existing image; this adjusts the logical size of a virtual disk without affecting the physical size much.[37] This currently works only for VDI and VHD formats, and only for the dynamically allocated variants, and can only be used to expand (not shrink) the capacity.
增加Vagrant Base Box的磁盘容量
步骤是
-
为了能够调整HDD的大小,您必须先将其转换为VDI,例如它是
VBoxManage clonehd in.vmdk out.vdi --format VDI
然后是re-attached(使用GUI更容易)。 -
使用
VBoxManage modifyhd box.vdi --resize 15360
调整大小,将容量增加到15GB。 -
但是,这只会更改驱动器容量,之后您必须为guest虚拟机扩展文件系统。例如,对于\ text {3,4}使用
resize2fs -p -F DEVICE
。
次佳解决方案
我已经在我的Vagrantfile中自动添加了磁盘:
Vagrant.configure("2") do |config|
...
file_to_disk = File.realpath( "." ).to_s + "/disk.vdi"
if ARGV[0] == "up" && ! File.exist?(file_to_disk)
puts "Creating 5GB disk #{file_to_disk}."
vb.customize [
'createhd',
'--filename', file_to_disk,
'--format', 'VDI',
'--size', 5000 * 1024 # 5 GB
]
vb.customize [
'storageattach', :id,
'--storagectl', 'SATA Controller',
'--port', 1, '--device', 0,
'--type', 'hdd', '--medium',
file_to_disk
]
...
config.vm.provision "shell", path: "scripts/add_new_disk.sh"
...
end
add_new_disk.sh
shell脚本的位置如下所示:
set -e
set -x
if [ -f /etc/disk_added_date ]
then
echo "disk already added so exiting."
exit 0
fi
sudo fdisk -u /dev/sdb <<EOF
n
p
1
t
8e
w
EOF
pvcreate /dev/sdb1
vgextend VolGroup /dev/sdb1
lvextend /dev/VolGroup/lv_root
resize2fs /dev/VolGroup/lv_root
date > /etc/disk_added_date
此脚本适用于centos 6.4框,但可以轻松适应ubuntu。
除了添加磁盘,其他选项包括:
-
使用带有更大磁盘的盒子,例如opscode bento,它有40Gb磁盘
-
使用packer构建您自己的盒子。您可以使用opscode box packer定义作为起点
第三种解决方案
我找到了解决此问题的最简单方法:
-
安装此插件:
vagrant plugin install vagrant-disksize
-
编辑
Vagrantfile
:
Vagrant.configure('2') do |config|
...
config.vm.box = 'ubuntu/xenial64'
config.disksize.size = '50GB'
...
end
-
vagrant halt
-
vagrant up
第四种方案
您可以使用该插件,这将使您能够指定磁盘大小https://github.com/sprotheroe/vagrant-disksize