Vagrant VM에서 디스크 크기를 늘리려면 어떻게해야합니까?


62

우분투 호스트 서버에서 VirtualBox 를 사용하여 Vagrant가 관리하는 VM이 ​​있습니다 . 내 Vagrant 상자는 루트 파티션에 LVM을 사용하는 Puppetlabs Debian 6.0.7 basebox 를 사용합니다.

기본적으로 디스크는 8GB로 내 목적으로는 너무 작습니다. 나는 다음과 같이하고 싶다 :

  1. 내 VM을 손상시키지 않고 기존 디스크 와 파일 시스템 의 크기를 늘리십시오 .
  2. 나중에이 프로젝트를 위해 더 큰 디스크를 만들도록 Vagrant를 구성하십시오.

아무도 이것을하는 방법을 설명 할 수 있습니까?

답변:


25

개인적으로 나는 별도의 가상 HDD를 연결하고 적절한 마운트 포인트에 마운트, 예를 들면 쉬울 거라고 생각 /opt하고 사용 위에 물건을 이동 rsync이 문제를 해결, 결국 꼭두각시 방랑 박스는 테스트 목적으로 작동 할 수 있습니다.

이유 : VBoxManage modifyhd기본 VDI 이미지에서만 작동합니다. 그러나 방랑 기본 상자는 기본적으로 VMDK형식을 사용하여 OVF / OVA를 내 보냅니다 .

VirtualBox Docs 참조

--resize x(x는 메가 바이트의 새로운 총 공간을 원하는 경우) 옵션을 사용하면 기존 이미지의 용량을 변경할 수 있습니다; 물리적 크기에 큰 영향을주지 않으면 서 가상 디스크의 논리적 크기를 조정합니다. [37] 이것은 현재 VDI 및 VHD 형식과 동적으로 할당 된 변형에 대해서만 작동하며 용량을 확장 (축소 아님)하는 데만 사용할 수 있습니다.

Vagrant Base Box의 디스크 용량을 늘리려면

단계는

  1. HDD의 크기를 조정하려면 먼저 HDD를 VDI로 변환 VBoxManage clonehd in.vmdk out.vdi --format VDI한 다음 다시 연결해야합니다 (GUI를 사용하는 것이 더 쉽습니다).

  2. VBoxManage modifyhd box.vdi --resize 15360용량을 15GB로 늘리는 방법으로 크기를 조정하십시오 .

  3. 그러나 이것은 드라이브 용량 만 변경하므로 나중에 게스트의 파일 시스템을 확장해야합니다. 예를 들어, resize2fs -p -F DEVICEext {3,4}에 사용하십시오.


3
크기 조정 후와 vagrant box를 다시 시작하기 전에 VirtualBox 스토리지 구성을 업데이트하여 원래 VMDK가 아닌 새 VDI를 사용하도록하십시오. VirtualBox> 스토리지> 기존 하드 디스크 제거> 하드 디스크 추가 (기존 선택) 새 VDI 이미지를 가리 킵니다)
Steve Swinsburg

데비안 사용자의 경우 blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive 게시물을 참조하십시오 . 내가 3 단계에 도착했을 때 그것은 실행만큼 간단하지 않았다 resize2fs. 행운을 빕니다!
phirschybar

1
방금 이에 대한 통합 가이드를 작성했습니다. medium.com/@phirschybar/…
phirschybar

31

이 문제를 해결하는 가장 간단한 방법을 찾았습니다.

  • 이 플러그인을 설치하십시오 : vagrant plugin install vagrant-disksize

  • Vagrantfile: 편집

    Vagrant.configure('2') do |config|
      ...
      config.vm.box = 'ubuntu/xenial64'
      config.disksize.size = '50GB'
      ...
    end
    
  • vagrant halt && vagrant up

    • 참고 :이 작동하지 않습니다 vagrant reload

2
매력처럼 일했다. 내가 만난 가장 쉬운 솔루션 인 것 같습니다. 감사합니다.
리코

1
데비안 9 상자의 경우, 이는 원시 디스크 크기를 늘리지 만 데비안 설치에 사용되는 실제 파티션은 아닙니다. 증가 된 디스크 크기는 직접 사용할 수 없습니다.
Tonin

@Tonin 솔루션을 찾으셨습니까?
Mellkor

1
sudo cfdisk /dev/sda도구를 사용 하여 /dev/sda1파티션을 새로 사용 가능한 모든 공간 으로 크기를 조정했습니다 . 그런 다음 파일 시스템에 해당 공간을 사용하라고 지시했습니다.sudo resize2fs -p -F /dev/sda1
tutuDajuju

14

Vagrantfile에 디스크를 자동으로 추가했습니다.

