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

Dav*_*rds 71 virtualbox disk-management vagrant

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

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

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

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

小智 52

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

  • 安装这个插件: vagrant plugin install vagrant-disksize

  • 编辑Vagrantfile

    Vagrant.configure('2') do |config|
      ...
      config.vm.box = 'ubuntu/xenial64'
      config.disksize.size = '50GB'
      ...
    end
    
    Run Code Online (Sandbox Code Playgroud)
  • vagrant halt && vagrant up

    • 注意:这不适用于 vagrant reload

  • 我使用 `sudo cfdisk /dev/sda` 工具将我的 `/dev/sda1` 分区大小调整为所有新的可用空间。然后我告诉我的文件系统使用 `sudo resize2fs -p -F /dev/sda1` 来使用那个空间 (9认同)
  • 像魅力一样工作。似乎是我遇到的最简单的解决方案。谢谢你,先生。 (3认同)
  • 对于 Debian9 机器,这会增加原始磁盘大小,但不会增加 Debian 安装使用的实际分区。增加的磁盘大小不能直接使用。 (2认同)
  • @david-edwards Vagrant 添加了对自定义磁盘大小(包括磁盘大小调整)的支持。您可以在这里看到我的答案:https://askubuntu.com/a/1402237/598897 (2认同)

Ter*_*ang 27

就我个人而言,我认为附加一个额外的虚拟硬盘并将其安装到适当的安装点会更容易,例如/opt并将您的东西转移到使用rsync来解决这个问题,毕竟,puppet vagrant box 是用于测试目的。

原因VBoxManage modifyhd仅适用于本机 VDI 映像。但是,vagrant base box 基本上都是使用VMDK格式导出 OVF/OVA 。

查看VirtualBox 文档

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

增加 Vagrant Base Box 的磁盘容量

步骤是

  1. 为了能够调整硬盘的大小,您必须先将其转换为 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}。

  • 请注意,在调整大小之后和再次启动 vagrant box 之前,您还需要更新 VirtualBox 存储配置,以便它使用新的 VDI 而不是原始 VMDK:在 VirtualBox > 存储 > 删除现有硬盘 > 添加硬盘(选择现有的并指向新的 VDI 映像) (3认同)
  • 我刚刚写了一个综合指南:https://medium.com/@phirschybar/resize-your-vagrant-virtualbox-disk-3c0fbc607817 (2认同)

Chr*_*now 15

我已经在我的 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

此脚本适用于centos 6.4 机器,但可以轻松适应 ubuntu。

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

  • 使用具有更大磁盘的盒子,例如具有 40Gb 磁盘的操作码便当
  • 使用packer构建您自己的盒子。您可以使用 opscode 框打包器定义作为起点

  • 这应该添加到 `config.vm.provider :virtualbox do |vb|` 块中以使事情更清楚 (2认同)

小智 8

安装 Vagrant 插件vagrant-disksize

vagrant plugin install vagrant-disksize
Run Code Online (Sandbox Code Playgroud)

如果你想添加确保用户在启动 vagrant 时安装了插件,你可以在 Vagrantfile 的开头添加它

# Install vagrant-disksize to allow resizing the vagrant box disk.
unless Vagrant.has_plugin?("vagrant-disksize")
    raise  Vagrant::Errors::VagrantError.new, "vagrant-disksize plugin is missing. Please install it using 'vagrant plugin install vagrant-disksize' and rerun 'vagrant up'"
end
Run Code Online (Sandbox Code Playgroud)

在 Vagrantfile 中设置所需的磁盘大小

vagrant.configure('2') do |config|
    config.disksize.size = '50GB'
end
Run Code Online (Sandbox Code Playgroud)

更新现有的流浪箱

  1. 执行以上所有操作
  2. 运行 vagrant halt & vagrant up(你应该会看到类似“Resized disk: old 32768 MB, req 51200 MB, new 51200 MB”)
  3. SSH 到流浪箱
  4. 运行sudo cfdisk /dev/sda
  5. 使用箭头选择您的磁盘可能是 sdaX。我的是sda3。
  6. 然后使用箭头键选择调整大小。接受建议的磁盘大小。
  7. 然后选择写入。并回答是。
  8. 您可以选择立即退出。
  9. 运行sudo resize2fs -p -F /dev/sdaX 您应该会看到如下内容:“/dev/sda3 上的文件系统安装在 /;在线调整大小所需的 old_desc_blocks = 4, new_desc_blocks = 6 /dev/sda3 上的文件系统现在是11933952 (4k) 块长。”
  10. 运行df并查看您的磁盘大小已增加。


小智 7

您可以使用该插件,这将使您能够指定磁盘大小 https://github.com/sprotheroe/vagrant-disksize