이전 글에서는 KVM 하이퍼바이저 설치 방법과 가상 머신 생성 과정을 다루었습니다. 하지만 한 편의 글만으로는 KVM 가상 머신 관리 전반을 자세히 설명하기 어려웠습니다. 이번 글에서는 virsh 명령어를 사용해 명령줄(CLI) 환경에서 가상 머신을 관리하는 방법을 소개합니다. VM 설정 변경, 가상 장치 추가, 그리고 리눅스에서 KVM 가상 머신을 제어하는 데 필요한 핵심 명령어들을 하나씩 살펴보겠습니다.
Virsh(Virtual Shell) 명령어로 KVM 가상 머신 관리하기
virsh는 libvirt API를 기반으로 하는 도구로, 리눅스 콘솔에서 KVM 가상 머신을 손쉽게 관리할 수 있게 해줍니다. 먼저 등록된 가상 머신 목록을 확인하고, 시작·중지·삭제하는 기본적인 방법부터 알아보겠습니다.
# virsh list — 현재 실행 중인 가상 머신 목록 표시
# virsh list --all — 종료된 가상 머신을 포함한 등록된 모든 가상 머신 목록 표시

위 스크린샷에서 볼 수 있듯이, 첫 번째 명령어의 경우 종료된 가상 머신은 목록에 나타나지 않습니다.
가상 머신 전원 제어 명령어
# virsh shutdown <vm_name> — 가상 머신 정상 종료
# virsh start <vm_name> — 가상 머신 시작
# virsh suspend <vm_name> — 가상 머신 일시 중지
# virsh resume <vm_name> — 일시 중지된 가상 머신 재개
# virsh reboot <vm_name> — 가상 머신 재부팅
# virsh destroy <vm_name> — 강제 즉시 종료(비정상 종료). 게스트가 응답하지 않을 때 사용하며, 데이터 손실 위험이 있으므로 신중하게 사용해야 합니다.
# virsh undefine <vm_name> — 가상 머신 등록 해제 및 스토리지 볼륨 삭제
가상 머신 정보 조회 명령어
# virsh vcpuinfo <vm_name> — 가상 머신의 vCPU 정보 표시

그 외에도 가상 머신에 대한 다양한 정보를 확인할 수 있는 명령어들이 있습니다.
# virsh domid <vm_name> — 가상 머신 ID 확인
# virsh domuuid <vm_name> — 가상 머신 UUID 확인
# virsh dominfo <vm_name> — 가상 머신 상세 정보 표시
# virsh domstate <vm_name> — 가상 머신 상태 확인

# virsh dumpxml <vm_name> — 가상 머신 설정 파일을 XML 형식으로 출력
KVM 가상 머신에 메모리와 vCPU 추가하는 방법
KVM에서는 가상 머신에 할당된 CPU 또는 메모리 리소스를 두 가지 방법으로 조정할 수 있습니다.
- virsh 명령어 사용
- 가상 머신 설정 XML 파일 직접 수정
virsh 명령어로 vCPU 추가하기
가상 머신이 실행 중이라면 먼저 종료합니다.
# virsh shutdown test-centos
Domain test-centos is being shutdown
그다음 virsh로 가상 CPU(vCPU) 수를 6개로 변경합니다.
# virsh setvcpus <vm_name> <vcpu_count> --config
예를 들면 다음과 같습니다.
# virsh setvcpus test-centos 6 --config
명령어 실행 후 다음과 같은 오류가 발생할 수 있습니다.
error: invalid argument: requested vcpus is greater than max allowable vcpus for the persistent domain: 6 > 4
코어 수는 최대 허용치를 초과해 설정할 수 없습니다. 최대 허용 vCPU 수를 늘리려면 아래 명령어를 먼저 실행합니다.
# virsh setvcpus test-centos 6 --config --maximum
그런 다음 앞서 실행한 명령어를 다시 입력하고 가상 머신을 시작하면 됩니다.

설정이 정상적으로 반영되었는지 확인해 보겠습니다.
# virsh dumpxml test-centos
<domain type='kvm'> <name>test-centos</name> <uuid>3b223aa2-b322-1ff1-ab23-c1223abc1f01</uuid> <memory unit='KiB'>2097152</memory> <currentMemory unit='KiB'>2097152</currentMemory> <vcpu placement='static'>6</vcpu>
virsh 명령어로 메모리(RAM) 추가하기
같은 방식으로 가상 머신에 RAM을 추가할 수 있습니다.
# virsh setmem <vm_name> <memsize> --config
예를 들면 다음과 같습니다.
# virsh setmem test-centos 4G --config
역시 같은 이유로 오류가 발생할 수 있습니다.
error: invalid argument: cannot set memory higher than max memory.
먼저 최대 메모리 용량을 늘려줍니다.
# virsh setmaxmem test-centos 6G --config
그런 다음 가상 머신에 메모리를 추가할 수 있습니다. 변경 작업 시에는 반드시 가상 머신을 종료한 뒤 진행하고, 완료 후 다시 시작하세요.
XML 설정 파일로 리소스 변경하기
XML 설정 파일을 통해서도 KVM 가상 머신의 리소스를 변경할 수 있습니다. 파일을 온라인에서 바로 편집하거나, 백업 후 수정한 뒤 가상 머신에 적용하는 방식 모두 가능합니다.
먼저 온라인에서 XML 파일을 편집하는 방법입니다.
# virsh edit <vm_name>
열리는 vi 편집기에서 Insert 키를 눌러 원하는 내용을 수정합니다. 다음 블록을 찾아 변경하세요.
<domain type='kvm'> <name>test-centos</name> <uuid>3b223aa2-b322-1ff1-ab23-c1223abc1f01</uuid> <memory unit='KiB'>6291456</memory> <currentMemory unit='KiB'>4194304</currentMemory> <vcpu placement='static'>6</vcpu> <os>
예를 들어 가상 머신에 CPU 코어 2개와 메모리 1GB를 할당한다고 가정해 보겠습니다.

