VM VirtualBox के निर्माण पर भंडारण का आकार निर्धारित करें


41

क्या इसे बनाने पर VM के लिए भंडारण आकार निर्धारित करने का कोई तरीका है? मैं वैग्रंट का उपयोग कर रहा हूं, लेकिन निश्चित नहीं कि अगर यह कुछ ऐसा है जिसे वर्चुअलबॉक्स में किया जाना है या एक सेटिंग जिसे मैं वैग्रांटफाइल में शामिल कर सकता हूं (मैंने डॉक्स की जांच की है लेकिन कोई संकेत नहीं लगता है)



2
@ eyoung100 आह धन्यवाद, मुझे लगता है कि पुष्टि करता है कि यह vm बनाने से पहले नहीं किया जा सकता है।
a7omiton 21

ठीक है, अगर आप बगैर वैग्रांट के वर्चुअलडिस्क बना सकते हैं, लेकिन तब आपको योनि का उपयोग करने की आवश्यकता नहीं होगी यदि आप ऐसा चाहते थे।
eyoung100

@ eyoung100 यह सिर्फ एक अतिरिक्त कदम की तरह लग रहा था, इसे बनाने के बाद VM को आकार देने के लिए
a7omiton

वैसे भी आप IIRC को योनि बंद करने के बाद Vagrant VM को नष्ट कर देते हैं।
eyoung100

जवाबों:


23

vagrant-disksize प्लगइन यह आसान बनाता है। 20gb हार्ड ड्राइव के साथ एक डेबियन -9 vm बनाएँ।

न्यूनतम:

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

उबंटू 17.10 के साथ काम नहीं करता है (आर्टिफ़र्ड एर्डवार्क) # 10: github.com/sprotheroe/vagrant-disksize/issues/10
David

2
यह Ubuntu 16.04 LTS के लिए काम किया। जैसा कि आप उल्लेख करते हैं, बस कमांड के साथ प्लगइन स्थापित करें: vagrant plugin install vagrant-disksizeधन्यवाद!
एडेनशॉ

1
केवल डिस्क को विस्तारित करने के लिए काम करता है, न कि इसे सिकोड़ने के लिए।
xenoid

एक जादू की तरह काम किया।
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"मेगाबाइट में एचडी आकार कहां है, और डिस्क"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
जैसा कि अन्य थ्रेड्स में उल्लेख किया गया है, यह आमतौर पर काम नहीं करता है क्योंकि ज्यादातर वोग्रांट बॉक्स VBoxManage द्वारा पसंद किए गए प्रारूप के .vmdkबजाय वर्चुअल डिस्क फ़ाइलों के साथ बनाए जाते हैं .VDI
मार्क हडसन

@MarkHudson क्षमा करें, मुझे इस बारे में जानकारी नहीं थी (मैंने बस वर्चुअलबॉक्स के अपने ज्ञान और वैग्रेंट डॉक्यूमेंटेशन के आधार पर यह उत्तर दिया है, मैं वास्तव में वैग्रैंट का अधिक उपयोग नहीं करता हूं)। इस पर ध्यान दिलाने के लिए धन्यवाद! क्या VirtualBox VMDKs का आकार नहीं बदल सकता है? मैंने कभी कोशिश नहीं की। मेरे उत्तर को अपडेट करेंगे।
felixphew

6

मुझे लगता है कि कुछ सामान्य समस्याओं का समाधान किया की इस आप मदद कर सकते हैं।


और यह जरूरी हिस्सा है

डिस्क स्थान बढ़ाएँ

आम तौर पर (दुख की बात है), क्लाउड बेस बॉक्स VMDK डिस्क प्रारूप के साथ आता है। यदि आप भाग्यशाली हैं और आपका डिस्क प्रारूप VDI है, तो आप इसे सीधे इस तरह से हल कर सकते हैं। लेकिन, VMDK का विस्तार नहीं किया जा सकता है, इसलिए आपको अपने VM में एक और डिस्क जोड़ने की आवश्यकता है। यदि इसे मैन्युअल रूप से बनाना कठिन है, तो क्या आप वैग्रांत से ऐसा कर सकते हैं? खैर, अब जो मैंने हल किया है वह उतना मुश्किल नहीं है:

अपनी कार्यशील निर्देशिका पर "bootstrap.sh" नामक एक स्क्रिप्ट बनाएँ, और इन पंक्तियों को जोड़ें:

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

वोल्ग्रुप और lv_root विभिन्न वितरणों पर बदल सकते हैं। लेकिन यह मेरे लिए उबंटू पर भी काम करता है।

और फिर इस कोड को अपने 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
...

यह 100GB क्षमता वाली VDI डिस्क फ़ाइल बनाता है। और आपके OS से जुड़ा हुआ है।

जब आप क्लाउड वैग्रैंट बॉक्स बनाते हैं, तो यह समस्या हल हो जाती है, जैसे AWS EC2 उदाहरण Vagrant: D के साथ

स्‍मैप मेमोरी बढ़ाएं

जैसा कि मैं ओरेकल फ्यूजन मिडिलवेयर उत्पादों को स्थापित करता हूं, उन्हें कुछ मात्रा में स्वैप मेमोरी की आवश्यकता होती है, लेकिन बेस बॉक्स थोड़ी मात्रा में स्वैप के साथ आता है।

इसे हल करने के लिए, इस लिपि को अपनी वर्किंग डायरेक्टरी पर "increase_swap.sh" नाम से जोड़ें:

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

यदि आप अभी अपने बॉक्स को नष्ट और ऊपर कर रहे हैं, तो आपके पास एक नया बॉक्स होगा जिसमें 8GB स्वैप मेमोरी जोड़ा जाएगा और 100GB अतिरिक्त डिस्क स्थान होगा।


हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं।
तेजस

मिल गया।उसने बदल दिया,
फ़ोरलैक्स

4

मैंने वैग्रांटफाइल में यह कैसे किया। खोज रहे लोगों के लिए ...

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

@ और मेरे पास जवाब था कि मेरे लिए सबसे अच्छा काम किया (अधिक स्मृति के साथ बॉक्स को इनिशियलाइज़ करना) लेकिन मुझे कुछ छोटे ट्वीक्स बनाने थे जो वास्तव में इसे सरल बनाते थे।

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"
        ]

फिर बूटस्ट्रैप में। वॉल्यूम के नाम अलग हैं और फ़ाइल सिस्टम XFS है, इसलिए यह बन जाता है

sudo pvcreate /dev/sdb
sudo vgextend VolGroup00 /dev/sdb
sudo lvextend /dev/VolGroup00/LogVol00 /dev/sdb
sudo xfs_growfs /
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.