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
- qemu-system-i386
- -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과 동시에 사용
외부 링크
- (영어) 공식 홈페이지