VM VirtualBoxの作成時にストレージサイズを設定する


41

VMの作成時にVMのストレージサイズを設定する方法はありますか?Vagrantを使用しますが、これがVirtualBoxで実行する必要があるのか​​、Vagrantfileに含めることができる設定なのかはわかりません(ドキュメントを確認しましたが、何の兆候もないようです)


「Vagrant Disk Size Virtualbox」のGoogleとAskUbuntuでこの投稿を見つけます。
eyoung100 14

2
@ eyoung100ああ、ありがとう、VMを作成する前にできないことを確認していると思います。
a7omiton 14

まあ、VagrantなしでVirtualDiskを作成することはできますが、必要であればvagrantを使用する必要はありません。
eyoung100 14

@ eyoung100それはちょうどそれを作成した後にVMのサイズを変更すること、余分なステップのように思えた
a7omiton

いずれにしても、IIRCでVagrantをシャットダウンすると、VagrantはVMを破壊します。
eyoung100 14

回答:


23

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

Ubuntu 17.10(Artful Aardvark)#10では動作しません#10:github.com/sprotheroe/vagrant-disksize/issues/10
デビッド

2
Ubuntu 16.04 LTSで機能しました。おっしゃるように、次のコマンドでプラグインをインストールするだけです:vagrant plugin install vagrant-disksizeありがとう!
エデンショー

1
ディスクを拡張するためだけに機能し、縮小するためではないようです。
キセノイド

魅力のように働いた。
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"で、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]

代替ソリューションを実行しても、実際の仮想マシンに追加のストレージスペースは作成されませんか?
a7omiton 14

確かに、それだけでハードドライブのサイズを変更します、あなたは、VM内のパーティションを成長させる必要があります
felixphew

7
他のスレッドで述べたように、ほとんどのVagrantボックスはVBoxManageが推奨する形式.vmdkではなく仮想ディスクファイルで作成されるため、これは通常は機能しません.VDI
マークハドソン

@MarkHudson申し訳ありませんが、これについては知りませんでした(VirtualBoxとVagrantのドキュメントに関する知識に基づいてこの回答をしましたが、Vagrantはあまり使いません)。これを指摘してくれてありがとう!VirtualBoxはVMDKのサイズを変更できませんか?試したことがない。私の答えを更新します。
フェリックスフー

6

私が思うに、いくつかの一般的な問題解決これをあなたを助けるかもしれません。


そして、これは重要な部分です

ディスク容量を増やす

通常(悲しいことに)、クラウドベースボックスには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ディスクファイルが作成されます。また、OSに接続されています。

この問題は、VagrantでAWS EC2インスタンスのようなクラウドVagrantボックスを作成すると解決されます:D

スワップメモリ​​を増やす

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の追加ディスクスペースが追加された新しい箱ができます。


このリンクは質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供する方が良いでしょう。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
テハ

変更しました
Forelax

4

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

これを実行しましたが、新しいディスクに未割り当ての空き領域があります。使用可能なメモリをアクティブなプライマリパーティションに割り当てるにはどうすればよいですか?
eifersucht

これは実用的なソリューションです。ただし、使用している画像に応じて、かなりの数のパラメーターを編集する必要があります。
servermanfail

2

@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

1

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 /
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.