QEMU

KANOTYPE WIKI
둘러보기로 이동 검색으로 이동
QEMU
개발자(팀) Fabrice Bellard (최초)
QEMU team
플랫폼 크로스 플랫폼
종류 에뮬레이터
라이센스 GNU GPL 버전 2
홈페이지 공식 홈페이지

QEMU는 오픈소스 가상 PC 에뮬레이터이다.

개요

ARM, x86등 다양한 CPU를 지원하는 가상 PC 에뮬레이터이다. 기본적으로 GUI가 없으며 커맨드 라인을 이용하여 조작한다.

빠른 시작

qemu-img create -q -f qcow2 mydisk.img 4G
4GB 크기의 qcow2형식의 가상 디스크 mydisk.img를 생성한다.
qemu-system-i386 -rtc base=localtime -m 64 -soundhw all -display sdl -smp 2 -cdrom myos.iso -boot d mydisk.img
x86 가상피시를 실행한다: 호스트의 로컬 시간 사용, 메모리 64MB, 사운드 에뮬레이션 활성화, 그래픽 인터페이스로 SDL사용, 가상 CPU 2코어, 시디롬에 myos.iso 마운트, D드라이브로 부팅, 하드디스크에 mydisk.img 마운트.
qemu-img create -f qcow2 -b base.img snapshot.img
base.img을 기반으로 하는 스냅샷 이미지 snapshot.img을 생성한다.

사용법

qemu-system-i386 [options] [disk_image]
disk_image는 IDE 0번 하드디스크에 마운트할 디스크 이미지 파일을 지정한다. 실행하는 QEMU 타겟 시스템에 따라서는 필요없을 수도 있다.

QEMU는 에뮬레이트할 타겟 시스템에 따라 실행파일이 나누어져있다. QEMU의 설치 폴더를 확인해보면 qemu-system-으로 시작하는 실행파일들이 있는데 에뮬레이트 할 시스템에 따라 선택하면 된다. 예를들어, x86_64 시스템을 에뮬레이트 하려면 qemu-system-i386대신에 qemu-system-x86_64를 사용한다.

옵션

options에 지정할 수 있는 옵션들은 다음과 같다.

일반 옵션

