Встановіть розмір пам’яті при створенні VM VirtualBox


41

Чи є спосіб встановити розмір пам’яті для VM при його створенні? Я буду використовувати Vagrant, але не впевнений, що це щось, що потрібно зробити у VirtualBox або налаштування, яке я можу включити у Vagrantfile (я перевірив документи, але, схоже, немає ніяких ознак)


Google для " Віртуальний скриньки розміру диска" і знайдіть цю публікацію на AskUbuntu .
eyoung100

2
@ eyoung100 ах, я думаю, це підтверджує, що це неможливо зробити до створення vm.
a7omiton

Ну, це може, якщо ви створите VirtualDisk без Vagrant, але тоді вам не потрібно буде використовувати vagrant, якщо цього хочете.
eyoung100

@ eyoung100 це просто здавалося додатковим кроком, після зміни розміру VM після його створення
a7omiton

Vagrant знищує VM після того, як ви все одно закрили бродягу IIRC.
eyoung100

Відповіді:


23

vagrant-disksize Плагін робить це легко. Створіть debian-9 vm за допомогою 20-футового жорсткого диска.

мінімально:

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

або, використовуючи логіку автоматичної установки для плагіна:

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 (Artful Aardvark) # 10: github.com/sprotheroe/vagrant-disksize/isissue/10
Девід

2
Він працював для Ubuntu 16.04 LTS. Як ви вже згадували, просто встановіть плагін із командою: vagrant plugin install vagrant-disksizeСпасибі!
Edenshaw

1
Здається, працює лише для розширення диска, а не для його зменшення.
ксеноїд

Працював як шарм.
wny

8

Це неможливо, якщо ви не знаєте UUID дискусійного диску. Якщо ви це зробили, вам потрібно буде мати у своєму розпорядженні наступним 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"розмір HD в мегабайтах і "disk id"є UUID диска ( не VM)

Або ви можете зробити це через VBoxManage:

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

Виконання альтернативного рішення не створить зайвий простір для зберігання у фактичній віртуальній машині, чи не буде?
a7omiton

Правда, він просто змінить розмір жорсткого диска, тоді вам доведеться виростити розділ у VM
felixphew

7
Як вже згадувалося в інших потоках, це зазвичай не працює, оскільки більшість ящиків Vagrant створюються з .vmdkвіртуальних файлів диска замість .VDIформату, який надає VBoxManage.
Марк Хадсон

@MarkHudson Вибачте, я про це не знав (я просто зробив цю відповідь, грунтуючись на моїх знаннях про VirtualBox та документації про Vagrant, я дуже не використовую Vagrant). Дякуємо, що вказали на це! Чи може VirtualBox не змінити розмір VMDK? Я ніколи цього не пробував. Оновлю мою відповідь.
феліксфев

6

Я думаю Роздільна деякі загальні питання про це може допомогти вам.


І це важлива частина

Збільшення місця на диску

Зазвичай (на жаль) хмарна основна коробка поставляється з форматами дисків VMDK. Якщо вам пощастило, а ваш диск формат VDI, ви можете вирішити це безпосередньо так. Але, VMDK не можна розширювати, тому вам потрібно додати ще один диск у вашу машину управління. Якщо зробити це вручну важко, чи можете ви це зробити з Vagrant? Ну, а тепер я вирішив це не так складно:

Створіть сценарій під назвою "bootstrap.sh" у своєму робочому каталозі та додайте ці рядки:

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

VolGroup і lv_root можуть змінюватися в різних дистрибутивах. Але це працює на мене і на Ubuntu.

А потім додайте цей код у свій 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
...

Це створює файл диска VDI з ємністю 100 Гб. І додається до вашої ОС.

Ця проблема вирішується, коли ви створюєте хмарні ящики Vagrant, наприклад екземпляри AWS EC2 за допомогою Vagrant: D

Збільшити обмін пам'яті

Коли я встановлюю продукти Oracle Fusion Middleware, їм потрібна деяка кількість пам’яті своп, але в базовій коробці є невеликий обмін.

Щоб вирішити цю проблему, додайте цей скрипт під назвою "збільшення_свапш" у свою робочу директорію:

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

Якщо зараз ви знищите та знизите ваш ящик, у вас з’явиться нова скринька з 8 ГБ пам’яті своп і 100 ГБ додаткового місця на диску.


Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться.
Теяс

Зрозумів. Він змінився,
Forelax

4

Як я це зробив у Vagrantfile. Для людей, які шукають ...

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

Я це зробив, але на новому диску не було призначено вільного місця, як я можу призначити наявну пам'ять активному первинному розділу?
eifersucht

Це робоче рішення. Хоча вам потрібно відредагувати досить багато парам залежно від того, яке зображення ви використовуєте.
servermanfail

2

@Anders мав відповідь, яка найкраще працювала для мене (ініціалізація вікна з більшою кількістю пам'яті), але мені довелося зробити кілька невеликих налаштувань, які насправді спростили її.

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 я використав відповідь Юджі, але з парою змін. Спочатку використовуйте контролер IDE, редагуючи --storagectl:

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

Тоді в bootstrap.sh імена томів відрізняються, а файлова система - XFS, так це стає

sudo pvcreate /dev/sdb
sudo vgextend VolGroup00 /dev/sdb
sudo lvextend /dev/VolGroup00/LogVol00 /dev/sdb
sudo xfs_growfs /
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.