Vagrant.configure("2") do |config|
    ...
    file_to_disk = File.realpath( "." ).to_s + "/disk.vdi"

    if ARGV[0] == "up" && ! File.exist?(file_to_disk) 
       puts "Creating 5GB disk #{file_to_disk}."
       vb.customize [
            'createhd', 
            '--filename', file_to_disk, 
            '--format', 'VDI', 
            '--size', 5000 * 1024 # 5 GB
            ] 
       vb.customize [
            'storageattach', :id, 
            '--storagectl', 'SATA Controller', 
            '--port', 1, '--device', 0, 
            '--type', 'hdd', '--medium', 
            file_to_disk
            ]
   ...
   config.vm.provision "shell", path: "scripts/add_new_disk.sh"
   ...
end

어디 add_new_disk.sh쉘 스크립트는 다음과 같습니다 :

set -e
set -x

if [ -f /etc/disk_added_date ]
then
   echo "disk already added so exiting."
   exit 0
fi


sudo fdisk -u /dev/sdb <<EOF
n
p
1


t
8e
w
EOF

pvcreate /dev/sdb1
vgextend VolGroup /dev/sdb1
lvextend /dev/VolGroup/lv_root
resize2fs /dev/VolGroup/lv_root

date > /etc/disk_added_date

이 스크립트는 centos 6.4 상자 용이지만 우분투에 쉽게 적용 할 수 있습니다.

디스크를 추가하는 대신 다음과 같은 다른 옵션이 있습니다.

  • 40Gb 디스크가있는 opscode 도시락 과 같은 더 큰 디스크가있는 상자 사용
  • packer를 사용하여 자신의 상자를 만드십시오 . opscode 박스 패커 정의를 시작점으로 사용할 수 있습니다

안녕하세요, 솔루션을 시험 해보고 싶습니다. Vagrant File에서이 코드 섹션이 추가 된 위치를 확인할 수 있습니까? 친절한 감사
Rudi Strydom

@RudiStrydom 나는 대답을 업데이트했습니다-지금 더 이해하기를 바랍니다.
Chris Snow

2
이것은에 추가해야 config.vm.provider :virtualbox do |vb|일을 더 명확하게하기 위해 블록
BT

1
에 대해 "크기 또는 범위 지정"오류가 발생하는 lvextend경우 lvextend -l +100%FREE /dev/VolGroup/lv_root대신 대신 시도하십시오
Andomar

1
예를 들어 5TB 디스크를 만듭니다 (--size 단위는 MB 입니다. virtualbox.org/manual/ch08.html#vboxmanage-createvdi 참조 ).
공중제비


0

면책 조항 : 다음 유스 케이스가 적용되는 rhel과 같은 논리적 볼륨 관리를 사용하는 배포판에만 해당됩니다.

나는 공식적으로 Red Hat에 의해 제공되는 공식 Red Hat Enterpise 7.2 방랑 상자를 사용하고 있습니다.

(무료로 만들 수있는 rhel 개발자 계정이 필요합니다)

설치시 8GB 만 사용할 수 있다는 사실에 어려움을 겪었습니다.

sudo df -h
[vagrant@rhel-cdk ~]$ sudo df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-root   8G  2,5G   6,5G  28% /
devtmpfs                     234M     0  234M   0% /dev
tmpfs                        245M     0  245M   0% /dev/shm
tmpfs                        245M  4,3M  241M   2% /run
tmpfs                        245M     0  245M   0% /sys/fs/cgroup
/dev/sda2                    297M  134M  164M  45% /boot
tmpfs                         49M     0   49M   0% /run/user/1000

보시다시피 대부분의 공간은 이미 rhel 설치에 사용되었습니다.

그러나 /dev/mapper/VolGroup00-rootfileystem에 해당하는 볼륨 그룹에 여분의 공간이 있음을 발견했습니다 (가상 상자와 관련하여 동적으로 할당 된 것으로 가정)

sudo vgdisplay VolGroup00
  --- Volume group ---
  VG Name               VolGroup00
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  11
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               39,70 GiB
  PE Size               4,00 MiB
  Total PE              10164
  Alloc PE / Size       7872 / 30,75 GiB
  Free  PE / Size       2292 / 8,95 GiB
  VG UUID               JBVwpl-13KX-HbQw-FqUa-CA9w-swpF-dF6glm

따라서 남아있는 유일한 일은 다음과 같습니다.

a ) 10G로 논리 볼륨의 크기를 늘립니다.

sudo lvextend -L+10G /dev/VolGroup00/root

b ) 루트 파일 시스템이이 변경 사항을 인식하도록 업데이트하십시오

sudo xfs_growfs /dev/mapper/VolGroup00-root

(pls 7.2 이상 resize2fs에서는 이러한 목적으로 작동하지 않습니다).

그 후, 내 파일 시스템에 추가 공간이 사용 가능했습니다.

sudo df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-root   18G  2,5G   16G  14% /
devtmpfs                     234M     0  234M   0% /dev
tmpfs                        245M     0  245M   0% /dev/shm
tmpfs                        245M  4,3M  241M   2% /run
tmpfs                        245M     0  245M   0% /sys/fs/cgroup
/dev/sda2                    297M  134M  164M  45% /boot
tmpfs                         49M     0   49M   0% /run/user/1000

... 가상화 수준에서 개입하지 않음

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.