-h
도움말을 표시하고 종료한다.
-version
QEMU의 버전을 표시하고 종료한다.
-machine [type=]name[,prop=value[,...]]
에뮬레이트 할 타겟 시스템을 설정한다.「-machine help」를 사용하면 이용가능한 시스템 종류를 알 수 있다. 시스템 프로퍼티는 다음과 같다.
accel=accels1[:accels2[:...]]
가속기를 설정하는 옵션. 타겟 아키텍처에 따라 kvm, xen, tcg를 이용할 수 있다. 기본값은 tcg. 2개 이상의 가속기를 설정할 경우, 첫번째 가속기가 초기화에 실패하면 다음 가속기로 넘어간다.
kernel_irqchip=on|off
이용가능할 경우, in-kernel irgchip 지원의 활성화 여부를 설정한다.
kvm_shadow_mem=size
KVM shadow MMU의 크기를 설정한다.
dump-guest-core=on|off
코어 덤프에 게스트 메모리를 포함시킨다. 기본값은 on.
mem-merge=on|off
memory merge 지원 여부를 설정한다. 호스트가 이를 지원할 경우, VM 인스턴스간의 고유 메모리 페이지 중복을 방지한다(기본값).
-cpu model
CPU모델을 선택한다.「-cpu help」를 사용하면 이용가능한 리스트와 추가 기능을 볼 수 있다.
-smp [cpus=]n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]
n개의 CPU로 SMP 시스템을 시뮬레이트 한다. PC 타겟일 경우 255개까지 CPU를 설정할 수 있다. Sparc32 타겟의 경우 리눅스가 4개까지 CPU를 제한한다.
-numa opts
멀티 노드 NUMA 시스템을 시뮬레이트 한다. mem과 cpus가 생략되면 리소스를 균등하게 분배한다.
-add-fd fd=fd,set=set[,opaque=opaque]
fd셋트에 파일 디스크립터를 추가한다. 사용가능한 옵션은 다음과 같다.
fd=fd
fd셋트에 추가될 파일 디스크립터를 정의한다. stdin, stdout, stderr은 이용할 수 없다.
set=set
fd셋트의 ID를 정의한다.
opaque=opaque
파일 디스크립터를 정의하는 문자열을 설정한다.
파일 디스크립터에 미리 열어놓은 파일로부터 이미지 파일을 불러올 수 있다.
qemu-system-i386
-add-fd fd=3,set=2,opaque="rdwr:/path/to/file"
-add-fd fd=4,set=2,opaque="rdonly:/path/to/file"
-drive file=/dev/fdset/2,index=0,media=disk
-set group.id.arg=value
형식 group의 항목 id의 arg 파라메터를 설정한다.
-global driver.prop=value
드라이버 프로퍼티의 기본값을 설정한다.
사용예) qemu-system-i386 -global ide-drive.physical_block_size=4096 -drive file=file,if=ide,index=0,media=disk
특히 머신 모델에 따라 자동적으로 만들어지는 장치들을 위해 사용할 수 있다. 자동적으로 생성되지 않는 장치들은「-device」옵션을 사용한다.
-boot [order=drives][,once=drives][,menu=on|off][,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_timeout][,strict=on|off]
부트 순서와 드라이브를 설정한다. 드라이브명은 타겟 아키텍처에 따라 달라진다. 타겟이 x86 PC일 경우 : a (플로피 1), b (플로피 2), c (첫번째 하드디스크), d (첫번째 시디롬), n-p (네트워크 어댑터 1-4를 통한 Etherboot), 하드디스크를 통한 부팅이 기본값이다. 부팅 순서를 지정할 경우 once로 지정하면 첫번째 부팅시에만 적용된다.
menu=on|off
바이오스가 부팅 메뉴를 표시할 수 있다. 기본값은 off.
splash=sp_name
스플래시 이미지(로고)를 표시할 수 있다(menu=on일 경우). 현재 x86시스템의 Seabios가 지원하고 있다. 단 이미지 파일은 jpeg나 24BPP 표맷의 bmp 파일로 한정되며 이미지 크기는 320x240, 640x480, 800x640을 권장한다.
reboot-timeout=rb_timeout
rb_timeout이 지정되어 있을 경우 부팅에 실패하면 지정된 시간만큼 멈춘 후 다시 재부팅된다. rb_timeout이 -1이라면 재부팅하지 않는다. 기본값은 -1. 현재 Seabios에서 이용가능.
strict=on|off
펌웨어나 바이오스가 지원할 경우 strict boot를 사용할 수 있다. 이 옵션은 bootindex옵션에 의해 부트 순서가 바뀌었을때만 유효하다. 기본값은 off.
사용예)
# 네트워크 부트 시도후 안되면 하드디스크로부터 부팅.
qemu-system-i386 -boot order=nc
# 첫 부팅때 시디롬 부팅 시도후 재부팅 된 후에는 기본값으로 부팅.
qemu-system-i386 -boot once=d
# 스플래시 이미지를 5초간 표시하며 부팅.
qemu-system-i386 -boot menu=on,splash=/root/boot.bmp,splash-time=5000
메모) 현재「-boot drives」로도 부팅 옵션이 설정가능하나 이는 구버전과의 호환성을 위한 것으로 추후 사용불가능 할 수 있으므로 사용하지 않는것을 권장한다.
-m megs
가상 RAM 크기를 메가바이트 단위로 설정한다. 기본값은 128MB. 접미사로 M 혹은 G를 사용할 수 있다.
-mem-path path
path에 임시로 생성된 파일로부터 게스트 RAM을 할당한다.
-mem-prealloc
-mem-path를 사용할 경우 메모리를 사전할당 한다.
-k language
키보드 레이아웃을 설정한다. PC의 키코드를 얻기 힘들때만 필요하다(맥이나 VNC 디스플레이를 이용하는 X11서버 등). 리눅스나 윈도우 호스트의 경우에는 거의 사용할 일이 없다. 이용가능 레이아웃은 다음과 같다.
ar de-ch es fo fr-ca hu ja mk no pt-br sv
da en-gb et fr fr-ch is lt nl pl ru th
de en-us fi fr-be hr it lv nl-be pt sl tr
기본값은 en-us.
-audio-help
오디오 서브시스템의 도움말을 표시한다. (드라이버 목록, 조절가능한 파라메터 등)
-audio [driver=]driver,model=value[,prop[=value][,...]]
-soundhw대신에 7.1부터 사용가능한 옵션. -audiodev옵션의 간략판. 지정한 드라이버와 모델로 오디오 시스템을 활성화 한다.
사용예)
qemu-system-i386 -audio sdl,model=sb16 disk.img
qemu-system-i386 -audio driver=help,model=help
-balloon none
balloon device를 비활성화 한다. Disable balloon device.
-balloon virtio[,addr=addr]
virtio balloon device를 활성화 한다(기본값). PCI 주소(addr)를 옵션으로 설정할 수 있다.
-device driver[,prop[=value][,...]]
장치 드라이버를 추가한다. prop=value로 드라이버 프로퍼티를 설정한다. 프로퍼티는 드라이브에 따라 달라진다. 사용가능한 드라이버와 프로퍼티 목록은「-device help」「-device driver help」로 확인할 수 있다.
-name name
게스트의 이름을 설정한다. 이름은 SDL 윈도우 상단에 표시된다. VNC서버를 위해서도 사용할 수 있다. 또한 리눅스의 최상위 프로세스 명도 설정할 수 있다. 리눅스에서 디버깅을 위해 개별 쓰레드의 이름을 설정할 수도 있다.
-uuid uuid
시스템의 UUID를 설정한다.

