Existe-t-il un moyen de définir la taille de stockage pour le VM lors de sa création? J'utiliserai Vagrant, mais je ne sais pas si c'est quelque chose qui doit être fait dans VirtualBox ou un paramètre que je peux inclure dans le Vagrantfile (j'ai vérifié les documents mais il ne semble pas y avoir d'indication)
Le vagrant-disksize
plugin rend cela facile. Créez une VM Debian-9 avec un disque dur de 20 Go.
au minimum:
Vagrant.configure("2") do |config|
config.vm.box = "debian/stretch64"
config.disksize.size = "20GB"
end
ou, en utilisant la logique d'installation automatique pour le 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
Ce n'est pas possible à moins que vous ne connaissiez l'UUID du disque en question. Si tel était le cas, vous auriez besoin des éléments suivants dans votre 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
où "size in megabytes"
est la taille HD en mégaoctets et "disk id"
est l'UUID du disque (pas la VM)
Alternativement, vous pouvez le faire via VBoxManage:
$ VBoxManage list hdds
[get the UUID of the disk in question from the output]
$ VBoxManage modifyhd [UUID] --resize [size in MiB]
Je pense que Résoudre certains problèmes courants of this peut vous aider.
Et c'est l'essentiel
Augmenter l'espace disque
Normalement (malheureusement), la boîte de base cloud est livrée avec des formats de disques VMDK. Si vous avez de la chance et que votre format de disque est VDI, vous pouvez résoudre ce problème directement comme ceci. Mais, VMDK ne peut pas être étendu, vous devez donc ajouter un autre disque à votre machine virtuelle. S'il est difficile de le faire manuellement, pouvez-vous imaginer le faire à partir de Vagrant? Eh bien, maintenant que j'ai résolu ce n'est pas si difficile:
Créez un script appelé "bootstrap.sh" sur votre répertoire de travail et ajoutez ces lignes:
pvcreate /dev/sdb
vgextend VolGroup /dev/sdb
lvextend /dev/VolGroup/lv_root /dev/sdb
resize2fs /dev/VolGroup/lv_root
VolGroup et lv_root peuvent changer sur différentes distributions. Mais cela fonctionne aussi pour moi sur Ubuntu.
Et puis ajoutez ce code à votre 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
...
Cela crée un fichier disque VDI avec 100 Go de capacité. Et est attaché à votre système d'exploitation.
Ce problème est résolu lorsque vous créez des boîtes cloud Vagrant, comme les instances AWS EC2 avec Vagrant: D
Augmenter la mémoire de swap
Lorsque j'installe les produits Oracle Fusion Middleware, ils nécessitent une certaine quantité de mémoire de swap, mais la boîte de base est livrée avec une petite quantité de swap.
Pour résoudre ce problème, ajoutez ce script appelé "augmenter_swap.sh" sur votre répertoire de travail:
#!/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
Si vous détruisez et placez votre boîte maintenant, vous aurez une nouvelle boîte avec 8 Go de mémoire de swap ajoutée et 100 Go d'espace disque supplémentaire.
Comment j'ai fait ça dans Vagrantfile. Pour ceux qui recherchent ...
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 avait la réponse qui fonctionnait le mieux pour moi (initialiser la boîte avec plus de mémoire) mais j'ai dû faire quelques petits ajustements qui ont réellement simplifié les choses.
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
Pour Centos7, j'ai utilisé la réponse de Yujie mais avec quelques changements. Utilisez d'abord un contrôleur IDE, en éditant le --storagectl:
v.customize [
'storageattach', :id,
'--storagectl', 'IDE',
'--port', 1,
'--device', 0,
'--type', 'hdd',
'--medium', ".vagrant/machines/target/virtualbox/disk1.vdi"
]
Ensuite, dans le bootstrap.sh, les noms de volume sont différents et le système de fichiers est XFS, donc cela devient
Sudo pvcreate /dev/sdb
Sudo vgextend VolGroup00 /dev/sdb
Sudo lvextend /dev/VolGroup00/LogVol00 /dev/sdb
Sudo xfs_growfs /