Tetapkan ukuran penyimpanan saat membuat VM VirtualBox


41

Apakah ada cara untuk mengatur ukuran penyimpanan untuk VM membuatnya? Saya akan menggunakan Vagrant, tetapi tidak yakin apakah ini sesuatu yang perlu dilakukan di VirtualBox atau pengaturan yang dapat saya sertakan dalam Vagrantfile (saya memeriksa dokumen tetapi sepertinya tidak ada indikasi)


Google untuk "Vagrant Disk Size Virtualbox" dan temukan posting ini di AskUbuntu .
eyoung100

2
@ eyoung100 ah terima kasih, saya kira itu menegaskan bahwa itu tidak dapat dilakukan sebelum membuat vm.
a7omiton

Ya, itu bisa jika Anda membuat VirtualDisk tanpa Vagrant, tetapi Anda tidak perlu menggunakan vagrant jika menginginkannya.
eyoung100

@ eyoung100 sepertinya hanya langkah tambahan, harus mengubah ukuran VM setelah membuatnya
a7omiton

Vagrant menghancurkan VM setelah Anda mematikan vagrant IIRC.
eyoung100

Jawaban:


23

The vagrant-disksize Plugin membuat ini mudah. Buat debian-9 vm dengan hard drive 20gb.

minimal:

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

atau, menggunakan logika instal otomatis untuk 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

Tidak bekerja dengan Ubuntu 17.10 (Artful Aardvark) # 10: github.com/sprotheroe/vagrant-disksize/issues/10
David

2
Ini bekerja untuk Ubuntu 16.04 LTS. Seperti yang Anda sebutkan, cukup instal plugin dengan perintah: vagrant plugin install vagrant-disksizeTerima kasih!
Edenshaw

1
Tampaknya hanya bekerja untuk memperpanjang disk, bukan untuk mengecilkannya.
xenoid

Bekerja seperti pesona.
wny

8

Itu tidak mungkin kecuali Anda mengetahui UUID disk yang dimaksud. Jika ya, Anda harus memiliki yang berikut ini di 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

di mana "size in megabytes"ukuran HD dalam megabyte, dan "disk id"merupakan UUID disk ( bukan VM)

Atau, Anda bisa melakukan ini melalui VBoxManage:

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

Melakukan solusi alternatif tidak akan menciptakan ruang penyimpanan tambahan di mesin virtual yang sebenarnya, atau akankah itu?
a7omiton

Benar, itu hanya akan mengubah ukuran hard drive, Anda kemudian harus menumbuhkan partisi di VM
felixphew

7
Seperti disebutkan di utas lainnya, ini biasanya tidak berfungsi karena sebagian besar kotak Vagrant dibuat dengan .vmdkfile disk virtual alih-alih .VDIformat yang lebih disukai oleh VBoxManage.
Mark Hudson

@MarkHudson Maaf, saya tidak mengetahui hal ini (saya baru membuat jawaban ini berdasarkan pengetahuan saya tentang VirtualBox dan dokumentasi Vagrant, saya tidak terlalu banyak menggunakan Vagrant). Terima kasih telah menunjukkan ini! Bisakah VirtualBox tidak mengubah ukuran VMDK? Saya belum pernah mencobanya. Akan memperbarui jawaban saya.
felixphew

6

Saya pikir Menyelesaikan beberapa masalah umum dari ini dapat membantu Anda.


Dan ini adalah bagian yang penting

Tambah ruang Disk

Biasanya (sayangnya), cloud base box dilengkapi dengan format disk VMDK. Jika Anda beruntung dan format disk Anda adalah VDI, Anda dapat menyelesaikannya langsung seperti ini. Tapi, VMDK tidak dapat diperluas, jadi Anda perlu menambahkan disk lain ke VM Anda. Jika membuat ini secara manual sulit, dapatkah Anda melakukan pencitraan dari Vagrant? Nah, sekarang setelah saya selesaikan tidak begitu sulit:

Buat skrip yang disebut "bootstrap.sh" di direktori kerja Anda, dan tambahkan baris ini:

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

VolGroup dan lv_root dapat berubah pada distribusi yang berbeda. Tetapi ini juga berfungsi untuk saya di Ubuntu.

Dan kemudian tambahkan kode ini ke Vagrantfile Anda:

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

Ini menciptakan file disk VDI dengan kapasitas 100GB. Dan terpasang ke OS Anda.

Masalah ini terpecahkan ketika Anda membuat kotak cloud Vagrant, seperti contoh AWS EC2 dengan Vagrant: D

Tambah Memori Tukar

Ketika saya menginstal produk Oracle Fusion Middleware, mereka memerlukan sejumlah memori swap, tetapi base box datang dengan sejumlah kecil swap.

Untuk mengatasi ini, tambahkan skrip ini disebut "peningkatan_swap.sh" pada direktori kerja Anda:

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

Jika Anda menghancurkan dan menaikkan kotak Anda sekarang, Anda akan memiliki kotak baru dengan 8GB memori swap ditambahkan dan 100GB ruang disk tambahan.


Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
Tejas

Sudah. ​​Berubah,
Forelax

4

Bagaimana saya melakukan ini di Vagrantfile. Untuk orang yang mencari ...

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

Saya sudah melakukan ini tetapi disk baru memiliki ruang kosong yang belum ditetapkan, bagaimana cara menetapkan memori yang tersedia ke partisi primer aktif?
eifersucht

Ini adalah solusi yang berfungsi. Meskipun Anda harus mengedit beberapa params tergantung pada gambar yang Anda gunakan.
servermanfail

2

@Anders punya jawaban yang paling cocok untuk saya (menginisialisasi kotak dengan lebih banyak memori) tetapi saya harus membuat beberapa perubahan kecil yang sebenarnya membuatnya lebih sederhana.

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

Untuk Centos7 saya menggunakan jawaban Yujie tetapi dengan beberapa perubahan. Pertama-tama gunakan pengontrol IDE, edit --storagectl:

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

Kemudian di bootstrap.sh nama volume berbeda dan sistem file adalah XFS, jadi ini menjadi

sudo pvcreate /dev/sdb
sudo vgextend VolGroup00 /dev/sdb
sudo lvextend /dev/VolGroup00/LogVol00 /dev/sdb
sudo xfs_growfs /
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.