블록 장치 옵션

-fda file
-fdb file
플로피 디스크 0/1의 이미지 파일을 설정한다. (디스크 이미지 참고)
「/dev/fd0」으로 호스트의 플로피 드라이브를 사용할 수도 있다. (호스트 드라이브 참고)
-hda file
-hdb file
-hdc file
-hdd file
하디드스크 0, 1, 2, 3의 이미지 파일을 설정한다. (디스크 이미지 참고)
-cdrom file
시디 이미지 파일을 시디롬 장치로 사용한다.「-hdc」옵션과는 같이 사용할 수 없다. 파일명 대신에「/dev/cdrom」를 사용하면 호스트의 실제 시디롬을 사용한다.
사용예) qemu -cdrom mycd.iso

디버그 / 상급자 옵션

-monitor dev
QEMU 실행중 디스크 교체, 정보확인 등 다양한 작업을 할 수 있는 모니터 콘솔을 표시할 수 있다.
사용예) qemu -monitor telnet:127.0.0.1:1234,server,nowait (텔넷 클라이언트를 이용하여「telnet o 127.0.0.1 1024」로 QEMU 모니터에 접속할 수 있게 된다)

단축키

Ctrl+Alt+G
마우스 그랩 전환
Ctrl+Alt+F
전체화면 전환
Ctrl+Alt+"+"
화면크기 확대
Ctrl+Alt+"-"
화면크기 축소
Ctrl+Alt+U
원래 화면 크기로 복원
Ctrl+Alt+0(숫자)
창을 화면 크기로 맞춤
Ctrl+Alt+1, Ctrl+Alt+2, Ctrl+Alt+3
화면 전환. 순서대로 시스템 화면, 모니터 화면, 시리얼 포트.
Ctrl+Alt+Q
QEMU종료

모니터

-monitor 옵션으로 지정한 모니터 콘솔에서 사용가능한 명령어. 기본값으로는 qemu상에서 Ctrl+Alt+2로 모니터 콘솔 표시, CTRL+ALT+1로 모니터 콘솔 비표시를 전환할 수 있다.

info block
블록 장치들을 표시한다. 디스켓, 시디롬, 하드디스크 등이 포함된다.
change dev setting
장치를 교체한다.
사용예) change floppy0 disk2.img
eject [-f] dev
장치를 제거한다.
-f
장치가 사용중이라도 강제로 제거한다.
info snapshots
스냅샷 리스트를 표시한다.
savevm tag
스냅샷을 만든다.
loadvm tag
현재상태를 지정한 스냅샷으로 되돌린다.
delvm tag
스냅샷을 삭제한다.

디스크 이미지

qemu-img 사용법

qemu-img command [command options]
사용예) qemu-img create -q -f qcow2 mydisk.img 4G

다음과 같은 command를 이용할 수 있다.

check [-q] [-f fmt] [--output=ofmt] [-r [leaks | all]] filename
create [-q] [-f fmt] [-o options] filename [size]
commit [-q] [-f fmt] [-t cache] filename
compare [-f fmt] [-F fmt] [-p] [-q] [-s] filename1 filename2
convert [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-O output_fmt] [-o options] [-s snapshot_id_or_name] [-l snapshot_param] [-S sparse_size] filename [filename2 [...]] output_filename
info [-f fmt] [--output=ofmt] [--backing-chain] filename
map [-f fmt] [--output=ofmt] filename
snapshot [-q] [-l | -a snapshot | -c snapshot | -d snapshot] filename
rebase [-q] [-f fmt] [-t cache] [-p] [-u] -b backing_file [-F backing_fmt] filename
resize [-q] filename [+ | -]size
update [-f fmt] filename [attr1=val1 attr2=val2 ...]")
amend [-q] [-f fmt] -o options filename

command parameter는 다음과 같다.

