it-swarm.com.de

Legen Sie die Speichergröße beim Erstellen von VM VirtualBox) fest

Gibt es eine Möglichkeit, die Speichergröße für die VM beim Erstellen festzulegen? Ich werde Vagrant verwenden, bin mir aber nicht sicher, ob dies in VirtualBox oder in einer möglichen Einstellung erforderlich ist in die Vagrant-Datei aufnehmen (Ich habe die Dokumente überprüft, aber es scheint keinen Hinweis zu geben)

42
a7omiton

Das vagrant-disksizePlugin macht dies einfach. Erstellen Sie eine Debian-9-VM mit einer 20-GB-Festplatte.

minimal:

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

oder mithilfe der Logik für die automatische Installation des Plugins:

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

Dies ist nur möglich, wenn Sie die UUID der betreffenden Festplatte kennen. Wenn Sie dies tun würden, müssten Sie Folgendes in Ihrem Vagrantfile haben:

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

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

wo "size in megabytes" ist die HD-Größe in Megabyte und "disk id" ist die UUID der Festplatte (nicht der VM)

Alternativ können Sie dies über VBoxManage tun:

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

Ich denke Lösung einiger häufiger Probleme von this kann Ihnen helfen.


Und das ist der wesentliche Teil

Speicherplatz erhöhen

Normalerweise (leider) wird die Cloud Base Box mit VMDK-Festplattenformaten geliefert. Wenn Sie Glück haben und Ihr Festplattenformat VDI ist, können Sie dies direkt so lösen. Da VMDK jedoch nicht erweitert werden kann, müssen Sie Ihrer VM eine weitere Festplatte hinzufügen. Wenn es schwierig ist, dies manuell zu machen, können Sie sich dies von Vagrant aus vorstellen? Nun, jetzt, wo ich es gelöst habe, ist es nicht so schwierig:

Erstellen Sie ein Skript mit dem Namen "bootstrap.sh" in Ihrem Arbeitsverzeichnis und fügen Sie die folgenden Zeilen hinzu:

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

VolGroup und lv_root können sich auf verschiedenen Distributionen ändern. Aber es funktioniert auch bei Ubuntu.

Und dann fügen Sie diesen Code zu Ihrer Vagrant-Datei hinzu:

...
  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
...

Dadurch wird eine VDI-Festplattendatei mit einer Kapazität von 100 GB erstellt. Und ist an Ihr Betriebssystem angeschlossen.

Dieses Problem wird gelöst, wenn Sie Cloud-Vagrant-Boxen wie AWS EC2-Instanzen mit Vagrant: D erstellen

Swap-Speicher erhöhen

Wenn ich Oracle Fusion Middleware-Produkte installiere, benötigen sie eine gewisse Menge an Swap-Speicher, aber die Basisbox enthält eine kleine Menge an Swap.

Um dies zu beheben, fügen Sie dieses Skript mit dem Namen "grow_swap.sh" in Ihr Arbeitsverzeichnis ein:

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

Wenn Sie Ihre Box jetzt zerstören und hochfahren, erhalten Sie eine neue Box mit 8 GB Swap-Speicher und 100 GB zusätzlichem Speicherplatz.

6
Forelax

Wie ich das in Vagrantfile gemacht habe. Für Leute, die suchen ...

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 hatte die Antwort, die für mich am besten funktionierte (Initialisierung der Box mit mehr Speicher), aber ich musste ein paar kleine Änderungen vornehmen, die es tatsächlich einfacher machten.

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

Für Centos7 habe ich Yujies Antwort verwendet, aber mit ein paar Änderungen. Verwenden Sie zuerst einen IDE Controller) und bearbeiten Sie das --storagectl:

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

Dann sind in der Datei bootstrap.sh die Datenträgernamen unterschiedlich und das Dateisystem ist XFS, also wird dies

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