Defina o tamanho do armazenamento na criação do VM VirtualBox

35

Existe uma maneira de definir o tamanho do armazenamento para a VM ao criá-lo? Eu estarei usando o Vagrant, mas não tenho certeza se isso é algo que precisa ser feito no VirtualBox ou uma configuração que eu possa incluir no Vagrantfile (eu verifiquei os documentos mas não parece haver nenhuma indicação)

    
por a7omiton 30.12.2014 / 22:16

6 respostas

17

O vagrant-disksize plug-in torna isso fácil. Crie um debian-9 vm com um disco rígido de 20gb.

minimamente:

Vagrant.configure("2") do |config|
    config.vm.box = "debian/stretch64" 
    config.disksize.size = "20GB"
end

ou, usando a lógica de instalação automática para o plug-in:

Vagrant.configure("2") do |config|

    required_plugins = %w( vagrant-vbguest vagrant-disksize )
    _retry = false
    required_plugins.each do |plugin|
        unless Vagrant.has_plugin? plugin
            system "vagrant plugin install #{plugin}"
            _retry=true
        end
    end

    if (_retry)
        exec "vagrant " + ARGV.join(' ')
    end

    config.vm.box = "debian/stretch64" 
    config.disksize.size = "20GB"
end
    
por 19.07.2017 / 23:51
7

Não é possível, a menos que você conheça o UUID do disco em questão. Se você fez, você precisa ter o seguinte em seu Vagrantfile :

Vagrant.configure("2") do |config|
  # ... (other config)

  config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyhd", "disk id", "--resize", "size in megabytes"]
  end
end

em que "size in megabytes" é o tamanho do HD em megabytes e "disk id" é o UUID do disco ( não a VM)

Alternativamente, você pode fazer isso via VBoxManage:

$ VBoxManage list hdds
[get the UUID of the disk in question from the output]
$ VBoxManage modifyhd [UUID] --resize [size in MiB]
    
por 30.12.2014 / 23:11
5

Acho que Resolver alguns problemas comuns de este pode ajudá-lo .

E esta é a parte essencial

Aumentar o espaço em disco

Normalmente (infelizmente), a caixa base da nuvem vem com formatos de discos VMDK. Se você tiver sorte e seu formato de disco for VDI, você pode resolver isso diretamente assim. Mas, VMDK não pode ser expandido, então você precisa adicionar outro disco à sua VM. Se fazer isso manualmente é difícil, você pode fazer isso com o Vagrant? Bem, agora que resolvi não é tão difícil assim:

Crie um script chamado "bootstrap.sh" no seu diretório de trabalho e adicione estas linhas:

pvcreate /dev/sdb
vgextend VolGroup /dev/sdb
lvextend /dev/VolGroup/lv_root /dev/sdb
resize2fs /dev/VolGroup/lv_root

VolGroup and lv_root can change on different distributions. But it works for me on Ubuntu also.

E adicione esse código ao seu Vagrantfile:

...
  config.vm.provider :virtualbox do |vb|
  ...
  # Validate this should be run it once
  if ARGV[0] == "up" && ! File.exist?("./disk1.vdi")
    vb.customize [
      'createhd',
      '--filename', "./disk1.vdi",
      '--format', 'VDI',
      # 100GB
      '--size', 100 * 1024
    ]

    vb.customize [
      'storageattach', :id,
      '--storagectl', 'SATA Controller',
      '--port', 1, '--device', 0,
      '--type', 'hdd', '--medium',
      file_to_disk
    ]
  end

  if ARGV[0] == "up" && ! File.exist?("./disk1.vdi")
    # Run script to map new disk
    config.vm.provision "bash", path: "bootstrap.sh"
    # Run script to increase swap memory
    config.vm.provision "bash", path: "increase_swap.sh"
  end
...

Isso cria um arquivo de disco VDI com 100 GB de capacidade. E está ligado ao seu sistema operacional.

Esse problema é resolvido quando você cria caixas do Cloud Vagrant, como instâncias do AWS EC2 com o Vagrant: D

Aumentar a memória de troca

Ao instalar produtos Oracle Fusion Middleware, eles exigem uma certa quantidade de memória swap, mas a caixa básica vem com uma pequena quantidade de troca.

Para resolver isso, adicione este script chamado "increase_swap.sh" no seu diretório de trabalho:

#!/bin/sh

# size of swapfile in megabytes
swapsize=8000

