dev/Cloud & Infra

VirtualBOX를 커맨드라인으로 제어하기 (VBoxManage)

lugi 2018. 12. 1. 19:09

VBoxManage (CLI로 VirtualBox 관리)

Vagrant를 통해서 개발 환경에서 VM 구성을 나름 편하게하고 있긴한데, ruby로 매번 스크립트를 작성하는 게 약간은 귀찮기도 하고, 회사의 환경에서는 보안 솔루션의 문제인지 Vagrant와 자꾸 알 수 없는 충돌이 일어나서 커맨드라인에서 간단히 VirtualBox를 제어하기 위해 정리 해 보았다.

참고자료

명령어 목록

VM 정보 조회

  • VM 목록 조회
    • VBoxManage list vms
  • 구동 중인 VM 목록 조회
    • VBoxManage list runningvms
  • 조회 명령어는 -l 파라미터와 함께 사용하면 상세 정보를 함께 출력한다

VM 생성하기

  • 설치 가능한 OS Type 확인
    • VBoxManage list ostypes
      • 위 명령어의 출력 결과의 id를 VM 생성시 --ostype 파라미터로 활용
  • VM 생성하기
    • VBoxManage createvm --name VM명
      • VM 생성시 필수 파라미터는 --name 뿐, 추가 파라미터는 다음과 같다
      • --ostype OS종류 -> list ostypes에서 나온 id
      • --register -> VM생성 즉시 등록
      • CENTOS7_VM 이라는 이름으로 레드햇(CENTOS도 레드햇) 64비트 VM 생성 및 등록
        • VBoxManage createvm --name CENTOS7_VM --ostype RedHat_64 --register
  • 이 때 생성되는 VM은 비어 있는 VM이다. --name 파라미터만 입력하고 추후 modifyvm 옵션을 통해서도 수정이 가능하다.

VM 정보 설정하기

  • VM정보 출력
    • VBoxManage showvminfo VM_Name
  • VM정보 수정
    • VBoxManage modifyvm --cpus CPU숫자 --memory 램(MB) --vram 비디오메모리(MB)
    • VBoxManage modifyvm CENTOS7_VM --cpus 2 --memory 1024 --vram 16

네트워크 아답터 설정하기

  • 네트워크 아답터는 8개까지 설정 가능하다
  • N번 네트워크 아답터를 설정하기
    • VBoxManage modifyvm --nicN 네트워크 타입
    • 네트워크 타입 종류
      • 자세한 사항은 https://www.virtualbox.org/manual/ch06.html#networkingmodes 참고
      • none : 네트워크 아답터 없음
      • null : 호스트에 연결하지 않음
      • nat : Network Address Translation 사용 (가장 보편적으로 사용)
      • natnetwork : VirtualBox 4.3부터 등장한 새로운 NAT Service 사용
      • bridged : 브릿지 네트워크 사용, 물리적 머신에 설치된 NIC에 직접 연결
      • intnet : 호스트 혹은 외부에는 노출되지 않는 내부 네트워크 사용
      • hostonly : 물리적 인터페이스를 사용하지 않고 호스트에 가상 네트워크 인터페이스를 생성하여 연결
      • generic : UDP터널이나 VDE(가상 분산 이더넷)에서 사용
    • 네트워크 타입에 따른 HOST, VM, 인터넷 간 통신 가능 여부
      VM -> HOSTHOST-> VMVM <-> VMVM -> InternetInternet -> VM
      Host-only가능가능가능-
      Internal--가능-
      Bridged가능가능가능가능
      NAT가능포트포워딩-가능
      NAT-service가능포트포워딩가능가능
    • CENTOS7_VM의 1번 아답터를 브릿지로 설정하고 호스트의 eth0 인터페이스와 연결하기
      • VBoxManage modifyvm CENTOS7_VM --nic1 bridged --bridgeadapter1 eth0
    • CENTOS7_VM의 1번 아답터는 NAT, 2번 아답터는 브릿지로 호스트의 eth0 과 연결하기
      • VBoxManage modifyvm CENTOS7_VM --nic1 nat -nic2 bridged --bridgeadapter2 eth0
    • CENTOS7_VM의 1번 아답터는 NAT, 2번 아답터는 HostOnly로 연결하기
      - HostOnly는 HostOnly interface 생성이 필요하다
      - 관리자 권한으로 VBoxManage hostonlyif create 실행, 출력되는 아답터명을 기억
      VBoxManage modifyvm CENTOS7_VM --nic1 nat -nic2 hostonly --hostonlyadapter2 "VirtualBox Host-Only Ethernet Adapter #1"
      - VirtualBox Host-Only Ethernet Adapter #1 은 hostonlyif create 의 실행결과로 사용자마다 다를 수 있음

