web-dev-qa-db-fra.com

Définir la taille du stockage lors de la création de VM VirtualBox

Existe-t-il un moyen de définir la taille de stockage pour le VM lors de sa création? J'utiliserai Vagrant, mais je ne sais pas si c'est quelque chose qui doit être fait dans VirtualBox ou un paramètre que je peux inclure dans le Vagrantfile (j'ai vérifié les documents mais il ne semble pas y avoir d'indication)

42
a7omiton

Le vagrant-disksizeplugin rend cela facile. Créez une VM Debian-9 avec un disque dur de 20 Go.

au minimum:

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

ou, en utilisant la logique d'installation automatique pour le plugin:

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
25
mike

Ce n'est pas possible à moins que vous ne connaissiez l'UUID du disque en question. Si tel était le cas, vous auriez besoin des éléments suivants dans votre 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

"size in megabytes" est la taille HD en mégaoctets et "disk id" est l'UUID du disque (pas la VM)

Alternativement, vous pouvez le faire via VBoxManage:

$ VBoxManage list hdds
[get the UUID of the disk in question from the output]
$ VBoxManage modifyhd [UUID] --resize [size in MiB]
8
felixphew

Je pense que Résoudre certains problèmes courants of this peut vous aider.


Et c'est l'essentiel

Augmenter l'espace disque

Normalement (malheureusement), la boîte de base cloud est livrée avec des formats de disques VMDK. Si vous avez de la chance et que votre format de disque est VDI, vous pouvez résoudre ce problème directement comme ceci. Mais, VMDK ne peut pas être étendu, vous devez donc ajouter un autre disque à votre machine virtuelle. S'il est difficile de le faire manuellement, pouvez-vous imaginer le faire à partir de Vagrant? Eh bien, maintenant que j'ai résolu ce n'est pas si difficile:

Créez un script appelé "bootstrap.sh" sur votre répertoire de travail et ajoutez ces lignes:

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

VolGroup et lv_root peuvent changer sur différentes distributions. Mais cela fonctionne aussi pour moi sur Ubuntu.

Et puis ajoutez ce code à votre 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
...

Cela crée un fichier disque VDI avec 100 Go de capacité. Et est attaché à votre système d'exploitation.

Ce problème est résolu lorsque vous créez des boîtes cloud Vagrant, comme les instances AWS EC2 avec Vagrant: D

Augmenter la mémoire de swap

Lorsque j'installe les produits Oracle Fusion Middleware, ils nécessitent une certaine quantité de mémoire de swap, mais la boîte de base est livrée avec une petite quantité de swap.

Pour résoudre ce problème, ajoutez ce script appelé "augmenter_swap.sh" sur votre répertoire de travail:

#!/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

Si vous détruisez et placez votre boîte maintenant, vous aurez une nouvelle boîte avec 8 Go de mémoire de swap ajoutée et 100 Go d'espace disque supplémentaire.

6
Forelax

Comment j'ai fait ça dans Vagrantfile. Pour ceux qui recherchent ...

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
5
Anders

@Anders avait la réponse qui fonctionnait le mieux pour moi (initialiser la boîte avec plus de mémoire) mais j'ai dû faire quelques petits ajustements qui ont réellement simplifié les choses.

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
3
ShaneMit

Pour Centos7, j'ai utilisé la réponse de Yujie mais avec quelques changements. Utilisez d'abord un contrôleur IDE, en éditant le --storagectl:

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

Ensuite, dans le bootstrap.sh, les noms de volume sont différents et le système de fichiers est XFS, donc cela devient

Sudo pvcreate /dev/sdb
Sudo vgextend VolGroup00 /dev/sdb
Sudo lvextend /dev/VolGroup00/LogVol00 /dev/sdb
Sudo xfs_growfs /
1
Chris Brooking