변경점 비교
가상 머신을 활용하여 서브 시스템 구성하기
변경후: 2025. 10. 14. 22:38:36 (luasenvy (luasenvy))
## 개요
최근 리눅스 환경에서 이런 저런 작업들을 하다보니 운영체제가 시간이 흐를수록 많이 지저분해지고 원치 않은 작업들이 남는 경우가 많아졌다. 도커로 가상환경을 구성하여 작업하는 것도 방법이긴 하지만 X윈도우가 필요하거나 온전한 네트워크를 구성해야 하는 경우 또는 너무 복잡한 네트워크 구성이라 호스트와 분리하고 싶은 경우들이 생기기도 했다.
하다 못해 리눅스에서 카카오톡을 쓰고 싶다고 하더라도 `wine` 패키지를 통해 실행해야 하는데 이러한 경우도 i386 패키지를 포함한 부가적인 수 많은 패키지들이 요구되어 호스트 시스템이 엉망이 되기도 한다.
이럴 때 우리는 가상 머신~Virtual Machine 이하 VM~ 이라는 방법을 통하여 추가적인 장비 없이도 분리된 별개의 운영체제를 하나의 머신에서 구성하고 사용할 수 있다. CPU가 VM 기능을 지원해야 하며 이는 바이오스 환경설정에서 보통 `VT`~Virtualization Technology 또는 가상화 기술~라고 하는 옵션으로 확인할 수 있다. 꼭 실행전에 이 옵션을 활성화 해주고 작업을 진행하자.
이 가상화 기술을 쉽게 사용할 수 있도록 해주는 소프트웨어들로는 `Virtual Box`, `VM Ware`, `Vargrant`를 대표적으로 들 수 있다. 이런 종류의 소프트웨어들은 GNU/Linux에서도 사용할 수 있지만 `qemu-system` 패키지가 가장 잘 알려져 있는데 성능과 호환성면에서도 다른 소프트웨어보다 더 좋다.
## Debian 13 가상화
가상 머신을 구성하고 운영체제를 사용하려면 진짜 장비에 설치하듯 필요한 설치 프로그램을 준비해야 한다. 이 문서에서는 [Debian 13 amd64 작은 설치 이미지](https://www.debian.org/distrib/netinst)를 준비하여 진행하였다.
```bash:CLI
sudo apt install -y qemu-system
```
패키지 매니저를 통해 qemu-system을 설치한다.
```bash:CLI
mkdir -p ~/.config/qemu
cd ~/.config/qemu
qemu-img create -f qcow2 hd_image.qcow2 10G
```
설치 후에 qemu 관련 파일들을 `~/.config/qemu`에 모두 위치시키기 위해 새로 디렉토리를 만들고 이동한다. `qemu-img` 명령을 통해서 가상 머신이 사용할 가상 디스크를 만든다. `qcow2` 포맷의 파일을 사용하는데 이 파일이 가상 머신의 저장매체 역할을 하게된다.
```bash:CLI
cp /usr/share/OVMF/OVMF_VARS_4M.fd .
sudo mkdir /mnt/debian
sudo mount -o loop,ro ~/Download/debian-13.1.0-amd64-netinst.iso /mnt/debian
cp /mnt/debian/install.amd/{initrd.gz,vmlinuz} ./
sudo umount /mnt/debian
sudo rmdir /mnt/debian/
```
가상 머신이 실행될 때 리눅스 설치 화면으로 진입하기 위해서는 몇 가지 파일들을 미리 준비해야 한다. 설치 이미지 안에 있는 파일도 필요하기 때문에 다운로드한 Debian 13 iso 이미지를 마운트하여 파일을 복사해와야 한다.
### 설치용 부팅 명령
```bash:CLI
qemu-system-x86_64 \
-m 8G -cpu max -enable-kvm \
-no-reboot \
-device virtio-net-pci,netdev=net0 -netdev user,id=net0 \
-kernel vmlinuz -initrd initrd.gz \
-drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE_4M.fd \
-drive if=pflash,format=raw,file=./OVMF_VARS_4M.fd \
-drive if=virtio,cache=unsafe,file=hd_image.qcow2 \
-drive if=virtio,format=raw,file="$HOME/Download/debian-13.1.0-amd64-netinst.iso"
```
모든 파일들이 준비되면 qemu-system-x86_64 명령에 필요한 파라미터들을 채워 실행한다. 설치를 위한 명령이므로 설치가 완료되면 부팅용 명령을 통해 가상 머신을 실행할 수 있다.
- `-m`: 메모리 크기
- `-cpu`: 가용 CPU 할당량
- `-enable-kvm`: Kernel-based Virtual Machine 활성화
- `-no-reboot`: 재부팅 비활성화
- `-device virtio-net-pci,netdev=net0`: 장치로 net0라는 이름의 가상화 네트워크 pci 장치 추가
- `-netdev user,id=net0`: 사용자 모드 네트워킹 설정으로 가상 머신의 네트워크를 호스트의 네트워크와 NAT로 연결하여 인터넷이 가능하게 함
- `-kernel vmlinuz`: 부팅할 커널 지정
- `-initrd initrd.gz`: 초기화 램 디스크 지정
- `-drive`: 여러가지 드라이브 설정
### 운영체제 부팅 명령
```bash:CLI
qemu-system-x86_64 \
-enable-kvm \
-m 8G \
-boot c \
-smp 2 \
-drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE_4M.fd \
-drive if=pflash,format=raw,file="$HOME/.config/qemu/OVMF_VARS_4M.fd" \
-device virtio-net-pci,netdev=net0 -netdev user,id=net0 \
-drive if=virtio,cache=unsafe,file="$HOME/.config/qemu/hd_image.qcow2"
```
- `-smp 2`: 가상머신에 CPU 코어 2개를 할당
- `-boot c`: 가상머신이 부팅할 때 첫번째 디스크를 선택하도록 지정
설치가 완료되면 `-no-reboot` 옵션에 의해서 가상 머신이 자동으로 종료된다. 이후에 위 명령으로 다시 가상 머신을 실행하면 정상적으로 부팅되는 것을 확인할 수 있다. 가상머신 창 내로 키보드 마우스를 제한하는 방법은 `Ctrl + Alt + G`로 켜고 끌 수 있다.
## 스냅샷
qemu 패키지는 가상 머신을 사용하면서 중간중간에 복원 지점을 설정할 수 있도록 스냅샷 기능을 제공한다. 내부 스냅샷과 외부 스냅샷 두 가지 형태를 지원한다.
### 내부 스냅샷
내부 스냅샷은 가상 디스크 파일 내부에 복원할 수 있는 지점을 마킹하여 원할 때 그 곳으로 되돌리는 기능이다.
- 생성: `qemu-img snapshot -c my-snapshop1 "$HOME/.config/qemu/hd_image.qcow2"`
- 목록: `qemu-img snapshot -l "$HOME/.config/qemu/hd_image.qcow2"`
- 복원: `qemu-img snapshot -a my-snapshop1 "$HOME/.config/qemu/hd_image.qcow2"`
### 외부 스냅샷
외부 스냅샷은 이 지점을 별도의 파일로 만들어 관리하는 방식이다. 외부 스냅샷은 원본이 되는 파일이 없어지면 사용할 수 없으며 스냅샷이 참조하는 원본 파일을 '백킹 파일' 이라고도 말한다. 생성 후에는 부팅할 때 외부 스냅샷을 디스크로 지정하여 부팅하면 되며 변경점들이 외부 스냅샷에 저장된다.
- 생성: `qemu-img create -f qcow2 -b ./hd_image.qcow2 -F qcow2 ./debian13_init_image.qcow2`
검색결과
Advertisement