当前位置: 首页>>技术教程>>正文


如何增加Vagrant VM上的磁盘大小?

, , ,

问题描述

我在Ubuntu主机服务器上使用VirtualBoxVagrant管理的VM。我的Vagrant框使用Puppetlabs Debian 6.0.7 basebox,它使用LVM作为其根分区。

默认情况下,磁盘为8GB,这对我来说太小了。我想要:

  1. 在不破坏和重新创建VM的情况下,增加现有磁盘及其上的文件系统的大小。

  2. 配置Vagrant,以便将来为该项目创建一个更大的磁盘。

任何人都可以解释如何做到这一点?

最佳解决方案

我个人认为附加一个额外的虚拟硬盘并将其安装到正确的安装点会更容易,例如/opt并使用rsync移动你的东西以解决这个问题,毕竟,Puppet(木偶)流浪盒用于测试目的。

原因:VBoxManage modifyhd仅适用于本机VDI映像。但是,流浪基本盒基本上是使用VMDK格式导出的OVF /OVA。

请参阅VirtualBox Docs

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的磁盘容量

步骤是

  1. 为了能够调整HDD的大小,您必须先将其转换为VDI,例如它是VBoxManage clonehd in.vmdk out.vdi --format VDI然后是re-attached(使用GUI更容易)。

  2. 使用VBoxManage modifyhd box.vdi --resize 15360调整大小,将容量增加到15GB。

  3. 但是,这只会更改驱动器容量,之后您必须为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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1793.html,未经允许,请勿转载。