본문 바로가기

Linux

[Linux] QEMU 가상머신에 OS 설치하기

앞으로 티스토리 대신 blog.stackframe.dev에서 블로깅을 합니다. 이 블로그는 남겨 둘 예정입니다.

가상머신 QEMU를 설치하는 글에 이어서 운영체제를 설치하는 방법을 설명하겠습니다.

 

리눅스에 가상머신 설치하기 [QEMU]

리눅스를 메인으로 사용하다보면 윈도우즈나 다른 리눅스 배포판을 꼭 사용해야할 때가 생깁니다. 공인인증서라던가, hwp라던가, 호환성 검사라던가... 듀얼 부팅을 설정해뒀다면 리부팅하여 OS 변경할 수 있지만..

stackframe.tistory.com

리눅스에 가상머신 설치하기 글을 따라하셨다면 QEMU가 설치되어 있을겁니다.

이제 가상머신에 OS를 설치해 볼 시간입니다.

 

먼저 사용할 운영체제의 설치 ISO를 다운받습니다. 대다수의 사람들이 리눅스에서 가상머신을 돌린다면 윈도우즈이기 때문에 저는 Windows 10을 설치해 보겠습니다. Windows 10의 설치 ISO는 이 링크에서 다운받을 수 있습니다. https://www.microsoft.com/ko-kr/software-download/windows10ISO

 

Windows 10 디스크 이미지 다운로드(ISO 파일)

요청의 유효성을 검사하는 중입니다. 이 작업은 몇 분 정도 걸릴 수 있습니다. 페이지를 새로 고치거나 뒤로 이동하지 마세요. 그러면 요청이 취소됩니다.

www.microsoft.com

다운받는 동안 OS가 설치될 공간을 할당합니다. QEMU를 잘 설치하였다면 qemu-img란 명령이 추가되었을 겁니다. 이 명령은 QEMU에서 사용할 저장 공간을 할당하거나 조절할 수 있는 명령입니다.

공간 할당은 아래처럼 실행하면 간단히 생성가능합니다.

$ qemu-img create windows.raw 20G

이 명령은 20GiB 크기의 windows.raw 파일을 생성하는 명령입니다. 마지막 인자인 크기는 가상머신으로 돌릴 OS에 할당할 적당한 크기를 적어주시면 됩니다. windows.raw 파일은 앞으로 가상머신 OS가 해당 크기의 하드디스크인 것처럼 사용하게 됩니다.

//사실 이 명령말고 truncate 명령으로 공간을 할당하셔도 동일합니다.

 

ISO파일 다운이 완료되었다면 위에서 만든 파일이 있는 디렉토리에서 아래의 명령을 실행합니다.

$ qemu-system-x86_64 -m 4G -cpu host -smp sockets=1,cores=2,threads=2 -cdrom Win10_1903_V1_Korean_x64.iso -drive file=windows.raw,format=raw -enable-kvm

각 옵션을 설명하자면,

-m : 가상머신이 사용할 수 있는 최대 메모리

 

-cpu : 가상머신이 가상화할 CPU 모델, host를 주면 현재 사용하고 있는 CPU로 표시됩니다.

 

-smp : CPU의 소켓, 코어, 스레드 수 설정, 제가 적은 설정을 예로들면 CPU 소켓은 1개에 코어는 2개가 있고 한 코어는 2개의 스레드를 가지는 것입니다.

-cdrom : 파일의 디렉토리를 입력하면 해당 파일이 가상 머신 안에서는 CD가 들어있으며 CD의 내용은 해당 파일의 내용으로 표시됩니다. OS를 설치할 때 이렇게 Windows의 ISO 파일을 적어서 Windows 설치 CD가 삽입되어 있는 것처럼 흉내냅니다.

 

-drive : 가상머신에 설치되어 있는 저장장치(하드디스크)를 설정하는 옵션입니다. 옵션 안의 옵션인 file=은 해당 저장장치로 사용될 파일을 지정합니다. 그러므로 file=의 값으로 위에서 만든 windows.raw를 넣었습니다. format=은 해당 파일의 데이터 포맷을 지정합니다. qemu-img에서 create할 때 기본적으로 raw로 만들어지지만 qcow2 등 다른 타입을 사용할 수 있습니다. 현재는 기본설정인 raw로 지정했습니다.

 

-enable-kvm : kvm을 사용하도록 설정. kvm이 사용되지 않으면 CPU를 아예 에뮬레이션하여 동작하므로 아주 느립니다. 다른 아키텍쳐의 CPU를 에뮬레이션하는 것이 아니라면 이 옵션을 사용하는 것이 좋습니다.

 

이 명령을 실행하면 아래와 같은 창이 뜹니다.

잠시만 기다리시면 Windows를 설치하는 화면이 나옵니다.

