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


62

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

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

  1. 不破坏和重新创建我的VM的情况下,增加现有磁盘和文件系统的大小。
  2. 配置Vagrant,以便将来为该项目创建更大的磁盘。

谁能解释如何做到这一点?

Answers:


25

我个人认为附加一个额外的虚拟HDD并将其安装到适当的安装点会比较容易,例如/opt,将您的东西移到rsync用来解决此问题的地方,毕竟,木偶无聊的盒子只是出于测试目的。

原因VBoxManage modifyhd仅适用于本机VDI映像。但是,无业游民的基本框基本上是使用VMDK格式导出的OVF / OVA 。

请参阅VirtualBox文档

--resize x选项(其中x是所需的新总空间(以兆字节为单位))使您可以更改现有图像的容量;这可以调整虚拟磁盘的逻辑大小,而不会对物理大小产生太大影响。[37] 当前,该功能仅适用于VDI和VHD格式,并且仅适用于动态分配的变体,并且只能用于扩展(而不是缩小)容量。

增加Vagrant Base Box的磁盘容量

步骤是

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

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

  3. 但是,这只会更改驱动器容量,此后,您将必须扩展来宾的文件系统。例如,resize2fs -p -F DEVICE用于ext {3,4}。


3
请注意,在调整大小之后并再次启动vagrant框之前,您还需要更新VirtualBox存储配置,以便它使用新的VDI而不是原始的VMDK:在VirtualBox>存储>删除现有硬盘>添加硬盘(选择现有并指向新的VDI映像)
Steve Swinsburg

对于Debian用户,我建议您也查看这篇文章:blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive。当我进入第3步时,它并没有运行起来那么简单resize2fs。祝好运!
phirschybar 2015年

1
:我只是写上这样的综合指南medium.com/@phirschybar/...
phirschybar

31

我找到了解决此问题的最简单方法:

  • 安装此插件: 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

    • 注意:这不适用于 vagrant reload

2
像魅力一样工作。似乎是我遇到的最简单的解决方案。谢谢你,先生。
Rico

1
对于Debian9盒,这会增加原始磁盘大小,但不会增加Debian安装所使用的实际分区。增加的磁盘大小不能直接使用。
托宁

@Tonin是否设法找到解决方案?
Mellkor

1
我使用sudo cfdisk /dev/sda工具将/dev/sda1分区的大小调整为所有新可用空间。然后,我告诉我的文件系统要使用这个空间,即sudo resize2fs -p -F /dev/sda1
tutuDajuju,

14

我已将磁盘自动添加到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.shshell脚本如下:

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。

除了添加磁盘以外,其他选项还包括:

  • 使用带有较大磁盘的盒子,例如具有40Gb磁盘的opscode bento
  • 使用Packer构建自己的盒子。您可以使用opscode框包装器定义作为起点

您好,我想尝试您的解决方案。您能确认此部分代码在“流浪者文件”中的何处添加吗?亲切的问候
Rudi Strydom 2014年

@RudiStrydom我已经更新了答案-希望现在更有意义。
克里斯·斯诺

2
这应该添加在config.vm.provider :virtualbox do |vb|块使事情变得更加清晰
BT

1
如果你收到一个“指定大小或范围”的错误lvextend,试图lvextend -l +100%FREE /dev/VolGroup/lv_root代替
Andomar

1
您的示例将创建一个5TB磁盘(--size单位为MB,请参阅virtualbox.org/manual/ch08.html#vboxmanage-createvdi)。
后空翻


0

免责声明:答案很可能仅适用于使用逻辑卷管理(例如rhel)的发行版,以下用例适用于此发行版:

我一直在使用Red Hat正式提供的 Red Hat Enterpise 7.2官方无用盒。

(您将需要一个可以免费创建的rhel开发者帐户)

安装后,我为只有8GB可用空间感到困扰:

sudo df -h
[vagrant@rhel-cdk ~]$ sudo df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-root   8G  2,5G   6,5G  28% /
devtmpfs                     234M     0  234M   0% /dev
tmpfs                        245M     0  245M   0% /dev/shm
tmpfs                        245M  4,3M  241M   2% /run
tmpfs                        245M     0  245M   0% /sys/fs/cgroup
/dev/sda2                    297M  134M  164M  45% /boot
tmpfs                         49M     0   49M   0% /run/user/1000

如您所见,rhel安装已经占用了大部分空间。

但是我发现对应于/dev/mapper/VolGroup00-rootfileystem 的卷组确实有额外的空间(我想就虚拟盒而言是动态分配的)

sudo vgdisplay VolGroup00
  --- Volume group ---
  VG Name               VolGroup00
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  11
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               39,70 GiB
  PE Size               4,00 MiB
  Total PE              10164
  Alloc PE / Size       7872 / 30,75 GiB
  Free  PE / Size       2292 / 8,95 GiB
  VG UUID               JBVwpl-13KX-HbQw-FqUa-CA9w-swpF-dF6glm

因此,剩下要做的就是:

a)将逻辑卷的大小增加10G

sudo lvextend -L+10G /dev/VolGroup00/root

b)更新您的根文件系统,以便它知道此更改

sudo xfs_growfs /dev/mapper/VolGroup00-root

(请注意,至少对于rhel 7.2 resize2fs不适用于此目的)。

之后,其他空间可用于我的文件系统:

sudo df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-root   18G  2,5G   16G  14% /
devtmpfs                     234M     0  234M   0% /dev
tmpfs                        245M     0  245M   0% /dev/shm
tmpfs                        245M  4,3M  241M   2% /run
tmpfs                        245M     0  245M   0% /sys/fs/cgroup
/dev/sda2                    297M  134M  164M  45% /boot
tmpfs                         49M     0   49M   0% /run/user/1000

...无需在Virtualbox级别进行干预

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.