가상 미디어를 VM에 추가하기

  • 새로운 가상 미디어 생성
    • VBoxManage createmedium 미디어타입(disk,dvd,floppy, 필수값) --filename 파일경로 -size 크기(MB) --format(VDI,VMDK, VHD, 기본값 : VDI) --variant (Standard,Fixed,Split2G,Stream,ESX)
    • /hdd_image/CENTOS7_VM_HDD.vdi 에 10기가 용량의 가변 용량 하드디스크 생성
      • VBoxManage createmedium --filename /hdd_image/CENTOS7_VM_HDD.vdi --size 10240 --variant Standard
      • 파라미터 --variant가 Fixed면 고정 용량 (빠르지만 공간 비효율), Standard면 가변 용량(조금 느리지만 공간 효율)
      • VDI와 VHD 포맷의 하드디스크는 modifyvm 명령어로 동적으로 용량을 할당할 수 있다
  • VM의 스토리지 컨트롤러추가, 변경, 삭제
    • 추가 : VBoxManage storagectl 대상VM명 --name 컨트롤러명 --add 버스타입(ide|sata|scsi|floppy|sas|usb|pcie) --controller 컨트롤러타입(LSILogic|LSILogicSAS|BusLogic|IntelAhci|PIIX3|PIIX4|ICH6|I82078|USB|NVMe) --portcount 포트개수(1~30) --hostiocache 호스트IO캐시사용(on|off) --bootable 부팅사용여부(on|off)
    • 이름 변경 : VBoxManage storagectl 대상VM명 --name 컨트롤러명 --rename 변경할이름
    • 삭제 : VBoxManage storagectl 대상VM명 --name 컨트롤러명 --remove
    • CENTOS_7 VM에 부팅 가능한 Serial ATA 컨트롤러를 SATA Controller라는 이름으로 추가
      VBoxManage storagectl --name "SATA Controller" --add sata --bootable on
  • VM의 스토리지 컨트롤러에 미디어 추가, 변경, 삭제하기
    • VBoxManage storageattach VM명 --storagectl 스토리지컨트롤러명 --port 포트번호 --device 디바이스번호 --type 미디어타입 --medium 추가할미디어경로
    • --username --password --passwordfile 은 인증이 필요할 경우 옵션으로 추가 가능
    • 더 많은 옵션에 대해서는 https://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach 참고
    • 위에서 생성한 SATA Controller의 0번 포트에 0번 디바이스로 hdd를 추가
      • VBoxManage storageattach CENTOS7_VM --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium /hdd_image/CENTOS7_VM_HDD.vdi
      • 다른 VM 에서 이미 사용 중인 .vdi 파일만 가져와서 새로운 VM을 생성할 경우 (ex : 초기 환경을 구성한 VM 을 재사용) UUID 가 이미 존재한다는 에러를 발생시킨다. 이 때는 --setuuid "" 파라미터를 추가하여 random uuid를 다시 부여한다.
    • 설치CD 혹은 VirtualBox Guest Addition 이미지가 필요한 경우를 위해 DVD 드라이브 추가하기
      • VBoxManage storagectl CENTOS7_VM --name "IDE Controller" --add ide --bootable off로 IDE컨트롤러 추가
      • VBoxManage storageattach CENTOS7_VM --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium emptydrive으로 IDE Controller에 DVD 드라이브를 빈 미디어 삽입 상태로 추가

VM 켜고 끄기

  • VM 시작하기 (현재 Powered Off 나 Saved 상태인 VM에 대하여 적용 가능)
    • VBoxManage startvm VM명 --type (gui | headless | sdi | separate)
      • gui : 그래픽 유저 인터페이스 구동 (기본값)
      • headless : GUI를 띄우지 않음, 머신에는 --vrde on 옵션을 줄 경우 RDP로 접속 가능
      • sdi : 최소 기능의 간단한 GUI 구동
      • separate 별도 프로세스의 유저 인터페이스로 구동되는 headless VM을 분리가능한 UI로 구동 (실험적 기능)
    • VBoxManager startvm CENTOS7_VM
  • VM 종료하기
    • 종료 신호를 보내고 ACPI POWER OFF 하기
      • VBoxManage controlvm CENTOS7_VM acpipowerbutton
    • 반응 없는 VM을 강제로 종료하기
      • VBoxManage controlvm CENTOS7_VM poweroff

기존에 생성된 VM Template 가져와서 사용하기

  • Open Virtualization Format 을 따르는 OVF, OVA 파일을 사용 가능
  • VBoxManager import 파일경로 (--dry-run : 구동 가능 여부 검사)
  • 템플릿 파일이 사용 가능한지 확인하고 정보 출력하기
    • VBoxManage import /template/CENTOS7_VM_TEMPLATE.ova --dry-run
      • 각 VM은 vsys 파라미터에 번호가 할당되어 출력되며, VM상의 주변기기들은 --unit 에서 할당할 수 있는 번호가 메겨진다. 해당 주변기기들은 VM 구성시 --ignore 로 무시하도록 할 수 있다.
  • 템플릿 파일에서 VM 구성하기
    • VBoxManage import /template/CENTOS7_VM_TEMPLATE.ova --vsys 0 --memory 1024 --cpus 2 --eula accept
      • --dry-run 에서 5: Sound card (appliance expects "ensoniq1371", can change on import) 와 같은 정보가 출력되었다면 VBoxManage import WindowsXp.ovf --vsys 0 --unit 5 --ignore 와 같은 형식으로 VM 구성시 사운드카드는 무시할 수 있다.