본문 바로가기

우분투리눅스

텍스트 환경에서 가상 머신 관리하기

libvirt : kvm을 비롯하여 다양한 하이퍼바이저를 통합적으로 제어하기 위해 만들어진 오픈소스 API. libvirt 로 제작된 도구들을 사용하면 가상 머신 관리자 없이 텍스트 환경에서도 가상 시스템을 제어할 수 있다.

 

 

[ virt-install 로 게스트 생성하기 ]

 

텍스트 환경에서 게스트를 생성할 수 있는 여러 방법이 있다. 여기에서는 virtinst 패키지에 들어있는 virt-install 스크립트를 이용해 게스트를 추가해보겠다.

 

virtinst 와 함께 virt-viewer 를 설치.

virt-viewer : qemu가 에뮬레이트하는 게스트에 접속하여 화면에 표시해주는 도구

 

# sudo apt-get install virtinst virt-viewer

 

1. virt-install 로 게스트를 생성할 때는 게스트의 이미지 파일 경로를 직접 지정할 수 있다. 사용자 홈 디렉터리에 virtual_machines 라는 디렉터리를 만들어서 관리하도록 하자.

 

# mkdir virtual_machines

 

2. virt-install 스크립트를 이용해서 우분투 서버를 설치

 

# sudo virt-install --name=guest \

> --ram=1024 --os-type=linux --os-variant=ubuntutrusty \

> --hvm -connect=qemu:///system --network network:default \

> --cdrom=/home/사용자명/리눅스설치파일.iso \

> --disk path=/home/사용자명/virtual_machines/게스트명.img,size=10

 

옵션

설명 

name 

 게스트 이름을 입력한다.

ram 

 게스트에 할당할 메모리 용량을 결정

os-type 

 게스트 운영체제의 종류를 입력

os-variant 

 게스트 운영체제의 정확한 명칭을 입력. 우분투 14.04는 ubuntutrusty 로 정의되어 있다.

hvm 

 게스트가 전가상 기술(Full Virtualization)을 사용한다는 의미

connect 

 설치 과정에서 virt-viewer로 qemu가 에뮬레이트하는 시스템에 접속. 'qemu:///system' 에서 '/' 가 셋이므로 오타에 주의

network 

 호스트 또는 외부와 연결하기 위한 가상 네트워크를 지정. 기본값인 default 를 사용.

cdrom 

 우분투 설치파일의 경로를 지정

disk path 

 게스트 이미지 파일의 저장 경로를 지정. size는 게스트 이미지의 크기를 기가바이트 단위로 나타낸다.

 

 

[ virsh 로 가상 시스템 관리하기 ]

 

virsh : libvirt 로 만들어진 가상 시스템 관리 셸

 

virsh list 또는 virsh list --all

활성화된 게스트 목록과 상태를 화면에 보여준다. 옵션 --all 을 추가 입력하면 시스템에 설치된 모든 게스트 목록과 상태를 보여준다.

 

virsh start 게스트명

부팅할 게스트 이름을 옵션으로 붙여서 게스트를 실행한다.

list 명령으로 확인해보면 게스트가 실행 상태인 것을 확인할 수 있다.

 

virt-viewer : 실행 중인 게스트에 접속

 

# virt-viewer -c qemu:///system 게스트iD 또는 게스트명 &

  게스트 ID 또는 게스트 명은 virsh list --all 명령어로 확인

 

ex) virt-viewer -c qemu:///system 1 &

ex) virt-viewer -c qemu:///system guest &

 

-c 스위치로 qemu가 에뮬레이트하는 로컬 시스템의 게스트에 접속하고 마지막에 접속 대상 게스트 ID나 게스트 이름을 입력. 명령 마지막에 & 기호를 붙인 이유는 virt-viewer 를 실행시켜 놓고 터미널을 사용할 수 있는 상태로 남겨두기 위해서이다. virt-viewer 를 백그라운드에서 실행시킨다.

 

virsh shutdown 게스트ID 또는 게스트명

게스트를 종료한다.

 

※ 호스트에서 virsh 로 shutdown 명령이나 reboot 명령을 입력했는데 게스트가 반응이 없다면 게스트에 전원 관리 패키지인 acpid 를 설치해야 한다.

 

# sudo apt-get install acpid

 

virsh reboot 게스트ID 또는 게스트명

게스트를 재부팅한다.

 

virsh destroy 게스트ID 또는 게스트명

게스트를 강제종료한다.

 

virsh save [게스트] [파일명]

VMware 같은 다른 가상 시스템에서 스냅샷이라고 부르는 기능으로 게스트 상태를 저장하는 명령

 

ex) # virsh save virtual_machine virtual_machine_150815

상태가 저장된 이후 게스트는 자동종료된다.

 

※ 하드디스크 제어기로 SATA 버스를 사용하면 스냅샷을 저장하는 과정에서 오류가 발생할 수 있는데 이러한 버그를 해결하려면 SATA 대신 SCSI 버스를 선택

 

virsh restore [파일명]

게스트를 복원하는 명령어

 

ex) # virsh restore virtual_machine_150815

 

virsh undefine [게스트명]

게스트를 삭제하는 명령어로 게스트가 종료된 상태에서 입력해야 됨. 가상 시스템 하나가 완전히 사라지므로 이 명령을 내릴 때는 매우 조심해야 함

 