filename
디스크 이미지 파일명.
fmt
디스크 이미지 포맷. 대부분의 경우 자동적으로 추측한다. 지원되는 포맷을 확인하려면 디스크 이미지와 파일 포맷을 참고.
–backing-chain
will enumerate information about backing files in a disk image chain. Refer below for further description.
size
디스크 이미지 크기. 접두사 K, M, G, T를 붙여서 KB, MB, GB ,TB로 크기를 바꿀 수 있다. 접두사를 생략하면 기본단위는 바이트.
output_filename
출력 디스크 이미지 파일명.
output_fmt
출력 디스크 이미지 포맷.
options
콤마로 구분되는 name=valule 형식의 옵션 리스트.「-o ?」를 사용해서 지원되는 옵션 형식과 설명을 확인할 수 있다.
snapshot_param
내부 스냅샷을 이한 파라메터. 형식은 'snapshot.id=[ID],snapshot.name=[NAME]' or '[ID_OR_NAME]'
snapshot_id_or_name
폐기된 옵션. 대신에 snapshot_param를 사용할 것.
-c
타겟 이미지 파일을 압축한다. (qcow 포맷 한정)
-h
도움말과 지원되는 형식을 표시한다.
-p
진행 상태 바를 표시한다. (compare, convert, rebase 커맨드 한정) -p 옵션을 지원하지 않는 커맨드의 경우, 진행상황은 프로세스가 SIGUSR1 신호를 받았을 때 보고된다.
-q
침묵 모드. 오류를 제외한 다른 메세지들을 출력하지 않는다. -q와 -p를 동시에 사용하면 진행 상태 바가 표시되지 않는다.;
-S size
밀도가 낮은 이미지 파일을 다룰때 연속된 바이트를 0으로 채울 크기를 설정한다. 접두사로 K를 이용가능.(KB) This value is rounded down to the nearest 512 bytes.
-t cache
출력 파일에 사용할 캐시 모드를 설정한다.

디스크 이미지와 파일 포맷

포맷명 설명
raw (기본값) raw 포맷은 단순한 바이너리 디스크 이미지 파일이다. 파일시스템이 sparse files를 지원하지 않는다면 디스크 이미지 크기만큼 하드디스크 용량을 차지한다.
cloop Compressed Loop 포맷. 주로 Knoppix와 그와 유사한 라이브CD 이미지들을 위해 사용된다.
cow copy-on-write 포맷. 구버전과의 호환성을 위해 존재하며 Windows용 QEMU에서는 사용할 수 없다.
qcow QEMU의 구버전 copy-on-write 포맷. 역시 구버전과의 호환성을 위해 존재하며 qcow2로 대체되었다.
qcow2 멀티플 스냅샷, 용량 절약, AES 암호화, zlib압축을 비롯한 다양한 기능을 지원하는 QEMU의 copy-on-write 포맷. 특별한 이유가 아니라면 이 포맷을 사용하자.
vmdk VMware 3 & 4, 6에서 사용하는 이미지 포맷. VMWare와 데이터 교환을 위해 사용한다.
vdi VirtualBox 1.1 호환 이미지 포맷. VirtualBox와 데이터 교환을 위해 사용한다.

호스트 드라이브

Windows
CD

추천되는 형식은 드라이브 문자명이다(예를들면「d:」). 또한「\\.\d:」도 지원한다.「/dev/cdrom」은 첫번째 시디롬을 사용하는 에일리어스 이다. 현재 제거가능한 미디어 장치에 대한 코드는 지원되지 않는다. 때문에 미디어 장치를 변경하거나 제거할 때는 모니터에서 change와 eject 명령을 이용한다.

하드디스크

하드디스크는 다음과 같은 문법으로 이용가능하다:「\\.\PhysicalDriveN」(N은 드라이브 번호이며 0일경우 첫번째 하드디스크)
「/dev/hda」는 첫번째 하드디스크를 사용하는 에일리어스이다.(「\\.\PhysicalDrive0」를 의미)

주의: 당신이 정확한 동작을 알수 없다면, 하드디스크 데이터의 파손을 막기 위해 READ-ONLY 모드로 설정하는것을 추천한다. 혹은「-snapshot」명령으로 임시 파일에 변경사항이 저장되도록 하는것도 좋을 것이다.

가상 FAT 디스크 이미지

QEMU는 디렉토리 트리로부터 가상 FAT 디스크 이미지 파일을 생성할 수 있다. 이를 사용하기 위해서는 다음과 같이 입력한다

qemu-system-i386 linux.img -hdb fat:/my_directory

이후 /my_directory 폴더에 있는 모든 파일에 접근할 수 있다. 디스크 이미지 복사나 SAMBA, NFS등 이용하지 않아도 되기 때문에 편리하다. 기본값으로 read-only로 설정된다.

플로피 디스크를 에뮬레이트 하기 위해서는「floppy:」를 이용한다.

qemu-system-i386 linux.img -fda fat:floppy:/my_directory

읽기/쓰기는 현재 테스트 목적으로 이용할 수 있다.(베타)「rw:」를 추가한다.

qemu-system-i386 linux.img -fda fat:floppy:rw:/my_directory

해서는 안되는 것:

  • non-ASCII 파일명을 사용
  • 「rw:」옵션과「-spanshot」을 동시에 사용
  • 게스트 시스템이 파일에 접근중일때 호스트에서 파일에 쓰기작업을 하는것
  • loadvm과 동시에 사용

외부 링크

주석