VM VirtualBox 생성시 스토리지 크기 설정


41

VM을 만들 때 VM의 저장소 크기를 설정하는 방법이 있습니까? Vagrant를 사용하지만 VirtualBox에서 수행해야하거나 Vagrantfile에 포함 할 수있는 설정인지 확실하지 않습니다 (문서를 확인했지만 표시가없는 것 같습니다)


"Vagrant Disk Size Virtualbox "에 대한 Google의 AskUbuntu에서이 게시물을 찾으십시오 .
eyoung100 2014

2
@ eyoung100 아 감사합니다 .VM을 만들기 전에는 할 수 없다는 것을 확인합니다.
a7omiton

Vagrant없이 VirtualDisk를 만들면 가능하지만 원하는 경우 Vagrant를 사용할 필요는 없습니다.
eyoung100 2014

@ eyoung100 단지를 만든 후 VM의 크기를 조정하는 데, 추가 단계처럼 보였다
a7omiton

어쨌든 IIRC를 중단하면 Vagrant는 VM을 파괴합니다.
eyoung100

답변:


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에서는 작동하지 않습니다 : github.com/sprotheroe/vagrant-disksize/issues/10
David

2
우분투 16.04 LTS에서 일했습니다. 언급했듯이 다음 명령으로 플러그인을 설치하십시오. vagrant plugin install vagrant-disksize감사합니다!
Edenshaw

1
디스크를 축소하지 않고 확장하기 위해서만 작동하는 것 같습니다.
xenoid

매력처럼 일했다.
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

사실, 하드 드라이브의 크기 만 조정하면 VM에서 파티션을 확장해야합니다.
felixphew

7
다른 스레드에서 언급했듯이 대부분의 Vagrant 박스는 VBoxManage에서 선호 .vmdk하는 .VDI형식 대신 가상 디스크 파일 로 생성되므로 일반적으로 작동하지 않습니다 .
Mark Hudson

@MarkHudson 죄송합니다, 나는 이것을 몰랐습니다 (VirtualBox와 Vagrant 문서에 대한 나의 지식을 바탕 으로이 답변을 만들었습니다 .Vagrant를 많이 사용하지는 않습니다). 이것을 지적 해 주셔서 감사합니다! VirtualBox가 VMDK의 크기를 조정할 수 없습니까? 나는 그것을 시도한 적이 없다. 내 답변을 업데이트하겠습니다.
felixphew

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는 다른 배포판에서 변경 될 수 있습니다. 그러나 우분투에서도 작동합니다.

그런 다음이 코드를 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 : D를 사용하는 AWS EC2 인스턴스와 같은 클라우드 Vagrant 박스를 생성 할 때 해결됩니다.

스왑 메모리 증가

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의 추가 디스크 공간이있는 새로운 박스가 생깁니다.


이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
Tejas

변경됨
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의 답변을 사용했지만 몇 가지 변경 사항이 있습니다. 먼저 --storagectl을 편집하여 IDE 컨트롤러를 사용하십시오.

    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.