是否可以在创建虚拟机时为其设置存储大小?我将使用Vagrant,但不确定是否需要在VirtualBox或可以在Vagrantfile中包含的设置中完成此操作(我检查了文档,但似乎没有任何指示)
是否可以在创建虚拟机时为其设置存储大小?我将使用Vagrant,但不确定是否需要在VirtualBox或可以在Vagrantfile中包含的设置中完成此操作(我检查了文档,但似乎没有任何指示)
Answers:
该vagrant-disksize
插件使此操作变得容易。使用20gb硬盘驱动器创建一个debian-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
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
...
这将创建一个具有100GB容量的VDI磁盘文件。并且已连接到您的操作系统。
当您使用Vagrant:D创建云Vagrant框(如AWS EC2实例)时,此问题已解决。
增加交换内存
当我安装Oracle Fusion Middleware产品时,它们需要一定数量的交换内存,但是基本盒附带少量交换。
要解决此问题,请在您的工作目录上添加以下脚本:“ 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的额外磁盘空间。
我如何在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 /