# does the swap file already exist?
grep -q "swapfile" /etc/fstab

# if not then create it
if [ $? -ne 0 ]; then
  echo 'swapfile not found. Adding swapfile.'
  fallocate -l ${swapsize}M /swapfile
  chmod 600 /swapfile
  mkswap /swapfile
  swapon /swapfile
  echo '/swapfile none swap defaults 0 0' >> /etc/fstab
else
  echo 'swapfile found. No changes made.'
fi

# output results to terminal
df -h
cat /proc/swaps
cat /proc/meminfo | grep Swap

Se você destruir sua caixa agora, você terá uma nova caixa com 8 GB de memória swap adicionada e 100 GB de espaço adicional em disco.

    
por 21.12.2015 / 11:24
3

Como eu fiz isso no Vagrantfile. Para pessoas que pesquisam ...

ubuntu.vm.provider "virtualbox" do |virtualbox|
  virtualbox.name = "Ubuntu_1510_#{Time.now.getutc.to_i}"
  virtualbox.customize [
      "storagectl", :id, 
      "--name", "SATAController", 
      "--controller", "IntelAHCI", 
      "--portcount", "1", 
      "--hostiocache", "on"
  ]
  virtualbox.customize [
      "clonehd", "#{ENV["HOME"]}/VirtualBox VMs/Vagrant Test Boxes/#{virtualbox.name}/box-disk1.vmdk", 
                 "#{ENV["HOME"]}/VirtualBox VMs/Vagrant Test Boxes/#{virtualbox.name}/ubuntu.vdi", 
      "--format", "VDI"
  ]
  virtualbox.customize [
      "modifyhd", "#{ENV["HOME"]}/VirtualBox VMs/Vagrant Test Boxes/#{virtualbox.name}/ubuntu.vdi",
      "--resize", 100 * 1024
  ]
  virtualbox.customize [
      "storageattach", :id, 
      "--storagectl", "SATAController", 
      "--port", "0", 
      "--device", "0", 
      "--type", "hdd",
      "--nonrotational", "on",
      "--medium", "#{ENV["HOME"]}/VirtualBox VMs/Vagrant Test Boxes/#{virtualbox.name}/ubuntu.vdi" 
  ]
end
    
por 25.04.2016 / 13:45
1

@Anders teve a resposta que funcionou melhor para mim (inicializando a caixa com mais memória), mas tive que fazer alguns pequenos ajustes que realmente tornaram isso mais simples.

ubuntu.vm.provider "virtualbox" do |virtualbox|
virtualbox.name = "Ubuntu_ProjectName"

virtualbox.customize [
  "clonehd", "#{ENV["HOME"]}/VirtualBox VMs/#{virtualbox.name}/box-disk1.vmdk",   # Note that this may not be the correct file name
             "#{ENV["HOME"]}/VirtualBox VMs/#{virtualbox.name}/ubuntu.vdi", 
  "--format", "VDI"
]
virtualbox.customize [
  "modifyhd", "#{ENV["HOME"]}/VirtualBox VMs/#{virtualbox.name}/ubuntu.vdi",
  "--resize", 100 * 1024
]
virtualbox.customize [
  "storageattach", :id, 
  "--storagectl", "SCSI",  # Instead of the first customize section i just referenced the existing SCSI controller as I am on a mac which uses SCSI by default 
  "--port", "0", 
  "--device", "0", 
  "--type", "hdd",
  "--nonrotational", "on",
  "--medium", "#{ENV["HOME"]}/VirtualBox VMs/#{virtualbox.name}/ubuntu.vdi" 
]
end
    
por 19.12.2016 / 23:15
0

Para Centos7, usei a resposta de Yujie, mas com algumas alterações. Primeiro use um controlador IDE, editando o --storagectl:

    v.customize [
          'storageattach', :id,
          '--storagectl', 'IDE',
          '--port', 1, 
          '--device', 0,
          '--type', 'hdd', 
          '--medium',  ".vagrant/machines/target/virtualbox/disk1.vdi"
        ]

Em seguida, no bootstrap.sh os nomes dos volumes são diferentes e o sistema de arquivos é XFS, então isso se torna

sudo pvcreate /dev/sdb
sudo vgextend VolGroup00 /dev/sdb
sudo lvextend /dev/VolGroup00/LogVol00 /dev/sdb
sudo xfs_growfs /
    
por 17.05.2017 / 11:22