이 다음은 시키는대로 설치를 진행하시면 됩니다. 참고로 QEMU 창을 클릭하면 커서가 해당 창을 벗어나지 못합니다. 다시 커서를 리눅스 쪽에서 사용하기 위해서는 Ctrl + Alt + G 단축키를 누르면 됩니다.

추가적으로 전체화면 토글 단축키는 Ctrl + Alt + F입니다.

 

설치가 완료되고 리부팅이 되는데 계속 기다리면 설정하는 화면이 뜹니다. 여기서 조금 오래 걸릴 수 있으니 인내심을 가지고 기다리면 됩니다.

이런 설정들을 모두 완수하면 드디어 바탕화면이 나옵니다.

일단 여기서 OS를 종료합니다.

 

저희가 설치를 위해 사용했던 qemu의 옵션들 중에서 cdrom은 더이상 필요하지 않습니다. 그리고 위의 캡쳐를 보면 아시겠지만 사운드카드가 없어서 소리 출력이 불가능합니다. 이 문제를 해결하기 위하여 수정한 옵션은 아래와 같습니다.

$ qemu-system-x86_64 -m 4G -enable-kvm -cpu host -smp sockets=1,cores=2,threads=2 -drive file=windows.raw,format=raw -soundhw all

-cdrom 옵션은 지웠고 -soundhw 란 옵션이 새로 생겼습니다. -soundhw 옵션은 오디오 장치를 활성화시키는 옵션인데 all을 주면 가능한 모든 장치를 활성화시킵니다. 제 컴퓨터는 Intel Audio를 사용하고 있어서 all 대신 hda만 적어도 가능했습니다.

 

이걸로 터미널에서 가상머신을 실행하는 방법의 설명은 끝났습니다. 다만 번외편으로 systemd를 통해 매번 저 긴 옵션들을 적지 않고 실행하는 방법을 설명하고자 합니다.

 

systemd는 리눅스의 init 프로세스로 다양한 기능들을 제공합니다. 그 중 하나가 service 인데 미리 service 유닛 파일을 만들어두면 나중에 systemctl 명령으로 쉽게 지정된 옵션으로 프로그램을 실행할 수 있습니다. 이에 대한 자세한 내용은 아래의 두 글을 참고하시기 바랍니다.

 

systemd 사용자 유닛 만들기

systemd에서는 사용자만의 유닛을 만들고 로그인 시 자동으로 실행하도록 설정할 수 있습니다. 이것으로 개별 사용자의 입맛대로 시작 프로그램을 등록할 수 있고, .timer나 resource control 등의 systemd 기능들..

stackframe.tistory.com

 

systemd로 서비스 관리하기

systemd로 서비스를 관리하기 위해서는 먼저 systemctl이란 명령을 알아야합니다. systemctl은 systemd의 전반적인 설정에 필수적인 명령으로, 앞으로 systemd를 사용하기 위해서 가장 많이 사용할 명령입니다. 먼..

stackframe.tistory.com

아무튼 service를 만들면 저 명령을 모두 적지 않아도 됩니다.

 

systemd에서는 일반 사용자의 유닛 파일은 사용자의 홈 디렉토리 아래의 .config/systemd/user/ 디렉토리에 저장하도록 합니다. 기본적으로 해당 디렉토리는 만들어지지 않으니 아래 명령을 실행하여 디렉토리를 만듭니다.

$ mkdir -p .config/systemd/user/

저 디렉토리에 qemu@.service라는 파일을 생성하고 아래 적혀있는 내용을 넣고 저장합니다.

[Unit]
Description=qemu %I emulator

[Service]
Type=simple
ExecStart=/usr/bin/qemu-system-x86_64 -m 4G -enable-kvm -cpu host -smp sockets=1,cores=2,threads=2 -drive file=qemu/%i.raw,format=raw -soundhw all

사용자 유닛 파일을 갱신하기위해 아래 명령을 실행합니다.

$ systemctl --user daemon-reload

이제 qemu-img로 생성한 파일(저는 windows.raw)을 홈 디렉토리 아래에 qemu 라는 디렉토리에 이동합니다. 중요한 점은 확장자가 .raw여야 한다는 점입니다. 파일 이동이나 qemu 디렉토리를 사용하고 싶지 않거나 .raw 확장자를 사용하고 싶지 않시다면 위의 service 파일의 ExecStart= 를 적절히 수정하시면 됩니다.

 

이제 터미널에서 아래처럼 명령을 실행하시면 QEMU가 실행됩니다.

$ systemctl --user start qemu@windows

@ 뒤에 들어가는 문자는 qemu-img로 생성한 파일의 .raw 확장자를 뺀 부분입니다.

 

만약 다른 가상머신으로 데비안을 만들고 파일을 debian.raw라고 저장했으면 systemctl --user start qemu@debian 이렇게 실행하면 됩니다.