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

41

Existe-t-il un moyen de définir la taille de stockage de la machine virtuelle lors de sa création? Je vais utiliser Vagrant, mais je ne suis pas sûr que ce soit quelque chose qui doit être fait dans VirtualBox ou un paramètre que je peux inclure dans Vagrantfile (j'ai vérifié la documentation mais il ne semble pas y avoir d'indication)

a7omiton
la source
Google pour " Virtual Box Taille du disque vagabond" et trouver ce post sur AskUbuntu .
eyoung100
2
@ eyoung100 ah merci, je suppose que cela confirme que cela ne peut être fait avant de créer le vm.
a7omiton
Eh bien, c'est possible si vous créez le disque virtuel sans Vagrant, mais vous n’auriez pas besoin d’utiliser vagant si vous le vouliez.
eyoung100
@ eyoung100 ça ressemblait à une étape supplémentaire, il
fallait
Vagrant détruit la VM après que vous ayez arrêté le vagrant de toute façon IIRC.
eyoung100

Réponses:

23

Le vagrant-disksize plugin rend cela facile. Créez une version debian-9 avec un disque dur de 20gb.

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
Mike
la source
Ne fonctionne pas avec Ubuntu 17.10 (Artful Aardvark) # 10: github.com/sprotheroe/vagrant-disksize/issues/10
David
2
Cela a fonctionné pour Ubuntu 16.04 LTS. Comme vous le mentionnez, installez simplement le plugin avec la commande: vagrant plugin install vagrant-disksizeMerci!
Edenshaw
1
Semble travailler uniquement pour étendre le disque, pas pour le réduire.
xenoid
Travaillé comme un charme.
wny
8

Ce n'est possible que si vous connaissez l'UUID du disque en question. Si vous le faisiez, 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 "disk id"du disque dur en mégaoctets et est l'UUID du disque ( pas la machine virtuelle)

Sinon, 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]
Felixphew
la source
Faire la solution de rechange ne créerait pas l'espace de stockage supplémentaire dans la machine virtuelle réelle ou le fera-t-il?
a7omiton
Certes, il ne fera que redimensionner le disque dur, vous devrez alors agrandir la partition dans la VM
felixphew
7
Comme mentionné dans les autres threads, cela ne fonctionne généralement pas, car la plupart des boîtes Vagrant sont créées avec .vmdkdes fichiers de disque virtuel au lieu du .VDIformat préféré par VBoxManage.
Mark Hudson
@MarkHudson Désolé, je n'étais pas au courant de cela (je viens de formuler cette réponse en fonction de ma connaissance de VirtualBox et de la documentation de Vagrant, je n'utilise pas beaucoup Vagrant). Merci de l'avoir signalé! VirtualBox ne peut-il pas redimensionner les VMDK? Je n'ai jamais essayé. Mettra à jour ma réponse.
felixphew
6

Je pense que la résolution de certains problèmes communs de ce peut vous aider.


Et c'est l'essentiel

Augmenter l'espace disque

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

Créez un script appelé "bootstrap.sh" dans 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 ajoutez ensuite 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 une capacité de 100 Go. Et est attaché à votre système d'exploitation.

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

Augmenter la mémoire d'échange

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

Pour résoudre ce problème, ajoutez ce script appelé "augmentation_swap.sh" dans 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 votre boîte maintenant, vous aurez une nouvelle boîte avec 8 Go de mémoire d'échange ajoutée et 100 Go d'espace disque supplémentaire.

Forelax
la source
Bien que ce lien puisse répondre à la question, il est préférable d’inclure ici les parties essentielles de la réponse et de fournir le lien pour référence. Les réponses avec lien uniquement peuvent devenir non valides si la page liée est modifiée.
Tejas
Got.Had a changé,
Forelax
4

Comment j'ai fait cela dans Vagrantfile. Pour les personnes cherchant ...

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
Anders
la source
C'est ce que j'ai fait, mais le nouveau disque dispose d'un espace libre non affecté. Comment puis-je affecter la mémoire disponible à la partition principale active?
eifersucht
Ceci est une solution de travail. Bien que vous deviez éditer quelques paramètres en fonction de l'image que vous utilisez.
servermanfail
2

@Anders avait la réponse qui me convenait le mieux (initialiser la boîte avec plus de mémoire), mais je devais faire quelques petites modifications qui simplifiaient 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
ShaneMit
la source
1

Pour Centos7, j'ai utilisé la réponse de Yujie, mais avec quelques modifications. Commencez par utiliser 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 fichier bootstrap.sh, les noms de volume sont différents et le système de fichiers est XFS.

sudo pvcreate /dev/sdb
sudo vgextend VolGroup00 /dev/sdb
sudo lvextend /dev/VolGroup00/LogVol00 /dev/sdb
sudo xfs_growfs /
Chris Brooking
la source