มีวิธีการตั้งขนาดการจัดเก็บสำหรับ VM ในการสร้างมันได้หรือไม่ ฉันจะใช้ Vagrant แต่ไม่แน่ใจว่านี่เป็นสิ่งที่ต้องทำใน VirtualBox หรือการตั้งค่าที่ฉันสามารถรวมไว้ใน Vagrantfile (ฉันตรวจสอบเอกสาร แต่ดูเหมือนจะไม่มีข้อบ่งชี้ใด ๆ )
มีวิธีการตั้งขนาดการจัดเก็บสำหรับ VM ในการสร้างมันได้หรือไม่ ฉันจะใช้ Vagrant แต่ไม่แน่ใจว่านี่เป็นสิ่งที่ต้องทำใน VirtualBox หรือการตั้งค่าที่ฉันสามารถรวมไว้ใน Vagrantfile (ฉันตรวจสอบเอกสาร แต่ดูเหมือนจะไม่มีข้อบ่งชี้ใด ๆ )
คำตอบ:
vagrant-disksize
ปลั๊กอินทำให้ง่ายนี้ สร้าง debian-9 vm พร้อมฮาร์ดไดรฟ์ 20gb
น้อยที่สุด:
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
vagrant plugin install vagrant-disksize
ขอบคุณ!
มันเป็นไปไม่ได้ถ้าคุณไม่รู้จัก 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]
.vmdk
ไฟล์ดิสก์เสมือนแทนที่จะเป็น.VDI
รูปแบบที่ VBoxManage ต้องการ
ผมคิดว่าการแก้ไขปัญหาบางอย่างร่วมกันของนี้อาจช่วยให้คุณ
และนี่คือส่วนสำคัญ
เพิ่มพื้นที่ว่างในดิสก์
โดยปกติ (เศร้า) กล่องฐานเมฆมาพร้อมกับดิสก์รูปแบบ VMDK หากคุณโชคดีและรูปแบบดิสก์ของคุณคือ VDI คุณสามารถแก้ไขได้เช่นนี้โดยตรง แต่ไม่สามารถขยาย VMDK ได้ดังนั้นคุณต้องเพิ่มดิสก์อื่นใน VM ของคุณ หากการทำสิ่งนี้ด้วยตนเองเป็นเรื่องยากคุณสามารถถ่ายทำสิ่งนี้จาก 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 ที่มีความจุ 100GB และเชื่อมต่อกับระบบปฏิบัติการของคุณ
ปัญหานี้ได้รับการแก้ไขเมื่อคุณสร้างกล่องเมฆ Vagrant เช่น AWS EC2 อินสแตนซ์ที่มี Vagrant: D
เพิ่มหน่วยความจำ Swap
เมื่อฉันติดตั้งผลิตภัณฑ์ Oracle Fusion Middleware พวกเขาต้องการหน่วยความจำ swap จำนวนหนึ่ง แต่กล่องฐานมาพร้อมกับจำนวน swap เล็กน้อย
ในการแก้ไขปัญหานี้ให้เพิ่มสคริปต์นี้ชื่อ "เพิ่ม _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
หากคุณทำลายและปรับปรุงกล่องของคุณทันทีคุณจะมีกล่องใหม่ที่เพิ่มหน่วยความจำ swap 8GB และพื้นที่ดิสก์เพิ่มเติม 100GB
ฉันทำสิ่งนี้ใน 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
@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
สำหรับ Centos7 ฉันใช้คำตอบของ Yujie แต่มีการเปลี่ยนแปลงสองสามอย่าง ก่อนอื่นให้ใช้ตัวควบคุม 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 /