VM VirtualBox oluşturulmasında depolama boyutunu ayarla


41

Sanal makinenin depolama boyutunu oluştururken ayarlamanın bir yolu var mı? Vagrant'ı kullanacağım, ancak bunun VirtualBox'ta yapılması gereken bir işlem veya Vagrantfile'de ekleyebileceğim bir ayar olup olmadığından emin değilim (Belgeleri kontrol ettim ancak herhangi bir gösterge yok gibi görünüyor)


"Vagrant Disk Size Virtualbox" için Google ve bu yazıyı AskUbuntu'da bulun .
eyoung100

2
@ eyoung100 ah teşekkürler, vm oluşturmadan önce yapılamayacağını onaylar sanırım.
a7omiton

VirtualDisk'i Vagrant'sız yarattıysanız yapabilirsiniz, fakat eğer istersen serseri kullanmanız gerekmez.
eyoung100

@ eyoung100 sadece ek bir adım gibi görünüyordu, oluşturduktan sonra VM'yi yeniden boyutlandırmak zorunda
kalıyordu

Yine de IIRC serseri kapattıktan sonra serseri VM'yi yok eder.
eyoung100

Yanıtlar:


23

vagrant-disksize Eklenti bu kolaylaştırır. 20 gb sabit sürücüyle debian-9 vm oluşturun.

minimal:

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

veya eklenti için otomatik yükleme mantığını kullanarak:

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

Ubuntu 17.10 ile çalışmaz (Artful Aardvark) # 10: github.com/sprotheroe/vagrant-disksize/issues/10
David

2
Ubuntu 16.04 LTS'de çalıştı. Bahsettiğiniz gibi, sadece eklenti komutuyla yükleyin: vagrant plugin install vagrant-disksizeTeşekkürler!
Edenshaw

1
Küçültmek için değil, diski genişletmek için çalışıyor gibi görünüyor.
xenoid

Bir cazibe gibi çalıştı.
wny

8

Söz konusu diskin UUID kodunu bilmiyorsanız mümkün değildir. Öyle olsaydı, aşağıdakilerde olması gerekir 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

nerede "size in megabytes"megabayt HD boyutudur ve "disk id"bir UUID diske ( değil VM)

Alternatif olarak, bunu VBoxManage yoluyla da yapabilirsiniz:

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

Alternatif çözüm yapmak, gerçek sanal makinede fazladan depolama alanı oluşturmaz, değil mi?
a7omiton

Doğru, sadece sabit sürücüyü yeniden boyutlandıracak, daha sonra VM'deki bölümü büyütmek zorunda
kalacaksınız

7
Diğer iş parçacıklarında da belirtildiği gibi, bu genellikle işe yaramaz, çünkü çoğu Vagrant kutusu VBoxManage tarafından tercih edilen format .vmdkyerine sanal disk dosyaları ile oluşturulur .VDI.
Mark Hudson,

@MarkHudson Üzgünüm, bunun farkında değildim (Bu cevabı sadece VirtualBox ve Vagrant dokümantasyonu bilgisine dayanarak yaptım, gerçekten Vagrant kullanmıyorum). Bunu gösterdiğin için teşekkürler! VirtualBox VMDK'leri yeniden boyutlandıramaz mı? Hiç denemedim. Cevabımı güncelleyecek.
felixphew

6

Bence bazı ortak sorunlarını çözme ait bu size yardımcı olabilir.


Ve bu önemli kısmı

Disk alanını arttır

Normalde (ne yazık ki), bulut tabanı kutusu VMDK disk biçimleriyle birlikte gelir. Şanslıysanız ve disk biçiminiz VDI ise, bunu doğrudan bu şekilde çözebilirsiniz. Ancak, VMDK genişletilemediğinden, VM'nize başka bir disk eklemeniz gerekir. Bunu manuel olarak yapmak zorsa, bunu Vagrant'tan yapabilir misiniz? Şimdi çözdüğüm kadar zor değil:

Çalışma dizininizde "bootstrap.sh" adlı bir komut dosyası oluşturun ve şu satırları ekleyin:

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

VolGroup ve lv_root farklı dağıtımlarda değişebilir. Ama Ubuntu'da da benim için çalışıyor.

Ve sonra bu kodu Vagrantfile’inize ekleyin:

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

Bu, 100 GB kapasiteli bir VDI disk dosyası oluşturur. Ve işletim sisteminize bağlı.

Vagrant: D ile AWS EC2 örnekleri gibi bulut Vagrant kutuları oluşturduğunuzda bu sorun çözüldü.

Takas Belleğini Arttırın

Oracle Fusion Middleware ürünlerini kurduğum için, bir miktar takas belleği gerektiriyorlar, ancak ana kutuya az miktarda takas geliyor.

Bunu çözmek için, çalışma dizininizde "rise_swap.sh" adlı bu betiği ekleyin:

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

Şimdi kutunuzu imha edip yukarı kaldırırsanız, 8GB takas belleği ve 100GB ek disk alanı eklenmiş yeni bir kutunuz olacaktır.


Bu bağlantı soruyu cevaplayabilse de, cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak daha iyidir. Bağlantılı sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir.
Tejas,

Anladım. Değişmiş,
Forelax

4

Bunu Vagrantfile'de nasıl yaptım. Arayan insanlar için ...

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

Bunu yaptım ama yeni diskin atanmamış boş alanı var, kullanılabilir belleği aktif birincil bölüme nasıl atayabilirim?
eifersucht

Bu çalışan bir çözüm. Hangi görüntüyü kullandığınıza bağlı olarak epeyce param düzenlemek zorundasınız.
servermanfail

2

@Anderler benim için en iyi olan cevabı verdiler (kutuyu daha fazla hafızaya alarak) ancak daha basit hale getiren birkaç küçük tweaks yapmak zorunda kaldım.

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

1

Centos7 için Yujie'nin cevabını kullandım ancak birkaç değişiklik yaptım. İlk önce --storagectl dosyasını düzenleyerek bir IDE denetleyicisi kullanın:

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

Daha sonra bootstrap.sh dosyasında birim isimleri farklıdır ve dosya sistemi XFS'dir, yani bu

sudo pvcreate /dev/sdb
sudo vgextend VolGroup00 /dev/sdb
sudo lvextend /dev/VolGroup00/LogVol00 /dev/sdb
sudo xfs_growfs /
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.