ex) # virsh undefine virtual_machine

 

가상 머신 관리자로 생성한 게스트를 virsh undefine 으로 삭제한 다음에 /etc/libvirt/qemu 디렉터리의 게스트 설정 파일은 삭제되지만 /var/lib/libvirt/images 디렉터리의 가상 디스크 이미지는 그대로 남는다.

가상 디스크 이미지까지 삭제해야 게스트를 깨끗하게 제거할 수 있다.

 

ex) # sudo rm /var/lib/libvirt/images/virtual_machine.img

 

/var/lib/libvirt/images 디렉터리는 virt-manager 라는 그래픽 가상 머신 관리자로 게스트를 생성했을 경우 기본 가상디스크 디렉터리 경로이다.

텍스트환경에서 게스트를 생성하는 명령어인 virt install 의 경우에는 임의의 디렉터리 경로를 직접 지정해서 사용할 수 있다.

 

virsh edit [게스트명]

게스트의 환경 설정파일 수정

 

virsh edit 으로 게스트의 환경 설정 내용을 수정하면 실제 환경 설정 파일 '/etc/libvirt/qemu/[게스트].xml' 을 수정하게 된다.

 

virsh edit 명령으로 xml 파일을 수정하고 나면 libvirt-bin 서비스를 재시작 해야 변경된 환경 설정 내용이 적용된다.

 

# sudo service libvirt-bin restart

 

 

[ 게스트에 하드디스크 추가하기 ]

 

1. 호스트에서 dd명령으로 10GB의 이미지를 생성해보자.

 

# dd if=/dev/zero of=virtual_machines/virtual_machine-2.img bs=1M count=10240

 

dd는 파일을 변환해서 복사하는 명령으로 0을 반환하는 가상의 장치 /dev/zero(if=/dev/zero)를 1MB(bs=1M)씩 10240번(count=10240) 변환하여 'virtual_machine-2.img' 라는 이미지 파일로 복사(of=virtual_machines/virtual_machine-2.img)한다.

 

2. 생성한 하드디스크 이미지의 소유권을 root로, 접근권한을 755로 조정

 

# cd virtual_machines

# sudo chown root:root virtual_machine-2.img

# sudo chmod 755 virtual_machine-2.img

 

3. virsh edit 명령으로 게스트의 환경 설정을 수정

 

# virsh edit [게스트명]

시스템에 설치된 하드디스크 정보 <disk type='file' device='disk'> ~ </disk>를 복사해서 바로 아래 붙인 다음 하드디스크 <source file>에서 이미지의 파일 경로를 수정한다. 시스템이 시작하면서 SCSI 방식의 하드디스크 sdb로 인식하도록 <target>을 수정한다.

 

붙여 넣은 행에서 <address> 행은 삭제해야 한다.

 

.....

<devices>

....

<disk type='file' device='disk'>

<driver name='qemu' type='raw' />

<source file='/home/사용자명/virtual_machines/virtual_machine-2.img' />

<target dev='sdb' bus='scsi' />

<address type='driver' ~~~~~~ >    address로 시작하는 부분은 삭제

</disk>

......

 

4. virsh edit 명령으로 제대로 수정되었는지 다시한번 확인 후 libvirt-bin 서비스를 재시작한다.

 

# sudo service libvirt-bin restart

 

5. 게스트를 시작하여 디스크가 추가되었는지 확인한다.

 

# ls -l /dev/sd*

 

 

[ virt-clone 으로 게스트 복제하기 ]

 

1. virt-clone 명령으로 게스트 복제

 

virt-clone을 이용하면 동일한 게스트를 다른 이름으로 복제할 수 있다.

virt-clone 역시 virtinstall 패키지에 포함되어 있는 스크립트이다.

 

사용법 : virt-clone --original [복사할 원본] --name [생성대상] --file [경로]

 

original : 복사할 원본

name : 생성할 대상을 입력

file : 복사 후 생성된 게스트가 사용할 가상 디스크 이미지 경로를 지정

 

# sudo virt-clone --original guest \

> --name clone \

> --file /home/yunmin/virtual_machines/clone.img

 

 

2. 게스트 복제가 완료되면 virsh list 로 확인

 

# virsh list --all

 

게스트를 복제한 다음 호스트 이름을 수정하거나 IP 주소 정보를 변경해야 한다. 또한 virt-clone으로 복제한 게스트는 네트워크 인터페이스의 하드웨어 주소(mac address)가 그대로 복사되지 않고 새로운 값을 생성해서 적용한다는 점이 중요핟.

 

 

3. diff 명령으로 파일비교하기

 

diff 명령으로 복제한 게스트 환경 설정 파일을 비교해보면 게스트 이름 name과 고유번호인 uuid, 가상 디스크 이미지 파일 경로 뿐 아니라 하드웨어 주소도 자동적으로 변경되어 있는 것을 알 수 있다.

 

형식 : diff [원본파일] [대상파일] 

 

ex)

# diff /etc/libvirt/qemu/guest.xml /etc/libvirt/qemu/clone.xml

 

 

4. 복제된 게스트가 정상적으로 실행되는지 virsh start 명령으로 확인한다.

 

# virsh start clone

 

5. 네트워크 정보 중에서 호스트 이름을 변경한다.

 

# sudo vi /etc/hostname

 

6. 호스트 이름 변경 후 시스템을 다시 시작

 

# sudo reboot