주의할 점은 메모리 크기가 킬로바이트(KiB) 단위로 표시된다는 것입니다. 1GB는 1048576KiB입니다.
파일을 저장한 뒤 가상 머신을 재부팅합니다.
# virsh reboot <vm_name>
XML 파일을 백업해서 수정하는 방법도 있습니다.
# virsh dumpxml <vm_name> > /root/test.xml
# vi /root/test.xml
원하는 설정을 변경하고 파일을 저장한 뒤, 가상 머신에 적용합니다.
# virsh shutdown test-centos
Domain test-centos is being shutdown
# virsh define /root/test.xml
Domain test-centos defined from /root/test.xml
# virsh start test-centos
Domain test-centos started
참고로, 온라인 상태에서 VM 설정 파일을 변경했을 때 재부팅 후 리소스 할당이 초기화되는 경우가 간혹 있습니다. 이럴 때는 가상 머신을 완전히 종료한 후 다시 시작하면 변경 사항이 정상적으로 유지됩니다.
기존 KVM 가상 머신에 디스크 추가하기
앞선 글에서 KVM 가상 머신의 디스크 크기를 확장하거나 축소하는 방법을 다루었지만, 추가 디스크를 장착하는 방법은 소개하지 않았습니다. 이번에는 새로운 디스크를 추가하는 절차를 알아보겠습니다.
먼저 가상 머신용 새 디스크 파일을 생성합니다.
# qemu-img create -f qcow2 -o size=20G /vz/disk/test.img
qcow2 대신 원하는 디스크 포맷을 사용할 수 있으며, 파일 경로도 지정해야 합니다. 여기서는 디스크 스토리지가 /vz/disk/에 위치한다고 가정합니다.
그다음 가상 디스크 장치를 가상 머신에 연결합니다.
# virsh attach-disk <vm_name> /vz/disk/test.img vdb --type disk --persistent
가상 머신을 종료했다가 다시 시작한 뒤 결과를 확인합니다.
# virsh shutdown test-centos
Domain test-centos is being shutdown
# virsh start test-centos
Domain test-centos started
# virsh dumpxml test-centos
<domain type='kvm' id='14'> <name>test-centos</name> <uuid>3b223aa2-b322-1ff1-ab23-c1223abc1f01</uuid> <memory unit='KiB'>2097152</memory> <currentMemory unit='KiB'>2097152</currentMemory> <vcpu placement='static'>6</vcpu> <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='cdrom'/> <boot dev='hd'/> <bootmenu enable='yes'/> </os> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/vz/disk/test.img'/> <backingStore/> <target dev='vdb' bus='virtio'/> <alias name='virtio-disk1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> </disk>
출력 결과에서 확인할 수 있듯이, 새 디스크(vdb)가 성공적으로 추가되었습니다.
KVM 가상 머신에 두 번째 NIC(네트워크 인터페이스) 추가하기
이번에는 가상 머신에 네트워크 인터페이스를 하나 더 추가해 보겠습니다. 먼저 리눅스 호스트의 네트워크 인터페이스 현황을 확인합니다.
# brctl show

KVM 호스트에 네트워크 인터페이스가 하나인 가상 머신이 있다고 가정하고, br0 브리지에 두 번째 가상 네트워크 인터페이스를 추가해 보겠습니다. 다음 명령어를 순서대로 실행합니다.
# virsh shutdown test-centos
# virsh attach-interface test-centos --type bridge --source br0 --persistent
# virsh start test-centos
가상 머신에 네트워크 인터페이스가 하나 더 생겼는지 확인합니다.

<interface type='bridge'> <mac address='52:54:00:7e:c1:9f'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <interface type='bridge'> <mac address='52:54:00:2f:23:79'/> <source bridge='br0'/> <model type='rtl8139'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/> </interface>
네트워크 설정 역시 XML 파일을 통해 직접 변경할 수 있습니다.
# virsh edit test-centos
첫 번째 네트워크 인터페이스 블록 뒤에 다음 줄을 추가합니다.
<interface type='bridge'> <source bridge='br0'/> </interface>
파일을 저장하고 가상 머신을 시작하면, MAC 주소 등 나머지 설정은 KVM이 자동으로 채워 넣습니다.
지금까지 리눅스 서버 콘솔에서 KVM 가상 머신을 관리할 때 필요한 핵심 내용을 살펴보았습니다. 다음 글에서는 virt-manager GUI를 통해 가상 머신을 관리하는 방법을 소개하겠습니다.