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
'우분투리눅스' 카테고리의 다른 글
우분투 방화벽 ufw로 시스템 보호하기 (0) | 2015.08.16 |
---|---|
게이트웨이에서 패킷 제어하기(iptables) (0) | 2015.08.16 |
리눅스 가상 시스템 설치하기 (0) | 2015.08.15 |
우분투 유무선 및 가상 네트워크 설정하기 (0) | 2015.08.15 |
우분투 서버에서 영문 로케일 설정하기 (0) | 2015.08.15 |