Windows 가상 머신 구성 및 관리
호스트 설정, 가상 머신 생성 및 관리, 가상화 기능 이해
초록
Red Hat 문서에 관한 피드백 제공
문서 개선을 위한 의견에 감사드립니다. 어떻게 개선할 수 있는지 알려주십시오.
Jira를 통해 피드백 제출 (계정 필요)
- Jira 웹 사이트에 로그인합니다.
- 상단 탐색 바에서 생성을 클릭합니다.
- 요약 필드에 설명 제목을 입력합니다.
- 설명 필드에 개선을 위한 제안을 입력합니다. 문서의 관련 부분에 대한 링크를 포함합니다.
- 대화 상자 하단에서 생성 을 클릭합니다.
1장. RHEL의 가상화의 기본 개념
가상화 또는 Linux에서의 구현이라는 개념에 익숙하지 않은 경우 다음 섹션에서는 RHEL 10의 가상화에 대한 일반적인 개요: Red Hat에서 제공하는 기본 사항, 이점, 구성 요소 및 기타 가능한 가상화 솔루션을 제공합니다.
1.1. 가상화란 무엇입니까?
RHEL 10에서는 RHEL 10을 실행하는 머신이 게스트 라고도 하는 여러 VM(가상 머신)을 호스팅 할 수 있는 가상화 기능을 제공합니다. VM은 호스트의 물리적 하드웨어 및 컴퓨팅 리소스를 사용하여 별도의게스트 OS(가상 운영 체제)를 호스트 운영 체제의 사용자 공간 프로세스로 실행합니다.
즉, 가상화를 통해 운영 체제 내에서 운영 체제를 사용할 수 있습니다.
VM을 사용하면 소프트웨어 구성 및 기능을 안전하게 테스트하거나 레거시 소프트웨어를 실행하거나 하드웨어의 워크로드 효율성을 최적화할 수 있습니다. 이점에 대한 자세한 내용은 가상화를 참조하십시오.
가상화에 대한 자세한 내용은 가상화 주제 페이지를 참조하십시오.
다음 단계
- RHEL 10에서 가상화 사용을 시작하려면 가상 머신을 호스팅할 RHEL 준비를 참조하십시오.
- Red Hat은 RHEL 10 가상화 외에도 다양한 사용자 중심 및 기능을 갖춘 다양한 특수 가상화 솔루션을 제공합니다. 자세한 내용은 Red Hat 가상화 솔루션을 참조하십시오.
1.2. 가상화의 이점
VM(가상 머신)을 사용하면 물리적 머신 사용과 비교할 때 다음과 같은 이점이 있습니다.
유연하고 세분화된 리소스 할당
VM은 일반적으로 물리적인 호스트 시스템에서 실행되며 게스트 OS가 사용할 물리적 하드웨어를 할당할 수도 있습니다. 그러나 VM에 물리적 리소스의 할당은 소프트웨어 수준에서 수행되므로 매우 유연합니다. VM은 호스트 메모리, CPU 또는 스토리지 공간의 구성 가능한 일부를 사용하며 해당 구성으로 매우 세분화된 리소스 요청을 지정할 수 있습니다.
예를 들어 게스트 OS가 디스크로 표시되는 것은 호스트 파일 시스템에서 파일로 표시될 수 있으며 해당 디스크의 크기는 물리적 디스크에 사용 가능한 크기보다 덜 제한됩니다.
소프트웨어 제어 구성
VM의 전체 구성은 호스트에 데이터로 저장되며 소프트웨어 제어하에 있습니다. 따라서 VM을 쉽게 생성, 제거, 복제, 마이그레이션, 운영하거나 원격 스토리지에 연결할 수 있습니다.
또한 언제든지 VM의 현재 상태를 스냅샷으로 백업할 수 있습니다. 그런 다음 스냅샷을 로드하여 시스템을 저장된 상태로 복원할 수 있습니다.
호스트와 분리
게스트 OS는 호스트 OS와는 별도로 가상화된 커널에서 실행됩니다. 즉, 모든 OS를 VM에 설치할 수 있으며 게스트 OS가 불안정하거나 손상된 경우에도 호스트는 영향을 받지 않습니다.
공간 및 비용 효율성
단일 물리 시스템은 다수의 VM을 호스팅할 수 있습니다. 따라서 여러 물리적 시스템이 동일한 작업을 수행할 필요가 없으므로 물리적 하드웨어와 관련된 공간, 전원 및 유지 관리 요구 사항을 줄일 수 있습니다.
소프트웨어 호환성
VM은 호스트와 다른 OS를 사용할 수 있으므로 가상화를 통해 호스트 OS용으로 원래 릴리스되지 않은 애플리케이션을 실행할 수 있습니다. 예를 들어 RHEL 8 게스트 OS를 사용하면 RHEL 10 호스트 시스템에서 RHEL 8용으로 릴리스된 애플리케이션을 실행할 수 있습니다.
1.3. 가상 머신 구성 요소 및 상호 작용
RHEL 10의 가상화는 다음과 같은 주요 소프트웨어 구성 요소로 구성됩니다.
하이퍼바이저
RHEL 10에서 VM(가상 머신) 생성의 기반은 하드웨어를 제어하고 호스트 시스템에서 여러 운영 체제를 실행할 수 있는 소프트웨어 계층인 하이퍼바이저 입니다.
하이퍼바이저에는 KVM(커널 기반 가상 시스템) 모듈과 가상화 커널 드라이버가 포함되어 있습니다. 이러한 구성 요소를 사용하면 호스트 시스템의 Linux 커널이 가상화에 대한 리소스를 사용자 공간 소프트웨어에 제공합니다.
사용자 공간 수준에서 QEMU 에뮬레이터는 게스트 운영 체제를 실행할 수 있는 완전한 가상화 하드웨어 플랫폼을 시뮬레이션하고 호스트에 리소스가 할당되어 게스트에 표시되는 방법을 관리합니다.
또한 libvirt
소프트웨어 제품군은 관리 및 통신 계층 역할을 하므로 QEMU를 보다 쉽게 상호 작용하고 보안 규칙을 시행하며 VM 구성 및 실행을 위한 다양한 추가 툴을 제공합니다.
XML 구성
호스트 기반 XML 구성 파일( 도메인 XML 파일이라고도 함)은 특정 VM의 모든 설정 및 장치를 결정합니다. 구성에는 다음이 포함됩니다.
- VM의 이름, 시간대 및 VM에 대한 기타 정보와 같은 메타데이터입니다.
- 가상 CPU(vCPUS), 스토리지 장치, 입력/출력 장치, 네트워크 인터페이스 카드 및 기타 하드웨어, 실제 및 가상을 포함하여 VM의 장치에 대한 설명입니다.
- VM 설정(예: VM 동작에 대한 사용, 재시작 설정 및 기타 설정)을 사용할 수 있는 최대 메모리 양입니다.
구성 요소 상호 작용
VM이 시작되면 하이퍼바이저는 XML 구성을 사용하여 VM 인스턴스를 호스트에서 사용자 공간 프로세스로 생성합니다. 하이퍼바이저는 또한 virsh
,virt-install
, guestfish
유틸리티 또는 웹 콘솔 GUI와 같은 호스트 기반 인터페이스에 VM 프로세스에 액세스할 수 있도록 합니다.
이러한 가상화 툴을 사용하면 libvirt
가 입력을 QEMU 지침으로 변환합니다. QEMU는 명령을 수행하는 데 필요한 리소스를 적절하게 할당할 수 있도록 KVM에 지침을 전달합니다. 결과적으로 QEMU는 VM 생성 또는 수정과 같은 해당 사용자 공간 변경 사항을 실행하거나 VM의 게스트 운영 체제에서 작업을 수행할 수 있습니다.
QEMU는 아키텍처의 필수 구성 요소이지만 보안 문제로 인해 RHEL 10 시스템에서 직접 사용할 수 없습니다. 따라서 qemu-*
명령은 Red Hat에서 지원되지 않으므로 libvirt를 사용하여 QEMU와 상호 작용하는 것이 좋습니다.
호스트 기반 인터페이스에 대한 자세한 내용은 가상화 관리를 위한 툴 및 인터페이스를 참조하십시오.
그림 1.1. RHEL 10 가상화 아키텍처

1.4. 가상화 관리를 위한 툴 및 인터페이스
CLI(명령줄) 또는 여러 GUI(그래픽 사용자 인터페이스)를 사용하여 RHEL 10에서 가상화를 관리할 수 있습니다.
명령줄 인터페이스
CLI는 RHEL 10에서 가상화를 관리하는 가장 강력한 방법입니다. VM(가상 머신) 관리를 위한 중요한 CLI 명령은 다음과 같습니다.
virsh - 제공된 인수에 따라 다양한 용도로 사용할 수 있는 가상화 명령줄 유틸리티 및 쉘입니다. 예를 들면 다음과 같습니다.
-
VM 시작 및 종료 -
virsh start
및virsh shutdown
-
사용 가능한 VM 나열 -
virsh list
-
구성 파일에서 VM 생성 -
virsh create
-
가상화 쉘 입력 -
virsh
자세한 내용은 시스템의
virsh(1)
도움말 페이지를 참조하십시오.-
VM 시작 및 종료 -
-
virt-install
- 새 VM을 생성하기 위한 CLI 유틸리티입니다. 자세한 내용은 시스템의virt-install(1)
매뉴얼 페이지를 참조하십시오. -
virt-xml
- VM 구성을 편집하는 유틸리티입니다. -
guestfish
- VM 디스크 이미지 검사 및 수정을 위한 유틸리티입니다. 자세한 내용은 시스템의guestfish(1)
매뉴얼 페이지를 참조하십시오.
그래픽 인터페이스
다음 GUI를 사용하여 RHEL 10에서 가상화를 관리할 수 있습니다.
- Cockpit 라고도 하는 RHEL 10 웹 콘솔 은 VM 및 가상화 호스트를 관리하기 위해 원격으로 액세스할 수 있고 사용하기 쉬운 그래픽 사용자 인터페이스를 제공합니다.
1.5. 가상화를 위한 사용자 공간 연결 유형
호스트의 VM(가상 머신)은 RHEL 10 사용자 공간에 다음 libvirt
연결 유형 중 하나를 사용합니다.
- 시스템 연결 (
qemu:///system
) -
RHEL 10에서 VM 관리에 사용 가능한 모든 기능에 액세스할 수 있습니다. 시스템 연결에서 VM을 생성하거나 사용하려면 시스템에 대한 루트 권한이 있거나
libvirt
사용자 그룹의 일부여야 합니다. - 세션 연결 (
qemu:///session
) -
libvirt
그룹에 없는 루트가 아닌 사용자는 리소스에 액세스할 때 로컬 사용자의 액세스 권한을 준수해야 하는 세션 연결에서만 VM을 생성할 수 있습니다. 예를 들어 세션 연결을 사용할 때 시스템 연결 또는 다른 사용자가 생성한 VM을 감지하거나 액세스할 수 없습니다.
또한 세션
연결의 VM은 다음과 같은 루트 권한이 필요한 기능을 사용할 수 없습니다.
-
고급 네트워킹 - 시스템 브릿지를 설정하거나 장치를 탭할 수 없습니다. 사용자 모드(
Passt
) 네트워킹으로 제한되며 VM의 전체 외부 가시성을 구성할 수 없습니다. - PCI 장치 패스스루 - VM에 대한 PCI 호스트 하드웨어의 장치 할당을 수정할 수 없습니다.
- autostart - 세션 연결의 VM은 시스템 부팅 시 자동으로 시작할 수 없습니다.
-
시스템 수준 스토리지 풀 및 VM 로그 - 시스템 연결에서 스토리지 풀 및 VM 로그 파일은
/etc/libvirt
및/var/lib/libvirt
와 같은 시스템 디렉터리에 저장됩니다. 세션 연결에서는 사용자가홈
디렉터리에 저장된 파일로 제한됩니다. 이렇게 하면 호스트 전체 스토리지를 관리하거나 로그를 중앙에서 볼 수 없습니다.
현재 연결 유형을 보려면 호스트에서 virsh uri
명령을 사용합니다.
달리 명시적으로 명시하지 않는 한 이 설명서의 정보는 루트 권한이 있다고 가정하고 libvirt
의 시스템 연결을 사용할 수 있습니다.
1.6. Red Hat Virtualization 솔루션
다음 Red Hat 제품은 RHEL 10 가상화 기능을 기반으로 구축되며 RHEL 10에서 사용할 수 있는 KVM 가상화 기능을 확장합니다.
- OpenShift Virtualization
KubeVirt 기술을 기반으로 OpenShift Virtualization은 Red Hat OpenShift Container Platform의 일부이며 컨테이너에서 가상 머신을 실행할 수 있습니다.
OpenShift Virtualization에 대한 자세한 내용은 Red Hat Hybrid Cloud 페이지를 참조하십시오.
- Red Hat OpenStack Platform (RHOSP)
Red Hat OpenStack Platform은 안전하고 안정적인 퍼블릭 또는 프라이빗 OpenStack 클라우드를 구축, 배포 및 확장할 수 있는 통합 기반을 제공합니다.
Red Hat OpenStack Platform에 대한 자세한 내용은 Red Hat Customer Portal 또는 Red Hat OpenStack Platform 설명서 제품군 을 참조하십시오.
2장. 가상 머신을 호스트하도록 RHEL 준비
RHEL 10에서 가상화를 사용하려면 가상화 패키지를 설치하고 시스템이 VM(가상 머신)을 호스팅하도록 구성되어 있는지 확인해야 합니다.
2.1. 가상 머신을 호스트하도록 AMD64 또는 Intel 64 시스템 준비
RHEL 10을 실행하는 AMD64 또는 Intel 64 시스템에서 KVM 하이퍼바이저를 설정하고 VM(가상 머신)을 생성하려면 필요한 서비스를 시작합니다.
사전 요구 사항
- Red Hat Enterprise Linux 10이 호스트 시스템에 설치되어 등록되었습니다.
시스템은 가상화 호스트로 작동하기 위해 다음과 같은 하드웨어 요구 사항을 충족합니다.
다음과 같은 최소 시스템 리소스를 사용할 수 있습니다.
- 6GB의 호스트용 디스크 공간과 의도한 각 VM에 대해 6GB의 디스크 공간이 추가로 제공됩니다.
- 호스트용 2GB의 RAM과 의도한 각 VM에 대해 2GB를 더합니다.
프로세스
가상화 하이퍼바이저 패키지를 설치합니다.
dnf install qemu-kvm libvirt virt-install virt-viewer
# dnf install qemu-kvm libvirt virt-install virt-viewer
Copy to Clipboard Copied! 가상화 서비스를 시작합니다.
for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done
# for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done
Copy to Clipboard Copied!
검증
시스템이 가상화 호스트가 될 준비가 되었는지 확인합니다.
virt-host-validate
# virt-host-validate [...] QEMU: Checking for device assignment IOMMU support : PASS QEMU: Checking if IOMMU is enabled by kernel : WARN (IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments) LXC: Checking for Linux >= 2.6.26 : PASS [...] LXC: Checking for cgroup 'blkio' controller mount-point : PASS LXC: Checking if device /sys/fs/fuse/connections exists : FAIL (Load the 'fuse' module to enable /proc/ overrides)
Copy to Clipboard Copied! 모든 virt-host-validate 검사에서
PASS
값을 반환하는 경우 시스템은 VM을 생성할 준비가 된 것입니다.검사 중
FAIL
값을 반환하는 경우 표시된 지침을 따라 문제를 해결합니다.검사 중
WARN
값을 반환하는 경우 표시된 지침에 따라 가상화 기능을 개선하십시오.
문제 해결
호스트 CPU에서 KVM 가상화를 지원하지 않는 경우 virt-host-validate 는 다음 출력을 생성합니다.
QEMU: Checking for hardware virtualization: FAIL (Only emulated CPUs are available, performance will be significantly limited)
QEMU: Checking for hardware virtualization: FAIL (Only emulated CPUs are available, performance will be significantly limited)
Copy to Clipboard Copied! 그러나 이러한 호스트 시스템의 VM은 성능 문제가 없는 대신 부팅되지 않습니다.
이 문제를 해결하려면 VM의 XML 구성에서 <
domain type
> 값을qemu
로 변경할 수 있습니다. 그러나 Red Hat은qemu
도메인 유형을 사용하는 VM을 지원하지 않으며 프로덕션 환경에서는 이 값을 설정하지 않는 것이 좋습니다.
2.2. 가상 머신에서 QEMU 게스트 에이전트 기능 활성화
RHEL 10 시스템에서 호스팅되는 VM(가상 머신)에서 특정 기능을 사용하려면 먼저 QEMU 게스트 에이전트(GA)를 사용하도록 VM을 구성해야 합니다.
이러한 기능의 전체 목록은 QEMU 게스트 에이전트가 필요한 가상화 기능을 참조하십시오.
2.2.1. Windows 게스트에서 QEMU 게스트 에이전트 활성화
RHEL 호스트가 Windows 가상 머신(VM)에서 특정 작업 하위 집합 을 수행하도록 허용하려면 QEMU 게스트 에이전트(GA)를 활성화해야 합니다. 이렇게 하려면 QEMU 게스트 에이전트 설치 프로그램이 포함된 스토리지 장치를 기존 VM에 추가하거나 새 VM을 생성할 때 Windows 게스트 운영 체제에 드라이버를 설치합니다.
그래픽 인터페이스를 사용하여 게스트 에이전트(GA)를 설치하려면 아래 절차를 참조하십시오. 명령줄에서 GA를 설치하려면 MSI(Microsoft Windows Installer) 를 사용합니다.
사전 요구 사항
- 게스트 에이전트가 있는 설치 미디어가 VM에 연결되어 있습니다.
프로세스
-
Windows 게스트 운영 체제에서
File Explorer
애플리케이션을 엽니다. -
이 PC
를 클릭합니다. -
장치 및 드라이브
창에서virtio-win
미디어를 엽니다. -
guest-agent
폴더를 엽니다. VM에 설치된 운영 체제를 기반으로 다음 설치 프로그램 중 하나를 실행합니다.
-
32비트 운영 체제를 사용하는 경우
qemu-ga-i386.msi
설치 프로그램을 실행합니다. -
64비트 운영 체제를 사용하는 경우
qemu-ga-x86_64.msi
설치 프로그램을 실행합니다.
-
32비트 운영 체제를 사용하는 경우
-
선택 사항: 반가상화 직렬 드라이버(
virtio-serial
)를 호스트와 Windows 게스트 간의 통신 인터페이스로 사용하려면virtio-serial
드라이버가 Windows 게스트에 설치되어 있는지 확인합니다.
검증
Windows VM에서 서비스 창으로 이동합니다.
컴퓨터 관리 > 서비스
-
QEMU 게스트 에이전트
서비스의 상태가Running
인지 확인합니다.
2.2.2. QEMU 게스트 에이전트가 필요한 가상화 기능
VM(가상 머신)에서 QEMU 게스트 에이전트(GA)를 활성화하는 경우 호스트에서 다음 명령을 사용하여 VM을 관리할 수 있습니다.
virsh shutdown --mode=agent
-
QEMU GA와 함께 사용된
virsh shutdown
은 정상 상태의 공동 게스트를 종료하는 것을 보장하므로 이 종료 방법은virsh shutdown --mode=acpi
보다 안정적입니다.
virsh domfsfreeze
및virsh domfsthaw
- 게스트 파일 시스템을 별도로 중지합니다.
virsh domfstrim
게스트에 파일 시스템을 트리밍하도록 지시하여 마이그레이션 중에 전송해야 하는 데이터를 줄이는 데 도움이 됩니다.
중요이 명령을 사용하여 Linux VM을 관리하려면 게스트 운영 체제에서 다음 SELinux 부울을 설정해야 합니다.
setsebool virt_qemu_ga_read_nonsecurity_files on
# setsebool virt_qemu_ga_read_nonsecurity_files on
Copy to Clipboard Copied! virsh domtime
- 게스트의 시계를 쿼리하거나 설정합니다.
virsh setvcpus --guest
- 게스트에 CPU를 오프라인 상태로 전환하도록 지시합니다. 이는 CPU를 핫플러그할 수 없는 경우 유용합니다.
virsh domifaddr --source agent
- QEMU GA를 사용하여 게스트 운영 체제의 IP 주소를 쿼리합니다. 예를 들어 게스트 인터페이스가 호스트 인터페이스에 직접 연결된 경우 유용합니다.
virsh domfsinfo
- 실행 중인 게스트에 마운트된 파일 시스템 목록이 표시됩니다.
virsh set-user-password
- 게스트에서 지정된 사용자 계정의 암호를 설정합니다.
virsh set-user-sshkeys
게스트에서 지정된 사용자에 대해 인증된 SSH 키 파일을 편집합니다.
중요이 명령을 사용하여 Linux VM을 관리하려면 게스트 운영 체제에서 다음 SELinux 부울을 설정해야 합니다.
setsebool virt_qemu_ga_manage_ssh on
# setsebool virt_qemu_ga_manage_ssh on
Copy to Clipboard Copied!
2.3. 가상 머신을 관리하도록 웹 콘솔 설정
RHEL 10 웹 콘솔을 사용하여 VM(가상 머신)을 관리하기 전에 호스트에 웹 콘솔 가상 머신 플러그인을 설치해야 합니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
프로세스
cockpit-machines
플러그인을 설치합니다.dnf install cockpit-machines
# dnf install cockpit-machines
Copy to Clipboard Copied!
검증
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
설치에 성공하면 웹 콘솔 사이드 메뉴에
가 표시됩니다.
3장. 가상 머신 생성
RHEL 10에서 VM(가상 머신)을 생성하려면 명령줄 또는 RHEL 10 웹 콘솔을 사용할 수 있습니다.
3.1. 명령줄을 사용하여 가상 머신 생성
virt-install
유틸리티를 사용하여 RHEL 10 호스트에 VM(가상 머신)을 생성할 수 있습니다.
사전 요구 사항
- 호스트 시스템에서 가상화가 활성화되어 있습니다.
- 디스크 공간, RAM 또는 CPU와 같이 VM에 할당할 수 있는 충분한 시스템 리소스가 있습니다. 권장 값은 의도한 작업 및 VM의 워크로드에 따라 크게 다를 수 있습니다.
운영 체제(OS) 설치 소스는 로컬 또는 네트워크에서 사용할 수 있습니다. 다음 중 하나일 수 있습니다.
- 설치 미디어의 ISO 이미지
기존 VM 설치의 디스크 이미지
주의RHEL 10에서는 호스트 CD-ROM 또는 DVD-ROM 장치에서 설치할 수 없습니다. RHEL 10에서 사용 가능한 VM 설치 방법을 사용할 때 CD-ROM 또는 DVD-ROM을 설치 소스로 선택하면 설치에 실패합니다. 자세한 내용은 Red Hat 지식베이스 를 참조하십시오.
-
libvirt의
시스템
연결을 사용하는 VM을 생성하려면 root 권한이 있거나 호스트의libvirt
사용자 그룹에 있어야 합니다. 자세한 내용은 가상화용 사용자 공간 연결 유형을 참조하십시오. - 선택 사항: 설치보다 빠르고 쉽게 구성할 수 있도록 Kickstart 파일을 제공할 수 있습니다.
프로세스
VM을 생성하고 OS 설치를 시작하려면 다음 필수 인수와 함께 virt-install
명령을 사용합니다.
-
--name
: 새 머신의 이름 -
--memory
: 할당된 메모리 양 -
--vCPUs
: 할당된 가상 CPU 수 -
--disk
: 할당된 스토리지의 유형 및 크기 -
--CD
ROM 또는--location
: OS 설치 소스의 유형 및 위치 --osinfo
: 설치하려는 OS 유형 및 버전참고--osinfo
인수에 사용 가능한 모든 값을 나열하려면virt-install --osinfo list
명령을 실행합니다.자세한 내용은
osinfo-query os
명령을 실행할 수도 있습니다. 그러나 먼저libosinfo-bin
패키지를 설치해야 할 수 있습니다.
선택한 설치 방법에 따라 필요한 옵션과 값은 다를 수 있습니다. 예는 아래 명령을 참조하십시오.
VM을 생성하고 로컬 ISO 파일에서 OS를 설치합니다.
다음 명령은 /home/username/Downloads/Win10install.iso 파일에 로컬로 저장된 ISO 이미지에서 Windows 10 OS를 설치하는 demo-guest1 이라는 VM을 생성합니다. 이 VM에도 2048MiB의 RAM 및 2개의 vCPU가 할당되며 VM에 대해 80GiB qcow2 가상 디스크가 자동으로 구성됩니다.
virt-install \ --name demo-guest1 --memory 2048 \ --vcpus 2 --disk size=80 --osinfo win10 \ --cdrom /home/username/Downloads/Win10install.iso
# virt-install \ --name demo-guest1 --memory 2048 \ --vcpus 2 --disk size=80 --osinfo win10 \ --cdrom /home/username/Downloads/Win10install.iso
Copy to Clipboard Copied!
VM을 생성하고 라이브 CD에서 OS를 설치하고 영구 디스크를 생성하지 않습니다.
다음 명령은 라이브 CD에서 RHEL 10 OS를 실행하기 위해 /home/username/Downloads/rhel10.iso 이미지를 사용하는 demo-guest2 라는 VM을 생성합니다. 이 VM에 디스크 공간이 할당되지 않으므로 세션 중 변경한 내용은 유지되지 않습니다. 또한 VM에는 4096MiB의 RAM 및 4개의 vCPU가 할당됩니다.
virt-install \ --name demo-guest2 --memory 4096 --vcpus 4 \ --disk none --livecd --osinfo rhel10.0 \ --cdrom /home/username/Downloads/rhel10.iso
# virt-install \ --name demo-guest2 --memory 4096 --vcpus 4 \ --disk none --livecd --osinfo rhel10.0 \ --cdrom /home/username/Downloads/rhel10.iso
Copy to Clipboard Copied!
VM을 생성하고 기존 디스크 이미지를 가져옵니다.
다음 명령은 기존 디스크 이미지 /home/username/backup/disk.qcow2 에 연결하는 demo-guest3 이라는 RHEL 10 VM을 생성합니다. 이는 시스템 간에 하드 드라이브를 물리적으로 이동하는 것과 유사하므로 demo-guest3에서 사용할 수 있는 OS와 데이터는 이전에 이미지가 어떻게 처리되었는지에 따라 결정됩니다. 또한 이 VM에는 2048MiB의 RAM 및 2개의 vCPU가 할당됩니다.
virt-install \ --name demo-guest3 --memory 2048 --vcpus 2 \ --osinfo rhel10.0 --import \ --disk /home/username/backup/disk.qcow2
# virt-install \ --name demo-guest3 --memory 2048 --vcpus 2 \ --osinfo rhel10.0 --import \ --disk /home/username/backup/disk.qcow2
Copy to Clipboard Copied! 디스크 이미지를 가져올 때
--osinfo
옵션을 사용해야 합니다. 제공되지 않으면 생성된 VM의 성능에 부정적인 영향을 미칩니다.
VM을 생성하고 원격 URL에서 OS를 설치합니다.
다음 명령은
http://example.com/OS-install
URL에서 설치하는 demo-guest4 라는 VM을 생성합니다. 설치가 성공적으로 시작하려면 URL에 작동 중인 OS 설치 트리가 포함되어야 합니다. 또한 OS는 /home/username/ks.cfg kickstart 파일을 사용하여 자동으로 구성됩니다. 이 VM에는 2048MiB의 RAM, vCPU 2개 및 160GiB qcow2 가상 디스크도 할당됩니다.virt-install \ --name demo-guest4 --memory 2048 --vcpus 2 --disk size=160 \ --osinfo rhel10.0 --location http://example.com/OS-install \ --initrd-inject /home/username/ks.cfg --extra-args="inst.ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8"
# virt-install \ --name demo-guest4 --memory 2048 --vcpus 2 --disk size=160 \ --osinfo rhel10.0 --location http://example.com/OS-install \ --initrd-inject /home/username/ks.cfg --extra-args="inst.ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8"
Copy to Clipboard Copied!
VM을 생성하고 텍스트 전용 모드로 OS를 설치합니다.
다음 명령은 그래픽 없이
RHEL10.iso
이미지 파일에서 텍스트 전용 모드로 설치하는 demo-guest5 라는 VM을 생성합니다. 게스트 콘솔을 직렬 콘솔에 연결합니다. VM에는 16384MiB의 메모리, 16 vCPU 및 280GiB 디스크가 있습니다. 이러한 종류의 설치는 느린 네트워크 링크를 통해 호스트에 연결할 때 유용합니다.virt-install \ --name demo-guest5 --memory 16384 --vcpus 16 --disk size=280 \ --osinfo rhel10.0 --location RHEL10.iso \ --graphics none --extra-args='console=ttyS0'
# virt-install \ --name demo-guest5 --memory 16384 --vcpus 16 --disk size=280 \ --osinfo rhel10.0 --location RHEL10.iso \ --graphics none --extra-args='console=ttyS0'
Copy to Clipboard Copied!
원격 호스트에 VM을 생성합니다.
다음 명령은 demo-guest5와 동일하지만 192.0.2.1 원격 호스트에 상주하는 demo-guest6 이라는 VM을 생성합니다.
virt-install \ --connect qemu+ssh://root@192.0.2.1/system --name demo-guest6 --memory 16384 \ --vcpus 16 --disk size=280 --osinfo rhel10.0 --location RHEL10.iso \ --graphics none --extra-args='console=ttyS0'
# virt-install \ --connect qemu+ssh://root@192.0.2.1/system --name demo-guest6 --memory 16384 \ --vcpus 16 --disk size=280 --osinfo rhel10.0 --location RHEL10.iso \ --graphics none --extra-args='console=ttyS0'
Copy to Clipboard Copied!
원격 호스트에 VM을 생성하고 DASD 미디어 장치를 스토리지로 사용합니다.
다음 명령은 demo-guest5와 동일한 구성이 있는 demo-guest-7 이라는 VM을 생성하여 스토리지의 경우 DASD 미디어 장치
mdev_308a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8
을 사용하여 장치 번호1111
을 할당합니다.virt-install \ --name demo-guest7 --memory 16384 --vcpus 16 --disk size=280 \ --osinfo rhel10.0 --location RHEL10.iso --graphics none \ --disk none --hostdev mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8,address.type=ccw,address.cssid=0xfe,address.ssid=0x0,address.devno=0x1111,boot-order=1 \ --extra-args 'rd.dasd=0.0.1111'
# virt-install \ --name demo-guest7 --memory 16384 --vcpus 16 --disk size=280 \ --osinfo rhel10.0 --location RHEL10.iso --graphics none \ --disk none --hostdev mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8,address.type=ccw,address.cssid=0xfe,address.ssid=0x0,address.devno=0x1111,boot-order=1 \ --extra-args 'rd.dasd=0.0.1111'
Copy to Clipboard Copied! virsh nodedev-list --cap mdev
명령을 사용하여 설치에 사용 가능한 미디어 장치의 이름을 검색할 수 있습니다.
검증
- VM이 성공적으로 생성되면 VM의 그래픽 콘솔이 포함된 virt-viewer 창이 열리고 게스트 OS 설치가 시작됩니다.
문제 해결
virt-install
실패와 함께기본 네트워크 오류를 찾을 수 없는
경우:libvirt-daemon-config-network
패키지가 설치되었는지 확인합니다.dnf info libvirt-daemon-config-network
# dnf info libvirt-daemon-config-network Installed Packages Name : libvirt-daemon-config-network [...]
Copy to Clipboard Copied! libvirt
기본 네트워크가 활성 상태인지 확인하고 자동으로 시작하도록 구성되어 있는지 확인합니다.virsh net-list --all
# virsh net-list --all Name State Autostart Persistent -------------------------------------------- default active yes yes
Copy to Clipboard Copied! 그렇지 않은 경우 기본 네트워크를 활성화하고 auto-start로 설정합니다.
virsh net-autostart default virsh net-start default
# virsh net-autostart default Network default marked as autostarted # virsh net-start default Network default started
Copy to Clipboard Copied! 다음 오류와 함께 기본 네트워크를 활성화하면
libvirt-daemon-config-network
패키지가 올바르게 설치되지 않았습니다.error: failed to get network 'default' error: Network not found: no network with matching name 'default'
error: failed to get network 'default' error: Network not found: no network with matching name 'default'
Copy to Clipboard Copied! 이 문제를 해결하려면
libvirt-daemon-config-network
를 다시 설치합니다.dnf reinstall libvirt-daemon-config-network
# dnf reinstall libvirt-daemon-config-network
Copy to Clipboard Copied! 기본 네트워크를 활성화하여 다음과 유사한 오류와 함께 실패하면 기본 네트워크의 서브넷과 호스트의 기존 인터페이스 간에 충돌이 발생했습니다.
error: Failed to start network default error: internal error: Network is already in use by interface ens2
error: Failed to start network default error: internal error: Network is already in use by interface ens2
Copy to Clipboard Copied! 이 문제를 해결하려면
virsh net-edit 기본
명령을 사용하고 구성의192.0.2.*
값을 호스트에서 사용하지 않은 서브넷으로 변경합니다.
3.2. 웹 콘솔을 사용하여 가상 머신 생성
웹 콘솔을 사용하여 RHEL 10 호스트의 GUI에서 VM(가상 머신)을 생성할 수 있습니다.
3.2.1. 웹 콘솔을 사용하여 새 가상 머신 생성
RHEL 10 웹 콘솔을 사용하여 이전에 준비된 호스트 머신에 새 VM(가상 머신)을 생성할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 호스트 시스템에서 가상화가 활성화되어 있습니다.
- 웹 콘솔 VM 플러그인이 호스트 시스템에 설치되어 있습니다.
-
libvirt의
시스템
연결을 사용하는 VM을 생성하려면 root 권한이 있거나 호스트의libvirt
사용자 그룹에 있어야 합니다. 자세한 내용은 가상화용 사용자 공간 연결 유형을 참조하십시오. - 디스크 공간, RAM 또는 CPU와 같이 VM에 할당할 수 있는 충분한 시스템 리소스가 있습니다. 권장 값은 의도한 작업 및 VM의 워크로드에 따라 크게 다를 수 있습니다.
프로세스
웹 콘솔 의 가상 머신 인터페이스에서 을 클릭합니다.
새 가상 머신 생성 대화 상자가 표시됩니다.
생성할 VM의 기본 구성을 입력합니다.
- name - VM의 이름입니다.
- 연결 - 세션에 부여된 권한 수준입니다. 자세한 내용은 웹 콘솔에서 연결된 대화 상자를 확장합니다.
- 설치 유형 - 설치 시 로컬 설치 미디어, URL, PXE 네트워크 부팅, 클라우드 기본 이미지를 사용하거나 제한된 운영 체제 세트에서 운영 체제를 다운로드할 수 있습니다.
운영 체제 - VM에서 실행되는 게스트 운영 체제입니다. Red Hat은 제한된 게스트 운영 체제에 대해서만 지원을 제공합니다.
참고웹 콘솔에서 직접 Red Hat Enterprise Linux를 다운로드하고 설치하려면 오프라인 토큰 필드에 오프라인 토큰을 추가해야 합니다.
- storage - 스토리지의 유형입니다.
- 스토리지 제한 - 스토리지 공간의 크기입니다.
memory - 메모리 양입니다.
VM을 생성합니다.
- VM이 운영 체제를 자동으로 설치하려면 .
- 운영 체제가 설치되기 전에 VM을 편집하려면 .
VM을 생성한 직후 운영 체제를 설치하지 않으려면 가상 머신 인터페이스에서 VM을 선택하고 버튼을 클릭하여 나중에 수행할 수 있습니다.
3.2.2. 웹 콘솔을 사용하여 디스크 이미지를 가져와 가상 머신 생성
RHEL 10 웹 콘솔에서 기존 VM 설치의 디스크 이미지를 가져와 VM(가상 머신)을 생성할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
- 디스크 공간, RAM 또는 CPU와 같이 VM에 할당할 수 있는 충분한 시스템 리소스가 있습니다. 권장 값은 의도한 작업 및 VM의 워크로드에 따라 크게 다를 수 있습니다.
- 기존 VM 설치의 디스크 이미지를 다운로드했습니다.
프로세스
웹 콘솔 의 가상 머신 인터페이스에서 를 클릭합니다.
가상 머신 가져오기 대화 상자가 표시됩니다.
생성할 VM의 기본 구성을 입력합니다.
- name - VM의 이름입니다.
- 디스크 이미지 - 호스트 시스템에 있는 VM의 기존 디스크 이미지 경로입니다.
- 운영 체제 - VM 디스크에서 실행되는 운영 체제입니다. Red Hat은 제한된 게스트 운영 체제에 대해서만 지원을 제공합니다.
memory - VM에서 사용할 메모리 양입니다.
VM을 가져옵니다.
- VM 설정에 대한 추가 편집 없이 VM에 운영 체제를 설치하려면 클릭합니다.
- 운영 체제를 설치하기 전에 VM 설정을 편집하려면 클릭합니다.
3.2.3. 웹 콘솔을 사용하여 클라우드 이미지 인증으로 가상 머신 생성
기본적으로 distro 클라우드 이미지에는 로그인 계정이 없습니다. 그러나 RHEL 웹 콘솔을 사용하면 이제 VM(가상 머신)을 생성하고 root 및 사용자 계정 로그인 인증 정보를 지정할 수 있습니다. 이 인증 정보는 cloud-init로 전달됩니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
- 호스트 시스템에서 가상화가 활성화되어 있습니다.
- 디스크 공간, RAM 또는 CPU와 같이 VM에 할당할 수 있는 충분한 시스템 리소스가 있습니다. 권장 값은 의도한 작업 및 VM의 워크로드에 따라 크게 다를 수 있습니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
웹 콘솔 을 클릭합니다.
인터페이스에서새 가상 머신 생성 대화 상자가 표시됩니다.
- 이름 필드에 VM의 이름을 입력합니다.
- 세부 정보 탭의 설치 유형 필드에서 Cloud Base Image 를 선택합니다.
- 설치 소스 필드에서 호스트 시스템의 이미지 파일의 경로를 설정합니다.
생성할 VM의 구성을 입력합니다.
- 운영 체제 - VM의 운영 체제입니다. Red Hat은 제한된 게스트 운영 체제에 대해서만 지원을 제공합니다.
- storage - VM을 구성할 스토리지 유형입니다.
- 스토리지 제한 - VM을 구성할 스토리지 공간의 크기입니다.
memory - VM을 구성하는 메모리 양입니다.
자동화 탭을 클릭합니다.
클라우드 인증 자격 증명을 설정합니다.
- Root password - VM의 root 암호를 입력합니다. root 암호를 설정하지 않으려면 필드를 비워 둡니다.
- 사용자 로그인 - cloud-init 사용자 로그인을 입력합니다. 사용자 계정을 생성하지 않으려면 이 필드를 비워 둡니다.
사용자 암호 - 암호를 입력합니다. 사용자 계정을 생성하지 않으려면 이 필드를 비워 둡니다.
VM이 생성됩니다.
3.3. Windows 가상 머신 생성
RHEL 10 호스트에서 완전히 가상화된 Windows 머신을 생성하고 VM(가상 머신) 내에서 그래픽 Windows 설치 프로그램을 시작하고 설치된 Windows 게스트 운영 체제(OS)를 최적화할 수 있습니다.
VM을 생성하고 Windows 게스트 OS를 설치하려면 virt-install
명령 또는 RHEL 10 웹 콘솔을 사용합니다.
사전 요구 사항
다음 중 하나이거나 로컬 또는 네트워크에서 사용할 수 있는 Windows OS 설치 소스입니다.
- 설치 미디어의 ISO 이미지
- 기존 VM 설치의 디스크 이미지
KVM
virtio
드라이버가 있는 스토리지 미디어.이 미디어를 생성하려면 호스트 시스템에서 virtio 드라이버 설치 미디어 준비를 참조하십시오.
-
Windows 11을 설치하는 경우 호스트에
edk2-ovmf
,swtpm
및libtpms
패키지를 설치해야 합니다.
프로세스
VM을 생성합니다. 자세한 내용은 가상 머신 생성 을 참조하십시오.
virt-install
유틸리티를 사용하여 VM을 생성하는 경우 명령에 다음 옵션을 추가합니다.KVM
virtio
드라이버가 있는 스토리지 미디어. 예를 들면 다음과 같습니다.--disk path=/usr/share/virtio-win/virtio-win.iso,device=cdrom
--disk path=/usr/share/virtio-win/virtio-win.iso,device=cdrom
Copy to Clipboard Copied! 설치할 Windows 버전입니다. 예를 들어 Windows 10 및 11의 경우:
--os-variant win10
--os-variant win10
Copy to Clipboard Copied! 사용 가능한 Windows 버전 목록과 적절한 옵션은 다음 명령을 사용합니다.
osinfo-query os
# osinfo-query os
Copy to Clipboard Copied! Windows 11을 설치하는 경우 UEFI( Unified Extensible Firmware Interface ) 및 vTPM(Virtual Trusted Platform Module )을 활성화합니다.
--boot uefi
--boot uefi
Copy to Clipboard Copied!
웹 콘솔을 사용하여 VM을 생성하는 경우 새 가상 머신 생성 창의 운영 체제 필드에 Windows 버전을 지정합니다.
- Windows 11 및 Windows Server 2022보다 이전 Windows 버전을 설치하는 경우 클릭하여 설치를 시작합니다.
Windows 11을 설치하거나 추가 Windows Server 2022 기능을 사용하려면 CLI를 사용하여 UEFI 및 vTPM을
및 활성화하여 확인합니다.VM의 XML 구성을 엽니다.
virsh edit windows-vm
# virsh edit windows-vm
Copy to Clipboard Copied! os
요소에firmware='efi'
옵션을 추가합니다.<os firmware='efi'> <type arch='x86_64' machine='pc-q35-6.2'>hvm</type> <boot dev='hd'/> </os>
<os firmware='efi'> <type arch='x86_64' machine='pc-q35-6.2'>hvm</type> <boot dev='hd'/> </os>
Copy to Clipboard Copied! 장치 요소 내에
tpm
장치를
추가합니다.<devices> <tpm model='tpm-crb'> <backend type='emulator' version='2.0'/> </tpm> </devices>
<devices> <tpm model='tpm-crb'> <backend type='emulator' version='2.0'/> </tpm> </devices>
Copy to Clipboard Copied! - 가상 머신 테이블에서 설치를 Windows 설치를 시작합니다.
VM에 Windows OS를 설치합니다.
Windows 운영 체제를 설치하는 방법에 대한 자세한 내용은 관련 Microsoft 설치 설명서를 참조하십시오.
웹 콘솔을 사용하여 VM을 생성하는 경우 Disks 인터페이스를 사용하여 virtio 드라이버와 함께 스토리지 미디어를 VM에 연결합니다.
자세한 내용은 웹 콘솔을 사용하여 기존 디스크를 가상 머신에 연결을 참조하십시오.
-
Windows 게스트 OS에서 KVM
virtio
드라이버를 구성합니다. 자세한 내용은 Windows 가상 머신용 KVM 반가상화 드라이버 설치를 참조하십시오. - 선택 사항: Windows VM의 성능을 수행합니다. 자세한 내용은 Windows 가상 머신 최적화를 참조하십시오.
4장. Windows 가상 머신 최적화
RHEL 10에서 호스팅되는 VM(가상 머신)에서 Microsoft Windows를 게스트 운영 체제로 사용하는 경우 게스트의 성능에 부정적인 영향을 미칠 수 있습니다.
따라서 다음의 조합을 수행하여 Windows VM의 성능을 최적화할 수 있습니다.
- 반가상화 드라이버 사용. 자세한 내용은 Windows 가상 머신용 KVM 반가상화 드라이버 설치를 참조하십시오.
- Hyper-V 경험 활성화. 자세한 내용은 Hyper-V 항목 활성화를 참조하십시오.
- NetKVM 드라이버 매개변수 구성. 자세한 내용은 NetKVM 드라이버 매개변수 구성을 참조하십시오.
- Windows 백그라운드 프로세스 최적화 또는 비활성화. 자세한 내용은 Windows 가상 머신에서 백그라운드 프로세스 최적화를 참조하십시오.
4.1. Windows 가상 머신용 KVM 반가상화 드라이버 설치
Windows 가상 머신(VM)의 성능을 개선하는 기본 방법은 게스트 운영 체제에 Windows용 KVM 반가상화(virtio
) 드라이버를 설치하는 것입니다.
virtio-win
드라이버는 각 virtio-win
릴리스 시 사용 가능한 Windows 10 및 11의 최신 릴리스에 대해 인증되었습니다(WHQL). 그러나 virtio-win
드라이버는 일반적으로 테스트되어 이전 빌드의 Windows 10 및 11에서도 올바르게 작동할 것으로 예상됩니다.
Windows VM에 드라이버를 설치하려면 다음 작업을 수행합니다.
- 호스트 시스템에서 설치 미디어를 준비합니다. 자세한 내용은 호스트 시스템에서 virtio 드라이버 설치 미디어 준비를 참조하십시오.
- 설치 미디어를 기존 Windows VM에 연결하거나 새 Windows VM을 생성할 때 연결합니다. 자세한 내용은 RHEL에 Windows 가상 머신 설치를 참조하십시오.
-
Windows 게스트 운영 체제에
virtio
드라이버를 설치합니다. 자세한 내용은 Windows 게스트에 virtio 드라이버 설치를 참조하십시오. -
Windows
게스트 운영 체제에서 QEMU 게스트 에이전트
를 활성화합니다. 자세한 내용은 Windows 게스트에 QEMU 게스트 에이전트 설치를 참조하십시오.
4.1.1. Windows virtio 드라이버 작동 방식
반가상화 드라이버는 I/O 대기 시간을 줄이고 거의 베어 메탈 수준으로 처리량을 늘려 VM(가상 머신)의 성능을 향상시킵니다. I/O-heavy 작업 및 애플리케이션을 실행하는 VM에 반가상화 드라이버를 사용할 수 있습니다.
virtio
드라이버는 KVM 호스트에서 실행되는 Windows VM에 사용할 수 있는 KVM의 반가상화 장치 드라이버입니다. 이러한 드라이버는 다음과 같은 드라이버를 포함하는 virtio-win
패키지에서 제공합니다.
- 블록(스토리지) 장치
- 네트워크 인터페이스 컨트롤러
- 비디오 컨트롤러
- 메모리 풍선 장치
- 반가상화 직렬 포트 장치
- 엔트로피 소스 장치
- paravirtual panic 장치
- 마우스, 키보드 또는 태블릿과 같은 입력 장치
- VirtIO FS Device
- QEMU FwCfg Device
- 작은 에뮬레이션 장치 세트
KVM virtio 드라이버를 사용하면 다음 Microsoft Windows 버전이 물리적 시스템과 유사하게 실행되어야 합니다.
- Windows Server 버전: Red Hat 지식 베이스에서 KVM을 사용하여 Red Hat Enterprise Linux용 인증된 게스트 운영 체제 를 참조하십시오.
Windows 데스크탑(서버 이외의) 버전:
- Windows 10(32비트 및 64비트 버전)
- Windows 11(64비트)
4.1.2. 호스트 머신에서 virtio 드라이버 설치 미디어 준비
Windows 가상 머신(VM)에 KVM virtio
드라이버를 설치하거나 업데이트하려면 먼저 호스트 머신에서 virtio
드라이버 설치 미디어를 준비해야 합니다. 이렇게 하려면 virtio-win
패키지에서 제공하는 .iso
파일을 스토리지 장치로 Windows VM에 연결합니다.
사전 요구 사항
- RHEL 10 호스트 시스템에서 가상화가 활성화되어 있는지 확인합니다. 자세한 내용은 가상 머신을 호스팅할 RHEL 준비를 참조하십시오.
- VM에 대한 root 액세스 권한이 있는지 확인합니다.
프로세스
서브스크립션 데이터를 새로 고침합니다.
subscription-manager refresh
# subscription-manager refresh All local data refreshed
Copy to Clipboard Copied! virtio-win
패키지의 최신 버전을 가져옵니다.virtio-win
이 설치되지 않은 경우:dnf install -y virtio-win
# dnf install -y virtio-win
Copy to Clipboard Copied! virtio-win
이 설치된 경우:dnf upgrade -y virtio-win
# dnf upgrade -y virtio-win
Copy to Clipboard Copied! 설치에 성공하면
/usr/share/
디렉터리에서 virtio-win 드라이버 파일을 사용할 수 있습니다. 여기에는 디렉터리에 드라이버 파일이 있는virtio-win
/ISO
파일 및드라이버
디렉터리가 포함되며, 각 아키텍처 및 지원되는 Windows 버전에 대해 하나씩 있습니다.ls /usr/share/virtio-win/
# ls /usr/share/virtio-win/ agents.json drivers/ guest-agent/ info.json /installer /qxl-wddm-dod release-drivers-versions.txt /spice-vdagent /tools virtio-win-1.9.45.iso virtio-win.iso
Copy to Clipboard Copied!
virtio-win.iso
파일을 스토리지 장치로 Windows VM에 연결합니다.-
새 Windows VM을 생성할 때
virt-install
명령 옵션을 사용하여 파일을 연결합니다. 기존 Windows VM에 드라이버를 설치할 때
virt-xml
유틸리티를 사용하여 파일을 CD-ROM으로 연결합니다.virt-xml WindowsVM --add-device --disk virtio-win.iso,device=cdrom
# virt-xml WindowsVM --add-device --disk virtio-win.iso,device=cdrom Domain 'WindowsVM' defined successfully.
Copy to Clipboard Copied!
-
새 Windows VM을 생성할 때
4.1.3. Windows 게스트에 virtio 드라이버 설치
Windows 게스트 운영 체제에 KVM virtio
드라이버를 설치하려면 (가상 머신(VM)을 생성할 때 드라이버가 포함된 스토리지 장치를 추가하고 Windows 게스트 운영 체제에 드라이버를 설치해야 합니다.
이 절차에서는 그래픽 인터페이스를 사용하여 드라이버를 설치하는 지침을 제공합니다. MSI(Microsoft Windows Installer) 명령줄 인터페이스를 사용할 수도 있습니다.
사전 요구 사항
-
KVM
virtio
드라이버가 있는 설치 매체를 VM에 연결해야 합니다. 매체 준비에 대한 지침은 호스트 시스템에서 virtio 드라이버 설치 미디어 준비를 참조하십시오. -
KVM
virtio
드라이버가 있는 스토리지 매체를 Windows VM에 연결해야 합니다.
프로세스
-
Windows 게스트 운영 체제에서
File Explorer
애플리케이션을 엽니다. -
이 PC
를 클릭합니다. -
장치 및 드라이브
창에서virtio-win
미디어를 엽니다. VM에 설치된 운영 체제를 기반으로 설치 프로그램 중 하나를 실행합니다.
-
32비트 운영 체제를 사용하는 경우
virtio-win-gt-x86.msi
설치 프로그램을 실행합니다. -
64비트 운영 체제를 사용하는 경우
virtio-win-gt-x64.msi
설치 프로그램을 실행합니다.
-
32비트 운영 체제를 사용하는 경우
열리는
Virtio-win-driver-installer
설정 마법사에서사용자 지정 설정
단계에 도달할 때까지 표시된 지침을 따릅니다.- 사용자 지정 설정 창에서 설치할 장치 드라이버를 선택합니다. 권장 드라이버 세트가 자동으로 선택되고 드라이버에 대한 설명이 목록 오른쪽에 표시됩니다.
- 클릭합니다.
- 설치가 완료되면 를 클릭합니다.
- VM을 재부팅하여 드라이버 설치를 완료합니다.
검증
Windows VM에서 장치 관리자로 이동합니다.
- 시작을 클릭합니다.
- 장치 관리자검색
장치가 올바른 드라이버를 사용하고 있는지 확인합니다.
- 장치를 클릭하여 드라이버 속성 창을 엽니다.
- 드라이버 탭으로 이동합니다.
- 드라이버 세부 정보를 클릭합니다.
다음 단계
- NetKVM 드라이버를 설치한 경우 Windows 게스트의 네트워킹 매개 변수를 구성해야 할 수도 있습니다. 자세한 내용은 NetKVM 드라이버 매개변수 구성을 참조하십시오.
4.1.4. Windows 게스트에서 virtio 드라이버 업데이트
Windows 게스트 운영 체제(OS)에서 KVM virtio
드라이버를 업데이트하려면 Windows OS 버전에서 지원하는 경우 Windows Update
서비스를 사용할 수 있습니다. 그렇지 않은 경우 Windows 가상 머신(VM)에 연결된 virtio
드라이버 설치 미디어에서 드라이버를 다시 설치합니다.
사전 요구 사항
- virtio 드라이버가 설치된 Windows 게스트 OS.
-
Windows Update
를 사용하지 않는 경우 최신 KVMvirtio
드라이버가 있는 설치 미디어를 Windows VM에 연결해야 합니다. 매체 준비에 대한 지침은 호스트 시스템에서 virtio 드라이버 설치 미디어 준비를 참조하십시오.
절차 1: Windows Update를 사용하여 드라이버 업데이트
Windows 10, Windows Server 2016 이상 운영 체제에서 Windows Update
그래픽 인터페이스를 사용하여 드라이버 업데이트를 사용할 수 있는지 확인합니다.
- Windows VM을 시작하고 게스트 OS에 로그인합니다.
선택적 업데이트 페이지로 이동합니다.
설정 → Windows 업데이트 → 고급 옵션 → 선택적 업데이트
- Red Hat, Inc.의 모든 업데이트를 설치합니다.
절차 2: 드라이버를 다시 설치하여 업데이트
Windows 10 및 Windows Server 2016 이전의 운영 체제 또는 OS가 Windows Update
에 액세스할 수 없는 경우 드라이버를 다시 설치하십시오. 이렇게 하면 Windows 게스트 OS 네트워크 구성이 기본값(DHCP)으로 복원됩니다. 사용자 지정 네트워크 구성을 유지하려면 netsh
유틸리티를 사용하여 백업을 생성하고 복원해야 합니다.
- Windows VM을 시작하고 게스트 OS에 로그인합니다.
Windows 명령 프롬프트를 엽니다.
- Super+R 키보드 바로 가기를 사용합니다.
-
표시되는 창에서
cmd
를 입력하고 Ctrl+Shift+Enter 눌러 관리자로 실행합니다.
Windows 명령 프롬프트를 사용하여 OS 네트워크 구성을 백업합니다.
backup.txt
C:\WINDOWS\system32\netsh dump > backup.txt
Copy to Clipboard Copied! 연결된 설치 미디어에서 KVM
virtio
드라이버를 다시 설치합니다. 다음 중 하나를 수행합니다.Windows 명령 프롬프트를 사용하여 드라이버를 다시 설치합니다. 여기서 X 는 설치 미디어 드라이브 문자입니다. 다음 명령은 모든
virtio
드라이버를 설치합니다.64비트 vCPU를 사용하는 경우:
C:\WINDOWS\system32\msiexec.exe /i X:\virtio-win-gt-x64.msi /passive /norestart
32비트 vCPU를 사용하는 경우:
C:\WINDOWS\system32\msiexec.exe /i X:\virtio-win-gt-x86.msi /passive /norestart
C:\WINDOWS\system32\msiexec.exe /i X:\virtio-win-gt-x86.msi /passive /norestart
Copy to Clipboard Copied!
- VM을 재부팅하지 않고 그래픽 인터페이스를 사용하여 드라이버를 다시 설치합니다.
Windows 명령 프롬프트를 사용하여 OS 네트워크 구성을 복원합니다.
C:\WINDOWS\system32\netsh -f backup.txt
C:\WINDOWS\system32\netsh -f backup.txt
Copy to Clipboard Copied! - VM을 재부팅하여 드라이버 설치를 완료합니다.
4.2. Hyper-V 경험 활성화
Hyper-V Enlightenments는 KVM이 Microsoft Hyper-V 하이퍼바이저를 에뮬레이션하여 Windows 가상 머신의 성능을 향상시킬 수 있는 방법을 제공합니다.
4.2.1. Windows 가상 머신에서 Hyper-V 활성화
RHEL 10 호스트에서 실행 중인 Windows 가상 머신(VM)에서 더 나은 성능을 제공하는 Hyper-V 강화를 활성화할 수 있습니다.
프로세스
virsh edit
명령을 사용하여 VM의 XML 구성을 엽니다. 예를 들면 다음과 같습니다.virsh edit windows-vm
# virsh edit windows-vm
Copy to Clipboard Copied! XML의 <
;
> 하위 섹션을 추가합니다.features
> 섹션에 다음 <hyperv<features> [...] <hyperv> <relaxed state='on'/> <vapic state='on'/> <spinlocks state='on' retries='8191'/> <vendor_id state='on' value='KVM Hv'/> <vpindex state='on'/> <runtime state='on' /> <synic state='on'/> <stimer state='on'> <direct state='on'/> </stimer> <frequencies state='on'/> <reset state='on'/> <tlbflush state='on'/> <reenlightenment state='on'/> <ipi state='on'/> <evmcs state='on'/> </hyperv> [...] </features>
<features> [...] <hyperv> <relaxed state='on'/> <vapic state='on'/> <spinlocks state='on' retries='8191'/> <vendor_id state='on' value='KVM Hv'/> <vpindex state='on'/> <runtime state='on' /> <synic state='on'/> <stimer state='on'> <direct state='on'/> </stimer> <frequencies state='on'/> <reset state='on'/> <tlbflush state='on'/> <reenlightenment state='on'/> <ipi state='on'/> <evmcs state='on'/> </hyperv> [...] </features>
Copy to Clipboard Copied! XML에 이미 <
hyperv>
; 하위 섹션이 포함된 경우 위에 표시된 대로 수정합니다.다음과 같이 구성의
clock
섹션을 변경합니다.<clock offset='localtime'> ... <timer name='hypervclock' present='yes'/> </clock>
<clock offset='localtime'> ... <timer name='hypervclock' present='yes'/> </clock>
Copy to Clipboard Copied! - XML 구성을 저장하고 종료합니다.
- VM이 실행 중인 경우 다시 시작합니다.
검증
virsh dumpxml
명령을 사용하여 실행 중인 VM의 XML 구성을 표시합니다. 다음 세그먼트가 포함된 경우 VM에서 Hyper-V 권한 부여가 활성화됩니다.<hyperv> <relaxed state='on'/> <vapic state='on'/> <spinlocks state='on' retries='8191'/> <vendor_id state='on' value='KVM Hv'/> <vpindex state='on'/> <runtime state='on' /> <synic state='on'/> <frequencies state='on'/> <reset state='on'/> <tlbflush state='on'/> <reenlightenment state='on'/> <stimer state='on'> <direct state='on'/> </stimer> <ipi state='on'/> <evmcs state='on'/> </hyperv> <clock offset='localtime'> ... <timer name='hypervclock' present='yes'/> </clock>
<hyperv> <relaxed state='on'/> <vapic state='on'/> <spinlocks state='on' retries='8191'/> <vendor_id state='on' value='KVM Hv'/> <vpindex state='on'/> <runtime state='on' /> <synic state='on'/> <frequencies state='on'/> <reset state='on'/> <tlbflush state='on'/> <reenlightenment state='on'/> <stimer state='on'> <direct state='on'/> </stimer> <ipi state='on'/> <evmcs state='on'/> </hyperv> <clock offset='localtime'> ... <timer name='hypervclock' present='yes'/> </clock>
Copy to Clipboard Copied!
4.2.2. 구성 가능한 Hyper-V Enlightenments
특정 Hyper-V 기능을 구성하여 Windows VM을 최적화할 수 있습니다. 다음 표에서는 이러한 구성 가능한 Hyper-V 기능 및 해당 값에 대한 정보를 제공합니다.
Enlightenment | 설명 | 값 |
---|---|---|
evmcs | L0(KVM)과 L1(Hyper-V) 하이퍼바이저 간에 반가상화 프로토콜을 구현하여 하이퍼바이저로 더 빠르게 L2를 종료할 수 있습니다. 참고 이 기능은 Intel 프로세서에서만 사용할 수 있습니다. | On, off |
frequencies | MSR(Hyper-V frequency Machine Specific Registers)을 활성화합니다. | On, off |
ipi | IPI( paravirtualized inter processor interrupts) 지원을 활성화합니다. | On, off |
Reenlightenment | 마이그레이션 중에만 발생하는 타임스탬프(TSC) 빈도 변경 사항이 있는 경우 알립니다. 또한 게스트가 새 빈도로 전환할 준비가 될 때까지 이전 빈도를 계속 사용할 수 있습니다. | On, off |
완화됨 | VM이 많이 로드된 호스트에서 실행 중일 때 일반적으로 BSOD가 생성되는 Windows sanity 검사를 비활성화합니다. 이는 Linux 커널 옵션 no_timer_check와 유사합니다. 이 옵션은 Linux가 KVM에서 실행될 때 자동으로 활성화됩니다. | On, off |
runtime | 게스트 코드를 실행하는 데 소비되는 프로세서 시간을 설정하고 게스트 코드를 대신하여 설정합니다. | On, off |
Spinlocks |
| On, off |
stimer | 가상 프로세서에 대한 합성 타이머를 활성화합니다. 이 종료가 제공되지 않는 경우 특정 Windows 버전은 HPET(또는 HPET를 사용할 수 없는 경우 RTC)를 사용하도록 되돌리므로 가상 CPU가 유휴 상태인 경우에도 상당한 CPU 소비가 발생할 수 있습니다. | On, off |
stimer-direct | 만료 이벤트가 일반 인터럽트를 통해 전달될 때 합성 타이머를 활성화합니다. | On, off. |
synic | stimer와 함께 합성 타이머를 활성화합니다. Windows 8에서는 이 기능을 주기 모드에서 사용합니다. | On, off |
time | VM에서 사용할 수 있는 다음 Hyper-V 특정 클럭 소스를 활성화합니다.
| On, off |
tlbflush | 가상 프로세서의 TLB를 플러시합니다. | On, off |
vapic | 가상 APIC를 사용하면 고효율 MSR 액세스를 제공하는 고성능 메모리 매핑 Advanced Programmable Interrupt Controller(APIC) 레지스터에 액세스할 수 있습니다. | On, off |
vendor_id | Hyper-V 벤더 ID를 설정합니다. |
|
vpindex | 가상 프로세서 인덱스를 활성화합니다. | On, off |
4.3. NetKVM 드라이버 매개변수 구성
NetKVM 드라이버가 설치되면 환경에 더 적합하도록 구성할 수 있습니다. Windows 장치 관리자(devmgmt.msc
)를 사용하여 드라이버 매개 변수를 구성할 수 있습니다.
드라이버의 매개변수를 수정하면 Windows에서 해당 드라이버를 다시 로드합니다. 이는 기존 네트워크 활동을 중단합니다.
사전 요구 사항
NetKVM 드라이버가 가상 머신에 설치되어 있습니다.
자세한 내용은 Windows 가상 머신용 KVM 반가상화 드라이버 설치를 참조하십시오.
프로세스
Open Windows Device Manager.
장치 관리자 열기에 대한 자세한 내용은 Windows 설명서를 참조하십시오.
Red Hat VirtIO 이더넷 어댑터 를 찾습니다.
- 장치 관리자 창에서 네트워크 어댑터 옆에 있는 를 클릭합니다.
네트워크 어댑터 목록에서 Red Hat VirtIO Ethernet Adapter 를 두 번 클릭합니다.
장치의 속성 창이 열립니다.
장치 매개 변수를 확인합니다.
속성 창에서 고급 탭을 클릭합니다.
장치 매개변수를 수정합니다.
수정할 매개변수를 클릭합니다.
해당 매개변수에 대한 옵션이 표시됩니다.
필요에 따라 옵션을 수정합니다.
NetKVM 매개변수 옵션에 대한 자세한 내용은 NetKVM 드라이버 매개변수를 참조하십시오.
- 을 클릭하여 변경 사항을 저장합니다.
4.4. NetKVM 드라이버 매개변수
다음 표에서는 구성 가능한 NetKVM 드라이버 로깅 매개변수에 대한 정보를 제공합니다.
매개변수 | 설명 2 |
---|---|
Logging.Enable | 로깅이 활성화되었는지 여부를 결정하는 부울 값입니다. 기본값은 Enabled입니다. |
Logging.Level | 로깅 수준을 정의하는 정수입니다. 정수가 증가함에 따라 로그 세부 정보 표시가 수행됩니다.
참고 높은 로깅 수준은 가상 머신의 속도가 느려집니다. |
다음 표에서는 구성 가능한 NetKVM 드라이버 초기 매개변수에 대한 정보를 제공합니다.
매개변수 | 설명 |
---|---|
MAC 할당 | 반가상화 NIC에 대해 로컬로 관리되는 MAC 주소를 정의하는 문자열입니다. 이는 기본적으로 설정되어 있지 않습니다. |
Init.Do802.1PQ | Priority/VLAN 태그 채우기 및 제거 지원을 활성화하는 부울 값입니다. 기본값은 Enabled입니다. |
Init.MaxTxBuffers | 할당할 TX 링 설명자 수를 나타내는 정수입니다. 값은 QEMU의 Tx 대기열 크기에 따라 제한됩니다. 기본값은 1024입니다. 유효한 값은 16, 32, 64, 128, 256, 512, 1024입니다. |
Init.MaxRxBuffers | 할당될 RX 링 설명자 수를 나타내는 정수입니다. 값은 QEMU의 Tx 대기열 크기에 따라 제한됩니다. 기본값은 1024입니다. 유효한 값은 16, 32, 64, 128, 256, 512, 1024, 2048, 4096입니다. |
Offload.Tx.Checksum | TX 체크섬 오프로드 기능을 지정합니다. Red Hat Enterprise Linux 10에서 이 매개변수의 유효한 값은 다음과 같습니다.
|
Offload.Rx.Checksum | RX 체크섬 오프로드 기능을 지정합니다. Red Hat Enterprise Linux 10에서 이 매개변수의 유효한 값은 다음과 같습니다.
|
Offload.Tx.LSO | TX 대규모 세그먼트 오프로드(LSO) 기능을 지정합니다. Red Hat Enterprise Linux 10에서 이 매개변수의 유효한 값은 다음과 같습니다.
|
MinRxBufferPercent | RX 대기열에서 사용 가능한 최소 버퍼 양을 RX 버퍼의 총 양으로 지정합니다. 사용 가능한 버퍼의 실제 수가 해당 값보다 작으면 NetKVM 드라이버는 운영 체제에 낮은 리소스 조건을 나타냅니다(가능한 한 빨리 RX 버퍼를 반환하도록 요청).
최소 값(기본값) -
최대 값 - |
4.5. Windows 가상 머신에서 백그라운드 프로세스 최적화
Windows OS를 실행하는 VM(가상 머신)의 성능을 최적화하기 위해 다양한 Windows 프로세스를 구성하거나 비활성화할 수 있습니다.
구성을 변경하는 경우 특정 프로세스가 예상대로 작동하지 않을 수 있습니다.
프로세스
다음의 조합을 수행하여 Windows VM을 최적화할 수 있습니다.
- USB 또는 CD-ROM과 같은 사용되지 않는 장치를 제거하고 포트를 비활성화합니다.
- SuperFetch 및 Windows Search와 같은 백그라운드 서비스를 비활성화합니다. 서비스 중지에 대한 자세한 내용은 시스템 서비스 비활성화 또는 서비스 중지를 참조하십시오.
useplatformclock
을 비활성화합니다. 이렇게 하려면 다음 명령을 실행합니다.bcdedit /set useplatformclock No
# bcdedit /set useplatformclock No
Copy to Clipboard Copied! - 예약된 디스크 조각 모음과 같은 불필요한 예약된 작업을 검토하고 비활성화합니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 예약된 작업 비활성화 를 참조하십시오.
- 디스크가 암호화되지 않았는지 확인합니다.
- 서버 애플리케이션의 주기적인 활동 감소. 이를 통해 각 타이머를 편집할 수 있습니다. 자세한 내용은 Multimedia Timers 를 참조하십시오.
- VM에서 Server Manager 애플리케이션을 종료합니다.
- 안티바이러스 소프트웨어를 비활성화합니다. 안티바이러스를 비활성화하면 VM의 보안이 손상될 수 있습니다.
- 화면 보호기를 비활성화합니다.
- 사용하지 않는 경우 로그인 화면에 Windows OS를 유지합니다.
5장. 가상 머신 시작
RHEL 10에서 VM(가상 머신)을 시작하려면 명령줄 인터페이스 또는 웹 콘솔 GUI를 사용할 수 있습니다.
사전 요구 사항
- VM을 시작하기 전에 해당 VM을 생성해야 하며, 이상적으로 OS와 함께 설치해야 합니다. 가상 머신 생성 을 참조하십시오.
5.1. 명령줄을 사용하여 가상 머신 시작
CLI(명령줄 인터페이스)를 사용하여 종료 VM(가상 머신)을 시작하거나 저장된 VM을 복원할 수 있습니다. CLI를 사용하면 로컬 및 원격 VM을 모두 시작할 수 있습니다.
사전 요구 사항
- 이미 정의된 비활성 VM입니다.
- VM의 이름입니다.
원격 VM의 경우:
- VM이 있는 호스트의 IP 주소입니다.
- 호스트에 대한 루트 액세스 권한
-
libvirt의
시스템
연결을 사용하는 VM을 시작하려면 root 권한이 있거나 호스트의libvirt
사용자 그룹에 있어야 합니다. 자세한 내용은 가상화용 사용자 공간 연결 유형을 참조하십시오.
프로세스
로컬 VM의 경우
virsh start
유틸리티를 사용합니다.예를 들어 다음 명령은 demo-guest1 VM을 시작합니다.
virsh start demo-guest1
# virsh start demo-guest1 Domain 'demo-guest1' started
Copy to Clipboard Copied! 원격 호스트에 있는 VM의 경우 호스트에 대한 QEMU+SSH 연결과 함께
virsh start
유틸리티를 사용합니다.예를 들어 다음 명령은 192.0.2.1 호스트에서 demo-guest1 VM을 시작합니다.
virsh -c qemu+ssh://root@192.0.2.1/system start demo-guest1
# virsh -c qemu+ssh://root@192.0.2.1/system start demo-guest1 root@192.0.2.1's password: Domain 'demo-guest1' started
Copy to Clipboard Copied!
5.2. 웹 콘솔을 사용하여 가상 머신 시작
VM(가상 머신)이 shut off 상태인 경우 RHEL 10 웹 콘솔을 사용하여 시작할 수 있습니다. 호스트가 시작될 때 자동으로 시작하도록 VM을 구성할 수도 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
- 이미 정의된 비활성 VM입니다.
- VM의 이름입니다.
-
libvirt의
시스템
연결을 사용하는 VM을 시작하려면 root 권한이 있거나 호스트의libvirt
사용자 그룹에 있어야 합니다. 자세한 내용은 가상화용 사용자 공간 연결 유형을 참조하십시오.
프로세스
선택한 VM에 대한 자세한 정보와 함께 새 페이지가 열리고 VM 종료 및 삭제를 제어합니다.
- 클릭합니다.
선택 사항: 호스트가 시작될 때 자동으로 시작하도록 VM을 구성하려면 개요 섹션에서
자동 시작
확인란을 전환합니다.libvirt에서 관리하지 않는 네트워크 인터페이스를 사용하는 경우 systemd 구성도 추가로 변경해야 합니다. 그렇지 않으면 영향을 받는 VM을 시작하지 못할 수 있습니다. 호스트가 시작될 때 자동으로 가상 머신 시작을 참조하십시오.
5.3. 호스트가 시작될 때 자동으로 가상 머신 시작
실행 중인 VM(가상 머신)이 있는 호스트가 다시 시작되면 VM이 종료되고 기본적으로 수동으로 다시 시작해야 합니다. 호스트가 실행될 때마다 VM이 활성화되도록 하려면 자동으로 시작하도록 VM을 구성할 수 있습니다.
사전 요구 사항
프로세스
virsh autostart
유틸리티를 사용하여 호스트가 시작될 때 자동으로 시작하도록 VM을 구성합니다.예를 들어 다음 명령은 demo-guest1 VM이 자동으로 시작되도록 구성합니다.
virsh autostart demo-guest1
# virsh autostart demo-guest1 Domain 'demo-guest1' marked as autostarted
Copy to Clipboard Copied! libvirt
에서 관리하지 않는 네트워크 인터페이스를 사용하는 경우 systemd 구성도 추가로 변경해야 합니다. 그렇지 않으면 영향을 받는 VM을 시작하지 못할 수 있습니다.참고이러한 인터페이스는 예를 들면 다음과 같습니다.
-
NetworkManager
에서 생성한 브리지 장치 -
<
forward mode='bridge'/
>를 사용하도록 구성된 네트워크
systemd 구성 디렉터리 트리에서
virtqemud.service.d
디렉터리가 아직 없는 경우 해당 디렉터리를 생성합니다.mkdir -p /etc/systemd/system/virtqemud.service.d/
# mkdir -p /etc/systemd/system/virtqemud.service.d/
Copy to Clipboard Copied! 이전에 만든 디렉터리에서
10-network-online.conf
systemd 장치 재정의 파일을 만듭니다. 이 파일의 내용은virtqemud
서비스의 기본 systemd 구성을 재정의합니다.touch /etc/systemd/system/virtqemud.service.d/10-network-online.conf
# touch /etc/systemd/system/virtqemud.service.d/10-network-online.conf
Copy to Clipboard Copied! 10-network-online.conf
파일에 다음 행을 추가합니다. 이 구성 변경을 통해 systemd는 호스트의 네트워크가 준비된 후에만virtqemud
서비스를 시작할 수 있습니다.[Unit] After=network-online.target
[Unit] After=network-online.target
Copy to Clipboard Copied!
-
검증
VM 구성을 보고 autostart 옵션이 활성화되어 있는지 확인합니다.
예를 들어 다음 명령은 autostart 옵션을 포함하여 demo-guest1 VM에 대한 기본 정보를 표시합니다.
virsh dominfo demo-guest1
# virsh dominfo demo-guest1 Id: 2 Name: demo-guest1 UUID: e46bc81c-74e2-406e-bd7a-67042bae80d1 OS Type: hvm State: running CPU(s): 2 CPU time: 385.9s Max memory: 4194304 KiB Used memory: 4194304 KiB Persistent: yes Autostart: enable Managed save: no Security model: selinux Security DOI: 0 Security label: system_u:system_r:svirt_t:s0:c873,c919 (enforcing)
Copy to Clipboard Copied! libvirt에서 관리하지 않는 네트워크 인터페이스를 사용하는 경우
10-network-online.conf
파일의 콘텐츠가 다음 출력과 일치하는지 확인합니다.cat /etc/systemd/system/virtqemud.service.d/10-network-online.conf [Unit] After=network-online.target
$ cat /etc/systemd/system/virtqemud.service.d/10-network-online.conf [Unit] After=network-online.target
Copy to Clipboard Copied!
6장. 가상 머신을 Q35 머신 유형으로 변환
RHEL 10에서는 i440fx
머신 유형이 더 이상 사용되지 않으며 향후 주요 RHEL 버전에서 제거됩니다. 또한 q35
시스템 유형을 사용하면 AHCI(Advanced Host Controller Interface) 및 vIOMMU(가상 Input-output memory management unit) 에뮬레이션과 같은 i440fx
와 비교하여 추가 이점이 있습니다.
따라서 Red Hat은 대신 q35
를 사용하도록 i440fx
를 사용하는 VM(가상 머신)을 변환하는 것이 좋습니다. 아직 정의하지 않은 VM 구성을 변환할 수도 있습니다.
고려 사항
VM의 시스템 유형 변경은 물리적 시스템의 마더보드를 변경하는 것과 유사합니다. 결과적으로 i440fx
에서 q35
로 VM의 시스템 유형을 변환하면 경우에 따라 게스트 운영 체제의 기능에 문제가 발생할 수 있습니다.
사전 요구 사항
RHEL 10 호스트의 VM에서
i440fx
시스템 유형을 사용하고 있습니다. 이를 확인하려면 다음 명령을 사용합니다.virsh dumpxml <vm-name> | grep machine
# virsh dumpxml <vm-name> | grep machine <type arch='x86_64' machine='pc-i440fx-10.0.0'>hvm</type>
Copy to Clipboard Copied! VM의 원래 구성을 백업하여 필요한 경우 변환 및 재해 복구에 사용할 수 있습니다.
virsh dumpxml <vm-name> > <vm-name>-backup.xml
# virsh dumpxml <vm-name> > <vm-name>-backup.xml
Copy to Clipboard Copied!
정의되지 않은 VM의 절차
Q35를 사용하도록 VM의 구성을 조정합니다. 소스 구성으로 이전에 생성한 백업 파일을 사용합니다.
cat <vm-name>-backup.xml | virt-xml --edit --convert-to-q35 > <vm-name-q35>.xml
# cat <vm-name>-backup.xml | virt-xml --edit --convert-to-q35 > <vm-name-q35>.xml
Copy to Clipboard Copied! VM을 정의합니다.
virsh define <vm-name-q35>.xml
# virsh define <vm-name-q35>.xml
Copy to Clipboard Copied!
정의된 VM의 절차
Q35를 사용하도록 VM의 구성을 조정합니다.
virt-xml <vm-name> --edit --convert-to-q35
# virt-xml <vm-name> --edit --convert-to-q35
Copy to Clipboard Copied! VM이 실행 중이면 종료합니다.
virsh shutdown <vm-name>
# virsh shutdown <vm-name>
Copy to Clipboard Copied!
검증
VM의 시스템 유형을 표시합니다.
virsh dumpxml <vm-name> | grep machine
# virsh dumpxml <vm-name> | grep machine <type arch='x86_64' machine='q35'>hvm</type>
Copy to Clipboard Copied! - VM을 시작하고 게스트 운영 체제에 로그인할 수 있는지 확인합니다.
문제 해결
- Windows 게스트 운영 체제를 사용하고 VM에서 변환 후 부팅 장치를 찾을 수 없는 경우 안전 모드로 부팅한 다음 VM을 재부팅합니다.
머신 유형을 변경하면 VM이 작동하지 않는 경우 백업 구성을 기반으로 새 VM을 정의합니다.
virsh define <vm-name>-backup.xml
# virsh define <vm-name>-backup.xml
Copy to Clipboard Copied!
7장. 가상 머신에 연결
RHEL 10의 VM(가상 머신)과 상호 작용하려면 다음 중 하나를 수행하여 VM에 연결해야 합니다.
- 웹 콘솔을 사용하지 않고 VM 그래픽 디스플레이와 상호 작용해야 하는 경우 Virt Viewer 애플리케이션을 사용합니다. 자세한 내용은 명령줄을 사용하여 가상 머신 그래픽 콘솔 열기를 참조하십시오.
- 그래픽 디스플레이가 불가능하거나 필요하지 않은 경우 SSH 터미널 연결을 사용합니다.
- 네트워크를 사용하여 시스템에서 가상 시스템에 연결할 수 없는 경우 virsh 콘솔을 사용합니다.
연결하는 VM이 로컬 호스트가 아닌 원격 호스트에 있는 경우 원격 호스트에 더 편리하게 액세스할 수 있도록 시스템을 구성할 수 있습니다.
7.1. 웹 콘솔을 사용하여 가상 머신에 연결
웹 콘솔 인터페이스를 사용하여 실행 중인 KVM 가상 머신에 연결할 수 있습니다.
7.1.1. 웹 콘솔에서 가상 머신 그래픽 콘솔 열기
VM(가상 머신) 콘솔 인터페이스를 사용하면 RHEL 10 웹 콘솔에서 선택한 VM의 그래픽 출력을 볼 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
- 호스트와 VM 둘 다 그래픽 인터페이스를 지원하는지 확인합니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
VM에 대한 개요 및 콘솔 섹션이 포함된 새 페이지가 열립니다.
VNC 콘솔은 웹 인터페이스의 메뉴 아래에 나타납니다.
그래픽 콘솔이 웹 인터페이스에 나타납니다.
확장을 클릭합니다
이제 실제 시스템과 상호 작용하는 것과 동일한 방식으로 마우스 및 키보드를 사용하여 VM 콘솔과 상호 작용할 수 있습니다. VM 콘솔의 디스플레이는 VM에서 수행되는 활동을 반영합니다.
웹 콘솔이 실행 중인 호스트는 Ctrl+Alt+Del 과 같은 특정 키 조합을 가로채어 VM으로 전송되지 않을 수 있습니다.
이러한 키 조합을 보내려면
메뉴를 클릭하고 전송할 키 시퀀스를 선택합니다.예를 들어 VM에 Ctrl+Alt+Del 조합을 보내려면
클릭하고 메뉴 항목을 선택합니다.선택 사항: 선택한 VM의 그래픽 콘솔을 원격 뷰어(예: Virt Viewer)에 표시할 수도 있습니다.
- 콘솔 드롭다운 메뉴에서 선택합니다.
virt viewer,
.vv
, 파일이 다운로드됩니다.파일을 열어 Virt Viewer를 시작합니다.
웹 콘솔 내에서 Virt Viewer를 시작할 수 있습니다. 다른 VNC 원격 뷰어는 수동으로 시작할 수 있습니다.
문제 해결
- 그래픽 콘솔을 클릭해도 효과가 없는 경우 콘솔을 전체 화면으로 확장합니다. 마우스 커서 오프셋에서 알려진 문제입니다.
웹 콘솔에서 원격 뷰어를 시작하지 않거나 최적이 아닌 경우 다음 프로토콜을 사용하여 뷰어 애플리케이션과 수동으로 연결할 수 있습니다.
-
address - 기본 주소는
127.0.0.1
입니다./etc/libvirt/qemu.conf
에서vnc_listen
매개변수를 수정하여 호스트의 IP 주소로 변경할 수 있습니다. - VNC 포트 - 5901
-
address - 기본 주소는
7.1.2. 웹 콘솔에서 가상 머신 직렬 콘솔 열기
RHEL 10 웹 콘솔에서 선택한 VM(가상 머신)의 직렬 콘솔을 볼 수 있습니다. 이 기능은 호스트 시스템 또는 VM이 그래픽 인터페이스로 구성되지 않은 경우 유용합니다.
직렬 콘솔에 대한 자세한 내용은 명령줄 인터페이스를 사용하여 가상 머신 직렬 콘솔 열기를 참조하십시오.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
VM에 대한 개요 및 콘솔 섹션이 포함된 새 페이지가 열립니다.
그래픽 콘솔이 웹 인터페이스에 나타납니다.
VM에서 직렬 콘솔의 연결을 해제하고 다시 연결할 수 있습니다.
- VM에서 직렬 콘솔의 연결을 끊으려면 를 클릭합니다.
- 직렬 콘솔을 VM에 다시 연결하려면 연결을 클릭합니다.
7.2. 명령줄을 사용하여 가상 머신 그래픽 콘솔 열기
Virt Viewer
유틸리티에서 열어 KVM 가상 머신(VM)의 그래픽 콘솔에 연결할 수 있습니다.
사전 요구 사항
- 시스템 및 연결하는 VM은 그래픽 디스플레이를 지원해야 합니다.
- 대상 VM이 원격 호스트에 있는 경우 호스트에 대한 연결 및 루트 액세스 권한이 필요합니다.
프로세스
로컬 VM에 연결하려면 다음 명령을 사용하고 guest-name 을 연결할 VM 이름으로 교체합니다.
virt-viewer guest-name
# virt-viewer guest-name
Copy to Clipboard Copied! 원격 VM에 연결하려면 SSH 프로토콜과 함께
virt-viewer
명령을 사용합니다. 예를 들어 다음 명령은 원격 시스템 192.0.2.1에 있는 guest-name 이라는 VM에 root로 연결합니다. 이 연결에는 192.0.2.1에 대한 루트 인증도 필요합니다.virt-viewer --direct --connect qemu+ssh://root@192.0.2.1/system guest-name
# virt-viewer --direct --connect qemu+ssh://root@192.0.2.1/system guest-name root@192.0.2.1's password:
Copy to Clipboard Copied!
검증
연결이 올바르게 작동하는 경우 VM 디스플레이가 Virt Viewer
창에 표시됩니다.
실제 시스템과 상호 작용하는 것과 동일한 방식으로 마우스 및 키보드를 사용하여 VM 콘솔과 상호 작용할 수 있습니다. VM 콘솔의 디스플레이는 VM에서 수행되는 활동을 반영합니다.
문제 해결
- 그래픽 콘솔을 클릭해도 효과가 없는 경우 콘솔을 전체 화면으로 확장합니다. 마우스 커서 오프셋에서 알려진 문제입니다.
7.3. SSH를 사용하여 가상 머신에 연결
SSH 연결 프로토콜을 사용하여 VM(가상 머신) 터미널과 상호 작용할 수 있습니다.
사전 요구 사항
- 대상 VM에 대한 네트워크 연결 및 루트 액세스 권한이 있습니다.
- 대상 VM이 원격 호스트에 있는 경우 해당 호스트에 대한 연결 및 root 액세스 권한도 있습니다.
VM 네트워크는
libvirt
에서 생성된dnsmasq
에 의해 IP 주소를 할당합니다. 예를 들어libvirt
NAT 네트워크의 경우입니다.특히 VM에서 다음 네트워크 구성 중 하나를 사용하는 경우 SSH를 사용하여 VM에 연결할 수 없습니다.
-
hostdev
인터페이스 - 직접 인터페이스
- 브리지 상호 작용
-
libvirt-nss
구성 요소가 VM의 호스트에 설치되어 활성화되어 있습니다. 그렇지 않은 경우 다음을 수행합니다.libvirt-nss
패키지를 설치합니다.dnf install libvirt-nss
# dnf install libvirt-nss
Copy to Clipboard Copied! /etc/nsswitch.conf
파일을 편집하고libvirt_guest
를hosts
행에 추가합니다.... passwd: compat shadow: compat group: compat hosts: files libvirt_guest dns ...
... passwd: compat shadow: compat group: compat hosts: files libvirt_guest dns ...
Copy to Clipboard Copied!
프로세스
원격 VM에 연결할 때 먼저 물리적 호스트에 SSH로 연결합니다. 다음 예제에서는 루트 자격 증명을 사용하여 호스트 시스템
192.0.2.1
에 연결하는 방법을 보여줍니다.ssh root@192.0.2.1
# ssh root@192.0.2.1 root@192.0.2.1's password: Last login: Mon Sep 24 12:05:36 2021 root~#
Copy to Clipboard Copied! VM의 이름과 사용자 액세스 자격 증명을 사용하여 연결합니다. 예를 들어 다음은 루트 인증 정보를 사용하여
testguest1
VM에 연결합니다.ssh root@testguest1
# ssh root@testguest1 root@testguest1's password: Last login: Wed Sep 12 12:05:36 2018 root~]#
Copy to Clipboard Copied!
문제 해결
VM 이름을 모르는 경우
virsh list --all
명령을 사용하여 호스트에서 사용 가능한 모든 VM을 나열할 수 있습니다.virsh list --all
# virsh list --all Id Name State ---------------------------------------------------- 2 testguest1 running - testguest2 shut off
Copy to Clipboard Copied!
7.4. 명령줄을 사용하여 가상 머신 직렬 콘솔 열기
virsh console
명령을 사용하면 VM(가상 머신)의 직렬 콘솔에 연결할 수 있습니다.
이 기능은 VM: * VNC 프로토콜을 제공하지 않으므로 GUI 툴에 대한 비디오 디스플레이를 제공하지 않을 때 유용합니다.
- 에는 네트워크 연결이 없으므로 SSH를 사용하여 상호 작용할 수 없습니다.
사전 요구 사항
호스트의 GRUB 부트 로더는 직렬 콘솔을 사용하도록 구성해야 합니다. 확인하려면 호스트의
/etc/default/grub
파일에GRUB_TERMINAL=serial
매개변수가 포함되어 있는지 확인합니다.sudo grep GRUB_TERMINAL /etc/default/grub
$ sudo grep GRUB_TERMINAL /etc/default/grub GRUB_TERMINAL=serial
Copy to Clipboard Copied! VM에는 콘솔
type='pty'와 같은 직렬 콘솔
장치가 구성되어 있어야 합니다. 확인하려면 다음을 수행합니다.virsh dumpxml vm-name | grep console
# virsh dumpxml vm-name | grep console <console type='pty' tty='/dev/pts/2'> </console>
Copy to Clipboard Copied! VM에는 커널 명령줄에 직렬 콘솔이 구성되어 있어야 합니다. 이를 확인하려면 VM의
cat /proc/cmdline
명령 출력에 console=<console-name>이 포함되어야 합니다. 여기서 < console-name >은 아키텍처에 따라 다릅니다.AMD64 및 Intel 64의 경우:
ttyS0
참고이 절차의 다음 명령은
ttyS0
을 사용합니다.cat /proc/cmdline BOOT_IMAGE=/vmlinuz-6.12.0-0.el10_0.x86_64 root=/dev/mapper/rhel-root ro console=tty0 console=ttyS0,9600n8 rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb
# cat /proc/cmdline BOOT_IMAGE=/vmlinuz-6.12.0-0.el10_0.x86_64 root=/dev/mapper/rhel-root ro console=tty0 console=ttyS0,9600n8 rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb
Copy to Clipboard Copied! 직렬 콘솔이 VM에 올바르게 설정되지 않은 경우 virsh 콘솔 을 사용하여 VM에 연결하면 응답하지 않는 게스트 콘솔에 연결됩니다. 그러나 Ctrl+] 바로 가기를 사용하여 응답하지 않는 콘솔을 계속 종료할 수 있습니다.
VM에서 직렬 콘솔을 설정하려면 다음을 수행합니다.
VM에서
console=ttyS0
커널 옵션을 활성화합니다.grubby --update-kernel=ALL --args="console=ttyS0"
# grubby --update-kernel=ALL --args="console=ttyS0"
Copy to Clipboard Copied! 변경 사항이 적용되지 않을 수 있는 커널 옵션을 지웁니다.
grub2-editenv - unset kernelopts
# grub2-editenv - unset kernelopts
Copy to Clipboard Copied! - VM을 재부팅합니다.
serial-getty@<console-name>
서비스를 활성화해야 합니다. 예를 들어 AMD64 및 Intel 64에서 다음을 수행합니다.systemctl status serial-getty@ttyS0.service
# systemctl status serial-getty@ttyS0.service ○ serial-getty@ttyS0.service - Serial Getty on ttyS0 Loaded: loaded (/usr/lib/systemd/system/serial-getty@.service; enabled; preset: enabled)
Copy to Clipboard Copied!
프로세스
호스트 시스템에서
virsh console
명령을 사용합니다.libvirt
드라이버가 안전한 콘솔 처리를 지원하는 경우 다음 예제는 guest1 VM에 연결합니다.virsh console guest1 --safe
# virsh console guest1 --safe Connected to domain 'guest1' Escape character is ^] Subscription-name Kernel 3.10.0-948.el7.x86_64 on an x86_64 localhost login:
Copy to Clipboard Copied! - 표준 명령줄 인터페이스와 동일한 방식으로 virsh 콘솔과 상호 작용할 수 있습니다.
7.5. 원격 가상화 호스트에 더 쉽게 액세스 설정
libvirt 유틸리티를 사용하여 원격 호스트 시스템에서 VM을 관리하는 경우 -c qemu+ssh://root@hostname/system
구문을 사용해야 합니다. 예를 들어 192.0.2.1
호스트에서 root로 virsh list
명령을 사용하려면 다음을 수행합니다.
virsh -c qemu+ssh://root@192.0.2.1/system list
# virsh -c qemu+ssh://root@192.0.2.1/system list
root@192.0.2.1's password:
Id Name State
---------------------------------
1 remote-guest running
그러나 SSH 및 libvirt 구성을 수정하여 연결 세부 정보를 완전히 지정해야 할 필요성을 제거할 수 있습니다. 예를 들면 다음과 같습니다.
virsh -c remote-host list
# virsh -c remote-host list
root@192.0.2.1's password:
Id Name State
---------------------------------
1 remote-guest running
이러한 개선을 활성화하려면 아래 지침을 따르십시오.
프로세스
다음 세부 정보를 사용하여
~/.ssh/config
파일을 편집합니다. 여기서 host-alias 는 특정 원격 호스트와 관련된 단축된 이름 및 root@192.0.2.1의 별칭이며 hosturl 은 호스트의 URL 주소입니다.vi ~/.ssh/config
# vi ~/.ssh/config Host example-host-alias User root Hostname 192.0.2.1
Copy to Clipboard Copied! 다음 세부 정보를 사용하여
/etc/libvirt/libvirt.conf
파일을 편집합니다. example-qemu-host-alias 는 QEMU 및 libvirt 유틸리티가qemu+ssh://192.0.2.1/system
에 대해 원하는 호스트 example-host-alias 와 연결하는 호스트 별칭입니다.vi /etc/libvirt/libvirt.conf
# vi /etc/libvirt/libvirt.conf uri_aliases = [ "example-qemu-host-alias=qemu+ssh://example-host-alias/system", ]
Copy to Clipboard Copied!
검증
로컬 시스템에서
-c qemu-host-alias
매개변수가 추가된 libvirt 기반 유틸리티를 사용하여 원격 VM을 관리할 수 있는지 확인합니다. 원격 호스트의 SSH를 통해 명령이 자동으로 수행됩니다.예를 들어 다음 항목이 192.0.2.1 원격 호스트의 VM을 나열하고, 에 대한 연결이 이전 단계에서 example-qemu-host-alias 로 설정되어 있는지 확인합니다.
virsh -c example-qemu-host-alias list
# virsh -c example-qemu-host-alias list root@192.0.2.1's password: Id Name State ---------------------------------------- 1 example-remote-guest running
Copy to Clipboard Copied! 참고virsh
외에도-c
(또는--connect
) 옵션과 위에 설명된 원격 호스트 액세스 구성은 다음 유틸리티에서 사용할 수 있습니다.
다음 단계
단일 원격 호스트에서만 libvirt 유틸리티를 사용하려는 경우 libvirt 기반 유틸리티의 기본 대상으로 특정 연결을 설정할 수도 있습니다.
그러나 로컬 호스트 또는 다른 원격 호스트에서 VM을 관리하려는 경우에도 이 작업을 수행할 수 없습니다.
/etc/libvirt/libvirt.conf
파일을 편집하고uri_default
매개변수 값을 기본 libvirt 대상으로 example-qemu-host-alias 로 설정할 수 있습니다.These can be used in cases when no URI is supplied by the application (@uri_default also prevents probing of the hypervisor driver).
# These can be used in cases when no URI is supplied by the application # (@uri_default also prevents probing of the hypervisor driver). # uri_default = "example-qemu-host-alias"
Copy to Clipboard Copied! 결과적으로 모든 libvirt 기반 명령이 지정된 원격 호스트에서 자동으로 수행됩니다.
virsh list
$ virsh list root@192.0.2.1's password: Id Name State --------------------------------- 1 example-remote-guest running
Copy to Clipboard Copied!
-
-c
(또는--connect
) 옵션을 사용하여virt-install
을 실행할 수 있습니다.
원격 호스트의 virsh
명령.
8장. 가상 머신 종료 및 재시작
RHEL 10에서는 명령줄을 사용하거나 웹 콘솔 GUI를 사용하여 가상 머신을 종료하거나 다시 시작할 수 있습니다.
8.1. 명령줄을 사용하여 가상 머신 종료
VM(가상 머신)을 종료하려면 VM의 응답 여부에 따라 다른 단계가 필요합니다.
반응형 VM 종료
게스트에 연결하는 경우 shutdown 명령 또는 게스트 운영 체제에 적합한 GUI 요소를 사용합니다.
참고GNOME 데스크탑을 사용하는 Linux 게스트와 같은 일부 환경에서는 게스트를 일시 중지하거나 축소하는 데 GUI 전원 버튼을 사용하여 대신 VM을 종료할 수 있습니다.
또는 호스트에서
virsh shutdown
명령을 사용합니다.VM이 로컬 호스트에 있는 경우:
virsh shutdown demo-guest1
# virsh shutdown demo-guest1 Domain 'demo-guest1' is being shutdown
Copy to Clipboard Copied! VM이 원격 호스트에 있는 경우 이 예제에서 192.0.2.1:
virsh -c qemu+ssh://root@192.0.2.1/system shutdown demo-guest1
# virsh -c qemu+ssh://root@192.0.2.1/system shutdown demo-guest1 root@192.0.2.1's password: Domain 'demo-guest1' is being shutdown
Copy to Clipboard Copied!
응답하지 않는 VM 종료
VM을 강제로 종료하려면 예를 들어 응답하지 않는 경우 호스트에서 virsh destroy
명령을 사용합니다.
virsh destroy demo-guest1
# virsh destroy demo-guest1
Domain 'demo-guest1' destroyed
virsh destroy
명령은 실제로 VM 구성 또는 디스크 이미지를 삭제하거나 제거하지 않습니다. 물리적 시스템에서 전원 코드를 가져오는 것과 유사하게 VM의 실행 중인 인스턴스만 종료합니다.
드물지만 virsh 제거
로 인해 VM의 파일 시스템이 손상될 수 있으므로 다른 모든 종료 방법이 실패한 경우에만 이 명령을 사용하십시오.
검증
호스트에서 VM 목록을 표시하여 상태를 확인합니다.
virsh list --all
# virsh list --all Id Name State ------------------------------------------ 1 demo-guest1 shut off
Copy to Clipboard Copied!
8.2. 웹 콘솔을 사용하여 가상 머신 종료
VM(가상 머신)이 실행 중 상태인 경우 RHEL 10 웹 콘솔을 사용하여 종료할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
- 인터페이스에서 종료할 VM 행을 찾습니다.
행 오른쪽에서
을 클릭합니다.VM이 종료됩니다.
문제 해결
- VM이 종료되지 않으면 Shut Down 버튼 옆에 메뉴 버튼을 클릭하고 을 선택합니다.
- 응답하지 않는 VM을 종료하려면 메뉴에서 마스킹할 수 없는 인터럽트 를 보낼 수도 있습니다.
8.3. 명령줄을 사용하여 가상 머신 재시작
VM(가상 머신)을 다시 시작하려면 VM의 응답 여부에 따라 다른 단계가 필요합니다.
반응형 VM 다시 시작
- 게스트에 연결된 경우 다시 시작 명령 또는 게스트 운영 체제에 적합한 GUI 요소를 사용합니다.
또는 호스트에서
virsh reboot
명령을 사용합니다.VM이 로컬 호스트에 있는 경우:
virsh reboot demo-guest1
# virsh reboot demo-guest1 Domain 'demo-guest1' is being rebooted
Copy to Clipboard Copied! VM이 원격 호스트에 있는 경우 이 예제에서 192.0.2.1:
virsh -c qemu+ssh://root@192.0.2.1/system reboot demo-guest1
# virsh -c qemu+ssh://root@192.0.2.1/system reboot demo-guest1 root@192.0.2.1's password: Domain 'demo-guest1' is being rebooted
Copy to Clipboard Copied!
응답하지 않는 VM 다시 시작
VM을 강제로 다시 시작하려면 예를 들어 응답하지 않는 경우 호스트에서 virsh destroy
명령을 사용하여 VM을 다시 시작합니다.
VM을 강제로 종료합니다.
virsh destroy demo-guest1
# virsh destroy demo-guest1 Domain 'demo-guest1' destroyed
Copy to Clipboard Copied! 참고virsh destroy
명령은 실제로 VM 구성 또는 디스크 이미지를 삭제하거나 제거하지 않습니다. 물리적 시스템에서 전원 코드를 가져오는 것과 유사하게 VM의 실행 중인 인스턴스만 종료합니다.드물지만
virsh 제거
로 인해 VM의 파일 시스템이 손상될 수 있으므로 다른 모든 종료 방법이 실패한 경우에만 이 명령을 사용하십시오.VM을 다시 시작합니다.
virsh start demo-guest1
# virsh start demo-guest1 Domain 'demo-guest1' started
Copy to Clipboard Copied!
검증
호스트에서 VM 목록을 표시하여 상태를 확인합니다.
virsh list --all
# virsh list --all Id Name State ------------------------------------------ 1 demo-guest1 running
Copy to Clipboard Copied!
8.4. 웹 콘솔을 사용하여 가상 머신 재시작
VM(가상 머신)이 실행 중 상태인 경우 RHEL 10 웹 콘솔을 사용하여 다시 시작할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
- 인터페이스에서 재시작할 VM 행을 찾습니다.
행 오른쪽에 있는 메뉴 버튼을 클릭합니다
작업의 드롭다운 메뉴가 표시됩니다.
드롭다운 메뉴에서
를 클릭합니다.VM이 종료되고 다시 시작됩니다.
문제 해결
- VM이 재시작되지 않으면 Reboot 버튼 옆에 메뉴 버튼을 클릭하고 를 선택합니다.
- 응답하지 않는 VM을 종료하려면 메뉴에서 마스킹할 수 없는 인터럽트 를 보낼 수도 있습니다.
9장. 가상 머신 삭제
RHEL 10에서 가상 머신을 삭제하려면 명령줄 인터페이스 또는 웹 콘솔 GUI 를 사용합니다.
9.1. 명령줄을 사용하여 가상 머신 삭제
VM(가상 머신)을 삭제하려면 명령줄을 사용하여 호스트에서 XML 구성 및 관련 스토리지 파일을 제거할 수 있습니다.
사전 요구 사항
- VM에서 중요한 데이터를 백업합니다.
- VM을 종료합니다.
- 다른 VM에서 동일한 연결된 스토리지를 사용하지 않는지 확인합니다.
프로세스
virsh undefine
유틸리티를 사용합니다.예를 들어 다음 명령은 guest1 VM, 연결된 스토리지 볼륨, 비휘발성 RAM(있는 경우)을 제거합니다.
virsh undefine guest1 --remove-all-storage --nvram
# virsh undefine guest1 --remove-all-storage --nvram Domain 'guest1' has been undefined Volume 'vda'(/home/images/guest1.qcow2) removed.
Copy to Clipboard Copied!
9.2. 웹 콘솔을 사용하여 가상 머신 삭제
RHEL 10 웹 콘솔을 사용하여 호스트에서 VM(가상 머신) 및 관련 스토리지 파일을 삭제할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
- VM에서 중요한 데이터를 백업합니다.
- 다른 VM에서 동일한 연결된 스토리지를 사용하지 않는지 확인합니다.
- 선택 사항: VM을 종료합니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
다양한 VM 작업에 대한 제어가 포함된 드롭다운 메뉴가 표시됩니다.
확인 대화 상자가 나타납니다.
- 선택 사항: VM과 연결된 스토리지 파일 전체 또는 일부를 삭제하려면 삭제하려는 스토리지 파일 옆에 있는 확인란을 선택합니다.
VM 및 선택한 스토리지 파일이 삭제됩니다.
10장. 가상 머신에 대한 정보 보기
RHEL 10에서 가상화 배포의 모든 측면을 조정하거나 문제를 해결해야 하는 경우 일반적으로 수행해야 하는 첫 번째 단계는 VM(가상 머신)의 현재 상태 및 구성에 대한 정보를 확인하는 것입니다. 이렇게 하려면 명령줄 또는 웹 콘솔 을 사용할 수 있습니다. VM의 XML 구성에서 정보를 볼 수도 있습니다.
10.1. 명령줄을 사용하여 가상 머신 정보 보기
호스트 및 해당 구성에서 VM(가상 머신)에 대한 정보를 검색하려면 virsh
명령줄 유틸리티를 사용하면 됩니다.
프로세스
호스트의 VM 목록을 가져오려면 다음을 수행합니다.
virsh list --all
# virsh list --all Id Name State ---------------------------------- 1 testguest1 running - testguest2 shut off - testguest3 shut off - testguest4 shut off
Copy to Clipboard Copied! 특정 VM에 대한 기본 정보를 얻으려면 다음을 수행합니다.
virsh dominfo _testguest1
# virsh dominfo _testguest1 Id: 1 Name: testguest1 UUID: a973666f-2f6e-415a-8949-75a7a98569e1 OS Type: hvm State: running CPU(s): 2 CPU time: 188.3s Max memory: 4194304 KiB Used memory: 4194304 KiB Persistent: yes Autostart: disable Managed save: no Security model: selinux Security DOI: 0 Security label: system_u:system_r:svirt_t:s0:c486,c538 (enforcing)
Copy to Clipboard Copied! 특정 VM의 전체 XML 구성을 가져오려면 다음을 수행합니다.
virsh dumpxml testguest2
# virsh dumpxml testguest2 <domain type='kvm' id='1'> <name>testguest2</name> <uuid>a973434f-2f6e-4ěša-8949-76a7a98569e1</uuid> <metadata> [...]
Copy to Clipboard Copied! VM의 디스크 및 기타 블록 장치에 대한 정보는 다음과 같습니다.
virsh domblklist testguest3
# virsh domblklist testguest3 Target Source --------------------------------------------------------------- vda /var/lib/libvirt/images/testguest3.qcow2 sda - sdb /home/username/Downloads/virt-p2v-1.36.10-1.el7.iso
Copy to Clipboard Copied! VM의 파일 시스템 및 마운트 지점에 대한 정보를 얻으려면 다음을 수행합니다.
virsh domfsinfo testguest3
# virsh domfsinfo testguest3 Mountpoint Name Type Target ------------------------------------ / dm-0 xfs vda /boot vda2 xfs vda /boot/efi vda1 vfat vda
Copy to Clipboard Copied!
특정 VM의 vCPU에 대한 자세한 정보를 얻으려면 다음을 수행합니다.
virsh vcpuinfo testguest4
# virsh vcpuinfo testguest4 VCPU: 0 CPU: 3 State: running CPU time: 103.1s CPU Affinity: yyyy VCPU: 1 CPU: 0 State: running CPU time: 88.6s CPU Affinity: yyyy
Copy to Clipboard Copied!
특정 VM의 모든 네트워크 인터페이스를 나열하려면 다음을 수행합니다.
virsh domiflist testguest5
# virsh domiflist testguest5 Interface Type Source Model MAC ------------------------------------------------------------- vnet0 network default virtio 52:54:00:ad:23:fd vnet1 bridge br0 virtio 52:54:00:40:d4:9d
Copy to Clipboard Copied!
10.2. 웹 콘솔을 사용하여 가상 머신 정보 보기
웹 콘솔을 사용하면 사용 가능한 VM(가상 머신), 디스크, 스토리지 풀 및 네트워크에 대한 요약된 정보가 포함된 가상화 개요에 액세스할 수 있습니다.
사전 요구 사항
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
웹 콘솔의 사이드 메뉴에서
를 클릭합니다.사용 가능한 스토리지 풀, 사용 가능한 네트워크 및 웹 콘솔이 연결된 VM에 대한 정보가 대화 상자가 표시됩니다.
정보에는 다음이 포함됩니다.
- 스토리지 풀 - 웹 콘솔과 해당 상태에서 액세스할 수 있는 활성 또는 비활성 스토리지 풀 수입니다.
- 네트워크 - 웹 콘솔과 해당 상태에서 액세스할 수 있는 활성 또는 비활성 네트워크 수입니다.
- name - VM의 이름입니다.
- connection - libvirt 연결, 시스템 또는 세션의 유형입니다.
- State - VM의 상태입니다.
- 리소스 사용량 - VM의 메모리 및 가상 CPU 사용량입니다.
- Disks - VM에 할당된 디스크에 대한 자세한 정보입니다.
가상 네트워크 인터페이스 설정에 대한 변경 사항은 VM을 다시 시작한 후에만 적용됩니다.
또한 MAC 주소는 VM이 종료된 경우에만 수정할 수 있습니다.
10.3. 가상 머신 XML 구성 샘플
VM의 XML 구성( 도메인 XML 이라고도 함)은 VM의 설정 및 구성 요소를 결정합니다. 다음 표에서는 VM(가상 머신)의 샘플 XML 구성 섹션과 내용을 설명합니다.
VM의 XML 구성을 가져오려면 virsh dumpxml
명령 뒤에 VM의 이름을 사용할 수 있습니다.
virsh dumpxml testguest1
# virsh dumpxml testguest1
도메인 XML 섹션 | 설명 |
---|---|
<domain type='kvm'> <name>Testguest1</name> <uuid>ec6fbaa1-3eb4-49da-bf61-bb02fbec4967</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory>
| 1024MiB가 할당된 Testguest1 이라는 KVM 가상 머신입니다. |
<vcpu placement='static'>1</vcpu>
| VM은 단일 가상 CPU(vCPU)로 할당됩니다. |
<os> <type arch='x86_64' machine='pc-q35-rhel10.0.0'>hvm</type> <boot dev='hd'/> </os>
| 시스템 아키텍처는 AMD64 및 Intel 64 아키텍처로 설정되며 Intel Q35 시스템 유형을 사용하여 기능 호환성을 결정합니다. OS는 하드 디스크 드라이브에서 부팅되도록 설정됩니다. |
<features> <acpi/> <apic/> </features>
| acpi 및 apic 하이퍼바이저 기능은 비활성화되어 있습니다. |
<cpu mode='host-model' check='partial'/>
|
기능 XML의 호스트 CPU 정의( |
<clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock>
| VM의 가상 하드웨어 클록은 UTC 시간대를 사용합니다. 또한 QEMU 하이퍼바이저와 동기화할 세 가지 타이머가 설정됩니다. |
<on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash>
|
VM의 전원을 끄거나 OS가 예기치 않게 종료되면 |
<pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm>
| 이 VM에 대해 S3 및 S4 ACPI 절전 상태가 비활성화되어 있습니다. |
<devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/Testguest.qcow2'/> <target dev='vda' bus='virtio'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='sdb' bus='sata'/> <readonly/> </disk>
|
VM은 에뮬레이션을 위해
첫 번째 디스크는 호스트에 저장된
두 번째 디스크는 가상화된 CD-ROM이며 논리 장치 이름은 |
<controller type='usb' index='0' model='qemu-xhci' ports='15'/> <controller type='sata' index='0'/> <controller type='pci' index='0' model='pcie-root'/> <controller type='pci' index='1' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='1' port='0x10'/> </controller> <controller type='pci' index='2' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='2' port='0x11'/> </controller> <controller type='pci' index='3' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='3' port='0x12'/> </controller> <controller type='pci' index='4' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='4' port='0x13'/> </controller> <controller type='pci' index='5' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='5' port='0x14'/> </controller> <controller type='pci' index='6' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='6' port='0x15'/> </controller> <controller type='pci' index='7' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='7' port='0x16'/> </controller> <controller type='virtio-serial' index='0'/>
|
VM은 단일 컨트롤러를 사용하여 USB 장치를 연결하고 PCI-Express(PCIe) 장치의 루트 컨트롤러를 사용합니다. 또한 |
<interface type='network'> <mac address='52:54:00:65:29:21'/> <source network='default'/> <model type='virtio'/> </interface>
|
네트워크 인터페이스는 |
<serial type='pty'> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel>
|
|
<input type='tablet' bus='usb'> <address type='usb' bus='0' port='1'/> </input> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/>
| VM은 태블릿 입력을 수신하도록 설정된 가상 usb 포트와 마우스 및 키보드 입력을 수신하도록 설정된 가상 ps2 포트를 사용합니다. 이 설정은 자동으로 설정되며 이러한 설정을 변경하는 것은 권장되지 않습니다. |
<graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'> <listen type='address' address='127.0.0.1'/> </graphics>
|
VM은 |
<redirdev bus='usb' type='tcp'> <source mode='connect' host='localhost' service='4000'/> <protocol type='raw'/> </redirdev> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </memballoon> </devices> </domain>
|
VM은 USB 장치를 원격으로 연결하는 데 |
11장. 가상 머신 복제
특정 속성 세트를 사용하여 새 VM(가상 머신)을 빠르게 생성하려면 기존 VM을 복제 할 수 있습니다.
복제는 스토리지에 자체 디스크 이미지를 사용하는 새 VM을 생성하지만 대부분의 복제 구성 및 저장된 데이터는 소스 VM과 동일합니다. 이를 통해 각 VM을 개별적으로 최적화할 필요 없이 특정 작업에 최적화된 여러 VM을 준비할 수 있습니다.
11.1. 가상 머신 복제 방법
VM(가상 머신)을 복제하면 소스 VM 및 해당 디스크 이미지의 XML 구성이 복사되고 새 VM의 고유성을 보장하기 위해 구성을 조정합니다. 여기에는 VM의 이름을 변경하고 디스크 이미지 복제를 사용하는지 확인하는 작업이 포함됩니다. 그러나 복제본의 가상 디스크에 저장된 데이터는 소스 VM과 동일합니다.
이 프로세스는 새 VM을 생성하고 게스트 운영 체제로 설치하는 것보다 빠르고 특정 구성 및 콘텐츠를 사용하여 VM을 빠르게 생성하는 데 사용할 수 있습니다.
VM의 복제본을 여러 개 생성하려는 경우 먼저 포함되지 않은 VM 템플릿을 생성합니다.
- 영구 네트워크 MAC 구성과 같은 고유한 설정으로 인해 복제본이 제대로 작동하지 않을 수 있습니다.
- 중요한 데이터(예: SSH 키 및 암호 파일)
자세한 내용은 가상 머신 템플릿 생성 을 참조하십시오.
11.2. 가상 머신 템플릿 생성
올바르게 작동하는 여러 VM(가상 머신) 복제를 생성하려면 SSH 키 또는 영구 네트워크 MAC 구성과 같은 소스 VM에 고유한 정보 및 구성을 제거할 수 있습니다. 이렇게 하면 VM 복제를 쉽고 안전하게 생성하는 데 사용할 수 있는 VM 템플릿이 생성됩니다.
virt-sysprep
유틸리티를 사용하여 VM 템플릿을 생성하거나 요구 사항에 따라 수동으로 생성할 수 있습니다.
11.2.1. virt-sysprep을 사용하여 가상 머신 템플릿 생성
기존 VM(가상 머신)에서 복제 템플릿을 생성하려면 virt-sysprep
유틸리티를 사용할 수 있습니다. 이렇게 하면 특정 네트워크 설정 또는 시스템 등록 메타데이터와 같이 복제본이 잘못 작동할 수 있는 특정 구성이 제거됩니다. 결과적으로 virt-sysprep
을 사용하면 VM의 클론을 보다 효율적으로 생성하고 복제본이 더 안정적으로 작동합니다.
사전 요구 사항
virt-sysprep
유틸리티가 포함된guestfs-tools
패키지가 호스트에 설치되어 있습니다.dnf install guestfs-tools
# dnf install guestfs-tools
Copy to Clipboard Copied! - 템플릿으로 설계된 소스 VM이 종료됩니다.
소스 VM의 디스크 이미지가 어디에 있는지 알고 VM의 디스크 이미지 파일의 소유자입니다.
libvirt
의 시스템 연결에 생성된 VM의 디스크 이미지는/var/lib/libvirt/images
디렉터리에 있으며 기본적으로 root 사용자가 소유합니다.ls -la /var/lib/libvirt/images
# ls -la /var/lib/libvirt/images -rw-------. 1 root root 9665380352 Jul 23 14:50 a-really-important-vm.qcow2 -rw-------. 1 root root 8591507456 Jul 26 2017 an-actual-vm-that-i-use.qcow2 -rw-------. 1 root root 8591507456 Jul 26 2017 totally-not-a-fake-vm.qcow2 -rw-------. 1 root root 10739318784 Sep 20 17:57 another-vm-example.qcow2
Copy to Clipboard Copied! - 선택 사항: 소스 VM 디스크의 중요한 데이터가 백업되었습니다. 소스 VM을 그대로 유지하려면 먼저 복제 한 후 복제본을 템플릿으로 전환합니다.
프로세스
VM의 디스크 이미지의 소유자로 로그인했는지 확인합니다.
whoami
# whoami root
Copy to Clipboard Copied! 선택 사항: VM의 디스크 이미지를 복사합니다.
cp /var/lib/libvirt/images/a-really-important-vm.qcow2 /var/lib/libvirt/images/a-really-important-vm-original.qcow2
# cp /var/lib/libvirt/images/a-really-important-vm.qcow2 /var/lib/libvirt/images/a-really-important-vm-original.qcow2
Copy to Clipboard Copied! 나중에 VM이 템플릿으로 변환되었는지 확인하는 데 사용됩니다.
다음 명령을 사용하고 /var/lib/libvirt/images/a-really-important-vm.qcow2 를 소스 VM의 디스크 이미지 경로로 바꿉니다.
virt-sysprep -a /var/lib/libvirt/images/a-really-important-vm.qcow2
# virt-sysprep -a /var/lib/libvirt/images/a-really-important-vm.qcow2 [ 0.0] Examining the guest ... [ 7.3] Performing "abrt-data" ... [ 7.3] Performing "backup-files" ... [ 9.6] Performing "bash-history" ... [ 9.6] Performing "blkid-tab" ... [...]
Copy to Clipboard Copied!
검증
프로세스가 성공했는지 확인하려면 수정된 디스크 이미지를 원본 이미지와 비교합니다. 다음 예제에서는 템플릿을 성공적으로 생성하는 방법을 보여줍니다.
virt-diff -a /var/lib/libvirt/images/a-really-important-vm-orig.qcow2 -A /var/lib/libvirt/images/a-really-important-vm.qcow2
# virt-diff -a /var/lib/libvirt/images/a-really-important-vm-orig.qcow2 -A /var/lib/libvirt/images/a-really-important-vm.qcow2 - - 0644 1001 /etc/group- - - 0000 797 /etc/gshadow- = - 0444 33 /etc/machine-id [...] - - 0600 409 /home/username/.bash_history - d 0700 6 /home/username/.ssh - - 0600 868 /root/.bash_history [...]
Copy to Clipboard Copied!
11.2.2. 수동으로 가상 머신 템플릿 생성
기존 VM(가상 머신)에서 템플릿을 생성하려면 게스트 VM을 수동으로 재설정하거나 구성 해제하여 복제를 준비할 수 있습니다.
사전 요구 사항
소스 VM의 디스크 이미지 위치를 알고 VM의 디스크 이미지 파일 소유자인지 확인합니다.
libvirt의 시스템 연결에 생성된 VM의 디스크 이미지는 기본적으로
/var/lib/libvirt/images
디렉터리에 있으며 root 사용자가 소유합니다.ls -la /var/lib/libvirt/images
# ls -la /var/lib/libvirt/images -rw-------. 1 root root 9665380352 Jul 23 14:50 a-really-important-vm.qcow2 -rw-------. 1 root root 8591507456 Jul 26 2017 an-actual-vm-that-i-use.qcow2 -rw-------. 1 root root 8591507456 Jul 26 2017 totally-not-a-fake-vm.qcow2 -rw-------. 1 root root 10739318784 Sep 20 17:57 another-vm-example.qcow2
Copy to Clipboard Copied! - VM이 종료되었는지 확인합니다.
- 선택 사항: VM 디스크의 중요한 데이터가 백업됩니다. 소스 VM을 그대로 유지하려면 먼저 복제 한 후 복제본을 편집하여 템플릿을 생성합니다.
프로세스
복제를 위해 VM을 구성합니다.
- 복제본에 필요한 소프트웨어를 설치합니다.
- 운영 체제에 대해 고유하지 않은 설정을 구성합니다.
- 고유하지 않은 애플리케이션 설정을 구성합니다.
네트워크 구성을 제거합니다.
다음 명령을 사용하여 영구 udev 규칙을 제거합니다.
rm -f /etc/udev/rules.d/70-persistent-net.rules
# rm -f /etc/udev/rules.d/70-persistent-net.rules
Copy to Clipboard Copied! 참고udev 규칙이 제거되지 않으면 첫 번째 NIC의 이름이
eth0
대신eth1
일 수 있습니다./etc/NetworkManager/system-connections/
디렉터리의NMConnection
파일에서 고유한 정보를 제거합니다.MAC 주소, IP 주소, DNS, 게이트웨이 및 기타 고유 정보 또는 원하지 않는 설정을 제거합니다.
*ID=ExampleNetwork BOOTPROTO="dhcp" HWADDR="AA:BB:CC:DD:EE:FF" <- REMOVE NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="954bd22c-f96c-4b59-9445-b39dd86ac8ab" <- REMOVE
*ID=ExampleNetwork BOOTPROTO="dhcp" HWADDR="AA:BB:CC:DD:EE:FF" <- REMOVE NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="954bd22c-f96c-4b59-9445-b39dd86ac8ab" <- REMOVE
Copy to Clipboard Copied! -
/etc/hosts
및/etc/resolv.conf
파일에서 유사한 고유 정보 및 원하지 않는 설정을 제거합니다.
등록 세부 정보 삭제:
RHN(Red Hat Network)에 등록된 VM의 경우:
rm /etc/sysconfig/rhn/systemid
# rm /etc/sysconfig/rhn/systemid
Copy to Clipboard Copied! RHSM(Red Hat Subscription Manager)에 등록된 VM의 경우:
원래 VM을 사용하지 않으려면 다음을 수행합니다.
subscription-manager unsubscribe --all # subscription-manager unregister # subscription-manager clean
# subscription-manager unsubscribe --all # subscription-manager unregister # subscription-manager clean
Copy to Clipboard Copied! 원래 VM을 사용하려는 경우:
subscription-manager clean
# subscription-manager clean
Copy to Clipboard Copied! 참고원래 RHSM 프로필은 ID 코드와 함께 포털에 남아 있습니다. 복제 후 VM에서 RHSM 등록을 다시 활성화하려면 다음 명령을 사용합니다.
subscription-manager register --consumerid=71rd64fx-6216-4409-bf3a-e4b7c7bd8ac9
# subscription-manager register --consumerid=71rd64fx-6216-4409-bf3a-e4b7c7bd8ac9
Copy to Clipboard Copied!
다른 고유한 세부 정보 제거:
SSH 공개 및 개인 키 쌍을 제거합니다.
rm -rf /etc/ssh/ssh_host_example
# rm -rf /etc/ssh/ssh_host_example
Copy to Clipboard Copied! LVM 장치의 구성을 제거합니다.
rm /etc/lvm/devices/system.devices
# rm /etc/lvm/devices/system.devices
Copy to Clipboard Copied! - 여러 시스템에서 실행되는 경우 충돌이 발생할 수 있는 기타 애플리케이션별 식별자 또는 구성을 제거합니다.
gnome-initial-setup-done
파일을 제거하여 다음 부팅 시 구성 마법사를 실행하도록 VM을 구성합니다.rm ~/.config/gnome-initial-setup-done
# rm ~/.config/gnome-initial-setup-done
Copy to Clipboard Copied! 참고다음 부팅 시 실행되는 마법사는 VM에서 제거된 구성에 따라 다릅니다. 또한 복제본을 처음 부팅할 때는 호스트 이름을 변경하는 것이 좋습니다.
11.3. 명령줄을 사용하여 가상 머신 복제
테스트의 경우 특정 속성 집합이 있는 새 VM(가상 머신)을 생성하려면 명령줄을 사용하여 기존 VM을 복제할 수 있습니다.
사전 요구 사항
- 소스 VM이 종료되었습니다.
- 복제된 디스크 이미지를 저장할 디스크 공간이 충분한지 확인합니다.
-
virt-install
패키지가 호스트에 설치되어 있습니다. - 선택 사항: 여러 VM 복제를 생성할 때 소스 VM에서 고유한 데이터 및 설정을 제거하여 복제된 VM이 제대로 작동하는지 확인합니다. 자세한 내용은 가상 머신 템플릿 생성 을 참조하십시오.
프로세스
환경 및 사용 사례에 적합한 옵션과 함께
virt-clone
유틸리티를 사용합니다.샘플 사용 사례
다음 명령은
example-VM-1
이라는 로컬 VM을 복제하고example-VM-1-clone
VM을 생성합니다. 또한 원래 VM의 디스크 이미지와 동일한 위치에example-VM-1-clone.qcow2
디스크 이미지를 생성하고 할당합니다.virt-clone --original example-VM-1 --auto-clone
# virt-clone --original example-VM-1 --auto-clone Allocating 'example-VM-1-clone.qcow2' | 50.0 GB 00:05:37 Clone 'example-VM-1-clone' created successfully.
Copy to Clipboard Copied! 다음 명령은
example-VM-2
라는 VM을 복제하고example-VM-3
이라는 로컬 VM을 생성합니다. 이 VM-3은example-VM-2
디스크 중 두 개만 사용합니다.virt-clone --original example-VM-2 --name example-VM-3 --file /var/lib/libvirt/images/disk-1-example-VM-2.qcow2 --file /var/lib/libvirt/images/disk-2-example-VM-2.qcow2
# virt-clone --original example-VM-2 --name example-VM-3 --file /var/lib/libvirt/images/disk-1-example-VM-2.qcow2 --file /var/lib/libvirt/images/disk-2-example-VM-2.qcow2 Allocating 'disk-1-example-VM-2.qcow2' | 78.0 GB 00:05:37 Allocating 'disk-2-example-VM-2.qcow2' | 80.0 GB 00:05:37 Clone 'example-VM-3' created successfully.
Copy to Clipboard Copied! VM을 다른 호스트에 복제하려면 로컬 호스트에서 재정의하지 않고 VM을 마이그레이션합니다. 예를 들어 다음 명령은 이전에 생성된
example-VM-3
VM을 로컬 디스크를 포함하여192.0.2.1
원격 시스템에 복제합니다.192.0.2.1
에 대해 이러한 명령을 실행하려면 root 권한이 필요합니다.virsh migrate --offline --persistent example-VM-3 qemu+ssh://root@192.0.2.1/system scp /var/lib/libvirt/images/<disk-1-example-VM-2-clone>.qcow2 root@192.0.2.1/<user@remote_host.com>://var/lib/libvirt/images/ scp /var/lib/libvirt/images/<disk-2-example-VM-2-clone>.qcow2 root@192.0.2.1/<user@remote_host.com>://var/lib/libvirt/images/
# virsh migrate --offline --persistent example-VM-3 qemu+ssh://root@192.0.2.1/system root@192.0.2.1's password: # scp /var/lib/libvirt/images/<disk-1-example-VM-2-clone>.qcow2 root@192.0.2.1/<user@remote_host.com>://var/lib/libvirt/images/ # scp /var/lib/libvirt/images/<disk-2-example-VM-2-clone>.qcow2 root@192.0.2.1/<user@remote_host.com>://var/lib/libvirt/images/
Copy to Clipboard Copied!
검증
VM이 성공적으로 복제되었으며 제대로 작동하는지 확인하려면 다음을 수행하십시오.
호스트의 VM 목록에 복제본이 추가되었는지 확인합니다.
virsh list --all
# virsh list --all Id Name State --------------------------------------- - example-VM-1 shut off - example-VM-1-clone shut off
Copy to Clipboard Copied! 복제본을 시작하고 부팅 여부를 관찰합니다.
virsh start example-VM-1-clone
# virsh start example-VM-1-clone Domain 'example-VM-1-clone' started
Copy to Clipboard Copied!
11.4. 웹 콘솔을 사용하여 가상 머신 복제
특정 속성 세트를 사용하여 새 VM(가상 머신)을 생성하려면 웹 콘솔을 사용하여 이전에 구성한 VM을 복제할 수 있습니다.
VM 복제는 해당 VM과 연결된 디스크도 복제합니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
- 복제하려는 VM이 종료되었는지 확인합니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
웹 콘솔의 가상 머신 인터페이스에서 복제하려는
의 메뉴 버튼을 클릭합니다.다양한 VM 작업에 대한 제어가 포함된 드롭다운 메뉴가 표시됩니다.
Create a clone VM 대화 상자가 표시됩니다.
- 선택 사항: VM 복제의 새 이름을 입력합니다.
소스 VM을 기반으로 새 VM이 생성됩니다.
검증
- 복제된 VM이 호스트에서 사용 가능한 VM 목록에 표시되는지 확인합니다.
12장. 가상 머신 마이그레이션
VM(가상 머신)의 현재 호스트가 적합하지 않거나 더 이상 사용할 수 없거나 호스팅 워크로드를 재배포하려는 경우 VM을 다른 KVM 호스트로 마이그레이션할 수 있습니다.
12.1. 가상 머신의 작동 방식
실시간 마이그레이션을 사용하여 약간의 다운타임으로 워크로드를 중단하지 않고 실행 중인 VM(가상 머신)을 마이그레이션할 수 있습니다. 기본적으로 마이그레이션된 VM은 대상 호스트에서 일시적인 것이며 소스 호스트에도 정의되어 있습니다. 실시간 마이그레이션의 필수 부분은 VM의 메모리 및 연결된 모든 가상화 장치의 상태를 대상 호스트로 전송하는 것입니다. VM이 대상 호스트에서 작동하도록 하려면 VM의 디스크 이미지를 계속 사용할 수 있어야 합니다.
종료 VM을 마이그레이션하려면 VM 구성을 대상 호스트에 복사하는 오프라인 마이그레이션을 사용해야 합니다. 자세한 내용은 다음 표를 참조하십시오.
마이그레이션 유형 | 설명 | 사용 사례 | 스토리지 요구사항 |
---|---|---|---|
실시간 마이그레이션 | KVM이 VM의 메모리 페이지를 대상 호스트로 전송하는 동안 VM은 소스 호스트 머신에서 계속 실행됩니다. 마이그레이션이 거의 완료되면 KVM은 VM을 매우 일시 중단하고 대상 호스트에서 다시 시작합니다. | 지속적인 가동 시간이 필요한 VM에 유용합니다. 그러나 KVM에서 I/O 로드가 많은 VM과 같이 메모리 페이지를 더 빨리 수정하는 VM의 경우 실시간 마이그레이션이 실패할 수 있습니다. (1) | VM의 디스크 이미지는 마이그레이션 중에 소스 호스트와 대상 호스트에 모두 액세스할 수 있어야 합니다. (2) |
오프라인 마이그레이션 | VM의 구성을 대상 호스트로 이동 | VM을 종료하는 경우 VM을 종료하고 VM을 종료해도 워크로드가 중단되지 않습니다. | VM의 디스크 이미지는 마이그레이션 중에 소스 또는 대상 호스트에 액세스할 필요가 없으며 대신 대상 호스트로 수동으로 복사하거나 이동할 수 있습니다. |
(1) 가능한 해결 방법은 실시간 마이그레이션에 대한 추가 virsh migrate
options를 참조하십시오.
2) 이렇게 하려면 다음 중 하나를 사용하십시오.
- 공유 네트워크에 있는스토리지
-
virsh migrate
명령의--copy-storage-all
매개 변수는 네트워크를 통해 소스에서 대상으로 디스크 이미지 콘텐츠를 복사합니다. - SAN(Storage Area Network) 논리 단위(LUN).
- Ceph 스토리지 클러스터
대규모 마이그레이션을 보다 쉽게 관리하려면 다음과 같은 다른 Red Hat 제품을 살펴보십시오.
12.2. 가상 머신 마이그레이션의 이점
VM(가상 머신) 마이그레이션은 다음을 위해 유용할 수 있습니다.
- 로드 밸런싱
- 호스트가 과부하되거나 다른 호스트가 활용도가 낮은 경우 VM을 더 낮은 사용량이 있는 호스트 시스템으로 이동할 수 있습니다.
- 하드웨어 독립
- 호스트 시스템에서 하드웨어 장치를 업그레이드, 추가 또는 제거해야 하는 경우 VM을 다른 호스트로 안전하게 재배치할 수 있습니다. 즉, 하드웨어 개선을 위해 VM에 다운타임이 발생하지 않습니다.
- 에너지 저장
- VM을 다른 호스트에 재배포할 수 있으므로 언로드된 호스트 시스템의 전원을 꺼서 낮은 사용 기간 동안 비용을 절감할 수 있습니다.
- 지역 마이그레이션
- 대기 시간이 단축되거나 다른 이유로 필요한 경우 VM을 다른 물리적 위치로 이동할 수 있습니다.
12.3. 가상 머신 마이그레이션 제한
RHEL 10에서 VM(가상 머신)을 마이그레이션하기 전에 마이그레이션의 제한 사항을 알고 있는지 확인합니다.
마이그레이션 시 특정 기능 및 구성을 사용하는 VM이 제대로 작동하지 않거나 마이그레이션이 실패합니다. 이러한 기능은 다음과 같습니다.
- 장치 패스스루
- NUMA(Non-Uniform Memory Access) 고정을 사용하는 호스트 간 마이그레이션은 호스트에 유사한 토폴로지가 있는 경우에만 작동합니다. 그러나 실행 중인 워크로드의 성능은 마이그레이션에 부정적인 영향을 미칠 수 있습니다.
- 소스 및 대상 호스트 모두 VM 마이그레이션에 지원되는 특정 RHEL 버전을 사용합니다. 가상 머신 마이그레이션에 대한 지원 호스트를참조하십시오.
소스 VM과 대상 VM 모두에서 물리적 CPU는 동일해야 합니다. 그렇지 않으면 마이그레이션이 실패할 수 있습니다. 다음 CPU 관련 영역에서 VM 간의 차이로 인해 마이그레이션에 문제가 발생할 수 있습니다.
CPU 모델
- Intel 64 호스트와 AMD64 호스트 간에 마이그레이션하는 것은 x86-64 명령 세트를 공유하더라도 지원되지 않습니다.
- 다른 CPU 모델을 사용하여 호스트로 마이그레이션한 후 VM이 제대로 작동하는지 확인하는 단계는 가상 머신 마이그레이션에 대한 호스트 CPU 호환성 확인을 참조하십시오.
- 물리적 머신 펌웨어 버전 및 설정
12.4. 명령줄을 사용하여 가상 머신 마이그레이션
VM(가상 머신)의 현재 호스트가 적합하지 않거나 더 이상 사용할 수 없거나 호스팅 워크로드를 재배포하려는 경우 VM을 다른 KVM 호스트로 마이그레이션할 수 있습니다. 실시간 마이그레이션 또는 오프라인 마이그레이션 을 수행할 수 있습니다. 두 시나리오 간의 차이점은 가상 머신의 작동 방식을 참조하십시오.
사전 요구 사항
- 하이퍼바이저
- 소스 호스트와 대상 호스트는 모두 KVM 하이퍼바이저를 사용합니다.
- 네트워크 연결
-
소스 호스트와 대상 호스트는 네트워크를 통해 서로 연결할 수 있습니다.
ping
유틸리티를 사용하여 이를 확인합니다. - 포트 열기
대상 호스트에서 다음 포트가 열려 있는지 확인합니다.
- SSH를 사용하여 대상 호스트에 연결하려면 포트 22가 필요합니다.
- TLS를 사용하여 대상 호스트에 연결하려면 포트 16514가 필요합니다.
- TCP를 사용하여 대상 호스트에 연결하려면 포트 16509가 필요합니다.
- 메모리 및 디스크 마이그레이션 데이터를 전송하기 위해 QEMU에 포트 49152-49215가 필요합니다.
- 호스트
- Red Hat에서 마이그레이션을 지원하려면 소스 호스트와 대상 호스트에서 특정 운영 체제 및 시스템 유형을 사용해야 합니다. 이 경우 가상 머신 마이그레이션에 대한 지원되는 호스트를 참조하십시오.
- CPU
- VM은 대상 호스트의 CPU 기능과 호환되어야 합니다. 이 경우 가상 머신 마이그레이션에 대한 호스트 CPU 호환성 확인을 참조하십시오.
- 스토리지
마이그레이션할 VM의 디스크 이미지는 소스 호스트와 대상 호스트 둘 다에 액세스할 수 있습니다. 오프라인 마이그레이션에는 선택 사항이지만 실행 중인 VM을 마이그레이션하는 데 필요합니다. 두 호스트의 스토리지 접근성을 보장하려면 다음 중 하나를 적용해야 합니다.
- SAN(Storage Area Network) 논리 단위(LUN)를 사용하고 있습니다.
- Ceph 스토리지 클러스터를 사용하고 있습니다.
- 디스크 이미지는 별도의 네트워크 위치에 있습니다. 이러한 공유 VM 스토리지를 설정하는 방법은 다른 호스트와 가상 머신 디스크 이미지 공유를 참조하십시오.
- 네트워크 대역폭
실행 중인 VM을 마이그레이션할 때 네트워크 대역폭은 VM이 더티 메모리 페이지를 생성하는 속도보다 커야 합니다.
실시간 마이그레이션을 시작하기 전에 VM의 더티 페이지 속도를 얻으려면 다음을 수행하십시오.
짧은 기간 동안 VM의 더티 페이지 생성 속도를 모니터링합니다.
virsh domdirtyrate-calc <example_VM> 30
# virsh domdirtyrate-calc <example_VM> 30
Copy to Clipboard Copied! 모니터링이 완료되면 결과를 가져옵니다.
virsh domstats <example_VM> --dirtyrate
# virsh domstats <example_VM> --dirtyrate Domain: 'example-VM' dirtyrate.calc_status=2 dirtyrate.calc_start_time=200942 dirtyrate.calc_period=30 dirtyrate.megabytes_per_second=2
Copy to Clipboard Copied! 이 예제에서 VM은 초당 2MB의 더티 메모리 페이지를 생성합니다. 대역폭이 2MB/s 이하인 네트워크에서 이러한 VM을 실시간 마이그레이션하려고 하면 VM을 일시 중지하거나 워크로드를 낮추지 않으면 실시간 마이그레이션이 진행되지 않습니다.
실시간 마이그레이션이 성공적으로 완료되었는지 확인하려면 네트워크 대역폭이 VM의 더티 페이지 생성 속도보다 훨씬 커야 합니다.
참고calc_period
옵션의 값은 워크로드 및 더티 페이지 비율에 따라 다를 수 있습니다. 여러calc_period
값을 실험하여 환경의 더티 페이지 비율과 정렬하는 가장 적합한 기간을 결정할 수 있습니다.
- 브리지 탭 네트워크 세부 정보
- 공용 브리지에서 기존 VM을 마이그레이션하는 경우 소스 및 대상 호스트가 동일한 네트워크에 있어야 합니다. 그렇지 않으면 마이그레이션 후 VM 네트워크가 작동하지 않습니다.
- 연결 프로토콜
VM 마이그레이션을 수행할 때 소스 호스트의
virsh
클라이언트는 여러 프로토콜 중 하나를 사용하여 대상 호스트의 libvirt 데몬에 연결할 수 있습니다. 다음 절차의 예제에서는 SSH 연결을 사용하지만 다른 연결을 선택할 수 있습니다.libvirt에서 SSH 연결을 사용하려면
virtqemud
소켓이 활성화되어 대상 호스트에서 실행 중인지 확인합니다.systemctl enable --now virtqemud.socket
# systemctl enable --now virtqemud.socket
Copy to Clipboard Copied! libvirt에서 TLS 연결을 사용하려면
virtproxyd-tls
소켓이 활성화되어 대상 호스트에서 실행 중인지 확인합니다.systemctl enable --now virtproxyd-tls.socket
# systemctl enable --now virtproxyd-tls.socket
Copy to Clipboard Copied! libvirt에서 TCP 연결을 사용하려면
virtproxyd-tcp
소켓이 활성화되어 대상 호스트에서 실행 중인지 확인합니다.systemctl enable --now virtproxyd-tcp.socket
# systemctl enable --now virtproxyd-tcp.socket
Copy to Clipboard Copied!
프로세스
한 호스트에서 다른 호스트로 VM을 마이그레이션하려면 virsh migrate
명령을 사용합니다.
오프라인 마이그레이션
다음 명령은 SSH 터널을 사용하여 로컬 호스트에서
example-destination
호스트의 시스템 연결로 종료된example-VM
VM을 마이그레이션합니다.virsh migrate --offline --persistent <example_VM> qemu+ssh://example-destination/system
# virsh migrate --offline --persistent <example_VM> qemu+ssh://example-destination/system
Copy to Clipboard Copied!
실시간 마이그레이션
다음 명령은 SSH 터널을 사용하여
example-VM
VM을 로컬 호스트에서example-destination
호스트의 시스템 연결로 마이그레이션합니다. VM은 마이그레이션 중에 계속 실행됩니다.virsh migrate --live --persistent <example_VM> qemu+ssh://example-destination/system
# virsh migrate --live --persistent <example_VM> qemu+ssh://example-destination/system
Copy to Clipboard Copied! 마이그레이션이 완료될 때까지 기다립니다. 이 프로세스는 네트워크 대역폭, 시스템 로드 및 VM 크기에 따라 다소 시간이 걸릴 수 있습니다.
virsh migrate
에--verbose
옵션을 사용하지 않으면 CLI에서 오류를 제외한 진행 상황을 표시하지 않습니다.마이그레이션이 진행 중인 경우
virsh domjobinfo
유틸리티를 사용하여 마이그레이션 통계를 표시할 수 있습니다.
멀티 FD 실시간 마이그레이션
실시간 마이그레이션 중에 대상 호스트에 대한 병렬 연결을 여러 개 사용할 수 있습니다. 이를 다중 파일 설명자(multi-FD) 마이그레이션이라고도 합니다. 멀티 FD 마이그레이션을 사용하면 마이그레이션 프로세스에 사용 가능한 모든 네트워크 대역폭을 활용하여 마이그레이션 속도를 높일 수 있습니다.
virsh migrate --live --persistent --parallel --parallel-connections 4 <example_VM> qemu+ssh://<example-destination>/system
# virsh migrate --live --persistent --parallel --parallel-connections 4 <example_VM> qemu+ssh://<example-destination>/system
Copy to Clipboard Copied! 이 예에서는 4개의 다중 FD 채널을 사용하여 VM을 <example_VM> 마이그레이션합니다. 10Gbps의 사용 가능한 네트워크 대역폭마다 하나의 채널을 사용하는 것이 좋습니다. 기본값은 2 채널입니다.
다운타임 제한 증가로 실시간 마이그레이션
실시간 마이그레이션의 안정성을 개선하기 위해 실시간 마이그레이션 중에 최대 시간(밀리초)을 지정하는
maxdowntime
매개변수를 설정할 수 있습니다. 더 큰 다운타임을 설정하면 마이그레이션이 성공적으로 완료될 수 있습니다.virsh migrate-setmaxdowntime <example_VM> <time_interval_in_milliseconds>
# virsh migrate-setmaxdowntime <example_VM> <time_interval_in_milliseconds>
Copy to Clipboard Copied!
Post-copy migration
VM에 메모리 공간이 큰 경우 복사 후 마이그레이션을 수행할 수 있습니다. 이 마이그레이션을 수행하여 소스 VM의 CPU 상태를 먼저 전송하고 대상 호스트에서 마이그레이션된 VM을 즉시 시작할 수 있습니다. 마이그레이션된 VM이 대상 호스트에서 이미 실행된 후 소스 VM의 메모리 페이지가 전송됩니다. 이로 인해 복사 후 마이그레이션으로 인해 마이그레이션된 VM의 다운타임이 줄어들 수 있습니다.
그러나 대상 호스트에서 실행 중인 VM은 아직 전송되지 않은 메모리 페이지에 액세스하려고 할 수 있으므로 페이지 폴트가 발생합니다. 마이그레이션 중에 페이지 폴 트가 너무 많으면 마이그레이션된 VM의 성능이 심각하게 저하될 수 있습니다.
복사 후 마이그레이션의 잠재적인 문제를 고려하여 표준 실시간 마이그레이션을 시작하고 지정된 시간 내에 실시간 마이그레이션을 완료할 수 없는 경우 복사 후 마이그레이션으로 전환하는 다음 명령을 사용하는 것이 좋습니다.
virsh migrate --live --persistent --postcopy --timeout <time_interval_in_seconds> --timeout-postcopy <example_VM> qemu+ssh://<example-destination>/system
# virsh migrate --live --persistent --postcopy --timeout <time_interval_in_seconds> --timeout-postcopy <example_VM> qemu+ssh://<example-destination>/system
Copy to Clipboard Copied!
자동 통합 실시간 마이그레이션
VM이 메모리 워크로드가 많은 경우
--auto-converge
옵션을 사용할 수 있습니다. 이 옵션을 사용하면 VM의 CPU 실행 속도가 자동으로 느려집니다. 결과적으로 이 CPU 제한은 메모리 쓰기를 늦추는 데 도움이 될 수 있으므로 메모리 워크로드가 많은 VM에서도 실시간 마이그레이션이 성공할 수 있습니다.그러나 CPU 제한은 메모리 쓰기가 CPU 실행 속도와 직접 관련이 없는 워크로드를 해결하는 데 도움이 되지 않으며 실시간 마이그레이션 중에 VM 성능에 부정적인 영향을 미칠 수 있습니다.
virsh migrate --live --persistent --auto-converge <example_VM> qemu+ssh://<example-destination>/system
# virsh migrate --live --persistent --auto-converge <example_VM> qemu+ssh://<example-destination>/system
Copy to Clipboard Copied!
검증
오프라인 마이그레이션의 경우:
대상 호스트에서 사용 가능한 VM을 나열하여 VM이 성공적으로 마이그레이션되었는지 확인합니다.
virsh list --all
# virsh list --all Id Name State ---------------------------------- 10 example-VM-1 shut off
Copy to Clipboard Copied!
실시간 마이그레이션의 경우:
대상 호스트에서 사용 가능한 VM을 나열하여 대상 VM의 상태를 확인합니다.
virsh list --all
# virsh list --all Id Name State ---------------------------------- 10 example-VM-1 running
Copy to Clipboard Copied! VM의 상태가
running
으로 표시되면 마이그레이션이 완료된 것입니다. 그러나 실시간 마이그레이션이 여전히 진행 중인 경우 대상 VM의 상태가paused
로 나열됩니다.
Post-copy migration의 경우:
소스 호스트에서 사용 가능한 VM을 나열하여 소스 VM의 상태를 확인합니다.
virsh list --all
# virsh list --all Id Name State ---------------------------------- 10 example-VM-1 shut off
Copy to Clipboard Copied! 대상 호스트에서 사용 가능한 VM을 나열하여 대상 VM의 상태를 확인합니다.
virsh list --all
# virsh list --all Id Name State ---------------------------------- 10 example-VM-1 running
Copy to Clipboard Copied! 소스 VM의 상태가
shut off
로 표시되고 대상 VM의 상태가running
으로 표시되면 마이그레이션이 완료된 것입니다.
12.5. 웹 콘솔을 사용하여 가상 머신 실시간 마이그레이션
지속적으로 실행해야 하는 작업을 수행하는 VM(가상 머신)을 마이그레이션하려면 종료하지 않고 해당 VM을 다른 KVM 호스트로 마이그레이션할 수 있습니다. 이를 실시간 마이그레이션이라고도 합니다. 웹 콘솔을 사용하여 VM을 실시간 마이그레이션할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
- 하이퍼바이저: 소스 호스트와 대상 호스트는 모두 KVM 하이퍼바이저를 사용합니다.
- 호스트: 소스 및 대상 호스트가 실행 중입니다.
포트 열기: 대상 호스트에서 다음 포트가 열려 있는지 확인합니다.
- SSH를 사용하여 대상 호스트에 연결하려면 포트 22가 필요합니다.
- TLS를 사용하여 대상 호스트에 연결하려면 포트 16514가 필요합니다.
- TCP를 사용하여 대상 호스트에 연결하려면 포트 16509가 필요합니다.
- 메모리 및 디스크 마이그레이션 데이터를 전송하기 위해 QEMU에 포트 49152-49215가 필요합니다.
- CPU: VM은 대상 호스트의 CPU 기능과 호환되어야 합니다. 이 경우 가상 머신 마이그레이션에 대한 호스트 CPU 호환성 확인을 참조하십시오.
스토리지: 마이그레이션할 VM의 디스크 이미지는 소스 호스트와 대상 호스트 둘 다에서 액세스할 수 있습니다. 오프라인 마이그레이션에는 선택 사항이지만 실행 중인 VM을 마이그레이션하는 데 필요합니다. 두 호스트의 스토리지 접근성을 보장하려면 다음 중 하나를 적용해야 합니다.
- SAN(Storage Area Network) 논리 단위(LUN)를 사용하고 있습니다.
- Ceph 스토리지 클러스터를 사용하고 있습니다.
- 디스크 이미지는 별도의 네트워크 위치에 있습니다. 이러한 공유 VM 스토리지를 설정하는 방법은 다른 호스트와 가상 머신 디스크 이미지 공유를 참조하십시오.
네트워크 대역폭: 실행 중인 VM을 마이그레이션할 때 VM이 더티 메모리 페이지를 생성하는 속도보다 네트워크 대역폭이 커야 합니다.
실시간 마이그레이션을 시작하기 전에 VM의 더티 페이지 속도를 얻으려면 명령줄에서 다음을 수행합니다.
짧은 기간 동안 VM의 더티 페이지 생성 속도를 모니터링합니다.
virsh domdirtyrate-calc vm-name 30
# virsh domdirtyrate-calc vm-name 30
Copy to Clipboard Copied! 모니터링이 완료되면 결과를 가져옵니다.
virsh domstats vm-name --dirtyrate
# virsh domstats vm-name --dirtyrate Domain: 'vm-name' dirtyrate.calc_status=2 dirtyrate.calc_start_time=200942 dirtyrate.calc_period=30 dirtyrate.megabytes_per_second=2
Copy to Clipboard Copied! 이 예제에서 VM은 초당 2MB의 더티 메모리 페이지를 생성합니다. 대역폭이 2MB/s 이하인 네트워크에서 이러한 VM을 실시간 마이그레이션하려고 하면 VM을 일시 중지하거나 워크로드를 낮추지 않으면 실시간 마이그레이션이 진행되지 않습니다.
실시간 마이그레이션이 성공적으로 완료되었는지 확인하려면 네트워크 대역폭이 VM의 더티 페이지 생성 속도보다 훨씬 커야 합니다.
참고calc_period
옵션의 값은 워크로드 및 더티 페이지 비율에 따라 다를 수 있습니다. 여러calc_period
값을 실험하여 환경의 더티 페이지 비율과 정렬하는 가장 적합한 기간을 결정할 수 있습니다.
- 브리지 탭 네트워크 특정: 공용 브리지 탭 네트워크에서 기존 VM을 마이그레이션하는 경우 소스 및 대상 호스트가 동일한 네트워크에 있어야 합니다. 그렇지 않으면 마이그레이션 후 VM 네트워크가 작동하지 않습니다.
프로세스
웹 콘솔의 가상 머신 인터페이스에서 마이그레이션할
의 메뉴 버튼을 클릭합니다.다양한 VM 작업에 대한 제어가 포함된 드롭다운 메뉴가 표시됩니다.
VM을 다른 호스트로 마이그레이션 대화 상자가 나타납니다.
- 대상 호스트의 URI를 입력합니다.
마이그레이션 기간을 구성합니다.
- permanent - VM을 영구적으로 마이그레이션하려는 경우 확인란을 선택하지 마십시오. 영구 마이그레이션은 소스 호스트에서 VM 구성을 완전히 제거합니다.
- 임시 - 임시 마이그레이션은 VM의 사본을 대상 호스트로 마이그레이션합니다. 이 복사본은 VM이 종료될 때 대상 호스트에서 삭제됩니다. 원래 VM은 소스 호스트에 남아 있습니다.
VM이 대상 호스트로 마이그레이션됩니다.
검증
VM이 마이그레이션되었으며 올바르게 작동하는지 확인하려면 다음을 수행하십시오.
- VM이 대상 호스트에서 사용 가능한 VM 목록에 표시되는지 확인합니다.
- 마이그레이션된 VM을 시작하고 부팅 여부를 확인합니다.
12.6. 연결된 Mellanox 가상 기능을 사용하여 가상 머신 실시간 마이그레이션
지원되는 Mellanox 네트워킹 장치의 연결된 VF(가상 기능)를 사용하여 VM(가상 머신)을 실시간 마이그레이션할 수 있습니다.
Red Hat은 Mellanox 네트워킹 장치의 VF를 사용하여 VM 실시간 마이그레이션의 일반적인 기능을 구현합니다. 그러나 기능은 특정 Mellanox 장치 모델 및 펌웨어 버전에 따라 다릅니다.
현재 VF 마이그레이션은 Mellanox CX-7 네트워킹 장치에서만 지원됩니다.
Mellanox CX-7 네트워킹 장치의 VF는 새 mlx5_vfio_pci
드라이버를 사용하여 실시간 마이그레이션에 필요한 기능을 추가하고 libvirt
는 새 드라이버를 VF에 자동으로 바인딩합니다.
Red Hat은 포함된 mlx5_vfio_pci
드라이버에서만 Mellanox VF 실시간 마이그레이션을 직접 지원합니다.
제한
일부 가상화 기능은 연결된 가상 기능을 사용하여 VM을 실시간 마이그레이션할 때 사용할 수 없습니다.
VM의 더티 메모리 페이지 비율 계산.
현재 Mellanox VF가 연결된 VM을 마이그레이션할 때
virsh domjobinfo
및virsh domdirtyrate-calc
명령에서 제공하는 실시간 마이그레이션 데이터 및 통계는 계산이 연결된 VF의 영향을 주지 않고 게스트 RAM만 계산하기 때문에 부정확합니다.- 복사 후 실시간 마이그레이션 사용.
- VM에서 vIOMMU(가상 I/O Memory Management Unit) 장치 사용.
Mellanox CX-7 네트워킹 장치에 특정한 추가 제한 사항:
동일한 PSID(Parameter-Set Identification) 및 동일한 펌웨어 버전이 있는 CX-7 장치는 소스 및 대상 호스트 둘 다에서 사용해야 합니다.
다음 명령을 사용하여 장치의 PSID를 확인할 수 있습니다.
mstflint -d <device_pci_address> query | grep -i PSID
# mstflint -d <device_pci_address> query | grep -i PSID PSID: MT_1090111019
Copy to Clipboard Copied! - 하나의 CX-7 물리적 함수에서는 동시에 실시간 마이그레이션을 위해 최대 4개의 VF를 사용할 수 있습니다. 예를 들어 4개의 VF가 연결된 VM 한 개 또는 각 VM에 하나의 VF가 연결된 4개의 VM을 마이그레이션할 수 있습니다.
사전 요구 사항
Mellanox CX-7 네트워킹 장치가 28.36.1010 보다 크거나 같은 펌웨어 버전이 있습니다.
지원되는 펌웨어 버전에 대한 자세한 내용은 Mellanox 설명서 를 참조하고 최신 버전의 펌웨어를 사용하고 있는지 확인하십시오.
- 호스트는 Intel 64, AMD64 또는 ARM 64 CPU 아키텍처를 사용합니다.
- 소스 호스트의 Mellanox 펌웨어 버전은 대상 호스트의 Mellanox 펌웨어 버전과 동일해야 합니다.
mstflint
패키지는 소스 및 대상 호스트 모두에 설치됩니다.dnf install mstflint
# dnf install mstflint
Copy to Clipboard Copied! Mellanox CX-7 네트워킹 장치에는
VF_MIGRATION_MODE
가MIGRATION_ENABLED
로 설정되어 있습니다.mstconfig -d <device_pci_address> query | grep -i VF_migration
# mstconfig -d <device_pci_address> query | grep -i VF_migration VF_MIGRATION_MODE MIGRATION_ENABLED(2)
Copy to Clipboard Copied! 다음 명령을 사용하여
VF_MIGRATION_MODE
를MIGRATION_ENABLED
로 설정할 수 있습니다.mstconfig -d <device_pci_address> set VF_MIGRATION_MODE=2
# mstconfig -d <device_pci_address> set VF_MIGRATION_MODE=2
Copy to Clipboard Copied!
openvswitch
패키지는 소스 및 대상 호스트 모두에 설치됩니다.dnf install openvswitch
# dnf install openvswitch
Copy to Clipboard Copied! - 모든 일반 SR-IOV 장치 사전 요구 사항입니다.
- 모든 일반 VM 마이그레이션 사전 요구 사항입니다. 자세한 내용은 명령줄을 사용하여 가상 머신 마이그레이션을참조하십시오.
프로세스
소스 호스트에서 Mellanox 네트워킹 장치를
switchdev
모드로 설정합니다.devlink dev eswitch set pci/<device_pci_address> mode switchdev
# devlink dev eswitch set pci/<device_pci_address> mode switchdev
Copy to Clipboard Copied! 소스 호스트에서 Mellanox 장치에 가상 기능을 생성합니다.
echo 1 > /sys/bus/pci/devices/0000\:e1\:00.0/sriov_numvfs
# echo 1 > /sys/bus/pci/devices/0000\:e1\:00.0/sriov_numvfs
Copy to Clipboard Copied! 파일 경로의
/0000\:e1\:00.0/
부분은 장치의 PCI 주소를 기반으로 합니다. 예에서는0000:e1:00.0
입니다.소스 호스트에서 드라이버에서 VF를 바인딩 해제합니다.
virsh nodedev-detach <vf_pci_address> --driver pci-stub
# virsh nodedev-detach <vf_pci_address> --driver pci-stub
Copy to Clipboard Copied! 다음 명령을 사용하여 VF의 PCI 주소를 볼 수 있습니다.
lshw -c network -businfo
# lshw -c network -businfo Bus info Device Class Description ============================================================================= pci@0000:e1:00.0 enp225s0np0 network MT2910 Family [ConnectX-7] pci@0000:e1:00.1 enp225s0v0 network ConnectX Family mlx5Gen Virtual Function
Copy to Clipboard Copied! 소스 호스트에서 VF의 마이그레이션 기능을 활성화합니다.
devlink port function set pci/0000:e1:00.0/1 migratable enable
# devlink port function set pci/0000:e1:00.0/1 migratable enable
Copy to Clipboard Copied! 이 예에서
pci/0000:e1:00.0/1
은 지정된 PCI 주소가 있는 Mellanox 장치의 첫 번째 VF를 나타냅니다.소스 호스트에서 VF 마이그레이션을 위해 OVS(Open vSwitch)를 구성합니다. Mellanox 장치가
switchdev
모드에 있는 경우 네트워크를 통해 데이터를 전송할 수 없습니다.openvswitch
서비스가 실행 중인지 확인합니다.systemctl start openvswitch
# systemctl start openvswitch
Copy to Clipboard Copied! 하드웨어 오프로드를 활성화하여 네트워킹 성능을 개선할 수 있습니다.
ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
# ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
Copy to Clipboard Copied! 마이그레이션 중에 네트워크 연결이 열린 상태로 유지되도록 최대 유휴 시간을 늘립니다.
ovs-vsctl set Open_vSwitch . other_config:max-idle=300000
# ovs-vsctl set Open_vSwitch . other_config:max-idle=300000
Copy to Clipboard Copied! OVS 인스턴스에 새 브릿지를 만듭니다.
ovs-vsctl add-br <bridge_name>
# ovs-vsctl add-br <bridge_name>
Copy to Clipboard Copied! openvswitch
서비스를 다시 시작합니다.systemctl restart openvswitch
# systemctl restart openvswitch
Copy to Clipboard Copied! 물리적 Mellanox 장치를 OVS 브리지에 추가합니다.
ovs-vsctl add-port <bridge_name> enp225s0np0
# ovs-vsctl add-port <bridge_name> enp225s0np0
Copy to Clipboard Copied! 이 예에서
enp225s0np0
은 Mellanox 장치의 네트워크 인터페이스 이름입니다.Mellanox 장치의 VF를 OVS 브리지에 추가합니다.
ovs-vsctl add-port <bridge_name> enp225s0npf0vf0
# ovs-vsctl add-port <bridge_name> enp225s0npf0vf0
Copy to Clipboard Copied! 이 예에서
enp225s0npf0vff0
은 VF의 네트워크 인터페이스 이름입니다.
- 대상 호스트에서 1-5단계를 반복합니다.
소스 호스트에서
mlx_vf.xml
과 같은 새 파일을 열고 VF의 다음 XML 구성을 추가합니다.<interface type='hostdev' managed='yes'> <mac address='52:54:00:56:8c:f7'/> <source> <address type='pci' domain='0x0000' bus='0xe1' slot='0x00' function='0x1'/> </source> </interface>
<interface type='hostdev' managed='yes'> <mac address='52:54:00:56:8c:f7'/> <source> <address type='pci' domain='0x0000' bus='0xe1' slot='0x00' function='0x1'/> </source> </interface>
Copy to Clipboard Copied! 이 예에서는 VF의 통과를 VM의 네트워크 인터페이스로 구성합니다. MAC 주소가 고유한지 확인하고 소스 호스트에서 VF의 PCI 주소를 사용합니다.
소스 호스트에서 VF XML 파일을 VM에 연결합니다.
virsh attach-device <vm_name> mlx_vf.xml --live --config
# virsh attach-device <vm_name> mlx_vf.xml --live --config
Copy to Clipboard Copied! 이 예제에서
mlx_vf.xml
은 VF 구성이 포함된 XML 파일의 이름입니다. 장치를 실행 중인 VM에 연결하려면--live
옵션을 사용합니다.소스 호스트에서 연결된 VF를 사용하여 실행 중인 VM의 실시간 마이그레이션을 시작합니다.
virsh migrate --live --domain <vm_name> --desturi qemu+ssh://<destination_host_ip_address>/system
# virsh migrate --live --domain <vm_name> --desturi qemu+ssh://<destination_host_ip_address>/system
Copy to Clipboard Copied! 실시간 마이그레이션 수행에 대한 자세한 내용은 명령줄을 사용하여 가상 머신 마이그레이션을 참조하십시오.
검증
마이그레이션된 VM에서 Mellanox VF의 네트워크 인터페이스 이름을 확인합니다.
ifconfig
# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::a00:27ff:fe4e:66a1 prefixlen 64 scopeid 0x20<link> ether 08:00:27:4e:66:a1 txqueuelen 1000 (Ethernet) RX packets 100000 bytes 6543210 (6.5 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 100000 bytes 6543210 (6.5 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp4s0f0v0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.3.10 netmask 255.255.255.0 broadcast 192.168.3.255 inet6 fe80::a00:27ff:fe4e:66c3 prefixlen 64 scopeid 0x20<link> ether 08:00:27:4e:66:c3 txqueuelen 1000 (Ethernet) RX packets 200000 bytes 12345678 (12.3 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 200000 bytes 12345678 (12.3 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Copy to Clipboard Copied! 마이그레이션된 VM에서 Mellanox VF가 작동하는지 확인합니다. 예를 들면 다음과 같습니다.
ping -I <VF_interface_name> 8.8.8.8
# ping -I <VF_interface_name> 8.8.8.8 PING 8.8.8.8 (8.8.8.8) from 192.168.3.10 <VF_interface_name>: 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=27.4 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=26.9 ms --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 26.944/27.046/27.148/0.102 ms
Copy to Clipboard Copied!
12.7. 연결된 NVIDIA vGPU를 사용하여 가상 머신 실시간 마이그레이션
가상화 워크로드에서 vGPU(가상 GPU)를 사용하는 경우 연결된 vGPU가 연결된 VM(가상 머신)을 다른 KVM 호스트로 실시간 마이그레이션할 수 있습니다. 현재는 NVIDIA GPU에서만 가능합니다.
사전 요구 사항
- 이 기능을 지원하는 NVIDIA 가상 GPU 소프트웨어 드라이버 버전이 있는 NVIDIA GPU가 있습니다. 자세한 내용은 관련 NVIDIA vGPU 설명서 를 참조하십시오.
- VM에 할당된 NVIDIA vGPU가 올바르게 구성되어 있습니다.
여러 vGPU 장치가 연결된 VM을 실시간 마이그레이션할 수도 있습니다.
- NVIDIA에서 설명하는 모든 vGPU 마이그레이션 사전 요구 사항 자세한 내용은 관련 NVIDIA vGPU 설명서를 참조하십시오.
- 모든 일반 VM 마이그레이션 사전 요구 사항입니다. 자세한 내용은 명령줄을 사용하여 가상 머신 마이그레이션을참조하십시오.
제한
- 특정 NVIDIA GPU 기능은 마이그레이션을 비활성화할 수 있습니다. 자세한 내용은 그래픽 카드에 대한 특정 NVIDIA 설명서를 참조하십시오.
- 일부 GPU 워크로드는 마이그레이션 중에 발생하는 다운타임과 호환되지 않습니다. 결과적으로 GPU 워크로드가 중지되거나 충돌할 수 있었습니다. vGPU 실시간 마이그레이션을 시도하기 전에 워크로드가 다운타임과 호환되는지 테스트하는 것이 좋습니다.
- 현재 소스 및 대상 호스트에서 vGPU 드라이버 버전이 다른 경우 vGPU 실시간 마이그레이션이 실패합니다.
현재 vGPU가 연결된 VM을 실시간 마이그레이션할 때 일부 일반적인 가상화 기능을 사용할 수 없습니다.
VM의 더티 메모리 페이지 비율 계산.
현재
virsh domjobinfo
및virsh domdirtyrate-calc
명령에서 제공하는 실시간 마이그레이션 데이터 및 통계는 연결된 vGPU로 VM을 마이그레이션할 때 부정확합니다. vGPU의 경우 계산에 게스트 RAM만 포함되지 않기 때문입니다.- 복사 후 실시간 마이그레이션 사용.
- VM에서 vIOMMU(가상 I/O Memory Management Unit) 장치 사용.
프로세스
실시간 마이그레이션을 진행하는 방법에 대한 자세한 내용은 명령줄을 사용하여 가상 머신 마이그레이션을참조하십시오.
연결된 vGPU 장치에는 migration 명령에 대한 추가 매개변수가 필요하지 않습니다.
12.8. 다른 호스트와 가상 머신 디스크 이미지 공유
지원되는 KVM 호스트 간에 VM(가상 머신)을 실시간 마이그레이션하려면 VM이 마이그레이션 프로세스 중 스토리지에서 읽고 쓸 수 있는 방식으로 실행 중인 VM의 스토리지를 마이그레이션해야 합니다.
이를 수행하는 방법 중 하나는 공유 VM 스토리지를 사용하는 것입니다. 다음 절차에서는 NFS 프로토콜을 사용하여 로컬에 저장된 VM 이미지를 소스 호스트 및 대상 호스트와 공유하는 방법을 설명합니다.
사전 요구 사항
- 마이그레이션을 위한 VM이 종료됩니다.
- 선택 사항: 호스트 시스템은 소스 또는 대상 호스트가 아닌 스토리지를 호스팅하는 데 사용할 수 있지만 소스와 대상 호스트는 네트워크를 통해 연결할 수 있습니다. 이는 공유 스토리지에 최적의 솔루션입니다.
- KVM에서 지원되지 않으므로 NFS 파일 잠금이 사용되지 않는지 확인합니다.
- NFS 프로토콜은 소스 및 대상 호스트에 설치되어 활성화되어 있습니다.
virt_use_nfs
SELinux 부울은에서
로 설정됩니다.setsebool virt_use_nfs 1
# setsebool virt_use_nfs 1
Copy to Clipboard Copied!
프로세스
공유 스토리지를 제공할 호스트에 연결합니다. 이 예에서는
example-shared-storage
호스트입니다.ssh root@example-shared-storage
# ssh root@example-shared-storage root@example-shared-storage's password: Last login: Mon Sep 24 12:05:36 2019 root~#
Copy to Clipboard Copied! disk 이미지를 보유할
example-shared-storage
호스트에서 마이그레이션 호스트와 공유할 디렉터리를 만듭니다.mkdir /var/lib/libvirt/shared-images
# mkdir /var/lib/libvirt/shared-images
Copy to Clipboard Copied! 소스 호스트에서 새로 생성된 디렉터리로 VM의 디스크 이미지를 복사합니다. 다음 예제에서는 VM의 디스크 이미지
example-disk-1
을example-shared-storage
호스트의/var/lib/libvirt/shared-images/
디렉터리에 복사합니다.scp /var/lib/libvirt/images/example-disk-1.qcow2 root@example-shared-storage:/var/lib/libvirt/shared-images/example-disk-1.qcow2
# scp /var/lib/libvirt/images/example-disk-1.qcow2 root@example-shared-storage:/var/lib/libvirt/shared-images/example-disk-1.qcow2
Copy to Clipboard Copied! 스토리지를 공유하는 데 사용할 호스트에서 공유 디렉터리를
/etc/exports
파일에 추가합니다. 다음 예제에서는/var/lib/libvirt/shared-images
디렉터리를example-source-machine
및example-destination-machine
호스트와 공유합니다./var/lib/libvirt/shared-images example-source-machine(rw,no_root_squash) example-destination-machine(rw,no\_root_squash)
# /var/lib/libvirt/shared-images example-source-machine(rw,no_root_squash) example-destination-machine(rw,no\_root_squash)
Copy to Clipboard Copied! /etc/exports
파일의 변경 사항을 적용하려면exportfs -a
명령을 실행합니다.exportfs -a
# exportfs -a
Copy to Clipboard Copied! 소스 및 대상 호스트 모두에서 공유 디렉터리를
/var/lib/libvirt/images
디렉터리에 마운트합니다.mount example-shared-storage:/var/lib/libvirt/shared-images /var/lib/libvirt/images
# mount example-shared-storage:/var/lib/libvirt/shared-images /var/lib/libvirt/images
Copy to Clipboard Copied!
검증
- 소스 호스트에서 VM을 시작하고 성공적으로 부팅되는지 확인합니다.
12.9. 가상 머신 마이그레이션을 위한 호스트 CPU 호환성 확인
마이그레이션된 VM(가상 머신)이 대상 호스트에서 올바르게 작동하려면 소스 및 대상 호스트의 CPU가 호환되어야 합니다. 이 경우 마이그레이션을 시작하기 전에 공통 CPU 기준선을 계산합니다.
이 섹션의 지침은 다음 호스트 CPU와 함께 마이그레이션 시나리오 예제를 사용합니다.
- 소스 호스트: Intel Core i7-8650U
- 대상 호스트: Intel Xeon CPU E5-2620 v2
또한 이 절차는 64비트 ARM 시스템에 적용되지 않습니다.
사전 요구 사항
- 가상화가 시스템에 설치 및 활성화되어 있습니다.
- 소스 호스트에 대한 관리자 액세스 권한과 마이그레이션의 대상 호스트가 있습니다.
프로세스
소스 호스트에서 CPU 기능을 가져와서
domCaps-CPUs.xml
과 같은 새 XML 파일에 붙여넣습니다.virsh domcapabilities | xmllint --xpath "//cpu/mode[@name='host-model']" - > domCaps-CPUs.xml
# virsh domcapabilities | xmllint --xpath "//cpu/mode[@name='host-model']" - > domCaps-CPUs.xml
Copy to Clipboard Copied! -
XML 파일에서 <mode> <
/mode
> 태그를 <cpu> </cpu
>로 바꿉니다. 선택 사항:
domCaps-CPUs.xml
파일의 콘텐츠가 다음과 유사한지 확인합니다.cat domCaps-CPUs.xml <cpu> <model fallback="forbid">Skylake-Client-IBRS</model> <vendor>Intel</vendor> <feature policy="require" name="ss"/> <feature policy="require" name="vmx"/> <feature policy="require" name="pdcm"/> <feature policy="require" name="hypervisor"/> <feature policy="require" name="tsc_adjust"/> <feature policy="require" name="clflushopt"/> <feature policy="require" name="umip"/> <feature policy="require" name="md-clear"/> <feature policy="require" name="stibp"/> <feature policy="require" name="arch-capabilities"/> <feature policy="require" name="ssbd"/> <feature policy="require" name="xsaves"/> <feature policy="require" name="pdpe1gb"/> <feature policy="require" name="invtsc"/> <feature policy="require" name="ibpb"/> <feature policy="require" name="ibrs"/> <feature policy="require" name="amd-stibp"/> <feature policy="require" name="amd-ssbd"/> <feature policy="require" name="rsba"/> <feature policy="require" name="skip-l1dfl-vmentry"/> <feature policy="require" name="pschange-mc-no"/> <feature policy="disable" name="hle"/> <feature policy="disable" name="rtm"/> </cpu>
# cat domCaps-CPUs.xml <cpu> <model fallback="forbid">Skylake-Client-IBRS</model> <vendor>Intel</vendor> <feature policy="require" name="ss"/> <feature policy="require" name="vmx"/> <feature policy="require" name="pdcm"/> <feature policy="require" name="hypervisor"/> <feature policy="require" name="tsc_adjust"/> <feature policy="require" name="clflushopt"/> <feature policy="require" name="umip"/> <feature policy="require" name="md-clear"/> <feature policy="require" name="stibp"/> <feature policy="require" name="arch-capabilities"/> <feature policy="require" name="ssbd"/> <feature policy="require" name="xsaves"/> <feature policy="require" name="pdpe1gb"/> <feature policy="require" name="invtsc"/> <feature policy="require" name="ibpb"/> <feature policy="require" name="ibrs"/> <feature policy="require" name="amd-stibp"/> <feature policy="require" name="amd-ssbd"/> <feature policy="require" name="rsba"/> <feature policy="require" name="skip-l1dfl-vmentry"/> <feature policy="require" name="pschange-mc-no"/> <feature policy="disable" name="hle"/> <feature policy="disable" name="rtm"/> </cpu>
Copy to Clipboard Copied! 대상 호스트에서 다음 명령을 사용하여 CPU 기능을 가져옵니다.
virsh domcapabilities | xmllint --xpath "//cpu/mode[@name='host-model']" -
# virsh domcapabilities | xmllint --xpath "//cpu/mode[@name='host-model']" - <mode name="host-model" supported="yes"> <model fallback="forbid">IvyBridge-IBRS</model> <vendor>Intel</vendor> <feature policy="require" name="ss"/> <feature policy="require" name="vmx"/> <feature policy="require" name="pdcm"/> <feature policy="require" name="pcid"/> <feature policy="require" name="hypervisor"/> <feature policy="require" name="arat"/> <feature policy="require" name="tsc_adjust"/> <feature policy="require" name="umip"/> <feature policy="require" name="md-clear"/> <feature policy="require" name="stibp"/> <feature policy="require" name="arch-capabilities"/> <feature policy="require" name="ssbd"/> <feature policy="require" name="xsaveopt"/> <feature policy="require" name="pdpe1gb"/> <feature policy="require" name="invtsc"/> <feature policy="require" name="ibpb"/> <feature policy="require" name="amd-ssbd"/> <feature policy="require" name="skip-l1dfl-vmentry"/> <feature policy="require" name="pschange-mc-no"/> </mode>
Copy to Clipboard Copied! -
대상 호스트에서 가져온 CPU 기능을 소스 호스트의
domCaps-CPUs.xml
파일에 추가합니다. 다시 <mode> </mode
> 태그를 <cpu> </cpu
>로 바꾸고 파일을 저장합니다. 선택 사항: XML 파일에 이제 두 호스트의 CPU 기능이 포함되어 있는지 확인합니다.
cat domCaps-CPUs.xml <cpu> <model fallback="forbid">Skylake-Client-IBRS</model> <vendor>Intel</vendor> <feature policy="require" name="ss"/> <feature policy="require" name="vmx"/> <feature policy="require" name="pdcm"/> <feature policy="require" name="hypervisor"/> <feature policy="require" name="tsc_adjust"/> <feature policy="require" name="clflushopt"/> <feature policy="require" name="umip"/> <feature policy="require" name="md-clear"/> <feature policy="require" name="stibp"/> <feature policy="require" name="arch-capabilities"/> <feature policy="require" name="ssbd"/> <feature policy="require" name="xsaves"/> <feature policy="require" name="pdpe1gb"/> <feature policy="require" name="invtsc"/> <feature policy="require" name="ibpb"/> <feature policy="require" name="ibrs"/> <feature policy="require" name="amd-stibp"/> <feature policy="require" name="amd-ssbd"/> <feature policy="require" name="rsba"/> <feature policy="require" name="skip-l1dfl-vmentry"/> <feature policy="require" name="pschange-mc-no"/> <feature policy="disable" name="hle"/> <feature policy="disable" name="rtm"/> </cpu> <cpu> <model fallback="forbid">IvyBridge-IBRS</model> <vendor>Intel</vendor> <feature policy="require" name="ss"/> <feature policy="require" name="vmx"/> <feature policy="require" name="pdcm"/> <feature policy="require" name="pcid"/> <feature policy="require" name="hypervisor"/> <feature policy="require" name="arat"/> <feature policy="require" name="tsc_adjust"/> <feature policy="require" name="umip"/> <feature policy="require" name="md-clear"/> <feature policy="require" name="stibp"/> <feature policy="require" name="arch-capabilities"/> <feature policy="require" name="ssbd"/> <feature policy="require" name="xsaveopt"/> <feature policy="require" name="pdpe1gb"/> <feature policy="require" name="invtsc"/> <feature policy="require" name="ibpb"/> <feature policy="require" name="amd-ssbd"/> <feature policy="require" name="skip-l1dfl-vmentry"/> <feature policy="require" name="pschange-mc-no"/> </cpu>
# cat domCaps-CPUs.xml <cpu> <model fallback="forbid">Skylake-Client-IBRS</model> <vendor>Intel</vendor> <feature policy="require" name="ss"/> <feature policy="require" name="vmx"/> <feature policy="require" name="pdcm"/> <feature policy="require" name="hypervisor"/> <feature policy="require" name="tsc_adjust"/> <feature policy="require" name="clflushopt"/> <feature policy="require" name="umip"/> <feature policy="require" name="md-clear"/> <feature policy="require" name="stibp"/> <feature policy="require" name="arch-capabilities"/> <feature policy="require" name="ssbd"/> <feature policy="require" name="xsaves"/> <feature policy="require" name="pdpe1gb"/> <feature policy="require" name="invtsc"/> <feature policy="require" name="ibpb"/> <feature policy="require" name="ibrs"/> <feature policy="require" name="amd-stibp"/> <feature policy="require" name="amd-ssbd"/> <feature policy="require" name="rsba"/> <feature policy="require" name="skip-l1dfl-vmentry"/> <feature policy="require" name="pschange-mc-no"/> <feature policy="disable" name="hle"/> <feature policy="disable" name="rtm"/> </cpu> <cpu> <model fallback="forbid">IvyBridge-IBRS</model> <vendor>Intel</vendor> <feature policy="require" name="ss"/> <feature policy="require" name="vmx"/> <feature policy="require" name="pdcm"/> <feature policy="require" name="pcid"/> <feature policy="require" name="hypervisor"/> <feature policy="require" name="arat"/> <feature policy="require" name="tsc_adjust"/> <feature policy="require" name="umip"/> <feature policy="require" name="md-clear"/> <feature policy="require" name="stibp"/> <feature policy="require" name="arch-capabilities"/> <feature policy="require" name="ssbd"/> <feature policy="require" name="xsaveopt"/> <feature policy="require" name="pdpe1gb"/> <feature policy="require" name="invtsc"/> <feature policy="require" name="ibpb"/> <feature policy="require" name="amd-ssbd"/> <feature policy="require" name="skip-l1dfl-vmentry"/> <feature policy="require" name="pschange-mc-no"/> </cpu>
Copy to Clipboard Copied! XML 파일을 사용하여 마이그레이션하려는 VM의 CPU 기능 기준선을 계산합니다.
virsh hypervisor-cpu-baseline domCaps-CPUs.xml
# virsh hypervisor-cpu-baseline domCaps-CPUs.xml <cpu mode='custom' match='exact'> <model fallback='forbid'>IvyBridge-IBRS</model> <vendor>Intel</vendor> <feature policy='require' name='ss'/> <feature policy='require' name='vmx'/> <feature policy='require' name='pdcm'/> <feature policy='require' name='pcid'/> <feature policy='require' name='hypervisor'/> <feature policy='require' name='arat'/> <feature policy='require' name='tsc_adjust'/> <feature policy='require' name='umip'/> <feature policy='require' name='md-clear'/> <feature policy='require' name='stibp'/> <feature policy='require' name='arch-capabilities'/> <feature policy='require' name='ssbd'/> <feature policy='require' name='xsaveopt'/> <feature policy='require' name='pdpe1gb'/> <feature policy='require' name='invtsc'/> <feature policy='require' name='ibpb'/> <feature policy='require' name='amd-ssbd'/> <feature policy='require' name='skip-l1dfl-vmentry'/> <feature policy='require' name='pschange-mc-no'/> </cpu>
Copy to Clipboard Copied! 마이그레이션하려는 VM의 XML 구성을 열고 <
cpu
> 섹션의 내용을 이전 단계에서 가져온 설정으로 교체합니다.virsh edit <vm_name>
# virsh edit <vm_name>
Copy to Clipboard Copied! VM이 실행 중인 경우 VM을 종료하고 다시 시작합니다.
virsh shutdown <vm_name> virsh start <vm_name>
# virsh shutdown <vm_name> # virsh start <vm_name>
Copy to Clipboard Copied!
12.10. 가상 머신 마이그레이션에 지원되는 호스트
VM(가상 머신) 마이그레이션이 제대로 작동하고 Red Hat에서 지원하려면 소스 및 대상 호스트가 특정 RHEL 버전 및 머신 유형이어야 합니다. 다음 표에서는 지원되는 VM 마이그레이션 경로를 보여줍니다.
q35 시스템 유형에서 동일한 RHEL 버전이 있는 호스트 간 VM 마이그레이션도 지원됩니다.
마이그레이션 방법 | 릴리스 유형 | 향후 버전 예 | 지원 상태 |
---|---|---|---|
앞으로 | 마이너 릴리스 | 10.0.1 → 10.1 | 지원되는 RHEL 10 시스템: 시스템 유형 q35. |
역추적 | 마이너 릴리스 | 10.1 → 10.0.1 | 지원되는 RHEL 10 시스템: 시스템 유형 q35. |
RHOSP 및 OpenShift Virtualization을 포함하여 Red Hat에서 제공하는 다른 가상화 솔루션과 지원 수준은 다릅니다.
13장. 가상 머신의 스토리지 관리
물리적 머신과 마찬가지로 VM(가상 머신)에는 데이터, 프로그램 및 시스템 파일용 스토리지가 필요합니다. VM 관리자는 VM에 물리적 또는 네트워크 기반 스토리지를 가상 스토리지로 할당할 수 있습니다. 기본 하드웨어에 관계없이 스토리지가 VM에 제공되는 방법을 수정할 수도 있습니다.
13.1. 가상 머신에 스토리지를 연결하는 데 사용 가능한 방법
RHEL 10 호스트에서 실행되는 VM(가상 머신)의 스토리지를 제공하기 위해 여러 유형의 스토리지 하드웨어 및 서비스를 사용할 수 있습니다. 이러한 각 유형에는 서로 다른 요구 사항, 이점 및 사용 사례가 있습니다.
- 파일 기반 스토리지
파일 기반 가상 디스크는 호스트 파일 시스템의 디스크 이미지 파일로, 디렉터리 기반
libvirt
스토리지 풀에 저장됩니다.파일 기반 디스크는 빠르게 설정 및 마이그레이션하기 쉽지만 로컬 파일 시스템에 대한 오버헤드가 생성되어 성능에 부정적인 영향을 미칠 수 있습니다.
또한 스냅샷과 같은 특정
libvirt
기능에는 파일 기반 가상 디스크가 필요합니다.VM에 파일 기반 스토리지를 연결하는 방법은 웹 콘솔을 사용하여 명령줄을 사용하거나 파일 기반 가상 디스크를 가상 머신에 연결하여 가상 머신에 파일 기반 가상 디스크 연결을 참조하십시오.
- 디스크 기반 스토리지
VM은 가상 디스크 대신 전체 물리 디스크 또는 파티션을 사용할 수 있습니다.
디스크 기반 스토리지는 사용 가능한 스토리지 유형의 최상의 성능을 제공하며 호스트 디스크에 대한 직접 액세스도 제공합니다. 그러나 이러한 스토리지에 대한 스냅샷을 생성할 수 없으며 마이그레이션하기가 어렵습니다.
VM에 디스크 기반 스토리지를 연결하는 방법은 웹 콘솔을 사용하여 명령줄을 사용하거나 디스크 기반 스토리지를 가상 머신에 연결하여 가상 머신에 디스크 기반 스토리지 연결을 참조하십시오.
- LVM 기반 스토리지
VM은 LVM(Logical Volume Manager)을 사용하여 볼륨 그룹(VG)에서 직접 스토리지를 할당할 수 있습니다.
LVM 스토리지는 파일 기반 디스크보다 성능이 뛰어나고 크기 조정이 쉽지만 마이그레이션하기가 더 어려울 수 있습니다.
VM에 LVM 기반 스토리지를 연결하는 방법은 웹 콘솔을 사용하여 명령줄을 사용하거나 LVM 기반 스토리지를 가상 머신에 연결하여 가상 머신에 LVM 기반 스토리지 연결을 참조하십시오.
- 네트워크 기반 스토리지
로컬 하드웨어 대신 NFS(네트워크 파일 시스템)와 같은 원격 스토리지를 사용할 수 있습니다.
이는 클러스터 또는 고가용성 환경의 공유 스토리지에 유용합니다. 그러나 네트워크 기반 스토리지는 일반적으로 로컬 스토리지보다 느리고 네트워크 대역폭은 성능을 추가로 제한할 수 있습니다.
VM에 NFS 기반 스토리지를 연결하는 방법은 웹 콘솔을 사용하여 명령줄을 사용하거나 NFS 기반 스토리지를 가상 머신에 연결하여 가상 머신에 NFS 기반 스토리지 연결을 참조하십시오.
13.2. 웹 콘솔을 사용하여 가상 머신 스토리지 정보 보기
웹 콘솔을 사용하면 VM(가상 머신)에서 사용할 수 있는 스토리지 리소스에 대한 자세한 정보를 볼 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
호스트에서 사용 가능한 스토리지 풀 목록을 보려면
인터페이스 상단에 있는 을 클릭합니다.스토리지 풀 창이 표시되고 구성된 스토리지 풀 목록이 표시됩니다.
정보에는 다음이 포함됩니다.
- name - 스토리지 풀의 이름입니다.
- size - 스토리지 풀의 현재 할당 및 총 용량입니다.
- Connection - 스토리지 풀에 액세스하는 데 사용되는 연결입니다.
- State - 스토리지 풀의 상태입니다.
표시하려는 정보가 있는 스토리지 풀 옆에 있는 화살표를 클릭합니다.
행이 확장되어 선택한 스토리지 풀에 대한 자세한 정보가 포함된 개요 창이 표시됩니다.
정보는 다음을 포함합니다:
- 대상 경로 - 스토리지 풀의 위치입니다.
- Persistent - 스토리지 풀에 영구 구성이 있는지 여부를 나타냅니다.
- autostart - 시스템이 부팅될 때 스토리지 풀이 자동으로 시작되는지 여부를 나타냅니다.
- type - 스토리지 풀의 유형입니다.
스토리지 풀과 연결된 스토리지 볼륨 목록을 보려면 스토리지
클릭합니다.스토리지 볼륨 창이 표시되고 구성된 스토리지 볼륨 목록이 표시됩니다.
정보는 다음을 포함합니다:
- name - 스토리지 볼륨의 이름입니다.
- 사용 - 현재 스토리지 볼륨을 사용하고 있는 VM입니다.
- size - 볼륨의 크기입니다.
특정 VM에 연결된 가상 디스크를 보려면 다음을 수행합니다.
- 왼쪽 메뉴에서 클릭합니다.
확인할 VM을 클릭합니다.
VM의 그래픽 인터페이스에 액세스하기 위한 선택한 VM 및 콘솔 섹션에 대한 기본 정보가 포함된 개요 섹션이 포함된 새 페이지가 열립니다.
디스크로 스크롤
.디스크 섹션에는 VM에 할당된 디스크에 대한 정보와 디스크 추가 또는 편집 옵션이 표시됩니다.
정보에는 다음이 포함됩니다.
- Device - 디스크의 장치 유형입니다.
- used - 현재 할당된 디스크 양입니다.
- capacity - 스토리지 볼륨의 최대 크기입니다.
- bus - 에뮬레이션된 디스크 장치의 유형입니다.
-
Access - 디스크를 쓸 수 있는지 또는 읽기 전용인지 여부입니다.
원시
디스크의 경우 쓰기 가능 및 공유로 액세스를 설정할 수도 있습니다. - source - 디스크 장치 또는 파일입니다.
13.3. 명령줄을 사용하여 가상 머신 스토리지 정보 보기
명령줄을 사용하면 VM(가상 머신)에서 사용할 수 있는 스토리지 리소스에 대한 자세한 정보를 볼 수 있습니다.
프로세스
호스트에서 사용 가능한 스토리지 풀을 보려면 필요한 목록 세분에 대한 옵션을 사용하여
virsh pool-list
명령을 실행합니다. 예를 들어 다음 옵션은 호스트의 모든 스토리지 풀에 대한 사용 가능한 모든 정보를 표시합니다.virsh pool-list --all --details
# virsh pool-list --all --details Name State Autostart Persistent Capacity Allocation Available default running yes yes 48.97 GiB 23.93 GiB 25.03 GiB Downloads running yes yes 175.62 GiB 62.02 GiB 113.60 GiB RHEL-Storage-Pool running yes yes 214.62 GiB 93.02 GiB 168.60 GiB
Copy to Clipboard Copied! -
스토리지 풀 정보를 보는 데 사용할 수 있는 추가 옵션은
virsh pool-list --help
명령을 사용합니다.
-
스토리지 풀 정보를 보는 데 사용할 수 있는 추가 옵션은
지정된 스토리지 풀의 스토리지 볼륨을 나열하려면
virsh vol-list
명령을 사용합니다.virsh vol-list --pool <RHEL-Storage-Pool> --details
# virsh vol-list --pool <RHEL-Storage-Pool> --details Name Path Type Capacity Allocation --------------------------------------------------------------------------------------------- RHEL_Volume.qcow2 /home/VirtualMachines/RHEL8_Volume.qcow2 file 60.00 GiB 13.93 GiB
Copy to Clipboard Copied! 가상 머신에 연결된 모든 블록 장치를 보려면
virsh domblklist
명령을 사용합니다.*virsh domblklist --details <vm-name>
# *virsh domblklist --details <vm-name> Type Device Target Source ----------------------------------------------------------------------------- file disk hda /home/VirtualMachines/vm-name.qcow2 file cdrom hdb - file disk vdc /home/VirtualMachines/test-disk2.qcow2
Copy to Clipboard Copied!
13.4. 가상 머신에 스토리지 연결
VM(가상 머신)에 스토리지를 추가하려면 가상 디스크로 VM에 스토리지 리소스를 연결할 수 있습니다. 물리적 스토리지 장치와 유사하게 가상 디스크는 연결된 VM과 독립적이며 다른 VM으로 이동할 수 있습니다.
여러 유형의 스토리지 리소스를 사용하여 가상 디스크를 VM에 추가할 수 있습니다.
13.4.1. 명령줄을 사용하여 가상 머신에 파일 기반 가상 디스크 연결
가상 머신에 로컬 스토리지를 제공하기 위해 가장 쉬운 옵션은 일반적으로 .qcow2
또는 .raw
형식으로 파일 기반 가상 디스크를 연결하는 것입니다.
명령줄에서 이를 수행하려면 다음 방법 중 하나를 사용할 수 있습니다.
libvirt
에서 관리하는 디렉터리 기반 스토리지 풀에 파일 기반 스토리지 볼륨을 생성합니다. 이를 위해서는 여러 단계가 필요하지만 하이퍼바이저와 보다 효과적으로 통합됩니다.RHEL 10 호스트에서 첫 번째 VM을 생성할 때 기본 디렉터리 기반 스토리지 볼륨이 자동으로 생성됩니다. 이 스토리지 풀의 이름은 디스크 이미지를 저장하는 디렉터리의 이름을 기반으로 합니다. 예를 들어
libvirt
의시스템
세션에서 디스크 이미지는/var/lib/libvirt/images/
디렉터리에 저장되고 스토리지 풀의 이름은images
입니다.qemu-img
명령을 사용하여 호스트 파일 시스템에 가상 디스크를 파일로 생성합니다. 이 방법은 더 빠른 방법이지만libvirt
와의 통합을 제공하지 않습니다.결과적으로
qemu-img
를 사용하여 생성된 가상 디스크는 생성 후 관리하기가 더 어렵습니다.
명령줄에서 새 VM을 생성할 때 파일 기반 가상 디스크를 생성하고 연결할 수도 있습니다. 이렇게 하려면 virt-install
유틸리티와 함께 --disk
옵션을 사용합니다. 자세한 내용은 가상 머신 생성 을 참조하십시오.
프로세스
선택 사항: 가상 디스크를 스토리지 볼륨으로 생성하지만 호스트에서 기본
이미지
스토리지 풀 또는 다른 기존 스토리지 풀을 사용하지 않으려면 새 디렉터리 기반 스토리지 풀을 생성하고 설정합니다.디렉터리 유형 스토리지 풀을 구성합니다. 예를 들어
/guest_images
디렉터리를 사용하는guest_images_dir
이라는 스토리지 풀을 생성하려면 다음을 수행합니다.virsh pool-define-as guest_images_dir dir --target "/guest_images"
# virsh pool-define-as guest_images_dir dir --target "/guest_images" Pool guest_images_dir defined
Copy to Clipboard Copied! 이전에 정의한 구성을 기반으로 스토리지 풀의 대상 경로를 생성합니다.
virsh pool-build guest_images_dir
# virsh pool-build guest_images_dir Pool guest_images_dir built
Copy to Clipboard Copied! 스토리지 풀을 시작합니다.
virsh pool-start guest_images_dir
# virsh pool-start guest_images_dir Pool guest_images_dir started
Copy to Clipboard Copied! 선택 사항: 호스트 부팅 시 시작되도록 스토리지 풀을 설정합니다.
virsh pool-autostart guest_images_dir
# virsh pool-autostart guest_images_dir Pool guest_images_dir marked as autostarted
Copy to Clipboard Copied! 선택 사항: 스토리지 풀이
실행 중인지
확인합니다. 보고된 크기가 예상대로 있는지 그리고 autostart가 올바르게 구성되어 있는지 확인합니다.virsh pool-info guest_images_dir
# virsh pool-info guest_images_dir Name: guest_images_dir UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0 State: running Persistent: yes Autostart: yes Capacity: 458.39 GB Allocation: 197.91 MB Available: 458.20 GB
Copy to Clipboard Copied!
파일 기반 가상 디스크를 생성합니다. 이렇게 하려면 다음 방법 중 하나를 사용합니다.
libvirt
에서 관리하지 않는 파일 기반 VM 디스크를 신속하게 생성하려면qemu-img
유틸리티를 사용합니다.예를 들어 다음 명령은 크기가 30GB인 test-image 라는
qcow2
디스크 이미지를 생성합니다.qemu-img create -f qcow2 test-image 30G
# qemu-img create -f qcow2 test-image 30G Formatting 'test-image', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=32212254720 lazy_refcounts=off refcount_bits=16
Copy to Clipboard Copied! libvirt
에서 관리하는 파일 기반 VM 디스크를 만들려면 기존 디렉터리 기반 스토리지 풀을 기반으로 디스크를 스토리지 볼륨으로 정의합니다.예를 들어 다음 명령은
guest_images_dir
스토리지 풀을 기반으로vm-disk1
이라는 20GBqcow2
볼륨을 생성합니다.virsh vol-create-as --pool guest_images_dir --name vm-disk1 --capacity 20GB --format qcow2
# virsh vol-create-as --pool guest_images_dir --name vm-disk1 --capacity 20GB --format qcow2 Vol vm-disk1 created
Copy to Clipboard Copied!
생성한 가상 디스크를 찾습니다.
-
qemu-img
를 사용하여 생성된 VM 디스크의 경우 일반적으로 현재 디렉터리입니다. 스토리지 볼륨의 경우 볼륨이 속하는 스토리지 풀을 검사합니다.
virsh vol-list --pool guest_images_dir --details
# virsh vol-list --pool guest_images_dir --details Name Path Type Capacity Allocation -------------------------------------------------------------------------- vm-disk1 /guest-images/vm-disk1 file 20.00 GiB 196.00 KiB
Copy to Clipboard Copied!
-
디스크를 연결할 VM에서 이미 사용되는 대상 장치를 찾습니다.
virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2
# virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2 file cdrom vdb -
Copy to Clipboard Copied! - 선택 사항: 데이터 손상 또는 디스크 조각화에 대한 문제를 방지하려면 디스크의 일관성을 확인합니다. 자세한 내용은 가상 디스크의 일관성 확인을 참조하십시오.
virsh attach-disk
명령을 사용하여 VM에 디스크를 연결합니다. VM에서 사용하지 않는 대상 장치를 제공합니다.예를 들어 다음 명령은 이전에 생성된
test-disk1
을 Cryostat장치로
testguest1
VM에 연결합니다.virsh attach-disk testguest1 /guest-images/vm-disk1 vdc --persistent
# virsh attach-disk testguest1 /guest-images/vm-disk1 vdc --persistent
Copy to Clipboard Copied!
검증
디스크를 연결한 VM의 XML 구성을 검사하여 구성이 올바른지 확인합니다.
virsh dumpxml testguest1
# virsh dumpxml testguest1 ... <disk type='file' device='disk'> <driver name='qemu' type='qcow2' discard='unmap'/> <source file='/guest-images/vm-disk1' index='1'/> <backingStore/> <target dev='vdc' bus='virtio'/> <alias name='virtio-disk2'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> ...
Copy to Clipboard Copied! - VM의 게스트 운영 체제에서 디스크 이미지를 포맷되지 않고 할당되지 않은 디스크로 사용할 수 있는지 확인합니다.
13.4.2. 웹 콘솔을 사용하여 가상 머신에 파일 기반 가상 디스크 연결
가상 머신에 로컬 스토리지를 제공하기 위해 가장 쉬운 옵션은 일반적으로 .qcow2
또는 .raw
형식으로 파일 기반 가상 디스크를 연결하는 것입니다.
이렇게 하려면 libvirt
에서 관리하는 디렉터리 기반 스토리지 풀에 파일 기반 스토리지 볼륨을 만듭니다. RHEL 10 호스트에서 첫 번째 VM을 생성할 때 기본 디렉터리 기반 스토리지 볼륨이 자동으로 생성됩니다. 이 스토리지 풀의 이름은 디스크 이미지를 저장하는 디렉터리의 이름을 기반으로 합니다. 예를 들어 libvirt
의 시스템
세션에서 디스크 이미지는 /var/lib/libvirt/images/
디렉터리에 저장되고 스토리지 풀의 이름은 images
입니다.
웹 콘솔에서 새 VM을 생성할 때 파일 기반 가상 디스크를 생성하고 연결할 수도 있습니다. 이렇게 하려면 가상 머신 생성
대화 상자에서 Storage
옵션을 사용합니다. 자세한 내용은 웹 콘솔을 사용하여 가상 머신 생성을 참조하십시오.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
선택 사항: 기본
이미지
스토리지 풀을 사용하여 새 가상 디스크를 생성하지 않으려면 새 스토리지 풀을 생성합니다.-
가상 머신 인터페이스 상단에 있는
스토리지 풀
을 클릭합니다. →스토리지 풀 생성
. - 스토리지 풀 생성 대화 상자에서 스토리지 풀의 이름을 입력합니다.
- 유형 드롭다운 메뉴에서 Filesystem 디렉토리를 선택합니다.
다음 정보를 입력합니다.
- 대상 경로 - 스토리지 풀의 위치입니다.
- startup - 호스트가 부팅될 때 스토리지 풀이 시작되는지의 여부입니다.
스토리지 풀이 생성되고 스토리지 풀 생성 대화 상자가 닫히면 새 스토리지 풀이 스토리지 풀 목록에 표시됩니다.
-
가상 머신 인터페이스 상단에 있는
기존 스토리지 풀을 기반으로 새 스토리지 볼륨을 생성합니다.
-
스토리지 풀 창에서 스토리지 볼륨을 생성할 스토리지 풀을 클릭합니다. → 스토리지 볼륨
→
.볼륨
생성 스토리지 볼륨 생성 대화 상자에 다음 정보를 입력합니다.
- name - 스토리지 볼륨의 이름입니다.
- size - 스토리지 볼륨의 크기 (MiB 또는 GiB)입니다.
-
Format - 스토리지 볼륨의 형식입니다. 지원되는 유형은
qcow2
및raw
입니다.
- 을 클릭합니다.
-
스토리지 풀 창에서 스토리지 볼륨을 생성할 스토리지 풀을 클릭합니다. → 스토리지 볼륨
- 선택 사항: 데이터 손상 또는 디스크 조각화에 대한 문제를 방지하려면 디스크의 일관성을 확인합니다. 자세한 내용은 가상 디스크의 일관성 확인을 참조하십시오.
생성된 스토리지 볼륨을 VM에 디스크로 추가합니다.
VM의 그래픽 인터페이스에 액세스하기 위한 선택한 VM 및 콘솔 섹션에 대한 기본 정보가 포함된 개요 섹션이 포함된 새 페이지가 열립니다.
- 디스크로 스크롤 .
- 디스크 섹션에서 를 클릭합니다. 추가
- 디스크 추가 대화 상자에서 선택합니다.
- 디스크에 사용할 스토리지 풀 및 스토리지 볼륨을 선택합니다.
디스크가 영구적인지 여부를 선택합니다.
참고임시 디스크는 실행 중인 VM에만 추가할 수 있습니다.
- 선택 사항: 클릭하고 스토리지 볼륨의 캐시 유형, 버스 유형 및 디스크 식별자를 조정합니다.
- 를 클릭합니다.
검증
- VM의 게스트 운영 체제에서 디스크 이미지를 포맷되지 않고 할당되지 않은 디스크로 사용할 수 있는지 확인합니다.
13.4.3. 명령줄을 사용하여 가상 머신에 디스크 기반 스토리지 연결
VM(가상 머신)의 로컬 스토리지를 제공하기 위해 디스크 기반 디스크 이미지를 사용할 수 있습니다. 이 유형의 디스크 이미지는 호스트의 디스크 파티션을 기반으로 하며 .qcow2
또는 .raw
형식을 사용합니다.
명령줄을 사용하여 디스크 기반 스토리지를 VM에 연결하려면 다음 방법 중 하나를 사용합니다.
-
새 VM을 생성할 때
--disk
옵션을 사용하여virt-install
명령의 일부로 새 디스크를 생성하고 연결합니다. 자세한 내용은 가상 머신 생성 을 참조하십시오. - 기존 VM의 경우 디스크 기반 스토리지 볼륨을 생성하여 VM에 연결합니다. 자세한 내용은 다음 절차를 참조하십시오.
사전 요구 사항
하이퍼바이저가 디스크 기반 스토리지 풀을 지원하는지 확인합니다.
virsh pool-capabilities | grep "'disk' supported='yes'"
# virsh pool-capabilities | grep "'disk' supported='yes'"
Copy to Clipboard Copied! 명령이 출력을 표시하는 경우 디스크 기반 풀이 지원됩니다.
스토리지 풀을 기반으로 할 장치를 준비합니다. 이를 위해 파티션(예:
/dev/sdb1
) 또는 LVM 볼륨을 선호합니다. VM에 전체 디스크 또는 블록 장치(예:/dev/sdb
)에 대한 쓰기 액세스 권한이 있는 경우 VM은 이를 파티션하거나 자체 LVM 그룹을 만들 가능성이 있습니다. 이로 인해 호스트에 시스템 오류가 발생할 수 있습니다.그러나 스토리지 풀에 전체 블록 장치를 사용해야 하는 경우 Red Hat은 장치의 중요한 파티션을 GRUB의
os-prober
기능으로부터 보호하는 것이 좋습니다. 이렇게 하려면/etc/default/grub
파일을 편집하고 다음 구성 중 하나를 적용합니다.os-prober
를 비활성화합니다.GRUB_DISABLE_OS_PROBER=true
GRUB_DISABLE_OS_PROBER=true
Copy to Clipboard Copied! os-prober
가 사용하려는 파티션을 검색하지 못하도록 합니다. 예를 들면 다음과 같습니다.GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"
GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"
Copy to Clipboard Copied!
-
스토리지 풀을 생성하기 전에 선택한 스토리지 장치의 데이터를 백업합니다. 사용 중인
libvirt
버전에 따라 디스크를 스토리지 풀로 전달하면 현재 디스크 장치에 저장된 모든 데이터를 다시 포맷하고 지울 수 있습니다.
프로세스
디스크 기반 스토리지 풀이 아직 없는 경우 새 디스크 기반 스토리지 풀을 생성하고 설정합니다.
디스크 유형 스토리지 풀을 정의하고 생성합니다. 다음 예제에서는 /dev/sdb 장치를 사용하고 /dev 디렉터리에 마운트되는
guest_images_disk
라는 스토리지 풀을 생성합니다.virsh pool-define-as guest_images_disk disk --source-format=gpt --source-dev=/dev/sdb --target /dev
# virsh pool-define-as guest_images_disk disk --source-format=gpt --source-dev=/dev/sdb --target /dev Pool guest_images_disk defined
Copy to Clipboard Copied! 사전 포맷된 파일 시스템 스토리지 풀에 대한 스토리지 풀 대상 경로를 생성하고, 스토리지 소스 장치를 초기화하고, 데이터 형식을 정의합니다.
virsh pool-build guest_images_disk
# virsh pool-build guest_images_disk Pool guest_images_disk built
Copy to Clipboard Copied! 선택 사항: 풀이 생성되었는지 확인합니다.
virsh pool-list --all
# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_disk inactive no
Copy to Clipboard Copied! 스토리지 풀을 시작합니다.
virsh pool-start guest_images_disk
# virsh pool-start guest_images_disk Pool guest_images_disk started
Copy to Clipboard Copied! 참고virsh pool-start
명령은 영구 스토리지 풀에만 필요합니다. 임시 스토리지 풀은 생성될 때 자동으로 시작됩니다.선택 사항: 자동 시작을 활성화합니다.
기본적으로
virsh
로 정의된 스토리지 풀은 가상화 서비스가 시작될 때마다 자동으로 시작되도록 설정되지 않습니다.virsh pool-autostart
명령을 사용하여 스토리지 풀을 자동으로 시작하도록 구성합니다.virsh pool-autostart guest_images_disk
# virsh pool-autostart guest_images_disk Pool guest_images_disk marked as autostarted
Copy to Clipboard Copied!
디스크 기반 스토리지 볼륨을 생성합니다. 예를 들어 다음 명령은
guest_images_disk
스토리지 풀을 기반으로vm-disk1
이라는 20GBqcow2
볼륨을 생성합니다.virsh vol-create-as --pool guest_images_disk --name sdb1 --capacity 20GB --format extended
# virsh vol-create-as --pool guest_images_disk --name sdb1 --capacity 20GB --format extended Vol vm-disk1 created
Copy to Clipboard Copied! 스토리지 볼륨을 가상 디스크로 VM에 연결합니다.
생성한 스토리지 볼륨을 찾습니다. 이렇게 하려면 볼륨이 속하는 스토리지 풀을 검사합니다.
virsh vol-list --pool guest_images_disk --details
# virsh vol-list --pool guest_images_disk --details Name Path Type Capacity Allocation --------------------------------------------------------------------- sdb1 /dev/sdb1 block 20.00 GiB 20.00 GiB
Copy to Clipboard Copied! 디스크를 연결할 VM에서 이미 사용되는 대상 장치를 찾습니다.
virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2
# virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2 file cdrom vdb -
Copy to Clipboard Copied! - 선택 사항: 데이터 손상 또는 디스크 조각화에 대한 문제를 방지하려면 디스크의 일관성을 확인합니다. 자세한 내용은 가상 디스크의 일관성 확인을 참조하십시오.
virsh attach-disk
명령을 사용하여 VM에 디스크를 연결합니다. VM에서 사용하지 않는 대상 장치를 제공합니다.예를 들어 다음 명령은 이전에 생성된
vm-disk1
을 Cryostat장치로
testguest1
VM에 연결합니다.virsh attach-disk testguest1 /dev/sdb1 vdc --persistent
# virsh attach-disk testguest1 /dev/sdb1 vdc --persistent
Copy to Clipboard Copied!
검증
디스크를 연결한 VM의 XML 구성을 검사하여 구성이 올바른지 확인합니다.
virsh dumpxml testguest1
# virsh dumpxml testguest1 ... <disk type="block" device="disk"> <driver name="qemu" type="raw"/> <source dev="/dev/sdb1" index="2"/> <backingStore/> <target dev="vdc" bus="virtio"/> <alias name="virtio-disk2"/> <address type="pci" domain="0x0000" bus="0x07" slot="0x00" function="0x0"/> </disk> ...
Copy to Clipboard Copied! - VM의 게스트 운영 체제에서 디스크 이미지를 포맷되지 않고 할당되지 않은 디스크로 사용할 수 있는지 확인합니다.
13.4.4. 웹 콘솔을 사용하여 가상 머신에 디스크 기반 스토리지 연결
가상 머신에 로컬 스토리지를 제공하기 위해 가장 쉬운 옵션은 일반적으로 .qcow2
또는 .raw
형식으로 파일 기반 가상 디스크를 연결하는 것입니다.
웹 콘솔을 사용하여 디스크 기반 스토리지를 VM에 연결하려면 다음 방법 중 하나를 사용합니다.
-
새 VM을 생성할 때
가상 머신 생성 대화 상자에서
연결합니다. 자세한 내용은 웹 콘솔을 사용하여 가상 머신 생성을 참조하십시오.Storage
옵션을 사용하여 새 디스크를 생성하고 - 기존 VM의 경우 디스크 기반 스토리지 볼륨을 생성하여 VM에 연결합니다. 자세한 내용은 다음 절차를 참조하십시오.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
디스크 기반 스토리지 풀이 아직 없는 경우 새 디스크 기반 스토리지 풀을 생성하고 설정합니다.
-
가상 머신 인터페이스 상단에 있는
스토리지 풀
을 클릭합니다. →스토리지 풀 생성
. - 스토리지 풀 생성 대화 상자에서 스토리지 풀의 이름을 입력합니다.
유형 드롭다운 메뉴에서 물리적 디스크 장치를 선택합니다.
참고드롭다운 메뉴에 물리적 디스크 장치 옵션이 표시되지 않으면 하이퍼바이저에서 디스크 기반 스토리지 풀을 지원하지 않습니다.
다음 정보를 입력합니다.
- 대상 경로 - 대상 장치를 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로가 됩니다.
-
소스 경로 - 스토리지 장치를 지정하는 경로입니다. 예를 들면
/dev/sdb
입니다. - format - 파티션 테이블의 유형입니다.
- startup - 호스트가 부팅될 때 스토리지 풀이 시작되는지의 여부입니다.
스토리지 풀이 생성되고 스토리지 풀 생성 대화 상자가 닫히면 새 스토리지 풀이 스토리지 풀 목록에 표시됩니다.
-
가상 머신 인터페이스 상단에 있는
기존 스토리지 풀을 기반으로 새 스토리지 볼륨을 생성합니다.
-
스토리지 풀 창에서 스토리지 볼륨을 생성할 스토리지 풀을 클릭합니다. → 스토리지 볼륨
→
.볼륨
생성 스토리지 볼륨 생성 대화 상자에 다음 정보를 입력합니다.
- name - 스토리지 볼륨의 이름입니다.
- size - 스토리지 볼륨의 크기 (MiB 또는 GiB)입니다.
- Format - 스토리지 볼륨의 형식입니다.
- 을 클릭합니다.
-
스토리지 풀 창에서 스토리지 볼륨을 생성할 스토리지 풀을 클릭합니다. → 스토리지 볼륨
- 선택 사항: 데이터 손상 또는 디스크 조각화에 대한 문제를 방지하려면 디스크의 일관성을 확인합니다. 자세한 내용은 가상 디스크의 일관성 확인을 참조하십시오.
생성된 스토리지 볼륨을 VM에 디스크로 추가합니다.
VM의 그래픽 인터페이스에 액세스하기 위한 선택한 VM 및 콘솔 섹션에 대한 기본 정보가 포함된 개요 섹션이 포함된 새 페이지가 열립니다.
- 디스크로 스크롤 .
- 디스크 섹션에서 를 클릭합니다. 추가
- 디스크 추가 대화 상자에서 선택합니다.
- 디스크에 사용할 스토리지 풀 및 스토리지 볼륨을 선택합니다.
디스크가 영구적인지 여부를 선택합니다.
참고임시 디스크는 실행 중인 VM에만 추가할 수 있습니다.
- 선택 사항: 클릭하고 스토리지 볼륨의 캐시 유형, 버스 유형 및 디스크 식별자를 조정합니다.
- 를 클릭합니다.
검증
- VM의 게스트 운영 체제에서 디스크 이미지를 포맷되지 않고 할당되지 않은 디스크로 사용할 수 있는지 확인합니다.
13.4.5. 명령줄을 사용하여 가상 머신에 LVM 기반 스토리지 연결
VM(가상 머신)의 로컬 스토리지를 제공하기 위해 LVM 기반 스토리지 볼륨을 사용할 수 있습니다. 이 유형의 디스크 이미지는 LVM 볼륨 그룹을 기반으로 하며 .qcow2
또는 .raw
형식을 사용합니다.
명령줄을 사용하여 VM에 LVM 기반 스토리지를 연결하려면 다음 방법 중 하나를 사용합니다.
-
새 VM을 생성할 때
가상 머신 생성 대화 상자에서
연결합니다. 자세한 내용은 웹 콘솔을 사용하여 가상 머신 생성을 참조하십시오.Storage
옵션을 사용하여 새 디스크를 생성하고 - 기존 VM의 경우 LVM 기반 스토리지 볼륨을 생성하여 VM에 연결합니다. 자세한 내용은 다음 절차를 참조하십시오.
고려 사항
LVM 기반 스토리지 볼륨에는 다음과 같은 몇 가지 제한 사항이 있습니다.
- LVM 기반 스토리지 풀은 LVM의 모든 유연성을 제공하지 않습니다.
-
LVM 기반 스토리지 풀은 볼륨 그룹입니다.
virsh
유틸리티를 사용하여 볼륨 그룹을 생성할 수 있지만 이렇게 하면 생성된 볼륨 그룹에 하나의 장치만 있을 수 있습니다. 여러 장치가 있는 볼륨 그룹을 생성하려면 LVM 유틸리티를 사용하여 LVM을 사용하여 Linux에서 볼륨 그룹을 만드는 방법을 참조하십시오. -
LVM 기반 스토리지 풀에는 전체 디스크 파티션이 필요합니다.
virsh
명령을 사용하여 새 파티션 또는 장치를 활성화하면 파티션이 포맷되고 모든 데이터가 삭제됩니다. 호스트의 기존 볼륨 그룹을 사용하는 경우 이러한 절차와 같이 지워지지 않습니다.
사전 요구 사항
하이퍼바이저가 LVM 기반 스토리지 풀을 지원하는지 확인합니다.
virsh pool-capabilities | grep "'logical' supported='yes'"
# virsh pool-capabilities | grep "'logical' supported='yes'"
Copy to Clipboard Copied! 명령이 출력을 표시하는 경우 LVM 기반 풀이 지원됩니다.
- 호스트에 LVM 볼륨 그룹이 있는지 확인합니다. 하나를 만드는 방법에 대한 지침 은 LVM 볼륨 그룹 생성 을 참조하십시오.
- 스토리지 풀을 생성하기 전에 선택한 스토리지 장치의 데이터를 백업합니다. 디스크 파티션을 스토리지 풀에 분리하면 현재 디스크 장치에 저장된 모든 데이터를 다시 포맷하고 지웁니다.
프로세스
아직 없는 경우 새 LVM 기반 스토리지 풀을 생성하고 설정합니다.
LVM 유형 스토리지 풀을 정의합니다. 예를 들어 다음 명령은
lvm_vg
볼륨 그룹을 사용하고/dev/lvm_vg
디렉터리에 마운트된guest_images_lvm
이라는 스토리지 풀을 정의합니다.virsh pool-define-as guest_images_lvm logical --source-dev /dev/sdb --target /dev/lvm_vg
# virsh pool-define-as guest_images_lvm logical --source-dev /dev/sdb --target /dev/lvm_vg Pool guest_images_lvm defined
Copy to Clipboard Copied! 이전에 정의한 구성을 기반으로 스토리지 풀을 생성합니다.
virsh pool-build guest_images_lvm
# virsh pool-build guest_images_lvm Pool guest_images_lvm built
Copy to Clipboard Copied! 선택 사항: 풀이 생성되었는지 확인합니다.
virsh pool-list --all
# virsh pool-list --all Name State Autostart ------------------------------------------- default active yes guest_images_lvm inactive no
Copy to Clipboard Copied! 스토리지 풀을 시작합니다.
virsh pool-start guest_images_lvm
# virsh pool-start guest_images_lvm Pool guest_images_lvm started
Copy to Clipboard Copied! 참고virsh pool-start
명령은 영구 스토리지 풀에만 필요합니다. 임시 스토리지 풀은 생성될 때 자동으로 시작됩니다.선택 사항: 자동 시작을 활성화합니다.
기본적으로
virsh
로 정의된 스토리지 풀은 가상화 서비스가 시작될 때마다 자동으로 시작되도록 설정되지 않습니다.virsh pool-autostart
명령을 사용하여 스토리지 풀을 자동으로 시작하도록 구성합니다.virsh pool-autostart guest_images_lvm
# virsh pool-autostart guest_images_lvm Pool guest_images_lvm marked as autostarted
Copy to Clipboard Copied!
LVM 기반 스토리지 볼륨을 생성합니다. 예를 들어 다음 명령은
guest_images_lvm
스토리지 풀을 기반으로vm-disk1
이라는 20GBqcow2
볼륨을 생성합니다.virsh vol-create-as --pool guest_images_lvm --name vm-disk1 --capacity 20GB --format qcow2
# virsh vol-create-as --pool guest_images_lvm --name vm-disk1 --capacity 20GB --format qcow2 Vol vm-disk1 created
Copy to Clipboard Copied! 스토리지 볼륨을 가상 디스크로 VM에 연결합니다.
생성한 스토리지 볼륨을 찾습니다. 이렇게 하려면 볼륨이 속하는 스토리지 풀을 검사합니다.
virsh vol-list --pool guest_images_lvm --details
# virsh vol-list --pool guest_images_lvm --details Name Path Type Capacity Allocation ----------------------------------------------------------------------------- vm-disk1 /dev/guest_images_lvm/vm-disk1 block 20.00 GiB 196.00 KiB
Copy to Clipboard Copied! 디스크를 연결할 VM에서 이미 사용되는 대상 장치를 찾습니다.
virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2
# virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2 file cdrom vdb -
Copy to Clipboard Copied! - 선택 사항: 데이터 손상 또는 디스크 조각화에 대한 문제를 방지하려면 디스크의 일관성을 확인합니다. 자세한 내용은 가상 디스크의 일관성 확인을 참조하십시오.
virsh attach-disk
명령을 사용하여 VM에 디스크를 연결합니다. VM에서 사용하지 않는 대상 장치를 제공합니다.예를 들어 다음 명령은 이전에 생성된
vm-disk1
을 Cryostat장치로
testguest1
VM에 연결합니다.virsh attach-disk testguest1 /dev/guest_images_lvm/vm-disk1 vdc --persistent
# virsh attach-disk testguest1 /dev/guest_images_lvm/vm-disk1 vdc --persistent
Copy to Clipboard Copied!
검증
디스크를 연결한 VM의 XML 구성을 검사하여 구성이 올바른지 확인합니다.
virsh dumpxml testguest1
# virsh dumpxml testguest1 ... <disk type="block" device="disk"> <driver name="qemu" type="raw"/> <source dev="/dev/guest_images_lvm/vm-disk1" index="3"/> <backingStore/> <target dev="vdc" bus="virtio"/> <alias name="virtio-disk2"/> <address type="pci" domain="0x0000" bus="0x07" slot="0x00" function="0x0"/> </disk> ...
Copy to Clipboard Copied! - VM의 게스트 운영 체제에서 디스크 이미지를 포맷되지 않고 할당되지 않은 디스크로 사용할 수 있는지 확인합니다.
13.4.6. 웹 콘솔을 사용하여 가상 머신에 LVM 기반 스토리지 연결
VM(가상 머신)의 로컬 스토리지를 제공하기 위해 LVM 기반 스토리지 볼륨을 사용할 수 있습니다. 이 유형의 디스크 이미지는 LVM 볼륨 그룹을 기반으로 하며 .qcow2
또는 .raw
형식을 사용합니다.
웹 콘솔을 사용하여 디스크 기반 스토리지를 VM에 연결하려면 다음 방법 중 하나를 사용합니다.
-
새 VM을 생성할 때
가상 머신 생성 대화 상자에서
연결합니다. 자세한 내용은 웹 콘솔을 사용하여 가상 머신 생성을 참조하십시오.Storage
옵션을 사용하여 새 디스크를 생성하고 - 기존 VM의 경우 LVM 기반 스토리지 볼륨을 생성하여 VM에 연결합니다. 자세한 내용은 다음 절차를 참조하십시오.
고려 사항
LVM 기반 스토리지 볼륨에는 다음과 같은 몇 가지 제한 사항이 있습니다.
- LVM 기반 스토리지 풀은 LVM의 모든 유연성을 제공하지 않습니다.
-
LVM 기반 스토리지 풀은 볼륨 그룹입니다.
virsh
유틸리티를 사용하여 볼륨 그룹을 생성할 수 있지만 이렇게 하면 생성된 볼륨 그룹에 하나의 장치만 있을 수 있습니다. 여러 장치가 있는 볼륨 그룹을 생성하려면 LVM 유틸리티를 사용하여 LVM을 사용하여 Linux에서 볼륨 그룹을 만드는 방법을 참조하십시오. -
LVM 기반 스토리지 풀에는 전체 디스크 파티션이 필요합니다.
virsh
명령을 사용하여 새 파티션 또는 장치를 활성화하면 파티션이 포맷되고 모든 데이터가 삭제됩니다. 호스트의 기존 볼륨 그룹을 사용하는 경우 이러한 절차와 같이 지워지지 않습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
- 호스트에 LVM 볼륨 그룹이 있습니다. 하나를 만드는 방법에 대한 지침 은 LVM 볼륨 그룹 생성 을 참조하십시오.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
새 디렉터리 기반 스토리지 풀이 없는 경우 새 디렉터리 기반 스토리지 풀을 생성하고 설정합니다.
-
가상 머신 인터페이스 상단에 있는
스토리지 풀
을 클릭합니다. →스토리지 풀 생성
. - 스토리지 풀 생성 대화 상자에서 스토리지 풀의 이름을 입력합니다.
유형 드롭다운 메뉴에서 LVM 볼륨 그룹을 선택합니다.
참고드롭다운 메뉴에 LVM 볼륨 그룹 옵션이 표시되지 않으면 하이퍼바이저에서 디스크 기반 스토리지 풀을 지원하지 않습니다.
다음 정보를 입력합니다.
- 소스 볼륨 그룹 - 사용하려는 LVM 볼륨 그룹의 이름입니다.
- startup - 호스트가 부팅될 때 스토리지 풀이 시작되는지의 여부입니다.
스토리지 풀이 생성되고 스토리지 풀 생성 대화 상자가 닫히면 새 스토리지 풀이 스토리지 풀 목록에 표시됩니다.
-
가상 머신 인터페이스 상단에 있는
기존 스토리지 풀을 기반으로 새 스토리지 볼륨을 생성합니다.
-
스토리지 풀 창에서 스토리지 볼륨을 생성할 스토리지 풀을 클릭합니다. → 스토리지 볼륨
→
.볼륨
생성 스토리지 볼륨 생성 대화 상자에 다음 정보를 입력합니다.
- name - 스토리지 볼륨의 이름입니다.
- size - 스토리지 볼륨의 크기 (MiB 또는 GiB)입니다.
-
Format - 스토리지 볼륨의 형식입니다. 지원되는 유형은
qcow2
및raw
입니다.
- 을 클릭합니다.
-
스토리지 풀 창에서 스토리지 볼륨을 생성할 스토리지 풀을 클릭합니다. → 스토리지 볼륨
- 선택 사항: 데이터 손상 또는 디스크 조각화에 대한 문제를 방지하려면 디스크의 일관성을 확인합니다. 자세한 내용은 가상 디스크의 일관성 확인을 참조하십시오.
생성된 스토리지 볼륨을 VM에 디스크로 추가합니다.
VM의 그래픽 인터페이스에 액세스하기 위한 선택한 VM 및 콘솔 섹션에 대한 기본 정보가 포함된 개요 섹션이 포함된 새 페이지가 열립니다.
- 디스크로 스크롤 .
- 디스크 섹션에서 를 클릭합니다. 추가
- 디스크 추가 대화 상자에서 선택합니다.
- 디스크에 사용할 스토리지 풀 및 스토리지 볼륨을 선택합니다.
디스크가 영구적인지 여부를 선택합니다.
참고임시 디스크는 실행 중인 VM에만 추가할 수 있습니다.
- 선택 사항: 클릭하고 스토리지 볼륨의 캐시 유형, 버스 유형 및 디스크 식별자를 조정합니다.
- 를 클릭합니다.
검증
- VM의 게스트 운영 체제에서 디스크 이미지를 포맷되지 않고 할당되지 않은 디스크로 사용할 수 있는지 확인합니다.
13.4.7. 명령줄을 사용하여 가상 머신에 NFS 기반 스토리지 연결
VM(가상 머신)의 네트워크 스토리지를 제공하기 위해 NFS(Network File Sytem) 서버를 기반으로 스토리지 볼륨을 사용할 수 있습니다.
명령줄을 사용하여 NFS 기반 스토리지를 VM에 연결하려면 다음 방법 중 하나를 사용합니다.
-
새 VM을 생성할 때
가상 머신 생성 대화 상자에서
연결합니다. 자세한 내용은 웹 콘솔을 사용하여 가상 머신 생성을 참조하십시오.Storage
옵션을 사용하여 새 디스크를 생성하고 - 기존 VM의 경우 NFS 기반 스토리지 볼륨을 생성하여 VM에 연결합니다. 자세한 내용은 다음 절차를 참조하십시오.
사전 요구 사항
하이퍼바이저가 NFS 기반 스토리지 풀을 지원하는지 확인합니다.
virsh pool-capabilities | grep "<value>nfs</value>"
# virsh pool-capabilities | grep "<value>nfs</value>"
Copy to Clipboard Copied! 명령이 출력을 표시하는 경우 NFS 기반 풀이 지원됩니다.
- 사용할 수 있는 사용 가능한 NFS가 있어야 합니다. 자세한 내용은 NFS 공유 마운트를참조하십시오.
프로세스
아직 없는 경우 새 NFS 기반 스토리지 풀을 생성하고 설정합니다.
NFS 유형 스토리지 풀을 정의하고 생성합니다. 예를 들어 대상 디렉토리
/var/lib/libvirt/images/nfspool
을 사용하여 서버 디렉토리/home/net_mount
에 마운트된 IP111.222.111.222
가 있는 NFS 서버를 사용하는guest_images_netfs
라는 스토리지 풀을 생성하려면 다음을 실행합니다.virsh pool-define-as --name guest_images_netfs \ --type netfs --source-host='111.222.111.222' \ --source-path='/home/net_mount' --source-format='nfs' \ --target='/var/lib/libvirt/images/nfspool'
# virsh pool-define-as --name guest_images_netfs \ --type netfs --source-host='111.222.111.222' \ --source-path='/home/net_mount' --source-format='nfs' \ --target='/var/lib/libvirt/images/nfspool' Pool guest_images_netfs defined
Copy to Clipboard Copied! 이전에 정의한 구성을 기반으로 스토리지 풀을 생성합니다.
virsh pool-build guest_images_netfs
# virsh pool-build guest_images_netfs Pool guest_images_netfs built
Copy to Clipboard Copied! 선택 사항: 풀이 생성되었는지 확인합니다.
virsh pool-list --all
# virsh pool-list --all Name State Autostart ------------------------------------------- default active yes guest_images_netfs inactive no
Copy to Clipboard Copied! 스토리지 풀을 시작합니다.
virsh pool-start guest_images_netfs
# virsh pool-start guest_images_netfs Pool guest_images_netfs started
Copy to Clipboard Copied! 선택 사항: 자동 시작을 활성화합니다.
기본적으로
virsh
로 정의된 스토리지 풀은 가상화 서비스가 시작될 때마다 자동으로 시작되도록 설정되지 않습니다.virsh pool-autostart
명령을 사용하여 스토리지 풀을 자동으로 시작하도록 구성합니다.virsh pool-autostart guest_images_netfs
# virsh pool-autostart guest_images_netfs Pool guest_images_netfs marked as autostarted
Copy to Clipboard Copied!
NFS 기반 스토리지 볼륨을 생성합니다. 예를 들어 다음 명령은
guest_images_netfs
스토리지 풀을 기반으로vm-disk1
이라는 20GBqcow2
볼륨을 생성합니다.virsh vol-create-as --pool guest_images_netfs --name vm-disk1 --capacity 20GB --format qcow2
# virsh vol-create-as --pool guest_images_netfs --name vm-disk1 --capacity 20GB --format qcow2 Vol vm-disk1 created
Copy to Clipboard Copied! 스토리지 볼륨을 가상 디스크로 VM에 연결합니다.
생성한 스토리지 볼륨을 찾습니다. 이렇게 하려면 볼륨이 속하는 스토리지 풀을 검사합니다.
virsh vol-list --pool guest_images_netfs --details
# virsh vol-list --pool guest_images_netfs --details Name Path Type Capacity Allocation ------------------------------------------------------------------------------------- vm-disk1 /var/lib/libvirt/images/nfspool/vm-disk1 file 20.00 GiB 196.00 KiB
Copy to Clipboard Copied! 디스크를 연결할 VM에서 이미 사용되는 대상 장치를 찾습니다.
virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2
# virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2 file cdrom vdb -
Copy to Clipboard Copied! - 선택 사항: 데이터 손상 또는 디스크 조각화에 대한 문제를 방지하려면 디스크의 일관성을 확인합니다. 자세한 내용은 가상 디스크의 일관성 확인을 참조하십시오.
virsh attach-disk
명령을 사용하여 VM에 디스크를 연결합니다. VM에서 사용하지 않는 대상 장치를 제공합니다.예를 들어 다음 명령은 이전에 생성된
vm-disk1
을 Cryostat장치로
testguest1
VM에 연결합니다.virsh attach-disk testguest1 /var/lib/libvirt/images/nfspool/vm-disk1 vdc --persistent
# virsh attach-disk testguest1 /var/lib/libvirt/images/nfspool/vm-disk1 vdc --persistent
Copy to Clipboard Copied!
검증
디스크를 연결한 VM의 XML 구성을 검사하여 구성이 올바른지 확인합니다.
virsh dumpxml testguest1
# virsh dumpxml testguest1 ... <disk type='file' device='disk'> <driver name='qemu' type='qcow2' discard='unmap'/> <source file='/var/lib/libvirt/images/nfspool/vm-disk1' index='1'/> <backingStore/> <target dev='vdc' bus='virtio'/> <alias name='virtio-disk2'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> ...
Copy to Clipboard Copied! - VM의 게스트 운영 체제에서 디스크 이미지를 포맷되지 않고 할당되지 않은 디스크로 사용할 수 있는지 확인합니다.
13.4.8. 웹 콘솔을 사용하여 가상 머신에 NFS 기반 스토리지 연결
VM(가상 머신)의 네트워크 스토리지를 제공하기 위해 NFS(Network File Sytem) 서버를 기반으로 스토리지 볼륨을 사용할 수 있습니다.
웹 콘솔을 사용하여 NFS 기반 스토리지를 VM에 연결하려면 다음 방법 중 하나를 사용합니다.
-
새 VM을 생성할 때
가상 머신 생성 대화 상자에서
연결합니다. 자세한 내용은 웹 콘솔을 사용하여 가상 머신 생성을 참조하십시오.Storage
옵션을 사용하여 새 디스크를 생성하고 - 기존 VM의 경우 NFS 기반 스토리지 볼륨을 생성하여 VM에 연결합니다. 자세한 내용은 다음 절차를 참조하십시오.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
아직 없는 경우 새 NFS 기반 스토리지 풀을 생성하고 설정합니다.
-
가상 머신 인터페이스 상단에 있는
스토리지 풀
을 클릭합니다. →스토리지 풀 생성
. - 스토리지 풀 생성 대화 상자에서 스토리지 풀의 이름을 입력합니다.
유형 드롭다운 메뉴에서 네트워크 파일 시스템을 선택합니다.
참고드롭다운 메뉴에 네트워크 파일 시스템 옵션이 표시되지 않으면 하이퍼바이저에서 NFS 기반 스토리지 풀을 지원하지 않습니다.
다음 정보를 입력합니다.
- 대상 경로 - 대상을 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로가 됩니다.
- host - 마운트 지점이 있는 네트워크 서버의 호스트 이름입니다. 호스트 이름 또는 IP 주소일 수 있습니다.
- 소스 경로 - 네트워크 서버에서 사용되는 디렉터리입니다.
- startup - 호스트가 부팅될 때 스토리지 풀이 시작되는지의 여부입니다.
스토리지 풀이 생성되고 스토리지 풀 생성 대화 상자가 닫히면 새 스토리지 풀이 스토리지 풀 목록에 표시됩니다.
-
가상 머신 인터페이스 상단에 있는
기존 스토리지 풀을 기반으로 새 스토리지 볼륨을 생성합니다.
-
스토리지 풀 창에서 스토리지 볼륨을 생성할 스토리지 풀을 클릭합니다. → 스토리지 볼륨
→
.볼륨
생성 스토리지 볼륨 생성 대화 상자에 다음 정보를 입력합니다.
- name - 스토리지 볼륨의 이름입니다.
- size - 스토리지 볼륨의 크기 (MiB 또는 GiB)입니다.
-
Format - 스토리지 볼륨의 형식입니다. 지원되는 유형은
qcow2
및raw
입니다.
- 을 클릭합니다.
-
스토리지 풀 창에서 스토리지 볼륨을 생성할 스토리지 풀을 클릭합니다. → 스토리지 볼륨
- 선택 사항: 데이터 손상 또는 디스크 조각화에 대한 문제를 방지하려면 디스크의 일관성을 확인합니다. 자세한 내용은 가상 디스크의 일관성 확인을 참조하십시오.
생성된 스토리지 볼륨을 VM에 디스크로 추가합니다.
VM의 그래픽 인터페이스에 액세스하기 위한 선택한 VM 및 콘솔 섹션에 대한 기본 정보가 포함된 개요 섹션이 포함된 새 페이지가 열립니다.
- 디스크로 스크롤 .
- 디스크 섹션에서 를 클릭합니다. 추가
- 디스크 추가 대화 상자에서 선택합니다.
- 디스크에 사용할 스토리지 풀 및 스토리지 볼륨을 선택합니다.
디스크가 영구적인지 여부를 선택합니다.
참고임시 디스크는 실행 중인 VM에만 추가할 수 있습니다.
- 선택 사항: 클릭하고 스토리지 볼륨의 캐시 유형, 버스 유형 및 디스크 식별자를 조정합니다.
- 를 클릭합니다.
검증
- VM의 게스트 운영 체제에서 디스크 이미지를 포맷되지 않고 할당되지 않은 디스크로 사용할 수 있는지 확인합니다.
13.5. 가상 디스크의 일관성 확인
디스크 이미지를 VM(가상 머신)에 연결하기 전에 디스크 이미지에 손상 또는 조각화와 같은 문제가 없는지 확인합니다. 이렇게 하려면 qemu-img check
명령을 사용할 수 있습니다.
필요한 경우 이 명령을 사용하여 디스크 이미지 복구를 시도할 수도 있습니다.
사전 요구 사항
- 디스크 이미지를 사용하는 VM(가상 머신)을 종료해야 합니다.
프로세스
테스트할 이미지에서
qemu-img check
명령을 사용합니다. 예를 들면 다음과 같습니다.qemu-img check <test-name.qcow2>
# qemu-img check <test-name.qcow2> No errors were found on the image. 327434/327680 = 99.92% allocated, 0.00% fragmented, 0.00% compressed clusters Image end offset: 21478375424
Copy to Clipboard Copied! 검사에서 디스크 이미지에서 문제를 발견하면 명령의 출력은 다음과 유사합니다.
167 errors were found on the image. Data may be corrupted, or further writes to the image may corrupt it. 453368 leaked clusters were found on the image. This means waste of disk space, but no harm to data. 259 internal errors have occurred during the check. Image end offset: 21478375424
167 errors were found on the image. Data may be corrupted, or further writes to the image may corrupt it. 453368 leaked clusters were found on the image. This means waste of disk space, but no harm to data. 259 internal errors have occurred during the check. Image end offset: 21478375424
Copy to Clipboard Copied! 감지된 문제 해결을 시도하려면
qemu-img check
명령을-r all
옵션과 함께 사용합니다. 그러나 일부 문제만 해결할 수 있습니다.주의디스크 이미지를 복구하면 데이터 손상 또는 기타 문제가 발생할 수 있습니다. 복구를 시도하기 전에 디스크 이미지를 백업하십시오.
qemu-img check -r all <test-name.qcow2>
# qemu-img check -r all <test-name.qcow2> [...] 122 errors were found on the image. Data may be corrupted, or further writes to the image may corrupt it. 250 internal errors have occurred during the check. Image end offset: 27071414272
Copy to Clipboard Copied! 이 출력은 복구 후 디스크 이미지에서 발견된 문제 수를 나타냅니다.
-
추가 디스크 이미지 복구가 필요한 경우
guestfish
쉘 에서 다양한libguestfs
툴을 사용할 수 있습니다.
13.6. 가상 디스크 크기 조정
기존 디스크 이미지에 추가 공간이 필요한 경우 qemu-img 크기 조정
유틸리티를 사용하여 사용 사례에 맞게 이미지 크기를 변경할 수 있습니다.
사전 요구 사항
- 디스크 이미지의 백업을 생성했습니다.
디스크 이미지를 사용하는 VM(가상 머신)을 종료해야 합니다.
주의실행 중인 VM의 디스크 이미지 크기를 조정하면 데이터 손상 또는 기타 문제가 발생할 수 있습니다.
- 호스트의 하드 디스크에는 의도한 디스크 이미지 크기에 충분한 여유 공간이 있습니다.
- 선택 사항: 디스크 이미지에 데이터 손상 또는 유사한 문제가 없는지 확인했습니다. 자세한 내용은 가상 디스크의 일관성 확인을 참조하십시오.
프로세스
크기 조정하려는 VM의 디스크 이미지 파일의 위치를 결정합니다. 예를 들면 다음과 같습니다.
virsh domblklist <vm-name>
# virsh domblklist <vm-name> Target Source ---------------------------------------------------------- vda /home/username/disk-images/example-image.qcow2
Copy to Clipboard Copied! 선택 사항: 현재 디스크 이미지를 백업합니다.
cp <example-image.qcow2> <example-image-backup.qcow2>
# cp <example-image.qcow2> <example-image-backup.qcow2>
Copy to Clipboard Copied! qemu-img 크기 조정
유틸리티를 사용하여 이미지의 크기를 조정합니다.예를 들어 크기를 10GB만큼 늘리려면 다음을 <example-image.qcow2> 수행합니다.
qemu-img resize <example-image.qcow2> +10G
# qemu-img resize <example-image.qcow2> +10G
Copy to Clipboard Copied! - 추가 공간을 사용하도록 디스크 이미지 내부의 파일 시스템, 파티션 또는 물리 볼륨의 크기를 조정합니다. RHEL 게스트 운영 체제에서 이를 수행하려면 스토리지 장치 관리 및 파일 시스템 관리의 지침을 사용하십시오.
검증
크기가 조정된 이미지에 대한 정보를 표시하고 원하는 크기가 있는지 확인합니다.
qemu-img info <converted-image.qcow2>
# qemu-img info <converted-image.qcow2> image: converted-image.qcow2 file format: qcow2 virtual size: 30 GiB (32212254720 bytes) disk size: 196 KiB cluster_size: 65536 Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: false
Copy to Clipboard Copied! - 크기가 조정된 디스크 이미지에 잠재적인 오류가 있는지 확인합니다. 자세한 내용은 가상 디스크의 일관성 확인을 참조하십시오.
13.7. 가상 디스크 형식 간 변환
qemu-img convert
명령을 사용하여 가상 디스크 이미지를 다른 형식으로 변환할 수 있습니다. 예를 들어 디스크 이미지를 다른 하이퍼바이저에서 실행 중인 VM(가상 머신)에 연결하려면 가상 디스크 이미지 형식 간 변환이 필요할 수 있습니다.
사전 요구 사항
- 디스크 이미지를 사용하는 VM(가상 머신)을 종료해야 합니다.
- QEMU에서 변환하려면 소스 디스크 이미지 형식을 지원해야 합니다. 자세한 목록은 지원되는 디스크 이미지 형식을 참조하십시오.
프로세스
qemu-img convert
명령을 사용하여 기존 가상 디스크 이미지를 다른 형식으로 변환합니다. 예를 들어 원시 디스크 이미지를 QCOW2 디스크 이미지로 변환하려면 다음을 수행합니다.qemu-img convert -f raw <original-image.img> -O qcow2 <converted-image.qcow2>
# qemu-img convert -f raw <original-image.img> -O qcow2 <converted-image.qcow2>
Copy to Clipboard Copied!
검증
변환된 이미지에 대한 정보를 표시하고 의도한 형식과 크기가 있는지 확인합니다.
qemu-img info <converted-image.qcow2>
# qemu-img info <converted-image.qcow2> image: converted-image.qcow2 file format: qcow2 virtual size: 30 GiB (32212254720 bytes) disk size: 196 KiB cluster_size: 65536 Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: false
Copy to Clipboard Copied! - 디스크 이미지에 잠재적인 오류가 있는지 확인하십시오. 자세한 내용은 가상 디스크의 일관성 확인을 참조하십시오.
13.8. 명령줄을 사용하여 가상 머신 스토리지 제거
VM(가상 머신)에 연결된 가상 디스크가 더 이상 필요하지 않거나 호스트 스토리지 리소스를 확보하려는 경우 명령줄을 사용하여 다음을 수행할 수 있습니다.
- VM에서 가상 디스크를 분리합니다.
- 가상 디스크 및 해당 콘텐츠를 삭제합니다.
- 가상 디스크와 관련된 스토리지 풀을 비활성화합니다.
- 가상 디스크와 관련된 스토리지 풀을 삭제합니다.
프로세스
VM에서 가상 디스크를 분리하려면
virsh detach-disk
명령을 사용합니다.선택 사항: VM에 연결된 모든 스토리지 장치를 나열합니다.
*virsh domblklist --details <vm-name>
# *virsh domblklist --details <vm-name> Type Device Target Source ----------------------------------------------------------------------------- file disk hda /home/VirtualMachines/vm-name.qcow2 file cdrom hdb - file disk vdc /home/VirtualMachines/test-disk2.qcow2
Copy to Clipboard Copied! target
매개 변수를 사용하여 디스크를 분리합니다. 예를 들어 에 연결된 디스크를test
guestvirsh detach-disk testguest vdc --persistent
# virsh detach-disk testguest vdc --persistent
Copy to Clipboard Copied!
디스크를 삭제하려면 다음 중 하나를 수행하십시오.
디스크가 스토리지 볼륨으로 관리되는 경우
virsh vol-delete
명령을 사용합니다. 예를 들어 스토리지 풀RHEL-storage-pool
과 연결된test-disk2
볼륨을 삭제하려면 다음을 수행합니다.virsh vol-delete --pool RHEL-storage-pool test-disk2
# virsh vol-delete --pool RHEL-storage-pool test-disk2
Copy to Clipboard Copied! 디스크가 파일 기반이면 파일을 제거합니다.
rm /home/VirtualMachines/test-disk2.qcow2
# rm /home/VirtualMachines/test-disk2.qcow2
Copy to Clipboard Copied!
스토리지 풀을 비활성화하려면
virsh pool-destroy
명령을 사용합니다.스토리지 풀을 비활성화하면 해당 풀에 새 볼륨을 생성할 수 없습니다. 그러나 해당 풀에 볼륨이 있는 모든 VM은 계속 실행됩니다. 예를 들어 시스템 성능을 높이기 위해 풀에서 생성할 수 있는 볼륨 수를 제한하려는 경우 유용합니다.
virsh pool-destroy RHEL-storage-pool
# virsh pool-destroy RHEL-storage-pool Pool RHEL-storage-pool destroyed
Copy to Clipboard Copied! 스토리지 풀을 완전히 제거하려면
virsh pool-undefine
명령을 사용하여 정의를 삭제합니다.virsh pool-undefine RHEL-storage-pool
# virsh pool-undefine RHEL-storage-pool Pool RHEL-storage-pool has been undefined
Copy to Clipboard Copied!
검증
VM 스토리지 변경 사항이 성공했는지 확인하려면 호스트에서 가상 스토리지의 현재 상태를 검사합니다.
자세한 내용은 명령행을 사용하여 가상 머신 스토리지 정보 보기를 참조하십시오.
13.9. 웹 콘솔을 사용하여 가상 머신 스토리지 제거
VM(가상 머신)에 연결된 가상 디스크가 더 이상 필요하지 않거나 호스트 스토리지 리소스를 확보하려는 경우 웹 콘솔을 사용하여 다음을 수행할 수 있습니다.
- VM에서 가상 디스크를 분리합니다.
- 가상 디스크 및 해당 콘텐츠를 삭제합니다.
- 가상 디스크와 관련된 스토리지 풀을 비활성화합니다.
- 가상 디스크와 관련된 스토리지 풀을 삭제합니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
VM에서 가상 디스크를 분리하려면 다음 단계를 수행합니다.
VM의 그래픽 인터페이스에 액세스하기 위한 선택한 VM 및 콘솔 섹션에 대한 기본 정보가 포함된 개요 섹션이 포함된 새 페이지가 열립니다.
디스크로 스크롤
.디스크 섹션에는 VM에 할당된 디스크에 대한 정보와 디스크 추가 또는 편집 옵션이 표시됩니다.
- 분리할 디스크 행 오른쪽에 있는 메뉴 버튼을 클릭합니다
표시되는 드롭다운 메뉴에서
버튼을 클릭합니다.VM에서 디스크 제거?
확인 대화 상자가 나타납니다.확인 대화 상자에서
클릭합니다. 선택적으로 디스크 이미지를 제거하려면 를 클릭합니다.가상 디스크는 VM에서 분리됩니다.
디스크를 삭제하려면 다음 중 하나를 수행하십시오.
디스크가 스토리지 볼륨으로 관리되는 경우 가상 머신 탭 상단에 있는 스토리지
을 클릭합니다. → 디스크가 포함된 스토리지 풀의 이름을 클릭합니다. → 제거할 스토리지 볼륨을 클릭합니다. → 를 클릭합니다.virsh vol-delete --pool RHEL-storage-pool test-disk2
# virsh vol-delete --pool RHEL-storage-pool test-disk2
Copy to Clipboard Copied! -
디스크가 스토리지 볼륨(예:
qemu-img
에서 생성된 경우)으로 관리되지 않는 파일인 경우 그래픽 파일 관리자 또는 명령줄을 사용하여 삭제해야 합니다. 현재 RHEL 웹 콘솔은 개별 파일 삭제를 지원하지 않습니다.
스토리지 풀을 비활성화하려면 다음 단계를 사용하십시오.
스토리지 풀을 비활성화하면 해당 풀에 새 볼륨을 생성할 수 없습니다. 그러나 해당 풀에 볼륨이 있는 모든 VM은 계속 실행됩니다. 예를 들어 시스템 성능을 높이기 위해 풀에서 생성할 수 있는 볼륨 수를 제한하려는 경우 유용합니다.
- 가상 머신 탭 상단에 있는 을 클릭합니다. 스토리지 풀 창이 표시되고 구성된 스토리지 풀 목록이 표시됩니다.
스토리지 풀 행에서
를 클릭합니다.스토리지 풀이 비활성화됩니다.
스토리지 풀을 완전히 제거하려면 다음 단계를 따르십시오.
가상 머신 탭에서 을 클릭합니다.
스토리지 풀 창이 표시되고 구성된 스토리지 풀 목록이 표시됩니다.
삭제할 스토리지 풀
메뉴 버튼 Cryostat를 클릭하고 를 클릭합니다.확인 대화 상자가 나타납니다.
- 선택 사항: 풀 내의 스토리지 볼륨을 삭제하려면 대화 상자에서 해당 확인란을 선택합니다.
스토리지 풀이 삭제됩니다. 이전 단계에서 확인란을 선택하면 연결된 스토리지 볼륨도 삭제됩니다.
검증
VM 스토리지 변경 사항이 성공했는지 확인하려면 호스트에서 가상 스토리지의 현재 상태를 검사합니다.
자세한 내용은 웹 콘솔을 사용하여 가상 머신 스토리지 정보 보기를 참조하십시오.
13.10. 지원되는 디스크 이미지 형식
RHEL에서 VM(가상 머신)을 실행하려면 지원되는 형식의 디스크 이미지를 사용해야 합니다. 지원되지 않는 특정 디스크 이미지를 지원되는 형식으로 변환할 수도 있습니다.
VM에 지원되는 디스크 이미지 형식
다음 형식을 사용하는 디스크 이미지를 사용하여 RHEL에서 VM을 실행할 수 있습니다.
- qcow2 - 압축과 같은 특정 추가 기능을 제공합니다.
- raw - Might는 더 나은 성능을 제공합니다.
- LUKS - Linux 통합 키 설정(LUKS) 사양을 사용하여 암호화된 디스크 이미지입니다.
변환을 위해 지원되는 디스크 이미지 형식
-
필요한 경우
qemu-img convert
명령을 사용하여원시
및qcow2
형식 간에 디스크 이미지를 변환할 수 있습니다. -
vmdk 디스크 이미지를
원시
또는qcow2
형식으로 변환해야 하는 경우virt-v2v
유틸리티를 사용하여 디스크를 KVM으로 변환하는 VM을 변환합니다. 다른 디스크 이미지 형식을
raw
또는qcow2
로 변환하려면qemu-img convert
명령을 사용할 수 있습니다. 이 명령과 함께 작동하는 형식 목록은 QEMU 설명서를 참조하십시오.대부분의 경우 KVM이 아닌 가상 시스템의 디스크 이미지 형식을
qcow2
또는raw
로 변환하는 것은 VM이 RHEL KVM에서 올바르게 실행되는 데 충분하지 않습니다. 디스크 이미지를 변환하는 것 외에도 해당 드라이버를 VM의 게스트 운영 체제에 설치하고 구성해야 합니다. 지원되는 하이퍼바이저 변환의 경우virt-v2v
유틸리티를 사용합니다.
14장. 스냅샷을 사용하여 가상 머신 상태 저장 및 복원
VM(가상 머신)의 현재 상태를 저장하려면 VM의 스냅샷 을 생성할 수 있습니다. 나중에 스냅샷으로 되돌리면 VM을 저장된 상태로 되돌릴 수 있습니다.
VM 스냅샷에는 VM의 디스크 이미지가 포함되어 있습니다. 라이브 스냅샷이라고도 하는 실행 중인 VM에서 스냅샷을 생성하는 경우 스냅샷 에는 실행 중인 프로세스 및 애플리케이션이 포함된 VM의 메모리 상태도 포함됩니다.
스냅샷 생성은 예를 들어 다음 작업에 유용할 수 있습니다.
- 게스트 운영 체제의 명확한 상태 저장
- VM에서 잠재적으로 파괴적인 작업을 수행하기 전에 복원 지점이 있는지 확인
VM 스냅샷을 생성하거나 되돌리려면 CLI(명령줄) 또는 RHEL 웹 콘솔을 사용할 수 있습니다.
14.1. 가상 머신 스냅샷에 대한 지원 제한 사항
Red Hat은 외부 스냅샷을 사용하는 경우에만 RHEL에서 VM(가상 머신)에 대한 스냅샷 기능을 지원합니다. 현재 다음 요구 사항이 모두 충족되는 경우에만 RHEL에서 외부 스냅샷을 생성할 수 있습니다.
- VM에서 파일 기반 스토리지를 사용하고 있습니다.
다음 시나리오 중 하나에서 VM 스냅샷을 생성합니다.
- VM이 종료되었습니다.
-
VM이 실행 중인 경우
--disk-only --quiesce
옵션 또는--live --memspec
옵션을 사용합니다.
대부분의 다른 구성은 RHEL 10에서 더 이상 사용되지 않는 내부 스냅샷을 생성합니다. 내부 스냅샷은 사용 사례에 적합할 수 있지만 Red Hat은 완전한 테스트 및 지원을 제공하지 않습니다.
프로덕션 환경에서는 내부 스냅샷을 사용하지 마십시오.
스냅샷이 지원되는지 확인하려면 스냅샷의 XML 구성을 표시하고 스냅샷 유형 및 스토리지를 확인합니다.
virsh snapshot-dumpxml <vm-name> <snapshot-name>
# virsh snapshot-dumpxml <vm-name> <snapshot-name>
지원되는 스냅샷의 출력 예:
<domainsnapshot> <name>sample-snapshot-name-1<name> <state>shutoff</state> <creationTime>1706658764</creationTime> <memory snapshot='no'/> <disks> <disk name='vda' snapshot='external' type='file'> <driver type='qcow2'/> <source file='/var/lib/libvirt/images/vm-name.sample-snapshot-name-1'/> </disk> </disks> <domain type='kvm'> [...]
<domainsnapshot> <name>sample-snapshot-name-1<name> <state>shutoff</state> <creationTime>1706658764</creationTime> <memory snapshot='no'/> <disks> <disk name='vda' snapshot='external' type='file'> <driver type='qcow2'/> <source file='/var/lib/libvirt/images/vm-name.sample-snapshot-name-1'/> </disk> </disks> <domain type='kvm'> [...]
Copy to Clipboard Copied! 지원되지 않는 스냅샷의 출력 예:
<domainsnapshot> <name>sample-snapshot-name-2</name> <state>running</state> <creationTime>1653396424</creationTime> <memory snapshot='internal'/> <disks> <disk name='vda' snapshot='internal'/> <disk name='sda' snapshot='no'/> </disks> <domain type='kvm'> [...]
<domainsnapshot> <name>sample-snapshot-name-2</name> <state>running</state> <creationTime>1653396424</creationTime> <memory snapshot='internal'/> <disks> <disk name='vda' snapshot='internal'/> <disk name='sda' snapshot='no'/> </disks> <domain type='kvm'> [...]
Copy to Clipboard Copied!
14.2. 명령줄을 사용하여 가상 머신 스냅샷 생성
VM(가상 머신)의 상태를 스냅샷에 저장하려면 virsh snapshot-create-as
명령을 사용하면 됩니다.
사전 요구 사항
VM은 파일 기반 스토리지를 사용합니다. 이 경우 있는지 확인하려면 다음 명령을 사용하고
disk
장치의 경우disk type
을file
로 표시하십시오.virsh dumpxml <vm-name> | grep "disk type"
# virsh dumpxml <vm-name> | grep "disk type" <disk type='file' device='disk'> <disk type='file' device='cdrom'>
Copy to Clipboard Copied! 실행 중인 VM의 메모리가 포함된 VM 스냅샷을 생성하려면 VM의 메모리를 저장하기에 충분한 디스크 공간이 있어야 합니다.
- VM의 메모리를 저장하기 위한 최소 권장 공간은 VM의 할당된 RAM과 동일합니다. 예를 들어 32GB RAM이 있는 VM의 메모리를 저장하려면 최대 32GB의 디스크 공간이 필요합니다.
- VM이 I/O 로드가 많은 경우 상당한 추가 디스크 공간이 필요할 수 있습니다.
- VM에 VFIO 패스스루 장치를 할당한 경우 추가 디스크 공간이 필요할 수 있습니다.
VM을 일시 중지하지 않고 스냅샷을 생성하는 경우 추가 디스크 공간이 필요할 수 있습니다.
주의Red Hat은 워크로드가 매우 크거나 VFIO 패스스루 장치를 사용하는 실행 중인 VM의 메모리를 저장하지 않는 것이 좋습니다. 이러한 VM의 메모리를 저장하면 호스트 디스크를 채우고 시스템의 성능이 저하될 수 있습니다. 대신 이러한 VM에 대한 메모리 없이 스냅샷을 생성하는 것이 좋습니다.
또한 일부 VFIO 장치가 메모리로 스냅샷을 생성할 수 있는 것은 아닙니다. 현재 메모리로 스냅샷을 생성하는 것은 다음과 같은 상황에서만 올바르게 작동합니다.
- 연결된 VFIO 장치는 마이그레이션 기능이 활성화된 Mellanox VF입니다.
- 연결된 VFIO 장치는 마이그레이션 기능이 활성화된 NVIDIA vGPU입니다.
프로세스
필수 매개 변수를 사용하여 VM 스냅샷을 생성하려면
virsh snapshot-create-as
명령을 사용합니다.virsh snapshot-create-as <vm-name> <snapshot-name> <optional-description> <additional-parameters>
# virsh snapshot-create-as <vm-name> <snapshot-name> <optional-description> <additional-parameters>
Copy to Clipboard Copied! 종료 VM의 스냅샷을 생성하려면
--disk-only
매개변수를 사용합니다. 예를 들어 다음 명령은 shut-downTestguest1
VM의 현재 disk-state에서Snapshot1
을 생성합니다.virsh snapshot-create-as Testguest1 Snapshot1 --disk-only
# virsh snapshot-create-as Testguest1 Snapshot1 --disk-only Domain snapshot Snapshot1 created.
Copy to Clipboard Copied! 실행 중인 VM의 disk-state를 저장하는 스냅샷을 만들려면
--disk-only --quiesce
매개변수를 사용합니다. 예를 들어 다음 명령은 설명clean system install
을 사용하여 실행 중인Testguest2
VM의 현재 디스크 상태에서Snapshot2
를 생성합니다.virsh snapshot-create-as Testguest2 Snapshot2 "clean system install" --disk-only --quiesce
# virsh snapshot-create-as Testguest2 Snapshot2 "clean system install" --disk-only --quiesce Domain snapshot Snapshot2 created.
Copy to Clipboard Copied! 실행 중인 VM을 일시 중지하고 디스크 상태 및 메모리를 저장하는 스냅샷을 생성하려면
--memspec
매개변수를 사용합니다. 예를 들어 다음 명령은Testguest3
VM을 일시 중지하고 VM의 현재 디스크 및 메모리 상태에서Snapshot3
을 생성합니다. VM 메모리는/var/lib/libvirt/images/saved_memory.img
파일에 저장됩니다. 스냅샷이 완료되면 VM이 작업을 자동으로 다시 시작합니다.virsh snapshot-create-as Testguest3 Snapshot3 --memspec /var/lib/libvirt/images/saved_memory.img
# virsh snapshot-create-as Testguest3 Snapshot3 --memspec /var/lib/libvirt/images/saved_memory.img Domain snapshot Snapshot3 created.
Copy to Clipboard Copied! 스냅샷 프로세스 중에 VM을 일시 중지하면 다운 타임이 발생하지만 특히 로드가 많은 VM의 경우 실행 중인 VM의
실시간
스냅샷을 생성하는 것보다 더 안정적으로 작동할 수 있습니다.실행 중인 VM과 라이브 메모리의 disk-state를 저장하는 스냅샷을 생성하려면
--live --memspec
매개변수를 사용합니다. 예를 들어 다음 명령은 실행 중인Testguest4
VM의 현재 디스크 및 메모리 상태에서Snapshot4
를 생성하고 메모리 상태를/var/lib/libvirt/images/saved_memory2.img
파일에 저장합니다.virsh snapshot-create-as Testguest4 Snapshot4 --live --memspec /var/lib/libvirt/images/saved_memory2.img
# virsh snapshot-create-as Testguest4 Snapshot4 --live --memspec /var/lib/libvirt/images/saved_memory2.img Domain snapshot Snapshot4 created.
Copy to Clipboard Copied!
VM의 메모리를 스냅샷에 저장하면 실행 중인 프로세스의 상태가 VM의 게스트 운영 체제에 저장됩니다. 그러나 이러한 스냅샷으로 되돌리면 네트워크 연결 손실 또는 동기화되지 않은 시스템 시간 등 다양한 요인으로 인해 프로세스가 실패할 수 있습니다.
검증
지정된 VM과 연결된 스냅샷을 나열합니다.
virsh snapshot-list <Testguest1>
# virsh snapshot-list <Testguest1> Name Creation Time State -------------------------------------------------------------- Snapshot1 2024-01-30 18:34:58 +0100 shutoff
Copy to Clipboard Copied! 스냅샷이 external 로 생성되었는지 확인합니다.
virsh snapshot-dumpxml <Testguest1> <Snapshot1> | grep external
# virsh snapshot-dumpxml <Testguest1> <Snapshot1> | grep external <disk name='vda' snapshot='external' type='file'>
Copy to Clipboard Copied! 이 명령의 출력에
snapshot='external'
이 포함된 경우 스냅샷은 외부이므로 Red Hat에서 완전히 지원합니다.
14.3. 웹 콘솔을 사용하여 가상 머신 스냅샷 생성
VM(가상 머신)의 상태를 스냅샷에 저장하려면 RHEL 웹 콘솔을 사용할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
VM은 파일 기반 스토리지를 사용합니다. 이 경우 다음 단계를 수행합니다.
- 웹 콘솔의 가상 머신 인터페이스에서 스냅샷을 생성할 VM을 클릭합니다.
- 관리 개요의 디스크 창에서 나열된 장치의 Source 열을 확인합니다. 소스를 나열하는 모든 장치에서 이 소스는 File 이어야 합니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
웹 콘솔의 가상 머신 인터페이스에서 스냅샷을 생성할 VM을 클릭합니다.
VM의 관리 개요가 열립니다.
-
관리 개요의 스냅샷 창에서
스냅샷 생성
버튼을 클릭합니다. - 스냅샷의 이름을 입력하고 설명을 선택적으로 입력합니다.
-
생성
을 클릭합니다.
검증
- 스냅샷 생성이 성공했는지 확인하려면 VM의 Snapshots 창에 스냅샷이 나열되어 있는지 확인합니다.
스냅샷이 external로 생성되었는지 확인합니다. 이렇게 하려면 호스트의 명령줄에서 다음 명령을 사용합니다.
virsh snapshot-dumpxml <Testguest1> <Snapshot1> | grep external
# virsh snapshot-dumpxml <Testguest1> <Snapshot1> | grep external <disk name='vda' snapshot='external' type='file'>
Copy to Clipboard Copied! 이 명령의 출력에
snapshot='external'
이 포함된 경우 스냅샷은 외부이므로 Red Hat에서 지원합니다.
14.4. 명령줄을 사용하여 가상 머신 스냅샷으로 되돌리기
VM(가상 머신)을 스냅샷에 저장된 상태로 반환하려면 CLI(명령줄 인터페이스)를 사용할 수 있습니다.
사전 요구 사항
- 웹 콘솔에서 또는 명령줄을 사용하여 이전에 생성한 VM 스냅샷을 사용할 수 있습니다.
- 선택 사항: VM의 현재 상태에 대한 스냅샷을 생성했습니다. 현재 상태를 저장하지 않고 이전 스냅샷으로 되돌리면 마지막 스냅샷이 손실되므로 VM에서 수행된 변경 사항이 손실됩니다.
프로세스
virsh snapshot-revert
유틸리티를 사용하여 VM의 이름과 되돌리려는 스냅샷의 이름을 지정합니다. 예를 들어 다음 명령은Testguest2
VM을clean-install
스냅샷으로 되돌립니다.virsh snapshot-revert Testguest2 clean-install
# virsh snapshot-revert Testguest2 clean-install Domain snapshot clean-install reverted
Copy to Clipboard Copied!
검증
되돌리는 VM에 대한 현재 활성 스냅샷을 표시합니다.
virsh snapshot-current Testguest2 --name
# virsh snapshot-current Testguest2 --name clean-install
Copy to Clipboard Copied!
14.5. 웹 콘솔을 사용하여 가상 머신 스냅샷으로 되돌리기
VM(가상 머신)을 스냅샷에 저장된 상태로 반환하려면 RHEL 웹 콘솔을 사용할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
- 웹 콘솔에서 또는 명령줄을 사용하여 이전에 생성한 VM 스냅샷을 사용할 수 있습니다.
- 선택 사항: VM의 현재 상태에 대한 스냅샷을 생성했습니다. 현재 상태를 저장하지 않고 이전 스냅샷으로 되돌리면 마지막 스냅샷이 손실되므로 VM에서 수행된 변경 사항이 손실됩니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
웹 콘솔의 가상 머신 인터페이스에서 되돌리려는 상태가 있는 VM을 클릭합니다.
VM의 관리 개요가 열립니다.
-
관리 개요의 스냅샷 창에서 되돌리려는 스냅샷 옆에 있는
Revert
버튼을 클릭합니다. - 되돌리기 작업이 완료될 때까지 기다립니다. 스냅샷의 크기와 현재 상태와 다른 방법에 따라 최대 몇 분이 걸릴 수 있습니다.
검증
- 스냅샷 창에서 선택한 스냅샷의 왼쪽에 녹색 확인 기호가 표시되면 이를 성공적으로 복원한 것입니다.
14.6. 명령줄을 사용하여 가상 머신 스냅샷 삭제
VM(가상 머신) 스냅샷이 더 이상 사용되지 않는 경우 명령줄에서 해당 스냅샷을 삭제하여 사용하는 디스크 공간을 확보할 수 있습니다.
사전 요구 사항
선택 사항: 삭제할 스냅샷의 하위 스냅샷이 있습니다.
하위 스냅샷은 활성 스냅샷이 있고 새 스냅샷을 생성할 때 자동으로 생성됩니다. 하위 항목이 없는 스냅샷을 삭제하면 해당 상위 스냅샷에서 생성된 후 스냅샷에 저장된 변경 사항이 손실됩니다.
VM에서 스냅샷의 상위-하위 구조를 보려면
virsh snapshot-list --tree
명령을 사용합니다. 다음 예제에서는Redundant-snapshot
의 하위 항목으로Latest-snapshot
을 보여줍니다.virsh snapshot-list --tree <vm-name>
# virsh snapshot-list --tree <vm-name> Clean-install-snapshot | +- Redundant-snapshot | +- Latest-snapshot
Copy to Clipboard Copied!
프로세스
virsh snapshot-delete
명령을 사용하여 스냅샷을 삭제합니다. 예를 들어 다음 명령은Testguest1
VM에서Redundant-snapshot
을 삭제합니다.virsh snapshot-delete Testguest1 Redundant-snapshot
# virsh snapshot-delete Testguest1 Redundant-snapshot Domain snapshot Redundant-snapshot deleted
Copy to Clipboard Copied!
검증
삭제한 스냅샷이 더 이상 존재하지 않도록 하려면 영향을 받는 VM 및 해당 상위-하위 구조의 기존 스냅샷을 표시합니다.
virsh snapshot-list --tree <Testguest1>
# virsh snapshot-list --tree <Testguest1> Clean-install-snapshot | +- Latest-snapshot
Copy to Clipboard Copied! 이 예에서는
Redundant-snapshot
이 삭제되었으며Latest-snapshot
은Clean-install-snapshot
의 하위 항목이 되었습니다.
14.7. 웹 콘솔을 사용하여 가상 머신 스냅샷 삭제
VM(가상 머신) 스냅샷이 더 이상 유용하지 않으면 웹 콘솔에서 해당 스냅샷을 삭제하여 사용하는 디스크 공간을 확보할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
선택 사항: 삭제할 스냅샷의 하위 스냅샷이 있습니다.
하위 스냅샷은 활성 스냅샷이 있고 새 스냅샷을 생성할 때 자동으로 생성됩니다. 하위 항목이 없는 스냅샷을 삭제하면 해당 상위 스냅샷에서 생성된 후 스냅샷에 저장된 변경 사항이 손실됩니다.
스냅샷에 하위가 있는지 확인하려면 VM의 웹 콘솔 개요의 Snapshots ( 스냅샷)의 상위 스냅샷 열에 스냅샷이 나열되어 있는지 확인합니다.
프로세스
웹 콘솔 의 가상 시스템 인터페이스에서 삭제할 스냅샷이 있는 VM을 클릭합니다.
VM의 관리 개요가 열립니다.
-
관리 개요의 스냅샷 창에서
삭제하려는 스냅샷 옆에 있는 삭제
버튼을 클릭합니다. - 삭제 작업이 완료될 때까지 기다립니다. 스냅샷 크기에 따라 최대 몇 분이 걸릴 수 있습니다.
검증
- 스냅샷이 더 이상 Snapshots 창에 나타나지 않으면 성공적으로 삭제되었습니다.
15장. 가상 머신에 호스트 장치 연결
VM(가상 머신)의 기능을 VM에 연결하여 호스트 장치를 확장할 수 있습니다. 호스트 장치를 VM에 연결할 때 가상 장치는 하드웨어 장치의 소프트웨어 추상화인 이러한 목적으로 사용됩니다.
15.1. 가상 장치의 작동 방식
물리적 시스템과 마찬가지로 VM(가상 머신)에는 처리 성능, 메모리, 스토리지, 네트워킹 또는 그래픽과 같은 특수 장치가 필요합니다. 물리적 시스템은 일반적으로 이러한 목적으로 하드웨어 장치를 사용합니다. 그러나 VM은 소프트웨어 프로세스로 작동하기 때문에 가상 장치라고 하는 대신 이러한 장치의 소프트웨어 추상화를 사용해야 합니다.
가상 장치의 기본 사항
VM에 연결된 가상 장치는 VM 을 생성할 때 구성할 수 있으며 기존 VM 에서도 관리할 수 있습니다. 일반적으로 VM이 종료된 경우에만 가상 장치를 VM에서 연결하거나 분리할 수 있지만 VM이 실행될 때 일부 장치를 추가하거나 제거할 수 있습니다. 이 기능을 장치 핫 플러그 및 핫 언 플러그 라고 합니다.
새 VM을 만들 때 libvirt
는 사용자가 별도로 지정하지 않는 한 필수 가상 장치 세트를 자동으로 생성하고 구성합니다. 호스트 시스템 아키텍처 및 시스템 유형을 기반으로 하며, 일반적으로 다음이 포함됩니다.
- CPU
- 메모리
- 키보드
- NIC(네트워크 인터페이스 컨트롤러)
- 다양한 장치 컨트롤러
- 비디오 카드
- 사운드 카드
VM이 생성된 후 가상 장치를 관리하려면 명령행(CLI) 또는 RHEL 10 웹 콘솔을 사용합니다.
성능 또는 유연성
일부 유형의 장치의 경우 RHEL 10은 여러 구현을 지원하며, 종종 성능과 유연성 간의 절충이 있습니다.
예를 들어 가상 디스크에 사용되는 물리적 스토리지는 qcow2
또는 raw
와 같은 다양한 형식으로 파일로 표시할 수 있으며 다양한 컨트롤러를 사용하여 VM에 제공할 수 있습니다.
- 에뮬레이션 컨트롤러
-
virtio-scsi
-
virtio-blk
virtio
장치는 가상화 목적으로 특별히 설계되었기 때문에 에뮬레이션된 컨트롤러는 virtio
컨트롤러보다 느립니다. 그러나 에뮬레이션된 컨트롤러를 사용하면 virtio
장치에 대한 드라이버가 없는 운영 체제를 실행할 수 있습니다. 마찬가지로 virtio-scsi
는 SCSI 명령을 보다 완벽하게 지원하며 다수의 디스크를 VM에 연결할 수 있습니다. 마지막으로 virtio-blk
는 virtio-scsi
및 에뮬레이션된 컨트롤러보다 나은 성능을 제공하지만 더 제한된 사용 사례입니다. 예를 들어 virtio-blk
를 사용하면 물리적 디스크를 VM에 LUN 장치로 연결할 수 없습니다.
가상 장치 유형에 대한 자세한 내용은 가상 장치 유형을 참조하십시오.
15.2. 가상 장치 유형
RHEL 10의 가상화는 VM(가상 머신)에 연결할 수 있는 몇 가지 다른 유형의 가상 장치를 제공할 수 있습니다.
- 에뮬레이션된 장치
에뮬레이션된 장치는 널리 사용되는 물리적 장치의 소프트웨어 구현입니다. 물리적 장치를 위해 설계된 드라이버는 에뮬레이션된 장치와도 호환됩니다. 따라서 에뮬레이션된 장치는 매우 유연하게 사용할 수 있습니다.
그러나 특정 유형의 하드웨어를 올바르게 에뮬레이션해야 하므로 에뮬레이션된 장치는 해당 물리적 장치 또는 더 최적화된 가상 장치와 비교하여 상당한 성능 손실이 발생할 수 있습니다.
다음과 같은 유형의 에뮬레이션 장치가 지원됩니다.
- 가상 CPU(vCPU)를 선택할 수 있으며 다양한 CPU 모델을 사용할 수 있습니다. 에뮬레이션의 성능 영향은 호스트 CPU와 에뮬레이션된 vCPU의 차이점에 따라 크게 달라집니다.
- PCI 버스 컨트롤러와 같은 에뮬레이션 시스템 구성 요소입니다.
- SATA, SCSI 또는 IDE와 같은 에뮬레이션된 스토리지 컨트롤러입니다.
- ICH9, ICH6 또는 AC97과 같은 에뮬레이션된 사운드 장치.
- VGA 카드와 같은 에뮬레이션된 그래픽 카드입니다.
- rtl8139와 같은 에뮬레이션된 네트워크 장치.
- 반가상화 장치
paravirtualization은 가상 장치를 VM에 노출하는 빠르고 효율적인 방법을 제공합니다. 반가상화 장치는 VM에서 사용하도록 특별히 설계된 인터페이스를 노출하므로 장치 성능이 크게 향상됩니다. RHEL 10은 virtio API를 하이퍼바이저와 VM 간의 계층으로 사용하여 VM에 반가상화 장치를 제공합니다. 이 접근 방식의 단점은 게스트 운영 체제에 특정 장치 드라이버가 필요하다는 것입니다.
특히 I/O 집약적 애플리케이션을 실행하는 경우 VM에 에뮬레이션된 장치 대신 반가상화 장치를 사용하는 것이 좋습니다. 반가상화 장치는 I/O 대기 시간을 줄이고 I/O 처리량을 높이며 경우에 따라 베어 메탈 성능에 매우 근접합니다. 기타 반가상화 장치는 달리 사용할 수 없는 VM에 기능도 추가합니다.
다음과 같은 유형의 반가상화 장치가 지원됩니다.
-
반가상화 네트워크 장치(
virtio-net
). 반가상화 스토리지 컨트롤러:
-
virtio-blk
- 블록 장치 에뮬레이션을 제공합니다. -
virtio-scsi
- 보다 완전한 SCSI 에뮬레이션을 제공합니다.
-
- 반가상화 클록입니다.
-
반가상화 직렬 장치(
virtio-serial
). -
VM과 해당 호스트 간에 메모리를 동적으로 배포하는 데 사용되는 풍선 장치(
virtio-balloon
)입니다. -
반가상화 임의 번호 생성기(
virtio-rng
)입니다.
-
반가상화 네트워크 장치(
- 물리적으로 공유된 장치
특정 하드웨어 플랫폼을 사용하면 VM이 다양한 하드웨어 장치 및 구성 요소에 직접 액세스할 수 있습니다. 이 프로세스를 장치 할당 또는 패스스루 라고 합니다.
이러한 방식으로 연결하면 실제 시스템의 일부 측면을 VM에서 직접 사용할 수 있습니다. 이는 VM에서 사용할 때 장치에 우수한 성능을 제공합니다. 그러나 VM에 물리적으로 연결된 장치는 호스트에서 사용할 수 없으며 마이그레이션할 수 없습니다.
그러나 일부 장치는 여러 VM에서 공유할 수 있습니다. 예를 들어, 특정 경우에 단일 물리적 장치는 여러 중재된 장치를 제공할 수 있으며, 이 장치는 개별 VM에 할당할 수 있습니다.
다음 유형의 패스스루 장치가 지원됩니다.
- USB, PCI 및 SCSI 패스스루 - 일반적인 업계 표준을 VM에 직접 노출하여 게스트 소프트웨어에서 특정 기능을 사용할 수 있도록 합니다.
- SR-IOV(Single-root I/O Virtualization) - PCI Express 리소스의 하드웨어 적용 격리를 활성화하는 사양입니다. 이를 통해 단일 물리적 PCI 리소스를 가상 PCI 기능으로 분할하는 것이 안전하고 효율적입니다. 일반적으로 NIC(네트워크 인터페이스 카드)에 사용됩니다.
- N_Port ID 가상화(NPIV) - 여러 가상 포트와 단일 물리적 호스트 버스 어댑터(HBA)를 공유하는 파이버 채널 기술입니다.
- GPU 및 vGPUs - 특정 종류의 그래픽 또는 컴퓨팅 워크로드에 대한 가속기입니다. 일부 GPU는 VM에 직접 연결할 수 있지만 특정 유형은 기본 물리적 하드웨어를 공유하는 가상 GPU(vGPU)를 생성하는 기능도 제공합니다.
이러한 유형의 일부 장치는 RHEL과 호환되지 않거나 지원되지 않을 수 있습니다. 가상 장치 설정에 도움이 필요한 경우 Red Hat 지원을 참조하십시오.
15.3. 명령줄을 사용하여 가상 머신에 USB 장치 연결
VM(가상 머신)을 사용하는 경우 호스트 시스템에 연결된 플래시 드라이브 또는 웹 카메라와 같은 USB 장치에 액세스하고 제어할 수 있습니다. 이 시나리오에서 호스트 시스템은 장치 제어를 VM에 전달합니다. 이를 USB-passthrough라고도 합니다.
USB 장치를 VM에 연결하려면 VM의 XML 구성 파일에 USB 장치 정보를 포함할 수 있습니다.
사전 요구 사항
- VM에 전달할 장치가 호스트에 연결되어 있는지 확인합니다.
프로세스
VM에 연결할 USB의 버스 및 장치 값을 찾습니다.
예를 들어 다음 명령은 호스트에 연결된 USB 장치 목록을 표시합니다. 이 예에서 사용할 장치는 버스 001에 장치 005로 연결되어 있습니다.
lsusb
# lsusb [...] Bus 001 Device 003: ID 2567:0a2b Intel Corp. Bus 001 Device 005: ID 0407:6252 Kingston River 2.0 [...]
Copy to Clipboard Copied! virt-xml
유틸리티를--add-device
인수와 함께 사용합니다.예를 들어 다음 명령은 USB 플래시 드라이브를
example-VM-1
VM에 연결합니다.virt-xml example-VM-1 --add-device --hostdev 001.005
# virt-xml example-VM-1 --add-device --hostdev 001.005 Domain 'example-VM-1' defined successfully.
Copy to Clipboard Copied! 참고실행 중인 VM에 USB 장치를 연결하려면 명령에
--update
인수를 추가합니다.
검증
virsh dumpxml
명령을 사용하여 장치의 XML 정의가 VM의 XML 구성 파일의 <devices> 섹션에 추가되었는지 확인합니다.virsh dumpxml example-VM-1
# virsh dumpxml example-VM-1 [...] <hostdev mode='subsystem' type='usb' managed='yes'> <source> <vendor id='0x0407'/> <product id='0x6252'/> <address bus='1' device='5'/> </source> <alias name='hostdev0'/> <address type='usb' bus='0' port='3'/> </hostdev> [...]
Copy to Clipboard Copied! - VM을 실행하고 장치가 있는지 테스트하여 예상대로 작동하는지 테스트합니다.
15.4. 명령줄을 사용하여 가상 머신에 PCI 장치 연결
VM(가상 머신)을 사용하는 경우 호스트 시스템에 연결된 스토리지 또는 네트워크 컨트롤러와 같은 PCI 장치에 액세스하고 제어할 수 있습니다. 이 시나리오에서 호스트 시스템은 장치 제어를 VM에 전달합니다. 이를 PCI 장치 할당 또는 PCI 패스스루라고도 합니다.
VM(가상 머신)에서 호스트에 연결된 PCI 하드웨어 장치를 사용하려면 호스트에서 장치를 분리하고 VM에 할당할 수 있습니다.
사전 요구 사항
호스트가 IBM Z 아키텍처를 사용하는 경우 호스트에
vfio
커널 모듈을 로드해야 합니다. 확인하려면 다음 명령을 사용합니다.lsmod | grep vfio
# lsmod | grep vfio
Copy to Clipboard Copied! 출력에는 다음 모듈이 포함되어야 합니다.
-
vfio_pci
-
vfio_pci_core
-
vfio_iommu_type1
-
프로세스
다음 단계에서는 일반적인 PCI 장치 할당을 설명합니다. 특정 유형의 PCI 장치를 할당하는 방법은 다음 절차를 참조하십시오.
- 가상 머신에 SR-IOV 네트워크 장치 연결
- 가상 머신에 GPU 할당
사용하려는 장치의 PCI 주소 식별자를 가져옵니다. 예를 들어 호스트에 연결된 NVME 디스크를 사용하려는 경우 다음 출력에서는 장치
0000:65:00.0
으로 표시됩니다.lspci -nkD
# lspci -nkD 0000:00:00.0 0600: 8086:a708 (rev 01) Subsystem: 17aa:230e Kernel driver in use: igen6_edac Kernel modules: igen6_edac 0000:00:02.0 0300: 8086:a7a1 (rev 04) Subsystem: 17aa:230e Kernel driver in use: i915 Kernel modules: i915, xe 0000:00:04.0 1180: 8086:a71d (rev 01) Subsystem: 17aa:230e Kernel driver in use: thermal_pci Kernel modules: processor_thermal_device_pci 0000:00:05.0 0604: 8086:a74d (rev 01) Subsystem: 17aa:230e Kernel driver in use: pcieport 0000:00:07.0 0604: 8086:a76e (rev 01) Subsystem: 17aa:230e Kernel driver in use: pcieport 0000:65:00.0 0108: 144d:a822 (rev 01) DeviceName: PCIe SSD in Slot 0 Bay 2 Subsystem: 1028:1fd9 Kernel driver in use: nvme Kernel modules: nvme 0000:6a:00.0 0108: 1179:0110 (rev 01) DeviceName: PCIe SSD in Slot 11 Bay 2 Subsystem: 1028:1ffb Kernel driver in use: nvme Kernel modules: nvme
Copy to Clipboard Copied! PCI 장치를 연결할 VM의 XML 구성을 엽니다.
virsh edit vm-name
# virsh edit vm-name
Copy to Clipboard Copied! XML 파일의
<devices>
섹션에 다음<hostdev>
구성을 추가합니다.address
행의 값을 장치의 PCI 주소로 바꿉니다. 선택적으로 장치가 VM에서 사용할 PCI 주소를 변경하려면 <addresstype="pci"> 행에 다른 주소를
구성할 수 있습니다.예를 들어 호스트의 장치 주소가
0000:65:00.0
이고 게스트에서0000:02:00.0
을 사용하려면 다음 구성을 사용합니다.<hostdev mode="subsystem" type="pci" managed="yes"> <driver name="vfio"/> <source> <address domain="0x0000" bus="0x65" slot="0x00" function="0x0"/> </source> <address type="pci" domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </hostdev>
<hostdev mode="subsystem" type="pci" managed="yes"> <driver name="vfio"/> <source> <address domain="0x0000" bus="0x65" slot="0x00" function="0x0"/> </source> <address type="pci" domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </hostdev>
Copy to Clipboard Copied! 선택 사항: IBM Z 호스트에서 게스트 운영 체제가 PCI 장치를 감지하는 방법을 수정할 수 있습니다. 이렇게 하려면 <
zpci> 하위
요소를 <address> 요소에
추가합니다. <zpci
> 줄에서는uid
및fid
값을 조정하여 게스트 운영 체제에서 장치의 PCI 주소 및 기능 ID를 수정할 수 있습니다.<hostdev mode="subsystem" type="pci" managed="yes"> <driver name="vfio"/> <source> <address domain="0x0000" bus="0x65" slot="0x00" function="0x0"/> </source> <address type="pci" domain='0x0000' bus='0x02' slot='0x00' function='0x0'> <zpci uid="0x0008" fid="0x001807"/> </address> </hostdev>
<hostdev mode="subsystem" type="pci" managed="yes"> <driver name="vfio"/> <source> <address domain="0x0000" bus="0x65" slot="0x00" function="0x0"/> </source> <address type="pci" domain='0x0000' bus='0x02' slot='0x00' function='0x0'> <zpci uid="0x0008" fid="0x001807"/> </address> </hostdev>
Copy to Clipboard Copied! 이 예제에서는 다음을 수행합니다.
-
UID="0x0008"
은 VM에 있는 장치의 도메인 PCI 주소를0008:00:00.0
로 설정합니다. FID="0x001807"
은 장치의 슬롯 값을0x001807
로 설정합니다. 결과적으로 VM의 파일 시스템의 장치 구성이/sys/bus/pci/slots/00001087/address
에 저장됩니다.이러한 값을 지정하지 않으면
libvirt
에서 자동으로 구성합니다.
-
- XML 구성을 저장합니다.
VM이 실행 중이면 종료합니다.
virsh shutdown vm-name
# virsh shutdown vm-name
Copy to Clipboard Copied!
검증
- VM을 시작하고 게스트 운영 체제에 로그인합니다.
게스트 운영 체제에서 PCI 장치가 나열되는지 확인합니다.
예를 들어 게스트 장치 주소를
0000:02:00.0
으로 구성한 경우 다음 명령을 사용합니다.lspci -nkD | grep 0000:02:00.0
# lspci -nkD | grep 0000:02:00.0 0000:02:00.0 8086:9a09 (rev 01)
Copy to Clipboard Copied!
15.5. 웹 콘솔을 사용하여 가상 머신에 호스트 장치 연결
VM(가상 머신)에 특정 기능을 추가하려면 웹 콘솔을 사용하여 호스트 장치를 VM에 연결할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
PCI 장치를 연결하는 경우
hostdev
요소의관리
속성 상태가yes
로 설정되어 있는지 확인합니다.참고PCI 장치를 VM에 연결할 때
hostdev
요소의managed
속성을 생략하거나no
로 설정하지 마십시오. 이렇게 하면 VM에 전달할 때 PCI 장치를 호스트에서 자동으로 분리할 수 없습니다. 또한 VM을 끄면 호스트에 자동으로 다시 연결할 수 없습니다.결과적으로 호스트가 응답하지 않거나 예기치 않게 종료될 수 있었습니다.
VM의 XML 구성에서
관리
속성의 상태를 찾을 수 있습니다. 다음 예제에서는example-VM-1
VM의 XML 구성을 엽니다.virsh edit example-VM-1
# virsh edit example-VM-1
Copy to Clipboard Copied! - VM에서 중요한 데이터를 백업합니다.
선택 사항: VM의 XML 구성을 백업합니다. 예를 들어
example-VM-1
VM을 백업하려면 다음을 수행합니다.virsh dumpxml example-VM-1 > example-VM-1.xml
# virsh dumpxml example-VM-1 > example-VM-1.xml
Copy to Clipboard Copied! - 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
VM의 그래픽 인터페이스에 액세스하기 위한 선택한 VM 및 콘솔 섹션에 대한 기본 정보가 포함된 개요 섹션이 포함된 새 페이지가 열립니다.
Host devices 섹션에는 VM에 연결된 장치에 대한 정보와 장치 추가 또는 제거 옵션이 표시됩니다.
호스트 장치 추가 대화 상자가 표시됩니다.
- VM에 연결할 장치를 선택합니다.
선택한 장치가 VM에 연결됩니다.
검증
- VM을 실행하고 장치가 Host devices 섹션에 표시되는지 확인합니다.
15.6. 명령줄을 사용하여 가상 머신에서 USB 장치 제거
VM(가상 머신)에서 USB 장치를 제거하려면 VM의 XML 구성에서 USB 장치 정보를 제거할 수 있습니다.
프로세스
VM에서 제거할 USB의 버스 및 장치 값을 찾습니다.
예를 들어 다음 명령은 호스트에 연결된 USB 장치 목록을 표시합니다. 이 예에서 사용할 장치는 버스 001에 장치 005로 연결되어 있습니다.
lsusb
# lsusb [...] Bus 001 Device 003: ID 2567:0a2b Intel Corp. Bus 001 Device 005: ID 0407:6252 Kingston River 2.0 [...]
Copy to Clipboard Copied! virt-xml
유틸리티를--remove-device
인수와 함께 사용합니다.예를 들어 다음 명령은
example-VM-1
VM에서 버스 001의 장치 005로 호스트에 연결된 USB 플래시 드라이브를 제거합니다.virt-xml example-VM-1 --remove-device --hostdev 001.005
# virt-xml example-VM-1 --remove-device --hostdev 001.005 Domain 'example-VM-1' defined successfully.
Copy to Clipboard Copied!
실행 중인 VM에서 USB 장치를 제거하려면 --update
인수를 이전 명령에 추가합니다.
검증
- VM을 실행하고 장치 목록에서 장치가 제거되었는지 확인합니다.
15.7. 명령줄을 사용하여 가상 머신에서 PCI 장치 제거
VM(가상 머신)에서 PCI 장치를 제거하려면 VM의 XML 구성에서 장치 정보를 제거합니다.
프로세스
PCI 장치가 연결된 VM의 XML 구성에서 장치의 설정을 사용하여 <
hostdev
> 섹션에서 <address domain
> 행을 찾습니다.virsh dumpxml <VM-name>
# virsh dumpxml <VM-name> [...] <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x65' slot='0x00' function='0x0'/> </source> <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </hostdev> [...]
Copy to Clipboard Copied! virsh detach-device
명령을--hostdev
옵션과 장치 주소와 함께 사용합니다.예를 들어 다음 명령은 이전 단계에 있는 장치를 영구적으로 제거합니다.
virt detach-device <VM-name> --hostdev 0000:65:00.0 --config
# virt detach-device <VM-name> --hostdev 0000:65:00.0 --config Domain 'VM-name' defined successfully.
Copy to Clipboard Copied! 참고실행 중인 VM에서 PCI 장치를 제거하려면
--live
인수를 이전 명령에 추가합니다.선택 사항: PCI 장치를 호스트에 다시 연결합니다. 예를 들어 다음 명령은 이전 단계에서 VM에서 제거된 장치를 다시 연결합니다.
virsh nodedev-reattach pci_0000_65_00_0
# virsh nodedev-reattach pci_0000_65_00_0 Device pci_0000_65_00_0 re-attached
Copy to Clipboard Copied!
검증
VM의 XML 구성을 다시 표시하고 장치의 <
hostdev
> 섹션이 더 이상 나타나지 않는지 확인합니다.virsh dumpxml <VM-name>
# virsh dumpxml <VM-name>
Copy to Clipboard Copied!
15.8. 웹 콘솔을 사용하여 가상 머신에서 호스트 장치 제거
리소스를 확보하려면 VM의 기능을 수정하거나 웹 콘솔을 사용하여 VM을 수정하고 더 이상 필요하지 않은 호스트 장치를 제거할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
선택 사항:
virsh dumpxml
example-VM-1을 사용하여 VM의 XML 구성을 백업하고 출력을 파일로 전송합니다. 예를 들어 다음은 testguest1 VM의 구성을testguest1.xml
파일로 백업합니다.virsh dumpxml testguest1 > testguest1.xml cat testguest1.xml
# virsh dumpxml testguest1 > testguest1.xml # cat testguest1.xml <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <name>testguest1</name> <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid> [...] </domain>
Copy to Clipboard Copied!
프로세스
VM의 그래픽 인터페이스에 액세스하기 위한 선택한 VM 및 콘솔 섹션에 대한 기본 정보가 포함된 개요 섹션이 포함된 새 페이지가 열립니다.
Host devices 섹션에는 VM에 연결된 장치에 대한 정보와 장치 추가 또는 제거 옵션이 표시됩니다.
VM에서 제거할 장치 옆에 있는
(제거) 버튼을 클릭합니다.장치 확인 대화 상자가 표시됩니다.
장치가 VM에서 제거됩니다.
문제 해결
호스트 장치를 제거하면 VM을 부팅할 수 없게 되는 경우
virsh define
유틸리티를 사용하여 이전에 백업한 XML 구성 파일을 다시 로드하여 XML 구성을 복원합니다.virsh define testguest1.xml
# virsh define testguest1.xml
Copy to Clipboard Copied!
15.9. 가상 머신에 ISO 이미지 연결
VM(가상 머신)을 사용하는 경우 호스트의 ISO 이미지에 저장된 정보에 액세스할 수 있습니다. 이렇게 하려면 CD 드라이브 또는 DVD 드라이브와 같은 가상 광 드라이브로 VM에 ISO 이미지를 연결합니다.
15.9.1. 명령줄을 사용하여 가상 머신에 ISO 이미지 연결
ISO 이미지를 가상 광 드라이브로 연결하려면 VM(가상 머신)의 XML 구성 파일을 편집하고 새 드라이브를 추가합니다.
사전 요구 사항
- 호스트 시스템에 ISO 이미지의 경로를 저장하고 복사해야 합니다.
프로세스
--add-device
인수와 함께virt-xml
유틸리티를 사용합니다.예를 들어 다음 명령은
/home/username/Downloads
디렉터리에 저장된example-ISO-name
ISO 이미지를example-VM-name
VM에 연결합니다.virt-xml example-VM-name --add-device --disk /home/username/Downloads/example-ISO-name.iso,device=cdrom
# virt-xml example-VM-name --add-device --disk /home/username/Downloads/example-ISO-name.iso,device=cdrom Domain 'example-VM-name' defined successfully.
Copy to Clipboard Copied!
검증
- VM을 실행하고 장치가 있는지 테스트하여 예상대로 작동하는지 테스트합니다.
15.9.2. 가상 광 드라이브의 ISO 이미지 교체
VM(가상 머신)에 가상 광 드라이브로 연결된 ISO 이미지를 교체하려면 VM의 XML 구성 파일을 편집하고 교체를 지정합니다.
사전 요구 사항
- 호스트 시스템에 ISO 이미지를 저장해야 합니다.
- ISO 이미지 경로를 알고 있어야 합니다.
프로세스
ISO 이미지가 VM에 연결된 대상 장치를 찾습니다. 이 정보는 VM의 XML 구성 파일에서 찾을 수 있습니다.
예를 들어 다음 명령은 가상 광 드라이브의 대상 장치가
sda
인example-VM-name
VM의 XML 구성 파일을 표시합니다.virsh dumpxml example-VM-name
# virsh dumpxml example-VM-name ... <disk> ... <source file='$(/home/username/Downloads/example-ISO-name.iso)'/> <target dev='sda' bus='sata'/> ... </disk> ...
Copy to Clipboard Copied! --edit
인수와 함께virt-xml
유틸리티를 사용합니다.예를 들어 다음 명령은 대상
sda
의example-VM-name
/dev/cdrom
디렉터리에 저장된example-ISO-name-2
ISO 이미지로 교체합니다.virt-xml example-VM-name --edit target=sda --disk /dev/cdrom/example-ISO-name-2.iso
# virt-xml example-VM-name --edit target=sda --disk /dev/cdrom/example-ISO-name-2.iso Domain 'example-VM-name' defined successfully.
Copy to Clipboard Copied!
검증
- VM을 실행하고 장치가 교체되어 예상대로 작동하는지 테스트합니다.
15.9.3. 명령줄을 사용하여 가상 머신에서 ISO 이미지 제거
VM(가상 머신)에 연결된 ISO 이미지를 제거하려면 VM의 XML 구성 파일을 편집합니다.
프로세스
ISO 이미지가 VM에 연결된 대상 장치를 찾습니다. 이 정보는 VM의 XML 구성 파일에서 찾을 수 있습니다.
예를 들어 다음 명령은 가상 광 드라이브의 대상 장치가
sda
인example-VM-name
VM의 XML 구성 파일을 표시합니다.virsh dumpxml example-VM-name
# virsh dumpxml example-VM-name ... <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='sda' bus='sata'/> ... </disk> ...
Copy to Clipboard Copied! --remove-device
인수와 함께virt-xml
유틸리티를 사용합니다.예를 들어 다음 명령은
example-VM-name
VM에서 대상sda
로 연결된 광 드라이브를 제거합니다.virt-xml example-VM-name --remove-device --disk target=sda
# virt-xml example-VM-name --remove-device --disk target=sda Domain 'example-VM-name' defined successfully.
Copy to Clipboard Copied!
검증
- 장치가 더 이상 VM의 XML 구성 파일에 나열되지 않는지 확인합니다.
15.10. 웹 콘솔을 사용하여 가상 머신에 워치독 장치 연결
응답이 중지될 때 VM(가상 머신)이 지정된 작업을 수행하도록 하려면 VM에 가상 워치독 장치를 연결할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 시스템에 웹 콘솔 VM 플러그인을 설치했습니다. 자세한 내용은 2.3절. “가상 머신을 관리하도록 웹 콘솔 설정”의 내용을 참조하십시오.
프로세스
명령줄에서 워치독 서비스를 설치합니다.
# dnf install watchdog
- VM을 종료합니다.
VM에 워치독 서비스를 추가합니다.
# virt-xml vmname --add-device --watchdog action=reset --update
- VM을 실행합니다.
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
- 웹 콘솔의 인터페이스에서 워치독 장치를 추가할 VM을 클릭합니다.
개요 창에서 Watchdog 필드 옆에 있는 를 클릭합니다.
워치독 장치 유형 추가 대화 상자가 표시됩니다.
- VM이 응답하지 않는 경우 워치독 장치가 수행할 작업을 선택합니다.
- 를 클릭합니다.
검증
- 선택한 작업이 개요 창의 Watchdog 필드 옆에 표시됩니다.
16장. 가상 머신 네트워크 연결 구성
VM(가상 머신)이 네트워크를 통해 호스트에 연결하고, 호스트의 다른 VM에 연결하고, 외부 네트워크의 위치에 연결하려면 VM 네트워킹을 적절하게 구성해야 합니다. VM 네트워킹을 제공하기 위해 RHEL 10 하이퍼바이저 및 새로 생성된 VM에는 기본 네트워크 구성이 있으며, 이 구성도 추가로 수정할 수 있습니다. 예를 들면 다음과 같습니다.
- VM이 호스트와 동일한 네트워크에 있는 것처럼 호스트의 VM을 검색하고 호스트 외부의 위치에 연결할 수 있습니다.
- VM을 인바운드 네트워크 트래픽에서 부분적으로 또는 완전히 분리하여 보안을 강화하고 VM이 호스트에 영향을 미치는 문제의 위험을 최소화할 수 있습니다.
16.1. 가상 네트워킹 이해
네트워크의 다른 장치 및 위치에 VM(가상 머신) 연결이 호스트 하드웨어에 의해 촉진됩니다. VM 네트워크 연결 및 기본 VM 네트워크 설정 메커니즘에 대한 자세한 내용은 다음 섹션을 참조하십시오.
16.1.1. 가상 네트워크 작동 방식
가상 네트워킹은 가상 네트워크 스위치의 개념을 사용합니다. 가상 네트워크 스위치는 호스트 시스템에서 작동하는 소프트웨어 구성입니다. VM은 가상 네트워크 스위치를 통해 네트워크에 연결됩니다. 가상 스위치 구성에 따라 VM은 하이퍼바이저에서 관리하는 기존 가상 네트워크 또는 다른 네트워크 연결 방법을 사용할 수 있습니다.
다음 그림은 두 개의 VM을 네트워크에 연결하는 가상 네트워크 스위치를 보여줍니다.

게스트 운영 체제의 관점에서 가상 네트워크 연결은 물리적 네트워크 연결과 동일합니다. 호스트 시스템은 가상 네트워크 스위치를 네트워크 인터페이스로 봅니다. virtnetworkd
서비스가 처음 설치되고 시작되면 VM의 기본 네트워크 인터페이스인 virbr0 을 생성합니다.
이 인터페이스에 대한 정보를 보려면 호스트에서 ip
유틸리티를 사용합니다.
ip addr show virbr0
$ ip addr show virbr0
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state
UNKNOWN link/ether 1b:c4:94:cf:fd:17 brd ff:ff:ff:ff:ff:ff
inet 192.0.2.1/24 brd 192.0.2.255 scope global virbr0
기본적으로 단일 호스트의 모든 VM은 virbr0 인터페이스를 사용하는 default 라는 동일한 NAT 유형 가상 네트워크에 연결됩니다. 자세한 내용은 가상 네트워킹 기본 구성 을 참조하십시오.
VM의 기본 아웃바운드 전용 네트워크 액세스의 경우 기본 네트워크가 libvirt-daemon-config-network
패키지와 함께 설치되고 virtnetworkd
서비스가 시작될 때 자동으로 시작되므로 추가 네트워크 설정이 필요하지 않습니다.
다른 VM 네트워크 기능이 필요한 경우 추가 가상 네트워크 및 네트워크 인터페이스를 생성하고 VM을 사용하도록 구성할 수 있습니다. 기본 NAT 외에도 다음 모드 중 하나를 사용하도록 이러한 네트워크 및 인터페이스를 구성할 수 있습니다.
16.1.2. 가상 머신 네트워크의 기본 구성
virtnetworkd
서비스가 가상화 호스트에 처음 설치되면 NAT(네트워크 주소 변환) 모드의 초기 가상 네트워크 구성이 포함됩니다. 기본적으로 호스트의 모든 VM은 기본 이라는 동일한 libvirt
가상 네트워크에 연결됩니다. 이 네트워크의 VM은 호스트 이외의 호스트와 네트워크의 위치에 연결할 수 있지만 다음과 같은 제한 사항이 있습니다.
-
네트워크의 VM은 호스트의 호스트 및 기타 VM에 표시되지만 네트워크 트래픽은 게스트 운영 체제의 네트워크 스택의 방화벽과 게스트 인터페이스에 연결된
libvirt
네트워크 필터링 규칙에 의해 영향을 받습니다. - 네트워크의 VM은 호스트 외부의 위치에 연결할 수 있지만 해당 VM은 표시되지 않습니다. 아웃바운드 트래픽은 NAT 규칙과 호스트 시스템의 방화벽의 영향을 받습니다.
다음 다이어그램에서는 기본 VM 네트워크 구성을 보여줍니다.

16.2. 가상 머신의 네트워크 연결 유형
VM의 네트워킹 속성 및 동작을 수정하려면 VM에서 사용하는 가상 네트워크 또는 인터페이스의 유형을 변경합니다. RHEL 10의 VM에서 사용할 수 있는 다음 연결 유형에서 선택할 수 있습니다.
16.2.1. 네트워크 주소 변환을 사용하는 가상 네트워킹
기본적으로 가상 네트워크 스위치는 NAT(네트워크 주소 변환) 모드에서 작동합니다. SNAT(Source-NAT) 또는 Destination-NAT(DNAT) 대신 IP 마스커레이딩을 사용합니다. IP 마스커레이딩을 사용하면 연결된 VM이 외부 네트워크와 통신하기 위해 호스트 시스템의 IP 주소를 사용할 수 있습니다. 가상 네트워크 스위치가 NAT 모드에서 작동하는 경우 호스트 외부의 컴퓨터는 호스트 내부의 VM과 통신할 수 없습니다.

가상 네트워크 스위치는 방화벽 규칙에 따라 구성된 NAT를 사용합니다. 잘못된 규칙으로 인해 스위치가 통신할 수 없기 때문에 전환이 실행되는 동안 이러한 규칙을 편집하는 것은 권장되지 않습니다.
16.2.2. 라우팅 모드의 가상 네트워킹
Routed 모드를 사용하는 경우 가상 스위치는 호스트 시스템에 연결된 물리적 LAN에 연결하여 NAT를 사용하지 않고 트래픽을 다시 전달합니다. 가상 스위치는 모든 트래픽을 검사하고 네트워크 패킷에 포함된 정보를 사용하여 라우팅 결정을 내릴 수 있습니다. 이 모드를 사용하는 경우 VM(가상 머신)은 모두 호스트 시스템과 분리된 단일 서브넷에 있습니다. VM 서브넷은 호스트 시스템에 존재하는 가상 스위치를 통해 라우팅됩니다. 이렇게 하면 들어오는 연결이 활성화되지만 외부 네트워크의 시스템에 추가 라우팅 가능 항목이 필요합니다.
라우팅 모드는 IP 주소를 기반으로 라우팅을 사용합니다.

라우팅 모드를 사용하는 일반적인 토폴로지는 VSH(가상 서버 호스팅)입니다. VSH 공급자에는 각각 두 개의 물리적 네트워크 연결이 있는 호스트 시스템이 여러 개 있을 수 있습니다. 하나의 인터페이스는 VM이 연결하는 데 관리 및 회계에 사용됩니다. 각 VM에는 자체 공용 IP 주소가 있지만 호스트 시스템은 개인 IP 주소를 사용하므로 내부 관리자만 VM을 관리할 수 있습니다.

16.2.3. 브리지 모드의 가상 네트워킹
대부분의 VM 네트워킹 모드에서 VM은 virbr0
가상 브릿지를 자동으로 생성하고 연결합니다. 반대로 브리지 모드에서는 VM이 호스트의 기존 Linux 브리지에 연결됩니다. 결과적으로 VM이 물리적 네트워크에 직접 표시됩니다. 이렇게 하면 들어오는 연결이 활성화되지만 추가 라우팅 가능 항목은 필요하지 않습니다.
브리지 모드는 MAC 주소를 기반으로 연결 전환을 사용합니다.

브리지 모드에서 VM은 호스트 시스템과 동일한 서브넷 내에 표시됩니다. 동일한 물리적 네트워크의 다른 모든 물리적 시스템은 VM을 감지하고 액세스할 수 있습니다.
브리지된 네트워크 본딩
하이퍼바이저에서 여러 개의 물리적 브리지 인터페이스를 사용하여 본딩과 결합할 수 있습니다. 그런 다음 본딩을 브리지에 추가할 수 있으며, 그 후에는 VM을 브리지에 추가할 수 있습니다. 그러나 본딩 드라이버에는 여러 가지 작동 모드가 있으며 VM이 사용 중인 브릿지에서 이러한 모드가 모두 작동하지는 않습니다.
본딩 모드 1, 2, 4를 사용할 수 있습니다.
반면 모드 0, 3, 5 또는 6은 연결이 실패할 가능성이 큽니다. 또한ARP(Address Resolution Protocol) 모니터링이 제대로 작동하지 않기 때문에 본딩 모드를 모니터링하는 데 미디어 독립적인 인터페이스(MII) 모니터링을 사용해야 합니다.
본딩 모드에 대한 자세한 내용은 가상 머신 게스트 또는 컨테이너가 연결되는 브릿지와 함께 사용할 때 Red Hat Knowledgebase 솔루션 작동을 참조하십시오.
일반적인 시나리오
브리지 모드의 가장 일반적인 사용 사례는 다음과 같습니다.
- 호스트 시스템과 함께 기존 네트워크에 VM을 배포하여 가상 시스템과 물리적 시스템을 사용자가 볼 수 없는 상태로 만듭니다.
- 기존 물리적 네트워크 구성 설정을 변경하지 않고 VM을 배포합니다.
- 기존 물리적 네트워크에서 쉽게 액세스할 수 있어야 하는 VM 배포. VM을 DHCP 서비스에 액세스해야 하는 물리적 네트워크에 배치합니다.
- VM을 VLAN(가상 LAN)을 사용하는 기존 네트워크에 연결합니다.
- DMZ(분밀 영역) 네트워크입니다. VM을 사용한 DMZ 배포의 경우 물리적 네트워크 라우터 및 스위치에서 DMZ를 설정하고 브리지 모드를 사용하여 VM을 물리적 네트워크에 연결하는 것이 좋습니다.
16.2.4. 격리된 모드의 가상 네트워킹
격리된 모드를 사용하면 가상 스위치에 연결된 가상 시스템은 서로 및 호스트 시스템과 통신할 수 있지만 해당 트래픽은 호스트 시스템 외부에서 전달되지 않으며 호스트 시스템 외부에서 트래픽을 수신할 수 없습니다. 이 모드에서 dnsmasq
를 사용하는 것은 DHCP와 같은 기본 기능에 필요합니다.

16.2.5. 오픈 모드의 가상 네트워킹
네트워킹에 열려 있는 모드를 사용하는 경우 libvirt
는 네트워크에 대한 방화벽 규칙을 생성하지 않습니다. 결과적으로 libvirt
는 호스트에서 제공하는 방화벽 규칙을 덮어쓰지 않으므로 사용자가 VM의 방화벽 규칙을 수동으로 관리할 수 있습니다.
16.2.6. 가상 머신 연결 유형 비교
다음 표에서는 선택한 VM(가상 머신) 네트워크 구성에서 연결할 수 있는 위치와 표시되는 위치에 대한 정보를 제공합니다.
호스트에 연결 | 호스트의 다른 VM에 연결 | 외부 위치 연결 | 외부 위치에서 볼 수 | |
---|---|---|---|---|
브리지 모드 | YES | YES | YES | YES |
NAT | YES | YES | YES | 제공되지 않음 |
라우팅 모드 | YES | YES | YES | YES |
isolated 모드 | YES | YES | 제공되지 않음 | 제공되지 않음 |
열기 모드 | 호스트의 방화벽 규칙에 따라 다름 |
16.3. 외부에서 볼 수 있는 가상 머신 구성
많은 시나리오에서 기본 VM 네트워킹 구성만으로도 충분합니다. 그러나 구성을 조정해야 하는 경우 CLI(명령줄) 또는 RHEL 10 웹 콘솔을 사용하여 이 작업을 수행할 수 있습니다.
16.3.1. 명령줄을 사용하여 외부에서 볼 수 있는 가상 머신 구성
기본적으로 새로 생성된 VM은 호스트의 기본 가상 브리지인 virbr0
을 사용하는 NAT 유형 네트워크에 연결됩니다. 이렇게 하면 VM에서 호스트의 NIC(네트워크 인터페이스 컨트롤러)를 사용하여 외부 네트워크에 연결할 수 있지만 외부 시스템에서 VM에 연결할 수 없습니다.
VM이 하이퍼바이저와 동일한 외부 네트워크에 표시되어야 하는 경우 대신 브리지 모드를 사용해야 합니다. 이렇게 하려면 VM을 하이퍼바이저의 물리적 네트워크 장치에 연결된 브리지 장치에 연결합니다.
사전 요구 사항
- 기본 NAT 설정이 포함된 기존 VM 을 종료합니다.
하이퍼바이저의 IP 구성입니다. 이는 호스트의 네트워크 연결에 따라 달라집니다. 예를 들어 이 절차에서는 이더넷 케이블을 사용하여 호스트가 네트워크에 연결된 시나리오를 사용하며 호스트의 물리적 NIC MAC 주소가 DHCP 서버의 고정 IP에 할당됩니다. 따라서 이더넷 인터페이스는 하이퍼바이저 IP로 처리됩니다.
이더넷 인터페이스의 IP 구성을 가져오려면
ip addr
유틸리티를 사용합니다.ip addr
# ip addr [...] enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 54:ee:75:49:dc:46 brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global dynamic noprefixroute enp0s25
Copy to Clipboard Copied!
프로세스
호스트의 물리적 인터페이스에 대한 브리지 연결을 만들고 설정합니다. 자세한 내용은 네트워크 브리지 구성을 참조하십시오.
고정 IP 할당을 사용하는 시나리오에서는 물리적 이더넷 인터페이스의 IPv4 설정을 브리지 인터페이스로 이동해야 합니다.
생성된 브리지 인터페이스를 사용하도록 VM의 네트워크를 수정합니다. 예를 들어 다음 세트는 testguest 가 bridge0 을 사용하도록 설정합니다.
virt-xml testguest --edit --network bridge=bridge0
# virt-xml testguest --edit --network bridge=bridge0 Domain 'testguest' defined successfully.
Copy to Clipboard Copied! VM을 시작합니다.
virsh start testguest
# virsh start testguest
Copy to Clipboard Copied! 게스트 운영 체제에서 VM이 하이퍼바이저와 동일한 네트워크에 있는 것처럼 시스템의 네트워크 인터페이스의 IP 및 DHCP 설정을 조정합니다.
이에 대한 특정 단계는 VM에서 사용하는 게스트 운영 체제에 따라 다릅니다. 예를 들어 게스트 운영 체제가 RHEL 10 인 경우 이더넷 연결 구성을 참조하십시오.
검증
새로 생성된 브릿지가 실행 중이며 호스트의 물리적 인터페이스와 VM 인터페이스가 모두 포함되어 있는지 확인합니다.
ip link show master bridge0
# ip link show master bridge0 2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000 link/ether 54:ee:75:49:dc:46 brd ff:ff:ff:ff:ff:ff 10: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UNKNOWN mode DEFAULT group default qlen 1000 link/ether fe:54:00:89:15:40 brd ff:ff:ff:ff:ff:ff
Copy to Clipboard Copied! VM이 하이퍼바이저와 동일한 외부 네트워크에 표시되는지 확인합니다.
게스트 운영 체제에서 시스템의 네트워크 ID를 가져옵니다. 예를 들어 Linux 게스트인 경우:
ip addr
# ip addr [...] enp0s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:09:15:46 brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global dynamic noprefixroute enp0s0
Copy to Clipboard Copied! 로컬 네트워크에 연결된 외부 시스템에서 가져온 ID를 사용하여 VM에 연결합니다.
ssh root@192.0.2.1
# ssh root@192.0.2.1 root@192.0.2.1's password: Last login: Mon Sep 24 12:05:36 2019 root~#*
Copy to Clipboard Copied! 연결이 작동하면 네트워크가 성공적으로 구성됩니다.
문제 해결
VM이 클라이언트에서 호스팅되는 동안 클라이언트 간 VPN을 사용할 때와 같은 특정 상황에서는 브리지 모드를 사용하여 외부 위치에서 VM을 사용할 수 없습니다.
이 문제를 해결하려면 VM에
nftables
를 사용하여 대상 NAT를 설정할 수 있습니다.
16.3.2. 웹 콘솔을 사용하여 외부에서 볼 수 있는 가상 머신 구성
기본적으로 새로 생성된 VM은 호스트의 기본 가상 브리지인 virbr0
을 사용하는 NAT 유형 네트워크에 연결됩니다. 이렇게 하면 VM에서 호스트의 NIC(네트워크 인터페이스 컨트롤러)를 사용하여 외부 네트워크에 연결할 수 있지만 외부 시스템에서 VM에 연결할 수 없습니다.
VM이 하이퍼바이저와 동일한 외부 네트워크에 표시되어야 하는 경우 대신 브리지 모드를 사용해야 합니다. 이렇게 하려면 VM을 하이퍼바이저의 물리적 네트워크 장치에 연결된 브리지 장치에 연결합니다. RHEL 10 웹 콘솔을 사용하려면 아래 지침을 따르십시오.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
- 기본 NAT 설정이 포함된 기존 VM 을 종료합니다.
하이퍼바이저의 IP 구성입니다. 이는 호스트의 네트워크 연결에 따라 달라집니다. 예를 들어 이 절차에서는 이더넷 케이블을 사용하여 호스트가 네트워크에 연결된 시나리오를 사용하며 호스트의 물리적 NIC MAC 주소가 DHCP 서버의 고정 IP에 할당됩니다. 따라서 이더넷 인터페이스는 하이퍼바이저 IP로 처리됩니다.
이더넷 인터페이스의 IP 구성을 가져오려면 웹 콘솔의
네트워킹
탭으로 이동하여인터페이스
섹션을 참조하십시오.
프로세스
호스트의 물리적 인터페이스에 대한 브리지 연결을 만들고 설정합니다. 자세한 내용은 웹 콘솔에서 네트워크 브리지 구성을 참조하십시오.
고정 IP 할당을 사용하는 시나리오에서는 물리적 이더넷 인터페이스의 IPv4 설정을 브리지 인터페이스로 이동해야 합니다.
브리지 인터페이스를 사용하도록 VM의 네트워크를 수정합니다. VM의 네트워크 인터페이스 탭에서 다음을 수행합니다.
- 클릭합니다.
가상 네트워크 인터페이스 추가
대화 상자에서 다음을 설정합니다.-
LAN에 브리지할
인터페이스 유형 -
새로 생성된 브릿지로 소스를 가져옵니다(예:
bridge0)
-
- 를 클릭합니다.
- 선택 사항: VM에 연결된 다른 모든 인터페이스에 대해 를 클릭합니다.
- 클릭하여 VM을 시작합니다.
게스트 운영 체제에서 VM이 하이퍼바이저와 동일한 네트워크에 있는 것처럼 시스템의 네트워크 인터페이스의 IP 및 DHCP 설정을 조정합니다.
이에 대한 특정 단계는 VM에서 사용하는 게스트 운영 체제에 따라 다릅니다. 예를 들어 게스트 운영 체제가 RHEL 10 인 경우 이더넷 연결 구성을 참조하십시오.
검증
- 호스트 웹 콘솔의 Networking 탭에서 새로 생성된 브릿지로 행을 클릭하여 실행 중인지 확인하고 호스트의 물리적 인터페이스와 VM의 인터페이스를 모두 포함합니다.
VM이 하이퍼바이저와 동일한 외부 네트워크에 표시되는지 확인합니다.
게스트 운영 체제에서 시스템의 네트워크 ID를 가져옵니다. 예를 들어 Linux 게스트인 경우:
ip addr
# ip addr [...] enp0s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:09:15:46 brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global dynamic noprefixroute enp0s0
Copy to Clipboard Copied! 로컬 네트워크에 연결된 외부 시스템에서 가져온 ID를 사용하여 VM에 연결합니다.
ssh root@192.0.2.1
# ssh root@192.0.2.1 root@192.0.2.1's password: Last login: Mon Sep 24 12:05:36 2019 root~#*
Copy to Clipboard Copied! 연결이 작동하면 네트워크가 성공적으로 구성됩니다.
문제 해결
- VM이 클라이언트에서 호스팅되는 동안 클라이언트 간 VPN을 사용할 때와 같은 특정 상황에서는 브리지 모드를 사용하여 외부 위치에서 VM을 사용할 수 없습니다.
16.3.3. macvtap 연결 교체
MacVTap
은 가상 네트워크 인터페이스를 만드는 Linux 네트워킹 장치 드라이버로, 가상 머신이 호스트 시스템의 물리적 네트워크 인터페이스에 직접 액세스할 수 있습니다. RHEL 10에서는 macvtap
연결 사용이 지원됩니다.
그러나 사용 가능한 다른 VM(가상 머신) 네트워킹 구성과 비교하여 macvtap은 최적의 성능을 갖추고 있으며 올바르게 설정하기가 더 어렵습니다. 따라서 사용 사례에 macvtap이 명시적으로 필요하지 않은 경우 지원되는 다른 네트워킹 구성을 사용합니다.
VM에서 macvtap 모드를 사용하는 경우 다음 네트워크 구성을 대신 사용하는 것이 좋습니다.
- macvtap 브리지 모드 대신 Linux 브리지 구성을 사용합니다.
- macvtap passthrough 모드 대신 PCI Passthrough 를 사용합니다.
16.4. 가상 머신 네트워크 인터페이스 관리에 웹 콘솔 사용
RHEL 10 웹 콘솔을 사용하면 웹 콘솔이 연결된 가상 머신의 가상 네트워크 인터페이스를 관리할 수 있습니다.
16.4.1. 웹 콘솔에서 가상 네트워크 인터페이스 정보 보기 및 편집
RHEL 10 웹 콘솔을 사용하면 선택한 VM(가상 머신)에서 가상 네트워크 인터페이스를 보고 수정할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
VM의 그래픽 인터페이스에 액세스하기 위한 선택한 VM 및 콘솔 섹션에 대한 기본 정보가 포함된 개요 섹션이 포함된 새 페이지가 열립니다.
Networks Interfaces 섹션에는 VM에 대해 구성된 가상 네트워크 인터페이스에 대한 정보와 네트워크 인터페이스 추가,삭제,편집 또는 분리 옵션이 표시됩니다.
정보에는 다음이 포함됩니다.
type - VM의 네트워크 인터페이스 유형입니다. 유형에는 가상 네트워크, bridge to LAN, 직접 연결이 포함됩니다.
참고RHEL 10 이상에서는 일반 이더넷 연결이 지원되지 않습니다.
- 모델 유형 - 가상 네트워크 인터페이스의 모델입니다.
- MAC 주소 - 가상 네트워크 인터페이스의 MAC 주소입니다.
- IP 주소 - 가상 네트워크 인터페이스의 IP 주소입니다.
- Source - 네트워크 인터페이스의 소스입니다. 이는 네트워크 유형에 따라 다릅니다.
- State - 가상 네트워크 인터페이스의 상태입니다.
- 가상 네트워크 인터페이스 설정을 편집하려면 을 클릭합니다. 가상 네트워크 인터페이스 설정 대화 상자가 열립니다.
- 인터페이스 유형, 소스, 모델 또는 MAC 주소를 변경합니다.
- 참고
가상 네트워크 인터페이스 설정에 대한 변경 사항은 VM을 다시 시작한 후에만 적용됩니다.
또한 MAC 주소는 VM이 종료된 경우에만 수정할 수 있습니다.
16.4.2. 웹 콘솔에서 가상 네트워크 인터페이스 추가 및 연결
RHEL 10 웹 콘솔을 사용하면 가상 네트워크 인터페이스를 생성하고 VM(가상 머신)을 연결할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
VM의 그래픽 인터페이스에 액세스하기 위한 선택한 VM 및 콘솔 섹션에 대한 기본 정보가 포함된 개요 섹션이 포함된 새 페이지가 열립니다.
Networks Interfaces 섹션에는 VM에 대해 구성된 가상 네트워크 인터페이스와 네트워크 인터페이스 추가,편집 또는 플러그인 옵션이 표시됩니다.
연결하려는 가상 네트워크 인터페이스 행에서
를 클릭합니다.선택한 가상 네트워크 인터페이스가 VM에 연결됩니다.
16.4.3. 웹 콘솔에서 가상 네트워크 인터페이스의 연결 해제 및 제거
RHEL 10 웹 콘솔을 사용하면 선택한 VM(가상 머신)에 연결된 가상 네트워크 인터페이스의 연결을 해제할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
VM의 그래픽 인터페이스에 액세스하기 위한 선택한 VM 및 콘솔 섹션에 대한 기본 정보가 포함된 개요 섹션이 포함된 새 페이지가 열립니다.
Networks Interfaces 섹션에는 VM에 대해 구성된 가상 네트워크 인터페이스에 대한 정보와 네트워크 인터페이스 추가,삭제,편집 또는 분리 옵션이 표시됩니다.
연결을 끊려는 가상 네트워크 인터페이스 행에서
를 클릭합니다.선택한 가상 네트워크 인터페이스가 VM에서 연결을 끊습니다.
16.5. SR-IOV 네트워킹 장치 관리
에뮬레이션된 가상 장치는 종종 하드웨어 네트워크 장치보다 더 많은 CPU 및 메모리를 사용합니다. 이렇게 하면 VM(가상 머신)의 성능이 제한될 수 있습니다. 그러나 가상화 호스트의 모든 장치가 SR-IOV(Single Root I/O Virtualization)를 지원하는 경우 이 기능을 사용하여 장치 성능을 개선하고 VM의 전반적인 성능을 향상시킬 수 있습니다.
16.5.1. SR-IOV란 무엇입니까?
SR-IOV(Single-root I/O Virtualization)는 단일 PCI Express(PCIe) 장치가 호스트 시스템에 VF( 가상 기능 )라는 여러 개의 PCI 장치를 제공할 수 있는 사양입니다. 다음 각 장치:
- 원래 PCIe 장치와 동일하거나 유사한 서비스를 제공할 수 있습니다.
- 호스트 PCI 버스의 다른 주소에 나타납니다.
- VFIO 할당을 사용하여 다른 VM에 할당할 수 있습니다.
예를 들어 단일 SR-IOV 가능 네트워크 장치는 여러 VM에 VF를 제공할 수 있습니다. 모든 VF는 동일한 물리적 카드, 동일한 네트워크 연결 및 동일한 네트워크 케이블을 사용하지만 각 VM은 자체 하드웨어 네트워크 장치를 직접 제어하고 호스트의 추가 리소스를 사용하지 않습니다.
SR-IOV 작동 방식
SR-IOV 기능은 다음과 같은 PCIe 기능을 도입하여 가능합니다.
- 물리적 기능(PF) - 호스트에 장치의 기능(예: 네트워킹)을 제공하는 PCIe 함수이지만 VF 세트를 생성하고 관리할 수도 있습니다. 각 SR-IOV 가능 장치에는 하나 이상의 PF가 있습니다.
- VF(가상 기능) - 독립 장치로 작동하는 경량 PCIe 함수입니다. 각 VF는 PF에서 파생됩니다. 장치가 보유할 수 있는 최대 VF 수는 장치 하드웨어에 따라 다릅니다. 각 VF는 한 번에 단일 VM에만 할당할 수 있지만 VM에 여러 VF가 할당될 수 있습니다.
VM은 VF를 가상 장치로 인식합니다. 예를 들어 SR-IOV 네트워크 장치에서 생성한 VF는 물리적 네트워크 카드가 호스트 시스템에 표시되는 것과 동일한 방식으로 할당된 VM의 네트워크 카드로 표시됩니다.
그림 16.1. SR-IOV 아키텍처

이점
에뮬레이션된 장치가 아닌 SR-IOV VF를 사용할 때의 주요 이점은 다음과 같습니다.
- 성능 개선
- 호스트 CPU 및 메모리 리소스의 사용 감소
예를 들어 vNIC로 VM에 연결된 VF는 물리적 NIC와 거의 동일한 수준에서 수행되며 반가상화 또는 에뮬레이션된 NIC보다 훨씬 우수합니다. 특히 단일 호스트에서 여러 VF를 동시에 사용하면 성능 이점이 중요할 수 있습니다.
단점
- PF 구성을 수정하려면 먼저 PF에서 노출되는 VF 수를 0으로 변경해야 합니다. 따라서 이러한 VF에서 제공하는 장치를 할당된 VM에서 제거해야 합니다.
- SR-IOV VF를 포함하여 VFIO 할당 장치가 연결된 VM은 다른 호스트로 마이그레이션할 수 없습니다. 할당된 장치를 에뮬레이션 장치와 페어링하여 이러한 제한 사항을 해결할 수 있는 경우도 있습니다. 예를 들어 할당된 네트워킹 VF를 에뮬레이션된 vNIC에 결합 (Red Hat Knowledgebase)하고 마이그레이션 전에 VF를 제거할 수 있습니다.
- 또한 VFIO가 할당된 장치에는 VM 메모리 고정이 필요하므로 VM의 메모리 소비가 증가하고 VM에서 메모리 볼링 사용을 방지할 수 있습니다.
16.5.2. 가상 머신에 SR-IOV 네트워킹 장치 연결
SR-IOV 네트워킹 장치를 VM(가상 머신)에 연결하려면 호스트의 SR-IOV 가능 네트워크 인터페이스에서 VF(가상 기능)를 생성하고 VF를 지정된 VM에 장치로 할당해야 합니다. 자세한 내용은 다음 지침을 참조하십시오.
사전 요구 사항
호스트의 CPU 및 펌웨어는 I/O Memory Management Unit(IOMMU)을 지원합니다.
- Intel CPU를 사용하는 경우 Directed I/O(VT-d)에 대한 Intel Virtualization Technology를 지원해야 합니다.
- AMD CPU를 사용하는 경우 AMD-Vi 기능을 지원해야 합니다.
호스트 시스템은ACS(Access Control Service)를 사용하여 PCIe 토폴로지에 대한 직접 메모리 액세스(DMA) 격리를 제공합니다. 시스템 벤더에서 이를 확인합니다.
자세한 내용은 SR-IOV 구현을 위한 하드웨어 고려 사항을 참조하십시오.
물리적 네트워크 장치는 SR-IOV를 지원합니다. 시스템의 네트워크 장치가 SR-IOV를 지원하는지 확인하려면
lspci -v
명령을 사용하고 출력에서SR-IOV(Single Root I/O Virtualization)
를 찾습니다.lspci -v
# lspci -v [...] 02:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) Subsystem: Intel Corporation Gigabit ET Dual Port Server Adapter Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0 Memory at fcba0000 (32-bit, non-prefetchable) [size=128K] [...] Capabilities: [150] Alternative Routing-ID Interpretation (ARI) Capabilities: [160] Single Root I/O Virtualization (SR-IOV) Kernel driver in use: igb Kernel modules: igb [...]
Copy to Clipboard Copied! VF를 생성하는 데 사용할 호스트 네트워크 인터페이스가 실행 중입니다. 예를 들어 eth1 인터페이스를 활성화하고 실행 중인지 확인하려면 다음을 수행하십시오.
ip link set eth1 up ip link show eth1
# ip link set eth1 up # ip link show eth1 8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000 link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
Copy to Clipboard Copied! SR-IOV 장치 할당이 작동하려면 호스트 BIOS 및 커널에서 IOMMU 기능을 활성화해야 합니다. 이렇게 하려면 다음을 수행합니다.
Intel 호스트에서 VT-d를 활성화합니다.
intel_iommu=on
및iommu=pt
매개변수를 사용하여 GRUB 설정을 다시 생성합니다.grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL
# grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL
Copy to Clipboard Copied! - 호스트를 재부팅합니다.
AMD 호스트에서 AMD-Vi를 활성화합니다.
iommu=pt
매개변수를 사용하여 GRUB 설정을 다시 생성합니다.grubby --args="iommu=pt" --update-kernel=ALL
# grubby --args="iommu=pt" --update-kernel=ALL
Copy to Clipboard Copied! - 호스트를 재부팅합니다.
프로세스
선택 사항: 네트워크 장치에서 사용할 수 있는 최대 VF 수를 확인합니다. 이렇게 하려면 다음 명령을 사용하고 eth1 을 SR-IOV 호환 네트워크 장치로 교체합니다.
cat /sys/class/net/eth1/device/sriov_totalvfs 7
# cat /sys/class/net/eth1/device/sriov_totalvfs 7
Copy to Clipboard Copied! 다음 명령을 사용하여 VF(가상 기능)를 생성합니다.
echo VF-number > /sys/class/net/network-interface/device/sriov_numvfs
# echo VF-number > /sys/class/net/network-interface/device/sriov_numvfs
Copy to Clipboard Copied! 명령에서 다음을 교체합니다.
- PF에서 생성할 VF 수를 포함하는 VF-number 입니다.
- VF를 생성할 네트워크 인터페이스의 이름이 있는 network-interface 입니다.
다음 예제에서는 eth1 네트워크 인터페이스에서 2개의 VF를 생성합니다.
echo 2 > /sys/class/net/eth1/device/sriov_numvfs
# echo 2 > /sys/class/net/eth1/device/sriov_numvfs
Copy to Clipboard Copied! VF가 추가되었는지 확인합니다.
lspci | grep Ethernet
# lspci | grep Ethernet 82:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) 82:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) 82:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 82:10.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
Copy to Clipboard Copied! VF를 생성하는 데 사용한 네트워크 인터페이스에 대한 udev 규칙을 생성하여 생성된 VF를 영구적으로 설정합니다. 예를 들어 eth1 인터페이스의 경우
/etc/udev/rules.d/eth1.rules
파일을 만들고 다음 행을 추가합니다.ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ATTR{device/sriov_numvfs}="2"
ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ATTR{device/sriov_numvfs}="2"
Copy to Clipboard Copied! 이렇게 하면 호스트가 시작될 때
ixgbe
드라이버를 사용하는 두 개의 VF를eth1
인터페이스에 자동으로 사용할 수 있습니다. 영구 SR-IOV 장치가 필요하지 않은 경우 이 단계를 건너뜁니다.주의현재 Broadcom NetXtreme II BCM57810 어댑터에서 VF를 영구적으로 설정하려고 할 때 위에서 설명한 설정이 올바르게 작동하지 않습니다. 또한 이러한 어댑터에 따라 VF를 Windows VM에 연결하는 것은 현재 신뢰할 수 없습니다.
새로 추가된 VF 인터페이스 장치 중 하나를 실행 중인 VM에 핫플러그합니다.
virsh attach-interface <vm_name> hostdev 0000:82:10.0 --mac 52:54:00:00:01:01 --managed --live --config
# virsh attach-interface <vm_name> hostdev 0000:82:10.0 --mac 52:54:00:00:01:01 --managed --live --config
Copy to Clipboard Copied! --live
옵션은 부팅 간 지속성 없이 실행 중인 VM에 장치를 연결합니다.--config
옵션을 사용하면 구성을 영구적으로 변경합니다. 장치를 종료 VM에 연결하려면--live
옵션을 사용하지 마십시오.--mac
옵션은 연결된 인터페이스의 MAC 주소를 지정합니다. 인터페이스의 MAC 주소를 지정하지 않으면 VM에서 52:54:00 로 시작하는 영구 의사 임의 주소를 자동으로 생성합니다.중요VM의 XML 구성 파일의 < hostdev > 섹션에 장치 항목을 수동으로 추가하여 SR-IOV VF를 가상 머신에 할당하는 경우 MAC 주소가 영구적으로 할당되지 않으며 게스트의 네트워크 설정은 일반적으로 모든 호스트 재부팅 시 재구성해야 합니다.
이러한 문제를 방지하려면 이 단계에 설명된 대로
virsh attach-interface
명령을 사용합니다.
검증
- 프로시저가 성공하면 게스트 운영 체제는 새 네트워크 인터페이스 컨트롤러를 감지합니다.
16.5.3. SR-IOV 할당에 지원되는 장치
모든 장치를 SR-IOV에 사용할 수 있는 것은 아닙니다. 다음 장치는 RHEL 10에서 SR-IOV와 호환되는 것으로 테스트 및 검증되었습니다.
네트워킹 장치
-
Intel 82599ES 10 Gigabit Ethernet Controller -
ixgbe
드라이브 사용 -
Intel Ethernet Controller XL710 시리즈 -
i40e
드라이버 사용 -
Intel Ethernet Network Adapter XXV710 -
i40e
드라이버 사용 -
Intel 82576 Gigabit Ethernet Controller -
igb
드라이버 사용 -
Broadcom NetXtreme II BCM57810 -
bnx2x
드라이버 사용 -
QSFP용 이더넷 컨트롤러 E810-C - 스노우
드라이버
사용 -
SFC9220 10/40G Ethernet Controller -
sfc
드라이버 사용 -
FastLinQ QL41000 Series 10/25/40/50GbE Controller -
qede
드라이버 사용 - Mellanox MT27710 이더넷 어댑터 카드
- Mellanox MT2892 제품군 [ConnectX-6 Dx]
- Mellanox MT2910 [ConnextX-7]
16.6. PXE 서버에서 가상 머신 부팅
PXE(Preboot Execution Environment)를 사용하는 VM(가상 머신)은 네트워크에서 구성을 부팅하고 로드할 수 있습니다. libvirt
를 사용하여 가상 또는 브리지 네트워크의 PXE 서버에서 VM을 부팅할 수 있습니다.
이러한 절차는 예제로만 제공됩니다. 계속하기 전에 충분한 백업이 있는지 확인하십시오.
16.6.1. 가상 네트워크에서 PXE 부팅 서버 설정
libvirt
가상 네트워크를 구성하여 PXE(Preboot Execution Environment)를 제공할 수 있습니다. 이를 통해 호스트의 가상 머신을 가상 네트워크에서 사용할 수 있는 부팅 이미지에서 부팅할 수 있습니다.
사전 요구 사항
다음과 같은 로컬 PXE 서버(DHCP 및 TFTP)
- libvirt 내부 서버
- dhcpd 및 tftpd 수동으로 설정
- dnsmasq
- Cobbler 서버
-
Cobbler 또는 수동으로 구성된
PXELINUX
와 같은 PXE 부팅 이미지.
프로세스
-
PXE 부팅 이미지와 구성을
/var/lib/tftpboot
폴더에 배치합니다. 폴더 권한을 설정합니다.
chmod -R a+r /var/lib/tftpboot
# chmod -R a+r /var/lib/tftpboot
Copy to Clipboard Copied! 폴더 소유권을 설정합니다.
chown -R nobody: /var/lib/tftpboot
# chown -R nobody: /var/lib/tftpboot
Copy to Clipboard Copied! SELinux 컨텍스트를 업데이트합니다.
chcon -R --reference /usr/sbin/dnsmasq /var/lib/tftpboot chcon -R --reference /usr/libexec/libvirt_leaseshelper /var/lib/tftpboot
# chcon -R --reference /usr/sbin/dnsmasq /var/lib/tftpboot # chcon -R --reference /usr/libexec/libvirt_leaseshelper /var/lib/tftpboot
Copy to Clipboard Copied! 가상 네트워크를 종료합니다.
virsh net-destroy default
# virsh net-destroy default
Copy to Clipboard Copied! 기본 편집기에서 가상 네트워크 구성 파일을 엽니다.
virsh net-edit default
# virsh net-edit default
Copy to Clipboard Copied! 적절한 주소, 네트워크 마스크, DHCP 주소 범위 및 부팅 파일을 포함하도록 <
ip
> 요소를 편집합니다. 여기서 example-pxelinux 는 부팅 이미지 파일의 이름입니다.<ip address='192.0.2.1' netmask='255.255.255.0'> <tftp root='/var/lib/tftpboot'/> <dhcp> <range start='192.0.2.2' end='192.0.2.254' /> <bootp file='example-pxelinux'/> </dhcp> </ip>
<ip address='192.0.2.1' netmask='255.255.255.0'> <tftp root='/var/lib/tftpboot'/> <dhcp> <range start='192.0.2.2' end='192.0.2.254' /> <bootp file='example-pxelinux'/> </dhcp> </ip>
Copy to Clipboard Copied! 가상 네트워크를 시작합니다.
virsh net-start default
# virsh net-start default
Copy to Clipboard Copied!
검증
기본 가상 네트워크가
활성화되어 있는지 확인합니다.virsh net-list
# virsh net-list Name State Autostart Persistent --------------------------------------------------- default active no no
Copy to Clipboard Copied!
16.6.2. PXE 및 가상 네트워크를 사용하여 가상 머신 부팅
가상 네트워크에서 사용 가능한 PXE(Preboot Execution Environment) 서버에서 VM(가상 머신)을 부팅하려면 PXE 부팅을 활성화해야 합니다.
사전 요구 사항
- PXE 부팅 서버는 가상 네트워크에서 PXE 부팅 서버 설정에 설명된 대로 가상 네트워크에 설정됩니다.
프로세스
PXE 부팅이 활성화된 새 VM을 생성합니다. 예를 들어
기본
가상 네트워크에서 사용 가능한 PXE에서 새 10GB QCOW2 이미지 파일로 설치하려면 다음을 수행합니다.virt-install --pxe --network network=default --memory 2048 --vcpus 2 --disk size=10
# virt-install --pxe --network network=default --memory 2048 --vcpus 2 --disk size=10
Copy to Clipboard Copied! 또는 기존 VM의 XML 구성 파일을 수동으로 편집할 수 있습니다. 이렇게 하려면 게스트 네트워크가 가상 네트워크를 사용하도록 구성되어 있고 네트워크가 기본 부팅 장치로 구성되어 있는지 확인합니다.
<interface type='network'> <mac address='52:54:00:66:79:14'/> <source network='default'/> <target dev='vnet0'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> <boot order='1'/> </interface>
<interface type='network'> <mac address='52:54:00:66:79:14'/> <source network='default'/> <target dev='vnet0'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> <boot order='1'/> </interface>
Copy to Clipboard Copied!
검증
-
virsh start
명령을 사용하여 VM을 시작합니다. PXE가 올바르게 구성된 경우 VM은 PXE 서버에서 사용 가능한 부팅 이미지에서 부팅됩니다.
16.6.3. PXE 및 브리지 네트워크를 사용하여 가상 머신 부팅
브리지된 네트워크에서 사용 가능한 PXE(Preboot Execution Environment) 서버에서 VM(가상 머신)을 부팅하려면 PXE 부팅을 활성화해야 합니다.
사전 요구 사항
- 네트워크 브리징이 활성화됩니다.
- 브리지 네트워크에서 PXE 부팅 서버를 사용할 수 있습니다.
프로세스
PXE 부팅이 활성화된 새 VM을 생성합니다. 예를 들어
breth0
브리지 네트워크에서 사용 가능한 PXE에서 새 10GB QCOW2 이미지 파일에 설치하려면 다음을 수행합니다.virt-install --pxe --network bridge=breth0 --memory 2048 --vcpus 2 --disk size=10
# virt-install --pxe --network bridge=breth0 --memory 2048 --vcpus 2 --disk size=10
Copy to Clipboard Copied! 또는 기존 VM의 XML 구성 파일을 수동으로 편집할 수 있습니다. 이렇게 하려면 VM이 브리지된 네트워크로 구성되어 네트워크가 기본 부팅 장치로 구성되어 있는지 확인합니다.
<interface type='bridge'> <mac address='52:54:00:5a:ad:cb'/> <source bridge='breth0'/> <target dev='vnet0'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> <boot order='1'/> </interface>
<interface type='bridge'> <mac address='52:54:00:5a:ad:cb'/> <source bridge='breth0'/> <target dev='vnet0'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> <boot order='1'/> </interface>
Copy to Clipboard Copied!
검증
-
virsh start
명령을 사용하여 VM을 시작합니다. PXE가 올바르게 구성된 경우 VM은 PXE 서버에서 사용 가능한 부팅 이미지에서 부팅됩니다.
16.7. 네트워크와 가상 머신을 연결하도록 네트워크 본딩의 브리지 구성
네트워크 브리지는 호스트와 동일한 네트워크에 VM을 연결합니다. 한 호스트의 VM을 다른 호스트의 다른 호스트 또는 VM에 연결하려면 브리지가 해당 호스트 간에 통신을 설정합니다. 그러나 브릿지는 장애 조치 메커니즘을 제공하지 않습니다.
통신에서 오류를 처리하기 위해 네트워크 본딩은 네트워크 인터페이스 실패 시 통신을 처리합니다. 내결함성 및 중복성을 유지하기 위해 active-backup
본딩 메커니즘에 따라 본딩에서 하나의 포트만 활성 상태이며 스위치 구성이 필요하지 않습니다. 활성 포트가 실패하면 네트워크에 구성된 VM 간 통신을 유지하기 위해 대체 포트가 활성화됩니다.
16.7.1. nmcli를 사용하여 네트워크 본딩에서 네트워크 인터페이스 구성
명령줄에서 네트워크 본딩을 구성하려면 nmcli
유틸리티를 사용합니다.
사전 요구 사항
-
두 개 이상의 물리적 장치가 서버에 설치되고
NetworkManager
연결 프로필에 구성되지 않습니다.
프로세스
본딩 인터페이스를 생성합니다.
nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup"
# nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup"
Copy to Clipboard Copied! 이 명령은
active-backup
모드를 사용하는bond0
이라는 본딩을 생성합니다.본딩에 이더넷 인터페이스를 할당합니다.
nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname enp7s0 master bond0 nmcli connection add type ethernet slave-type bond con-name bond0-port2 ifname enp8s0 master bond0
# nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname enp7s0 master bond0 # nmcli connection add type ethernet slave-type bond con-name bond0-port2 ifname enp8s0 master bond0
Copy to Clipboard Copied! 이러한 명령은
enp7s0
및enp8s0
에 대한 프로필을 생성하고bond0
연결에 추가합니다.IPv4 설정을 구성합니다.
- DHCP를 사용하려면 작업이 필요하지 않습니다.
정적 IPv4 주소, 네트워크 마스크, 기본 게이트웨이, DNS 서버를
bond0
연결로 설정하려면 다음을 입력합니다.nmcli connection modify bond0 ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.253 ipv4.dns-search example.com ipv4.method manual
# nmcli connection modify bond0 ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.253 ipv4.dns-search example.com ipv4.method manual
Copy to Clipboard Copied!
IPv6 설정을 구성합니다.
- SLAAC(stateless address autoconfiguration)를 사용하려면 작업이 필요하지 않습니다.
정적 IPv6 주소, 네트워크 마스크, 기본 게이트웨이, DNS 서버를
bond0
연결로 설정하려면 다음을 입력합니다.nmcli connection modify bond0 ipv6.addresses 2001:db8:1::1/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::fffd ipv6.dns-search example.com ipv6.method manual
# nmcli connection modify bond0 ipv6.addresses 2001:db8:1::1/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::fffd ipv6.dns-search example.com ipv6.method manual
Copy to Clipboard Copied!
선택 사항: 본딩 포트에서 매개변수를 설정하려면 다음 명령을 사용합니다.
nmcli connection modify bond0-port1 bond-port.<parameter> <value>
# nmcli connection modify bond0-port1 bond-port.<parameter> <value>
Copy to Clipboard Copied! 본딩이 활성화되면 Red Hat Enterprise Linux가 모든 포트를 자동으로 사용하도록 설정합니다.
nmcli connection modify bond0 connection.autoconnect-ports 1
# nmcli connection modify bond0 connection.autoconnect-ports 1
Copy to Clipboard Copied! 브리지를 활성화합니다.
nmcli connection up bond0
# nmcli connection up bond0
Copy to Clipboard Copied!
검증
호스트에서 네트워크 케이블을 일시적으로 제거합니다.
소프트웨어 유틸리티를 사용하여 링크 실패 이벤트를 적절하게 테스트할 방법은 없습니다. nmcli와 같은 연결을 비활성화하는 도구는 실제 링크 실패 이벤트가 아닌 본딩 드라이버의 포트 구성 변경 사항만 표시합니다.
본딩 상태를 표시합니다.
cat /proc/net/bonding/bond0
# cat /proc/net/bonding/bond0
Copy to Clipboard Copied!
16.7.2. nmcli를 사용하여 네트워크 본딩의 네트워크 브리지 구성
네트워크 본딩의 네트워크 브릿지에는 트래픽 처리를 개선하기 위해 여러 네트워크 인터페이스를 결합하는 본딩 인터페이스를 구성해야 합니다. 따라서 VM은 네트워크 브리지를 사용하여 결합된 네트워크 인터페이스를 통해 네트워크에 액세스할 수 있습니다. nmcli
유틸리티는 구성에 필요한 명령줄에서 연결 파일을 생성하고 편집합니다.
프로세스
브리지 인터페이스를 만듭니다.
nmcli connection add type bridge con-name br0 ifname br0 ipv4.method disabled ipv6.method disabled
# nmcli connection add type bridge con-name br0 ifname br0 ipv4.method disabled ipv6.method disabled
Copy to Clipboard Copied! bond0
본딩을br0
브리지에 추가합니다.nmcli connection modify bond0 master br0
# nmcli connection modify bond0 master br0
Copy to Clipboard Copied! 브릿지가 활성화되면 Red Hat Enterprise Linux가 모든 포트를 자동으로 사용하도록 설정합니다.
nmcli connection modify br0 connection.autoconnect-ports 1
# nmcli connection modify br0 connection.autoconnect-ports 1
Copy to Clipboard Copied! 브리지를 다시 활성화합니다.
nmcli connection up br0
# nmcli connection up br0
Copy to Clipboard Copied!
검증
ip
유틸리티를 사용하여 특정 브리지의 포트인 이더넷 장치의 링크 상태를 표시합니다.ip link show master br0
# ip link show master br0 6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:38:a9:4d brd ff:ff:ff:ff:ff:ff ...
Copy to Clipboard Copied! bridge
유틸리티를 사용하여 브리지 장치의 포트인 이더넷 장치의 상태를 표시합니다.bridge link show
# bridge link show 6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 100 ...
Copy to Clipboard Copied! 특정 이더넷 장치의 상태를 표시하려면
bridge link show dev <ethernet_device_name> 명령을
사용합니다.
16.7.3. 기존 본딩 인터페이스를 사용하여 libvirt에서 가상 네트워크 생성
VM(가상 시스템)에서 본딩과 함께 br0
브리지를 사용하려면 먼저 이 브리지를 사용하는 libvirtd
서비스에 가상 네트워크를 추가합니다.
사전 요구 사항
-
libvirt
패키지를 설치했습니다. -
libvirtd
서비스를 시작하고 활성화했습니다. -
Red Hat Enterprise Linux에서 본딩을 사용하여
br0
장치를 구성했습니다.
프로세스
다음 콘텐츠를 사용하여
~/bond0-bridge.xml
파일을 만듭니다.<network> <name>bond0-bridge</name> <forward mode="bridge" /> <bridge name="br0" /> </network>
<network> <name>bond0-bridge</name> <forward mode="bridge" /> <bridge name="br0" /> </network>
Copy to Clipboard Copied! ~/bond0-bridge.xml
파일을 사용하여libvirt
에 새 가상 네트워크를 생성합니다.virsh net-define ~/bond0-bridge.xml
# virsh net-define ~/bond0-bridge.xml
Copy to Clipboard Copied! ~/bond0-bridge.xml
파일을 제거합니다.rm ~/bond0-bridge.xml
# rm ~/bond0-bridge.xml
Copy to Clipboard Copied! bond0-bridge
가상 네트워크를 시작합니다.virsh net-start bond0-bridge
# virsh net-start bond0-bridge
Copy to Clipboard Copied! libvirtd
서비스가 시작될 때 자동으로 시작하도록bond0-bridge
가상 네트워크를 구성합니다.virsh net-autostart bond0-bridge
# virsh net-autostart bond0-bridge
Copy to Clipboard Copied!
검증
가상 네트워크 목록을 표시합니다.
virsh net-list
# virsh net-list Name State Autostart Persistent ---------------------------------------------------- bond0-bridge active yes yes ...
Copy to Clipboard Copied!
16.7.4. 본딩 인터페이스를 사용하도록 가상 머신 구성
호스트에서 본딩 인터페이스가 있는 브리지 장치를 사용하도록 VM을 구성하려면 bond0-bridge
가상 네트워크를 사용하는 새 VM을 생성하거나 이 네트워크를 사용하도록 기존 VM의 설정을 업데이트합니다.
RHEL 호스트에서 다음 절차를 수행합니다.
사전 요구 사항
-
libvirtd
에bond0-bridge
가상 네트워크를 구성했습니다.
프로세스
새 VM을 생성하고
bond0-bridge
네트워크를 사용하도록 구성하려면 VM을 생성할 때--network network:bond0-bridge
옵션을virt-install
유틸리티에 전달합니다.virt-install ... --network network:bond0-bridge
# virt-install ... --network network:bond0-bridge
Copy to Clipboard Copied! 기존 VM의 네트워크 설정을 변경하려면 다음을 수행합니다.
VM의 네트워크 인터페이스를
bond0-bridge
가상 네트워크에 연결합니다.virt-xml <example_vm> --edit --network network=bond0-bridge
# virt-xml <example_vm> --edit --network network=bond0-bridge
Copy to Clipboard Copied!
VM을 종료하고 다시 시작합니다.
virsh shutdown <example_vm> virsh start <example_vm>
# virsh shutdown <example_vm> # virsh start <example_vm>
Copy to Clipboard Copied!
검증
호스트에 VM의 가상 네트워크 인터페이스를 표시합니다.
virsh domiflist <example_vm>
# virsh domiflist <example_vm> Interface Type Source Model MAC ------------------------------------------------------------------- vnet1 bridge bond0-bridge virtio 52:54:00:c5:98:1c
Copy to Clipboard Copied! br0
브리지에 연결된 인터페이스를 표시합니다.ip link show master br0
# ip link show master br0 18: bond0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN mode DEFAULT group default qlen 1000 link/ether 2a:53:bd:d5:b3:0a brd ff:ff:ff:ff:ff:ff 19: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN mode DEFAULT group default qlen 1000 link/ether 52:54:00:c5:98:1c brd ff:ff:ff:ff:ff:ff ...
Copy to Clipboard Copied! libvirtd
서비스는 브리지의 구성을 동적으로 업데이트합니다.bond0-bridge
네트워크를 사용하는 VM을 시작하면 호스트의 해당vnet*
장치가 브리지 포트로 표시됩니다.
16.8. passt 사용자 공간 연결 구성
libvirt
의 세션
연결을 사용하는 경우와 같이 가상 네트워크에 권한이 없는 액세스 권한이 필요한 경우 전달
네트워크 백엔드를 사용하도록 VM(가상 머신)을 구성할 수 있습니다.
사전 요구 사항
passt
패키지가 시스템에 설치되어 있습니다.dnf install passt
# dnf install passt
Copy to Clipboard Copied!
프로세스
통과
연결을 사용할 VM의 XML 구성을 엽니다. 예를 들면 다음과 같습니다.virsh edit <testguest1>
# virsh edit <testguest1>
Copy to Clipboard Copied! <devices>
섹션에서passt
를 백엔드 유형으로 사용하는<interface type='user'>
요소를 추가합니다.예를 들어 다음 구성은 첫 번째 기본 경로와 연결된 호스트 인터페이스에서 복사한 주소와 경로를 사용하는
passt
연결을 설정합니다.<devices> [...] <interface type='user'> <backend type='passt'/> </interface> </devices>
<devices> [...] <interface type='user'> <backend type='passt'/> </interface> </devices>
Copy to Clipboard Copied! 선택적으로
passt
를 사용할 때 호스트에 대한 들어오는 네트워크 트래픽을 이 VM 인터페이스로 전달하기 위해 여러 <portForward
> 요소를 지정할 수 있습니다. 인터페이스 IP 주소를 사용자 지정할 수도 있습니다. 예를 들면 다음과 같습니다.<devices> [...] <interface type='user'> <backend type='passt'/> <mac address="52:54:00:98:d8:b7"/> <source dev='eth0'/> <ip family='ipv4' address='192.0.2.1' prefix='24'/> <ip family='ipv6' address='::ffff:c000:201'/> <portForward proto='tcp'> <range start='2022' to='22'/> </portForward> <portForward proto='udp' address='1.2.3.4'> <range start='5000' end='5020' to='6000'/> <range start='5010' end='5015' exclude='yes'/> </portForward> <portForward proto='tcp' address='2001:db8:ac10:fd01::1:10' dev='eth0'> <range start='8080'/> <range start='4433' to='3444'/> </portForward> </interface> </devices>
<devices> [...] <interface type='user'> <backend type='passt'/> <mac address="52:54:00:98:d8:b7"/> <source dev='eth0'/> <ip family='ipv4' address='192.0.2.1' prefix='24'/> <ip family='ipv6' address='::ffff:c000:201'/> <portForward proto='tcp'> <range start='2022' to='22'/> </portForward> <portForward proto='udp' address='1.2.3.4'> <range start='5000' end='5020' to='6000'/> <range start='5010' end='5015' exclude='yes'/> </portForward> <portForward proto='tcp' address='2001:db8:ac10:fd01::1:10' dev='eth0'> <range start='8080'/> <range start='4433' to='3444'/> </portForward> </interface> </devices>
Copy to Clipboard Copied! 이 예제 구성은 다음 매개변수를 사용하여
passt
연결을 설정합니다.-
VM은
eth0
호스트 인터페이스에서 트래픽을 전달하기 위한 네트워크 경로를 복사합니다. -
인터페이스 MAC은
52:54:00:98:d8:b7
로 설정됩니다. 설정되지 않으면 임의의 항목이 생성됩니다. -
IPv4 주소는
192.0.2.1/24
로 설정되고 IPv6 주소는::ffff:c000:201
로 설정됩니다. -
호스트의 TCP 포트
2022
는 VM의 네트워크 트래픽을 포트22
로 전달합니다. -
호스트 인터페이스
eth0
의 TCP 주소2001:db8:fd01::1:10
및 포트8080
은 네트워크 트래픽을 VM의 포트8080
으로 전달합니다. 포트4433
은 VM의 포트3444
로 전달합니다. -
호스트의 UDP 주소
1.2.3.4
및 포트5000 - 5009
및5016 - 5020
은 VM의 네트워크 트래픽을 포트6000 - 6009
및6016 - 6020
으로 전달합니다.
-
VM은
- XML 구성을 저장합니다.
검증
passt
로 구성한 VM을 시작하거나 다시 시작합니다.virsh reboot <vm-name> virsh start <vm-name>
# virsh reboot <vm-name> # virsh start <vm-name>
Copy to Clipboard Copied! VM이 성공적으로 부팅되면 이제
전달
네트워킹 백엔드를 사용하고 있습니다.
17장. 가상 머신에서 GPU 장치 관리
RHEL 10 호스트에서 VM(가상 머신)의 그래픽 성능을 개선하기 위해 VM에 호스트 GPU를 할당할 수 있습니다.
- GPU를 호스트에서 분리하고 GPU에 대한 전체 제어 권한을 VM에 직접 전달할 수 있습니다.
- 물리적 GPU에서 중재된 장치를 여러 개 생성하고 이러한 장치를 가상 GPU(vGPU)로 여러 게스트에 할당할 수 있습니다. 현재 선택한 NVIDIA GPU에서만 지원되며, 중재된 장치는 단일 게스트에 할당할 수 있습니다.
GPU 할당은 현재 Intel 64 및 AMD64 시스템에서만 지원됩니다.
17.1. 가상 머신에 GPU 할당
호스트 시스템에 연결된 GPU에 액세스하고 제어하려면 GPU를 가상 머신(VM)으로 직접 제어하도록 호스트 시스템을 구성해야 합니다.
가상 GPU 할당에 대한 자세한 내용은 NVIDIA vGPU 장치 관리를 참조하십시오.
사전 요구 사항
호스트 머신 커널에서 IOMMU 지원을 활성화해야 합니다.
Intel 호스트에서 VT-d를 활성화해야 합니다.
intel_iommu=on
및iommu=pt
매개변수를 사용하여 GRUB 설정을 다시 생성합니다.grubby --args="intel_iommu=on iommu_pt" --update-kernel DEFAULT
# grubby --args="intel_iommu=on iommu_pt" --update-kernel DEFAULT
Copy to Clipboard Copied! - 호스트를 재부팅합니다.
AMD 호스트에서 AMD-Vi를 활성화해야 합니다.
AMD 호스트에서 IOMMU는 기본적으로 활성화되어 있으므로
iommu=pt
를 추가하여 pass-through 모드로 전환할 수 있습니다.iommu=pt
매개변수를 사용하여 GRUB 설정을 다시 생성합니다.grubby --args="iommu=pt" --update-kernel DEFAULT
# grubby --args="iommu=pt" --update-kernel DEFAULT
Copy to Clipboard Copied! 참고pt
옵션은 pass-through 모드에서 사용되는 장치에 대해서만 IOMMU를 활성화하고 호스트 성능을 개선합니다. 그러나 모든 하드웨어가 옵션을 지원하는 것은 아닙니다. 이 옵션이 활성화되지 않은 경우에도 장치를 계속 할당할 수 있습니다.- 호스트를 재부팅합니다.
프로세스
드라이버가 GPU에 바인딩되지 않도록 합니다.
GPU가 연결된 PCI 버스 주소를 식별합니다.
lspci -Dnn | grep VGA
# lspci -Dnn | grep VGA 0000:02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK106GL [Quadro K4000] [10de:11fa] (rev a1)
Copy to Clipboard Copied! 호스트의 그래픽 드라이버가 GPU를 사용하지 못하도록 합니다. 이렇게 하려면 pci-stub 드라이버와 함께 GPU PCI ID를 사용합니다.
예를 들어 다음 명령은 드라이버가 10de:11fa 버스에 연결된 GPU에 바인딩되지 않도록 합니다.
grubby --args="pci-stub.ids=10de:11fa" --update-kernel DEFAULT
# grubby --args="pci-stub.ids=10de:11fa" --update-kernel DEFAULT
Copy to Clipboard Copied! - 호스트를 재부팅합니다.
선택 사항: 오디오와 같은 특정 GPU 기능이 지원 제한으로 인해 VM에 전달할 수 없는 경우 IOMMU 그룹 내의 끝점의 드라이버 바인딩을 수정하여 필요한 GPU 함수만 통과할 수 있습니다.
GPU 설정을 XML로 변환하고 호스트 드라이버에 연결하지 못하도록 하는 끝점의 PCI 주소를 기록해 둡니다.
이렇게 하려면 주소에
pci_
접두사를 추가하고 구분 기호를 밑줄로 변환하여 GPU의 PCI 버스 주소를 libvirt 호환 형식으로 변환합니다.예를 들어 다음 명령은
0000:02:00.0
버스 주소에 연결된 GPU의 XML 구성을 표시합니다.virsh nodedev-dumpxml pci_0000_02_00_0
# virsh nodedev-dumpxml pci_0000_02_00_0
Copy to Clipboard Copied! <device> <name>pci_0000_02_00_0</name> <path>/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0</path> <parent>pci_0000_00_03_0</parent> <driver> <name>pci-stub</name> </driver> <capability type='pci'> <domain>0</domain> <bus>2</bus> <slot>0</slot> <function>0</function> <product id='0x11fa'>GK106GL [Quadro K4000]</product> <vendor id='0x10de'>NVIDIA Corporation</vendor> <iommuGroup number='13'> <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/> </iommuGroup> <pci-express> <link validity='cap' port='0' speed='8' width='16'/> <link validity='sta' speed='2.5' width='16'/> </pci-express> </capability> </device>
<device> <name>pci_0000_02_00_0</name> <path>/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0</path> <parent>pci_0000_00_03_0</parent> <driver> <name>pci-stub</name> </driver> <capability type='pci'> <domain>0</domain> <bus>2</bus> <slot>0</slot> <function>0</function> <product id='0x11fa'>GK106GL [Quadro K4000]</product> <vendor id='0x10de'>NVIDIA Corporation</vendor> <iommuGroup number='13'> <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/> </iommuGroup> <pci-express> <link validity='cap' port='0' speed='8' width='16'/> <link validity='sta' speed='2.5' width='16'/> </pci-express> </capability> </device>
Copy to Clipboard Copied! 끝점이 호스트 드라이버에 연결되지 않도록 합니다.
이 예에서 GPU를 VM에 할당하려면 오디오 기능에 해당하는 끝점인 <
address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/
> 이 아니라 VFIO-PCI에 끝점을 연결하지 못하도록 합니다.driverctl set-override 0000:02:00.1 vfio-pci
# driverctl set-override 0000:02:00.1 vfio-pci
Copy to Clipboard Copied!
VM에 GPU 연결
PCI 버스 주소를 사용하여 GPU에 대한 XML 구성 파일을 생성합니다.
예를 들어 GPU 버스 주소의 매개변수를 사용하여 다음 XML 파일 GPU-Assign.xml을 생성할 수 있습니다.
<hostdev mode='subsystem' type='pci' managed='yes'> <driver name='vfio'/> <source> <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </source> </hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'> <driver name='vfio'/> <source> <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </source> </hostdev>
Copy to Clipboard Copied! - 호스트 시스템에 파일을 저장합니다.
파일을 VM의 XML 구성과 병합합니다.
예를 들어 다음 명령은 GPU XML 파일 GPU-Assign.xml을
System1
VM의 XML 구성 파일과 병합합니다.virsh attach-device System1 --file /home/GPU-Assign.xml --persistent
# virsh attach-device System1 --file /home/GPU-Assign.xml --persistent Device attached successfully.
Copy to Clipboard Copied! 참고GPU가 VM에 보조 그래픽 장치로 연결됩니다. GPU를 기본 그래픽 장치로 할당하는 것은 지원되지 않으며 Red Hat은 VM의 XML 구성에서 기본 에뮬레이션 그래픽 장치를 제거하는 것이 좋습니다.
검증
-
장치는 VM의 XML 구성의
<devices
> 섹션에 표시됩니다.
17.2. NVIDIA vGPU 장치 관리
vGPU 기능을 사용하면 물리적 NVIDIA GPU 장치를 중재된 장치라고 하는 여러 가상 장치로 나눌 수 있습니다
. 그런 다음 이러한 중재된 장치를 가상 GPU로 여러 VM(가상 머신)에 할당할 수 있습니다. 결과적으로 이러한 VM은 단일 물리적 GPU의 성능을 공유할 수 있습니다.
중재된 장치를 사용하거나 사용하지 않고 VM에 물리적 GPU를 할당하면 호스트에서 GPU를 사용할 수 없습니다.
17.2.1. NVIDIA vGPU 장치 설정
NVIDIA vGPU 기능을 설정하려면 GPU 장치용 NVIDIA vGPU 드라이버를 다운로드하고, 중재된 장치를 생성하고 이를 의도한 가상 머신에 할당해야 합니다.
사전 요구 사항
GPU는 vGPU 중재 장치를 지원합니다. vGPU 생성을 지원하는 NVIDIA GPU의 최신 목록은 NVIDIA vGPU 소프트웨어 설명서를 참조하십시오.
호스트가 사용 중인 GPU를 모르는 경우 lshw 패키지를 설치하고
lshw -C display
명령을 사용합니다. 다음 예제에서는 vGPU와 호환되는 NVIDIA Cryostat P4 GPU를 사용하는 시스템을 보여줍니다.lshw -C display
# lshw -C display *-display description: 3D controller product: GP104GL [Tesla P4] vendor: NVIDIA Corporation physical id: 0 bus info: pci@0000:01:00.0 version: a1 width: 64 bits clock: 33MHz capabilities: pm msi pciexpress cap_list configuration: driver=vfio-pci latency=0 resources: irq:16 memory:f6000000-f6ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff
Copy to Clipboard Copied!
프로세스
- NVIDIA vGPU 드라이버를 다운로드하여 시스템에 설치합니다. 자세한 내용은 NVIDIA 설명서를 참조하십시오.
NVIDIA 소프트웨어 설치 프로그램이 /etc/modprobe.d/nvidia-installer-disable-nouveau.conf 파일을 생성하지 않은 경우 /etc/modprobe.d/ 에 모든 이름의
conf
파일을 생성하고 파일에 다음 행을 추가합니다.blacklist nouveau options nouveau modeset=0
blacklist nouveau options nouveau modeset=0
Copy to Clipboard Copied! 현재 커널의 초기 RAM 디스크를 다시 생성한 다음 재부팅합니다.
dracut --force reboot
# dracut --force # reboot
Copy to Clipboard Copied! 커널이
nvidia_vgpu_vfio
모듈을 로드했으며nvidia-vgpu-mgr.service
서비스가 실행 중인지 확인합니다.lsmod | grep nvidia_vgpu_vfio systemctl status nvidia-vgpu-mgr.service
# lsmod | grep nvidia_vgpu_vfio nvidia_vgpu_vfio 45011 0 nvidia 14333621 10 nvidia_vgpu_vfio mdev 20414 2 vfio_mdev,nvidia_vgpu_vfio vfio 32695 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1 # systemctl status nvidia-vgpu-mgr.service nvidia-vgpu-mgr.service - NVIDIA vGPU Manager Daemon Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpu-mgr.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2018-03-16 10:17:36 CET; 5h 8min ago Main PID: 1553 (nvidia-vgpu-mgr) [...]
Copy to Clipboard Copied! 또한 Ampere (또는 이후) 아키텍처를 기반으로 하는 NVIDIA GPU 장치에서 vGPU를 생성하는 경우 물리적 GPU에 대해 가상 기능이 활성화되어 있는지 확인합니다. 자세한 내용은 NVIDIA 설명서 를 참조하십시오.
장치 UUID를 생성합니다.
uuidgen
# uuidgen 30820a6f-b1a5-4503-91ca-0c10ba58692a
Copy to Clipboard Copied! 감지된 GPU 하드웨어를 기반으로 중재된 장치의 구성으로 XML 파일을 준비합니다. 예를 들어 다음은 0000:01:00.0 PCI 버스에서 실행되는 NVIDIA Cryostat P4 카드에서
nvidia-63
vGPU 유형의 중재 장치를 구성하고 이전 단계에서 생성된 UUID를 사용합니다.<device> <parent>pci_0000_01_00_0</parent> <capability type="mdev"> <type id="nvidia-63"/> <uuid>30820a6f-b1a5-4503-91ca-0c10ba58692a</uuid> </capability> </device>
<device> <parent>pci_0000_01_00_0</parent> <capability type="mdev"> <type id="nvidia-63"/> <uuid>30820a6f-b1a5-4503-91ca-0c10ba58692a</uuid> </capability> </device>
Copy to Clipboard Copied! 준비한 XML 파일을 기반으로 vGPU 중재 장치를 정의합니다. 예를 들면 다음과 같습니다.
virsh nodedev-define vgpu-test.xml
# virsh nodedev-define vgpu-test.xml Node device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 created from vgpu-test.xml
Copy to Clipboard Copied! 선택 사항: 중재된 장치가 비활성으로 나열되어 있는지 확인합니다.
virsh nodedev-list --cap mdev --inactive
# virsh nodedev-list --cap mdev --inactive mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
Copy to Clipboard Copied! 생성한 vGPU 중재 장치를 시작합니다.
virsh nodedev-start mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
# virsh nodedev-start mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 started
Copy to Clipboard Copied! 선택 사항: 중재된 장치가 활성 상태로 나열되어 있는지 확인합니다.
virsh nodedev-list --cap mdev
# virsh nodedev-list --cap mdev mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
Copy to Clipboard Copied! 호스트가 재부팅 후 자동으로 시작하도록 vGPU 장치 설정
virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
# virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Device mdev_d196754e_d8ed_4f43_bf22_684ed698b08b_0000_9b_00_0 marked as autostarted
Copy to Clipboard Copied! vGPU 리소스를 공유하려는 VM에 중재된 장치를 연결합니다. 이렇게 하려면 이전에 기술된 UUID와 함께 VM의 XML 구성의 < devices/ > 섹션에 다음 행을 추가합니다.
<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'> <source> <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/> </source> </hostdev>
<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'> <source> <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/> </source> </hostdev>
Copy to Clipboard Copied! 각 UUID는 한 번에 하나의 VM에만 할당할 수 있습니다. 또한 VM에
virtio-vga
와 같은 QEMU 비디오 장치가 없는 경우 <hostdev
> 줄에ramfb='on'
매개변수도 추가합니다.- 할당된 VM에서 vGPU 미디어된 장치의 모든 기능을 사용하려면 VM에 NVIDIA vGPU 게스트 소프트웨어 라이센스를 설정합니다. 자세한 내용 및 지침은 NVIDIA Virtual GPU Software License Server User Guide 를 참조하십시오.
검증
생성한 vGPU의 기능을 쿼리하고 활성 및 영구으로 나열되는지 확인합니다.
virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
# virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Name: virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Parent: pci_0000_01_00_0 Active: yes Persistent: yes Autostart: yes
Copy to Clipboard Copied! VM을 시작하고 게스트 운영 체제가 mediated 장치를 NVIDIA GPU로 감지하는지 확인합니다. 예를 들어 VM에서 Linux를 사용하는 경우:
lspci -d 10de: -k
# lspci -d 10de: -k 07:00.0 VGA compatible controller: NVIDIA Corporation GV100GL [Tesla V100 SXM2 32GB] (rev a1) Subsystem: NVIDIA Corporation Device 12ce Kernel driver in use: nvidia Kernel modules: nouveau, nvidia_drm, nvidia
Copy to Clipboard Copied!
확인된 문제
- RHEL 10 게스트 운영 체제를 사용하는 VM에 NVIDIA vGPU 미디어를 할당하면 현재 해당 VM의 Wayland 세션이 비활성화되고 대신 Xorg 세션을 로드합니다. 이는 NVIDIA 드라이버와 Wayland 간의 비호환성 때문입니다.
17.2.2. NVIDIA vGPU 장치 제거
할당된 vGPU 미디어 장치 의 구성을 변경하려면 할당된 VM에서 기존 장치를 제거해야 합니다.
사전 요구 사항
- 장치를 제거하려는 VM이 종료됩니다.
프로세스
제거하려는 중재된 장치의 ID를 가져옵니다.
virsh nodedev-list --cap mdev
# virsh nodedev-list --cap mdev mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
Copy to Clipboard Copied! vGPU 미디어 장치의 실행 중인 인스턴스를 중지합니다.
virsh nodedev-destroy mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
# virsh nodedev-destroy mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Destroyed node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'
Copy to Clipboard Copied! 선택 사항: 중재된 장치가 비활성화되었는지 확인합니다.
virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
# virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Name: virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Parent: pci_0000_01_00_0 Active: no Persistent: yes Autostart: yes
Copy to Clipboard Copied! VM의 XML 구성에서 장치를 제거합니다. 이렇게 하려면
virsh edit
유틸리티를 사용하여 VM의 XML 구성을 편집하고 mdev의 구성 세그먼트를 제거합니다. 세그먼트는 다음과 유사합니다.<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'> <source> <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/> </source> </hostdev>
<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'> <source> <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/> </source> </hostdev>
Copy to Clipboard Copied! 중재된 장치를 중지하고 분리하면 삭제되지 않지만 정의된 대로 유지됩니다. 따라서 장치를 다시 시작하고 다른 VM에 연결할 수 있습니다.
선택 사항: 중지된 중재 장치를 삭제하려면 해당 정의를 제거합니다.
virsh nodedev-undefine mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
# virsh nodedev-undefine mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Undefined node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'
Copy to Clipboard Copied!
검증
장치를 중지하고 분리한 경우에만 중재된 장치가 비활성으로 나열되어 있는지 확인합니다.
virsh nodedev-list --cap mdev --inactive
# virsh nodedev-list --cap mdev --inactive mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
Copy to Clipboard Copied! 장치를 삭제한 경우에도 다음 명령이 해당 장치를 표시하지 않는지 확인합니다.
virsh nodedev-list --cap mdev
# virsh nodedev-list --cap mdev
Copy to Clipboard Copied!
17.2.3. 시스템에 대한 NVIDIA vGPU 정보 얻기
사용 가능한 vGPU 기능의 기능을 평가하기 위해 다음과 같이 시스템에서 중재된 장치에 대한 추가 정보를 얻을 수 있습니다.
- 지정된 유형의 중재된 장치 수를 생성할 수 있음
- 시스템에 이미 구성된 중재된 장치는 무엇입니까.
프로세스
vGPU 미디어 장치를 지원할 수 있는 호스트에서 사용 가능한 GPU 장치를 보려면
virsh nodedev-list --cap mdev_types
명령을 사용합니다. 예를 들어 다음은 NVIDIA Quadro RTX6000 장치가 두 개 있는 시스템을 보여줍니다.virsh nodedev-list --cap mdev_types
# virsh nodedev-list --cap mdev_types pci_0000_5b_00_0 pci_0000_9b_00_0
Copy to Clipboard Copied! 특정 GPU 장치에서 지원하는 vGPU 유형과 추가 메타데이터를 표시하려면
virsh nodedev-dumpxml
명령을 사용합니다.virsh nodedev-dumpxml pci_0000_9b_00_0
# virsh nodedev-dumpxml pci_0000_9b_00_0 <device> <name>pci_0000_9b_00_0</name> <path>/sys/devices/pci0000:9a/0000:9a:00.0/0000:9b:00.0</path> <parent>pci_0000_9a_00_0</parent> <driver> <name>nvidia</name> </driver> <capability type='pci'> <class>0x030000</class> <domain>0</domain> <bus>155</bus> <slot>0</slot> <function>0</function> <product id='0x1e30'>TU102GL [Quadro RTX 6000/8000]</product> <vendor id='0x10de'>NVIDIA Corporation</vendor> <capability type='mdev_types'> <type id='nvidia-346'> <name>GRID RTX6000-12C</name> <deviceAPI>vfio-pci</deviceAPI> <availableInstances>2</availableInstances> </type> <type id='nvidia-439'> <name>GRID RTX6000-3A</name> <deviceAPI>vfio-pci</deviceAPI> <availableInstances>8</availableInstances> </type> [...] <type id='nvidia-440'> <name>GRID RTX6000-4A</name> <deviceAPI>vfio-pci</deviceAPI> <availableInstances>6</availableInstances> </type> <type id='nvidia-261'> <name>GRID RTX6000-8Q</name> <deviceAPI>vfio-pci</deviceAPI> <availableInstances>3</availableInstances> </type> </capability> <iommuGroup number='216'> <address domain='0x0000' bus='0x9b' slot='0x00' function='0x3'/> <address domain='0x0000' bus='0x9b' slot='0x00' function='0x1'/> <address domain='0x0000' bus='0x9b' slot='0x00' function='0x2'/> <address domain='0x0000' bus='0x9b' slot='0x00' function='0x0'/> </iommuGroup> <numa node='2'/> <pci-express> <link validity='cap' port='0' speed='8' width='16'/> <link validity='sta' speed='2.5' width='8'/> </pci-express> </capability> </device>
Copy to Clipboard Copied!
17.2.4. NVIDIA vGPU용 원격 데스크탑 스트리밍 서비스
다음 원격 데스크탑 스트리밍 서비스는 NVIDIA vGPU 또는 NVIDIA GPU 패스스루가 활성화된 RHEL 10 하이퍼바이저에서 지원됩니다.
- HP ZCentral Remote Boost/Teradici
- NICE DCV
- Mechdyne TGX
지원 세부 정보는 적절한 벤더 지원 매트릭스를 참조하십시오.
18장. 가상 머신 성능 최적화
가상 머신(VM)은 항상 호스트와 비교하여 어느 정도의 성능 저하를 경험합니다. 하드웨어 인프라 리소스를 최대한 효율적으로 사용할 수 있도록 RHEL 10의 가상화 성능 영향을 최소화하는 방법에 대한 지침은 다음 섹션을 참조하십시오.
18.1. 가상 머신 성능에 미치는 영향
VM(가상 머신)은 호스트에서 사용자 공간 프로세스로 실행됩니다. 따라서 하이퍼바이저는 VM이 사용할 수 있도록 호스트의 시스템 리소스를 변환해야 합니다. 결과적으로 변환에 리소스 중 일부가 사용되며 VM은 호스트와 동일한 성능 효율성을 얻을 수 없습니다.
시스템 성능에 대한 가상화의 영향
VM 성능 저하의 보다 구체적인 이유는 다음과 같습니다.
- 가상 CPU(vCPU)는 Linux 스케줄러에서 처리하는 호스트에서 스레드로 구현됩니다.
- VM은 호스트 커널에서 NUMA 또는 대규모 페이지와 같은 최적화 기능을 자동으로 상속하지 않습니다.
- 호스트의 디스크 및 네트워크 I/O 설정은 VM에 상당한 성능 영향을 미칠 수 있습니다.
- 네트워크 트래픽은 일반적으로 소프트웨어 기반 브릿지를 통해 VM으로 이동합니다.
- 호스트 장치 및 해당 모델에 따라 특정 하드웨어 에뮬레이션으로 인해 상당한 오버헤드가 발생할 수 있습니다.
VM 성능에 미치는 가상화의 심각도는 다음과 같은 다양한 요인의 영향을 받습니다.
- 동시에 실행되는 VM 수입니다.
- 각 VM에서 사용하는 가상 장치의 양입니다.
- VM에서 사용하는 장치 유형입니다.
VM 성능 손실 감소
RHEL 10에서는 가상화의 부정적인 성능 영향을 줄이는 데 사용할 수 있는 다양한 기능을 제공합니다. 특히 다음과 같습니다.
-
TuneD
서비스는 VM의 리소스 배포 및 성능을 자동으로 최적화할 수 있습니다. - 블록 I/O 튜닝 을 사용하면 디스크와 같은 VM 블록 장치의 성능을 향상시킬 수 있습니다.
- NUMA 튜닝 으로 vCPU 성능이 향상될 수 있습니다.
- 가상 네트워킹 은 다양한 방법으로 최적화할 수 있습니다.
VM 성능 튜닝은 다른 가상화 기능에 부정적인 영향을 미칠 수 있습니다. 예를 들어 수정된 VM 마이그레이션을 더 어렵게 만들 수 있습니다.
18.2. TuneD를 사용하여 가상 머신 성능 최적화
TuneD
유틸리티는 CPU 집약적인 작업 또는 스토리지 네트워크 처리량 대응에 대한 요구 사항과 같은 특정 워크로드 특성에 맞게 RHEL을 조정하는 튜닝 프로필 전달 메커니즘입니다. 성능을 향상시키고 여러 가지 특정 사용 사례에서 전력 소비를 줄이기 위해 사전 구성된 여러 튜닝 프로필을 제공합니다. 이러한 프로필을 편집하거나 새 프로필을 생성하여 가상화 환경을 포함하여 환경에 맞는 성능 솔루션을 생성할 수 있습니다.
가상화를 위해 RHEL 10을 최적화하려면 다음 프로필을 사용하십시오.
-
RHEL 10 가상 머신의 경우 virtual-guest 프로필을 사용합니다. 일반적으로 적용 가능한
throughput-performance
프로필을 기반으로 하지만 가상 메모리의 스왑 속도도 줄어듭니다. - RHEL 10 가상화 호스트의 경우 virtual-host 프로필을 사용합니다. 이를 통해 더티 메모리 페이지를 더 공격적으로 다시 작성하여 호스트 성능에 도움이 됩니다.
프로세스
특정 TuneD
프로필을 활성화하려면 다음을 수행합니다.
사용 가능한
TuneD
프로필을 나열합니다.tuned-adm list
# tuned-adm list Available profiles: - balanced - General non-specialized TuneD profile - desktop - Optimize for the desktop use-case [...] - virtual-guest - Optimize for running inside a virtual guest - virtual-host - Optimize for running KVM guests Current active profile: balanced
Copy to Clipboard Copied! -
선택 사항: 새
TuneD
프로필을 생성하거나 기존TuneD
프로필을 편집합니다. TuneD
프로필을 활성화합니다.tuned-adm profile selected-profile
# tuned-adm profile selected-profile
Copy to Clipboard Copied! 가상화 호스트를 최적화하려면 virtual-host 프로필을 사용합니다.
tuned-adm profile virtual-host
# tuned-adm profile virtual-host
Copy to Clipboard Copied! RHEL 게스트 운영 체제에서 virtual-guest 프로필을 사용합니다.
tuned-adm profile virtual-guest
# tuned-adm profile virtual-guest
Copy to Clipboard Copied!
검증
TuneD
의 활성 프로필을 표시합니다.tuned-adm active
# tuned-adm active Current active profile: virtual-host
Copy to Clipboard Copied! TuneD
프로필 설정이 시스템에 적용되었는지 확인합니다.tuned-adm verify
# tuned-adm verify Verification succeeded, current system settings match the preset profile. See tuned log file ('/var/log/tuned/tuned.log') for details.
Copy to Clipboard Copied!
18.3. 특정 워크로드에 대한 가상 머신 성능 최적화
VM(가상 머신)은 종종 특정 워크로드를 수행하기 위해 전용으로 사용됩니다. 의도한 워크로드에 맞게 구성을 최적화하여 VM의 성능을 향상시킬 수 있습니다.
사용 사례 | IOThread | vCPU pinning | vNUMA pinning | Huge Page | 다중 대기열 |
---|---|---|---|---|---|
데이터베이스 | 데이터베이스 디스크의 경우 | 제공됨* | 제공됨* | 제공됨* | |
가상화된 네트워크 기능(VNF) | 없음 | 제공됨 | 제공됨 | 제공됨 | 예: 다중 대기열 virtio-net을 참조하십시오. |
고성능 컴퓨팅(HPC) | 없음 | 제공됨 | 제공됨 | 제공됨 | 없음 |
백업 서버 | 백업 디스크의 경우 | 없음 | 없음 | 없음 | |
많은 CPU가 있는 VM(기본적으로 32개 이상) | 없음 | 제공됨* | 제공됨* | 없음 | 없음 |
RAM이 큰 VM(기본적으로 128GB 이상) | 없음 | 없음 | 제공됨* | 제공됨 | 없음 |
* VM에 두 개 이상의 NUMA 노드를 사용할 수 있는 충분한 CPU 및 RAM이 있는 경우
VM은 둘 이상의 사용 사례에 적합할 수 있습니다. 이 경우 제안된 모든 구성을 적용해야 합니다.
18.4. 가상 머신 메모리 구성
VM(가상 머신)의 성능을 개선하기 위해 VM에 추가 호스트 RAM을 할당할 수 있습니다. 마찬가지로 호스트 메모리를 다른 VM 또는 작업에 할당할 수 있도록 VM에 할당된 메모리 양을 줄일 수 있습니다.
18.4.1. 메모리 과다 할당
KVM 하이퍼바이저에서 실행되는 VM(가상 머신)에는 할당된 물리적 RAM의 전용 블록이 없습니다. 대신 각 VM은 요청된 경우에만 호스트의 Linux 커널이 메모리를 할당하는 Linux 프로세스로 작동합니다. 또한 호스트의 메모리 관리자는 VM의 메모리를 자체 실제 메모리와 스왑 공간 간에 이동할 수 있습니다. 메모리 과다 할당이 활성화된 경우 커널은 VM 프로세스에서 요청된 메모리 양이 완전히 사용되지 않기 때문에 VM에서 요청하는 것보다 적은 실제 메모리를 할당하도록 결정할 수 있습니다.
기본적으로 메모리 과다 할당은 Linux 커널에서 활성화되며 커널은 VM 요청에 대한 안전한 양의 메모리 과다 할당을 추정합니다. 그러나 메모리 집약적인 워크로드에 대해 자주 과다 할당을 통해 시스템이 불안정해질 수 있습니다.
메모리 과다 할당을 사용하려면 호스트 물리적 머신에 충분한 스왑 공간을 할당해야 하며 호스트 물리 머신 프로세스에 충분한 메모리를 수용할 수 있습니다. 기본 권장 스왑 공간 크기에 대한 자세한 내용은 Red Hat 플랫폼에 권장되는 스왑 크기는 무엇입니까?
호스트에서 메모리 부족을 처리하는 가능한 방법:
- VM당 메모리 할당.
- 호스트에 더 많은 물리적 메모리를 추가합니다.
- 더 큰 스왑 공간을 사용합니다.
VM이 자주 스왑되는 경우 속도가 느려집니다. 또한 오버 커밋으로 인해 시스템이 OOM(메모리 부족)이 발생하여 Linux 커널이 중요한 시스템 프로세스를 종료할 수 있습니다.
장치 할당에서는 메모리 과다 할당이 지원되지 않습니다. 장치 할당을 사용 중인 경우 할당된 장치에서 직접 메모리 액세스(DMA)를 활성화하려면 모든 가상 머신 메모리를 정적으로 할당해야 합니다.
18.4.2. virtio-mem을 사용하여 가상 머신 메모리 추가 및 제거
RHEL 10에서는 virtio-mem
반가상화 메모리 장치를 제공합니다. 이 장치를 사용하면 VM(가상 머신)에서 호스트 메모리를 동적으로 추가하거나 제거할 수 있습니다.
18.4.2.1. virtio-mem 개요
virtio-mem
은 VM(가상 머신)에서 호스트 메모리를 동적으로 추가하거나 제거하는 데 사용할 수 있는 반가상화 메모리 장치입니다. 예를 들어 이 장치를 사용하여 실행 중인 VM 간에 메모리 리소스를 이동하거나 현재 요구 사항에 따라 클라우드 설정에서 VM 메모리 크기를 조정할 수 있습니다.
virtio-mem
을 사용하면 VM의 메모리를 초기 크기 이상으로 늘리고 크기를 4~백 메비바이트(MiB)로 만들 수 있는 단위로 원래 크기로 축소할 수 있습니다. 그러나 virtio-mem
은 특히 메모리를 안정적으로 연결 해제하기 위해 특정 게스트 운영 체제 구성에도 의존합니다.
virtio-mem 기능 제한 사항
virtio-mem
은 현재 다음 기능과 호환되지 않습니다.
- 호스트에서 실시간 애플리케이션에 메모리 잠금 사용
- 호스트에서 암호화된 가상화 사용
-
virtio-mem
과memballoon
인플레이션 및 호스트의 조각 결합 -
VM에서
virtio_mem
드라이버를 언로드하거나 다시 로드 -
virtiofs
를 제외하고 vhost-user 장치 사용
18.4.2.2. 가상 머신에서 메모리 설정
virtio-mem
을 사용하여 실행 중인 가상 머신(메모리 핫플러그라고도 함)에 메모리를 연결하기 전에 가상 머신(VM) 운영 체제를 구성하여 핫플러그 메모리를 온라인 상태로 자동으로 설정해야 합니다. 그렇지 않으면 게스트 운영 체제가 추가 메모리를 사용할 수 없습니다. 메모리 설정에 대해 다음 구성 중 하나를 선택할 수 있습니다.
-
online_movable
-
online_kernel
-
자동 실행 가능
이러한 구성 의 차이점에 대한 자세한 내용은 메모리 위치 지정 구성 비교를 참조하십시오.
메모리 강화는 RHEL에서 기본적으로 udev 규칙으로 구성됩니다. 그러나 virtio-mem
을 사용하는 경우 커널에서 직접 메모리 부여를 구성하는 것이 좋습니다.
사전 요구 사항
- 호스트는 Intel 64, AMD64 또는 ARM 64 CPU 아키텍처를 사용합니다.
- 호스트는 RHEL 9.4 이상을 운영 체제로 사용합니다.
호스트에서 실행되는 VM은 다음 운영 체제 버전 중 하나를 사용합니다.
RHEL 8.10
중요RHEL 8.10 VM에서는 실행 중인 VM에서 메모리 연결을 해제하는 것이 기본적으로 비활성화되어 있습니다.
- RHEL 9
- RHEL 10
프로세스
VM에서
online_movable
구성을 사용하도록 메모리 설정:memhp_default_state
커널 명령행 매개변수를online_movable
:로 설정합니다.grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_movable
# grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_movable
Copy to Clipboard Copied! - VM을 재부팅합니다.
VM에서
online_kernel
구성을 사용하도록 메모리 설정:memhp_default_state
커널 명령줄 매개 변수를online_kernel
:로 설정합니다.grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_kernel
# grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_kernel
Copy to Clipboard Copied! - VM을 재부팅합니다.
VM에서
자동 이동식
메모리 설정 정책을 사용하려면 다음을 수행합니다.memhp_default_state
커널 명령행 매개변수를online
로 설정합니다.grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online
# grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online
Copy to Clipboard Copied! memory_hotplug.online_policy
커널 명령줄 매개 변수를auto-movable
:로 설정합니다.grubby --update-kernel=ALL --remove-args="memory_hotplug.online_policy" --args=memory_hotplug.online_policy=auto-movable
# grubby --update-kernel=ALL --remove-args="memory_hotplug.online_policy" --args=memory_hotplug.online_policy=auto-movable
Copy to Clipboard Copied! 선택 사항:
auto-movable
설정 정책을 추가로 조정하려면memory_hotplug.auto_movable_ratio
및memory_hotplug.auto_movable_numa_aware
매개변수를 변경합니다.grubby --update-kernel=ALL --remove-args="memory_hotplug.auto_movable_ratio" --args=memory_hotplug.auto_movable_ratio=<percentage> grubby --update-kernel=ALL --remove-args="memory_hotplug.memory_auto_movable_numa_aware" --args=memory_hotplug.auto_movable_numa_aware=<y/n>
# grubby --update-kernel=ALL --remove-args="memory_hotplug.auto_movable_ratio" --args=memory_hotplug.auto_movable_ratio=<percentage> # grubby --update-kernel=ALL --remove-args="memory_hotplug.memory_auto_movable_numa_aware" --args=memory_hotplug.auto_movable_numa_aware=<y/n>
Copy to Clipboard Copied! -
memory_hotplug.auto_movable_ratio 매개변수는
모든 할당에 사용 가능한 메모리와 비교하여 이동 가능한 할당에만 사용할 수 있는 최대 메모리 비율을 설정합니다. 비율은 백분율로 표시되고 기본값은 301 (%)이며 이는 3 : 1 비율입니다. memory_hotplug.auto_movable_numa_aware
매개변수는memory_hotplug.auto_movable_ratio
매개변수가 모든 사용 가능한 NUMA 노드의 메모리에 적용되거나 단일 NUMA 노드 내의 메모리에만 적용되는지 여부를 제어합니다. 기본값은 y (yes)입니다.예를 들어, 최대 비율이 301%로 설정되고
memory_hotplug.auto_movable_numa_aware
가 y (yes)로 설정된 경우, 연결된virtio-mem
장치가 있는 NUMA 노드 내에서도 적용됩니다. 매개변수가 n (아니오)로 설정된 경우 최대 3:1 비율은 전체 NUMA 노드에만 적용됩니다.또한 비율이 초과되지 않은 경우 새로 핫플러그된 메모리는 이동 가능한 할당에만 사용할 수 있습니다. 그렇지 않으면 이동 가능 및 실행 불가능한 할당 모두에 새로 핫플러그된 메모리를 사용할 수 있습니다.
-
- VM을 재부팅합니다.
검증
online_movable
구성이 올바르게 설정되었는지 확인하려면memhp_default_state
커널 매개변수의 현재 값을 확인합니다.cat /sys/devices/system/memory/auto_online_blocks online_movable
# cat /sys/devices/system/memory/auto_online_blocks online_movable
Copy to Clipboard Copied! online_kernel
구성이 올바르게 설정되었는지 확인하려면memhp_default_state
커널 매개변수의 현재 값을 확인합니다.cat /sys/devices/system/memory/auto_online_blocks online_kernel
# cat /sys/devices/system/memory/auto_online_blocks online_kernel
Copy to Clipboard Copied! 자동 이동식
구성이 올바르게 설정되었는지 확인하려면 다음 커널 매개변수를 확인합니다.memhp_default_state
:cat /sys/devices/system/memory/auto_online_blocks online
# cat /sys/devices/system/memory/auto_online_blocks online
Copy to Clipboard Copied! memory_hotplug.online_policy
:cat /sys/module/memory_hotplug/parameters/online_policy auto-movable
# cat /sys/module/memory_hotplug/parameters/online_policy auto-movable
Copy to Clipboard Copied! memory_hotplug.auto_movable_ratio
:cat /sys/module/memory_hotplug/parameters/auto_movable_ratio 301
# cat /sys/module/memory_hotplug/parameters/auto_movable_ratio 301
Copy to Clipboard Copied! memory_hotplug.auto_movable_numa_aware
:cat /sys/module/memory_hotplug/parameters/auto_movable_numa_aware y
# cat /sys/module/memory_hotplug/parameters/auto_movable_numa_aware y
Copy to Clipboard Copied!
18.4.2.3. 가상 머신에 virtio-mem 장치 연결
실행 중인 가상 시스템(메모리 핫플러그라고도 함)에 추가 메모리를 연결하고 핫플러그 메모리의 크기를 조정하려면 virtio-mem
장치를 사용할 수 있습니다. 특히 libvirt XML 구성 파일과 virsh
명령을 사용하여 virtio-mem
장치를 정의하고 VM(가상 머신)에 연결할 수 있습니다.
사전 요구 사항
- 호스트는 Intel 64, AMD64 또는 ARM 64 CPU 아키텍처를 사용합니다.
- 호스트는 RHEL 9.4 이상을 운영 체제로 사용합니다.
호스트에서 실행되는 VM은 다음 운영 체제 버전 중 하나를 사용합니다.
RHEL 8.10
중요RHEL 8.10 VM에서는 실행 중인 VM에서 메모리 연결을 해제하는 것이 기본적으로 비활성화되어 있습니다.
- RHEL 9
- RHEL 10
- VM에 메모리 강화가 구성되어 있습니다. 자세한 내용은 가상 머신의 메모리 설정 구성을참조하십시오.
프로세스
대상 VM의 XML 구성에
maxMemory
매개변수가 포함되어 있는지 확인합니다.virsh edit testguest1
# virsh edit testguest1 <domain type='kvm'> <name>testguest1</name> ... <maxMemory unit='GiB'>128</maxMemory> ... </domain>
Copy to Clipboard Copied! 이 예제에서
testguest1
VM의 XML 구성은 128GB(GiB) 크기의maxMemory
매개변수를 정의합니다.maxMemory
크기는 VM에서 사용할 수 있는 최대 메모리를 지정합니다. 여기에는 초기 및 핫플러그된 메모리가 모두 포함됩니다.XML 파일을 생성하고 열어 호스트에
virtio-mem
장치를 정의합니다. 예를 들면 다음과 같습니다.vim virtio-mem-device.xml
# vim virtio-mem-device.xml
Copy to Clipboard Copied! virtio-mem
장치의 XML 정의를 파일에 추가하고 저장합니다.<memory model='virtio-mem'> <target> <size unit='GiB'>48</size> <node>0</node> <block unit='MiB'>2</block> <requested unit='GiB'>16</requested> <current unit='GiB'>16</current> </target> <alias name='ua-virtiomem0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </memory> <memory model='virtio-mem'> <target> <size unit='GiB'>48</size> <node>1</node> <block unit='MiB'>2</block> <requested unit='GiB'>0</requested> <current unit='GiB'>0</current> </target> <alias name='ua-virtiomem1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </memory>
<memory model='virtio-mem'> <target> <size unit='GiB'>48</size> <node>0</node> <block unit='MiB'>2</block> <requested unit='GiB'>16</requested> <current unit='GiB'>16</current> </target> <alias name='ua-virtiomem0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </memory> <memory model='virtio-mem'> <target> <size unit='GiB'>48</size> <node>1</node> <block unit='MiB'>2</block> <requested unit='GiB'>0</requested> <current unit='GiB'>0</current> </target> <alias name='ua-virtiomem1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </memory>
Copy to Clipboard Copied! 이 예에서는 두 개의
virtio-mem
장치는 다음 매개변수를 사용하여 정의됩니다.-
size
: 장치의 최대 크기입니다. 이 예제에서는 48GiB입니다.크기는
블록
크기의 배수여야 합니다. -
node
:virtio-mem
장치에 할당된 vNUMA 노드입니다. -
block
: 장치의 블록 크기입니다. Intel 64 및 AMD64 CPU 아키텍처에서는 최소 THP(Transparent Huge Page) 크기여야 합니다. ARM64 아키텍처에서 THP 크기는 기본 페이지 크기에 따라 2MiB 또는 512MiB일 수 있습니다. Intel 64 또는 AMD64 아키텍처의 2MiB 블록 크기는 일반적으로 좋은 선택입니다. VFIO(가상 기능 I/O) 또는 중재 장치(mdev) 와 함께virtio-mem
을 사용하는 경우 모든virtio-mem
장치의 총 블록 수가 32768보다 크지 않아야 합니다. 그렇지 않으면 RAM 연결이 실패할 수 있습니다. -
requested
:virtio-mem
장치를 사용하여 VM에 연결하는 메모리 양입니다. 그러나 VM에 대한 요청일 뿐이며 VM이 올바르게 구성되지 않은 경우와 같이 성공적으로 해결되지 않을 수 있습니다.requested
크기는block
크기의 배수여야 하며 정의된 최대size
를 초과할 수 없습니다. -
Current
:virtio-mem
장치가 VM에 제공하는 현재 크기를 나타냅니다.현재
크기는 요청을 완료할 수 없거나 VM을 재부팅할 때와 같이요청된
크기와 다를 수 있습니다. alias
: 이 별칭은 원하는virtio-mem
장치를 지정하는 데 사용할 수 있는 선택적 사용자 정의 별칭입니다(예: libvirt 명령으로 장치를 편집할 때). libvirt의 모든 사용자 정의 별칭은 "ua-" 접두사로 시작해야 합니다.libvirt
는 이러한 특정 매개 변수 외에도 다른 PCI 장치와 마찬가지로virtio-mem
장치를 처리합니다.
-
XML 파일을 사용하여 정의된
virtio-mem
장치를 VM에 연결합니다. 예를 들어virtio-mem-device.xml
에 정의된 두 장치를 실행 중인testguest1
VM에 영구적으로 연결하려면 다음을 수행합니다.virsh attach-device testguest1 virtio-mem-device.xml --live --config
# virsh attach-device testguest1 virtio-mem-device.xml --live --config
Copy to Clipboard Copied! --live
옵션은 부팅 간 지속성 없이 실행 중인 VM에만 장치를 연결합니다.--config
옵션을 사용하면 구성을 영구적으로 변경합니다.--live
옵션 없이 시스템을 종료 VM에 연결할 수도 있습니다.선택 사항: 실행 중인 VM에 연결된
virtio-mem
장치의requested
크기를 동적으로 변경하려면virsh update-memory-device
명령을 사용합니다.virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 4GiB
# virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 4GiB
Copy to Clipboard Copied! 이 예제에서는 다음을 수행합니다.
-
testguest1
은 업데이트할 VM입니다. -
--alias ua-virtiomem0
은 이전에 정의된 별칭으로 지정된virtio-mem
장치입니다. --requested-size 4GiB
는virtio-mem
장치의requested
크기를 4GiB로 변경합니다.주의요청된 크기를 줄임으로써 실행 중인 VM에서 메모리를 분리하면
신뢰할 수 없습니다. 이 프로세스가 성공했는지 여부는 사용되는 메모리 전달 정책과 같은 다양한 요인에 따라 달라집니다.핫플러그 메모리 양을 변경할 수 없기 때문에 게스트 운영 체제가 요청을 성공적으로 완료할 수 없는 경우도 있습니다.
또한 RHEL 8.10 VM에서는 실행 중인 VM에서 메모리 연결을 해제하는 것이 기본적으로 비활성화되어 있습니다.
-
선택 사항: 종료 VM에서
virtio-mem
장치를 분리하려면virsh detach-device
명령을 사용합니다.virsh detach-device testguest1 virtio-mem-device.xml
# virsh detach-device testguest1 virtio-mem-device.xml
Copy to Clipboard Copied! 선택 사항: 실행 중인 VM에서
virtio-mem
장치를 분리하려면 다음을 수행합니다.virtio-mem
장치의요청된
크기를 0으로 변경합니다. 그러지 않으면 실행 중인 VM에서virtio-mem
장치를 분리하려는 시도가 실패합니다.virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 0
# virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 0
Copy to Clipboard Copied! 실행 중인 VM에서
virtio-mem
장치를 분리합니다.virsh detach-device testguest1 virtio-mem-device.xml --config
# virsh detach-device testguest1 virtio-mem-device.xml --config
Copy to Clipboard Copied!
검증
VM에서 사용 가능한 RAM을 확인하고 총 크기에 핫플러그 메모리가 포함되어 있는지 확인합니다.
free -h
# free -h total used free shared buff/cache available Mem: 31Gi 5.5Gi 14Gi 1.3Gi 11Gi 23Gi Swap: 8.0Gi 0B 8.0Gi
Copy to Clipboard Copied! numactl -H
# numactl -H available: 1 nodes (0) node 0 cpus: 0 1 2 3 4 5 6 7 node 0 size: 29564 MB node 0 free: 13351 MB node distances: node 0 0: 10
Copy to Clipboard Copied! 현재 플러그인 RAM 양은 실행 중인 VM의 XML 구성을 표시하여 호스트에서도 볼 수 있습니다.
virsh dumpxml testguest1
# virsh dumpxml testguest1 <domain type='kvm'> <name>testguest1</name> ... <currentMemory unit='GiB'>31</currentMemory> ... <memory model='virtio-mem'> <target> <size unit='GiB'>48</size> <node>0</node> <block unit='MiB'>2</block> <requested unit='GiB'>16</requested> <current unit='GiB'>16</current> </target> <alias name='ua-virtiomem0'/> <address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x0'/> ... </domain>
Copy to Clipboard Copied! 이 예제에서는 다음을 수행합니다.
-
<currentMemory unit='GiB'>31</currentMemory>
은 모든 소스의 VM에서 사용 가능한 총 RAM을 나타냅니다. -
<current unit='GiB'>16</current
>는virtio-mem
장치에서 제공하는 플러그인 RAM의 현재 크기를 나타냅니다.
-
18.4.2.4. 메모리 설정 비교
실행 중인 RHEL 가상 머신(메모리 핫플러그라고도 함)에 메모리를 연결할 때 핫플러그 메모리를 VM(가상 머신) 운영 체제의 온라인 상태로 설정해야 합니다. 그렇지 않으면 시스템이 메모리를 사용할 수 없습니다.
다음 표에는 사용 가능한 메모리 설정 중에서 선택할 때 고려해야 할 사항이 요약되어 있습니다.
구성 이름 | VM에서 메모리 연결 해제 | 메모리 영역의 불균형을 생성할 수 있는 위험 | 잠재적 사용 사례 | 의도된 워크로드의 메모리 요구 사항 |
---|---|---|---|---|
| 핫플러그 메모리는 안정적으로 연결 해제될 수 있습니다. | 제공됨 | 비교적 적은 양의 메모리를 핫플러그 | 대부분의 사용자 공간 메모리 |
| 핫플러그 메모리의 이동 가능한 부분은 안정적으로 연결되지 않을 수 있습니다. | 최소 | 대량의 메모리 핫플러그 | 대부분의 사용자 공간 메모리 |
| 핫플러그된 메모리는 안정적으로 연결 해제될 수 없습니다. | 없음 | 신뢰할 수 없는 메모리 연결 해제가 허용됩니다. | 사용자 공간 또는 커널 공간 메모리 |
영역의 불균형은 Linux 메모리 영역 중 하나에서 사용 가능한 메모리 페이지가 없다는 것입니다. 영역의 불균형은 시스템 성능에 부정적인 영향을 미칠 수 있습니다. 예를 들어, 불가능한 할당에 대해 사용 가능한 메모리가 부족하면 커널이 충돌할 수 있습니다. 일반적으로 이동 가능한 할당에는 대부분 사용자 공간 메모리 페이지가 포함되어 있으며 불가능한 할당에는 대부분 커널 공간 메모리 페이지가 포함됩니다.
18.4.3. 웹 콘솔을 사용하여 가상 머신 메모리 추가 및 제거
VM(가상 머신)의 성능을 개선하거나 사용 중인 호스트 리소스를 확보하기 위해 웹 콘솔을 사용하여 VM에 할당된 메모리 양을 조정할 수 있습니다.
memballoon
장치만 사용하여 IBM Z 시스템의 VM에 할당된 메모리 양을 조정합니다. 다른 모든 시스템에서 가상 머신 메모리 추가 및 제거에 권장되는 솔루션은 virtio-mem
장치를 사용하는 것입니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
게스트 OS는 메모리 balloon 드라이버를 실행하고 있습니다. 이러한 경우를 확인하려면 다음을 수행합니다.
VM 구성에
memballoon
장치가 포함되어 있는지 확인합니다.virsh dumpxml testguest | grep memballoon
# virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon>
Copy to Clipboard Copied! 이 명령이 출력을 표시하고 모델이
none
으로 설정되지 않으면memballoon
장치가 있습니다.게스트 OS에서 balloon 드라이버가 실행 중인지 확인합니다.
-
Windows 게스트에서 드라이버는
virtio-win
드라이버 패키지의 일부로 설치됩니다. 자세한 내용은 Windows 가상 머신용 KVM 반가상화 드라이버 설치를 참조하십시오.
-
Windows 게스트에서 드라이버는
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
선택 사항: VM에 대해 최대 메모리 및 현재 사용된 메모리에 대한 정보를 가져옵니다. 이는 변경 사항 및 확인을 위한 기준 역할을 합니다.
virsh dominfo testguest
# virsh dominfo testguest Max memory: 2097152 KiB Used memory: 2097152 KiB
Copy to Clipboard Copied!
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
VM의 그래픽 인터페이스에 액세스하기 위한 선택한 VM 및 콘솔 섹션에 대한 기본 정보가 포함된 개요 섹션이 포함된 새 페이지가 열립니다.
개요 창에서
메모리
행 옆에 있는 클릭합니다.메모리 조정
대화 상자가 표시됩니다.선택한 VM의 가상 메모리를 구성합니다.
최대 할당 - VM이 프로세스에 사용할 수 있는 최대 호스트 메모리 양을 설정합니다. VM을 만들거나 나중에 늘릴 때 최대 메모리를 지정할 수 있습니다. 메모리를 MiB 또는 GiB의 배수로 지정할 수 있습니다.
VM 종료 시에만 최대 메모리 할당을 조정할 수 있습니다.
현재 할당 - VM에 할당된 실제 메모리 양을 설정합니다. 이 값은 최대 할당보다 작을 수 있지만 초과할 수 없습니다. 해당 프로세스에 대해 VM에서 사용할 수 있는 메모리를 규제하도록 값을 조정할 수 있습니다. 메모리를 MiB 또는 GiB의 배수로 지정할 수 있습니다.
이 값을 지정하지 않으면 기본 할당은 최대 할당 값입니다.
VM의 메모리 할당이 조정됩니다.
18.4.4. 명령줄을 사용하여 가상 머신 메모리 추가 및 제거
VM(가상 머신)의 성능을 개선하거나 사용 중인 호스트 리소스를 확보하기 위해 CLI를 사용하여 memballoon
장치를 사용하여 VM에 할당된 메모리 양을 조정할 수 있습니다.
memballoon
장치만 사용하여 IBM Z 시스템의 VM에 할당된 메모리 양을 조정합니다. 다른 모든 시스템에서 가상 머신 메모리 추가 및 제거에 권장되는 솔루션은 virtio-mem
장치를 사용하는 것입니다.
사전 요구 사항
게스트 OS는 메모리 balloon 드라이버를 실행하고 있습니다. 이러한 경우를 확인하려면 다음을 수행합니다.
VM 구성에
memballoon
장치가 포함되어 있는지 확인합니다.virsh dumpxml testguest | grep memballoon
# virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon>
Copy to Clipboard Copied! 이 명령이 출력을 표시하고 모델이
none
으로 설정되지 않으면memballoon
장치가 있습니다.게스트 OS에서 ballon 드라이버가 실행 중인지 확인합니다.
-
Windows 게스트에서 드라이버는
virtio-win
드라이버 패키지의 일부로 설치됩니다. 자세한 내용은 Windows 가상 머신용 KVM 반가상화 드라이버 설치를 참조하십시오.
-
Windows 게스트에서 드라이버는
프로세스
선택 사항: VM에 대해 최대 메모리 및 현재 사용된 메모리에 대한 정보를 가져옵니다. 이는 변경 사항 및 확인을 위한 기준 역할을 합니다.
virsh dominfo testguest
# virsh dominfo testguest Max memory: 2097152 KiB Used memory: 2097152 KiB
Copy to Clipboard Copied! VM에 할당된 최대 메모리를 조정합니다. 이 값을 늘리면 VM의 성능 가능성이 향상되고 값을 줄이면 VM이 호스트의 성능 공간을 줄일 수 있습니다. 이 변경 사항은 종료 VM에서만 수행할 수 있으므로 실행 중인 VM을 조정하려면 재부팅이 필요합니다.
예를 들어 testguest VM에서 사용할 수 있는 최대 메모리를 4096MiB로 변경하려면 다음을 수행합니다.
virt-xml testguest --edit --memory memory=4096,currentMemory=4096
# virt-xml testguest --edit --memory memory=4096,currentMemory=4096 Domain 'testguest' defined successfully. Changes will take effect after the domain is fully powered off.
Copy to Clipboard Copied! 실행 중인 VM의 최대 메모리를 늘리려면 VM에 메모리 장치를 연결할 수 있습니다. 이를 메모리 핫 플러그 라고도 합니다.
주의실행 중인 VM(메모리 핫 언플러그라고도 함)에서
memballoon
메모리 장치를 제거하는 것은 지원되지 않으며 Red Hat은 권장되지 않습니다.선택 사항: VM에서 현재 사용하는 메모리를 최대 할당까지 조정할 수도 있습니다. 이렇게 하면 최대 VM 할당을 변경하지 않고 다음 재부팅까지 VM에서 보유한 메모리 로드가 조정됩니다.
virsh setmem testguest --current 2048
# virsh setmem testguest --current 2048
Copy to Clipboard Copied!
검증
VM에서 사용하는 메모리가 업데이트되었는지 확인합니다.
virsh dominfo testguest
# virsh dominfo testguest Max memory: 4194304 KiB Used memory: 2097152 KiB
Copy to Clipboard Copied! 선택 사항: 현재 VM 메모리를 조정하면 VM의 메모리 balloon 통계를 가져와 메모리 사용을 얼마나 효과적으로 규제하는지 평가할 수 있습니다.
virsh domstats --balloon testguest
# virsh domstats --balloon testguest Domain: 'testguest' balloon.current=365624 balloon.maximum=4194304 balloon.swap_in=0 balloon.swap_out=0 balloon.major_fault=306 balloon.minor_fault=156117 balloon.unused=3834448 balloon.available=4035008 balloon.usable=3746340 balloon.last-update=1587971682 balloon.disk_caches=75444 balloon.hugetlb_pgalloc=0 balloon.hugetlb_pgfail=0 balloon.rss=1005456
Copy to Clipboard Copied!
18.4.5. 대규모 페이지를 사용하도록 가상 머신 구성
특정 사용 사례에서는 기본 4KiB 메모리 페이지 대신 대규모 페이지를 사용하여 VM(가상 머신)의 메모리 할당을 개선할 수 있습니다. 예를 들어 대규모 페이지는 데이터베이스 서버와 같은 메모리 사용률이 높은 VM의 성능을 향상시킬 수 있습니다.
사전 요구 사항
- 호스트는 메모리 할당에 대규모 페이지를 사용하도록 구성됩니다.
프로세스
- 실행 중인 경우 선택한 VM을 종료합니다.
선택한 VM의 XML 구성을 엽니다. 예를 들어
testguest
VM을 편집하려면 다음 명령을 실행합니다.virsh edit testguest
# virsh edit testguest
Copy to Clipboard Copied! VM의 대규모 페이지 구성을 조정합니다. 예를 들어 1GiB 대규모 페이지를 사용하도록 VM을 구성하려면 구성의 <
memoryBacking> 섹션에
다음 행을 추가합니다.<memoryBacking> <hugepages> <page size='1' unit='GiB'/> </hugepages> </memoryBacking>
<memoryBacking> <hugepages> <page size='1' unit='GiB'/> </hugepages> </memoryBacking>
Copy to Clipboard Copied!
검증
- VM을 시작합니다.
호스트에서 실행 중인 VM에 대규모 페이지를 성공적으로 할당했는지 확인합니다. 호스트에서 다음 명령을 실행합니다.
cat /proc/meminfo | grep Huge HugePages_Total: 4 HugePages_Free: 2 HugePages_Rsvd: 1 Hugepagesize: 1024000 kB
# cat /proc/meminfo | grep Huge HugePages_Total: 4 HugePages_Free: 2 HugePages_Rsvd: 1 Hugepagesize: 1024000 kB
Copy to Clipboard Copied! 무료 및 예약된 대규모 페이지(
HugePages_Free
+HugePages_Rsvd
)를 함께 추가하면 결과는 대규모 페이지 수(HugePages_Total
)보다 작아야 합니다. 차이점은 실행 중인 VM에서 사용하는 대규모 페이지 수입니다.
18.5. 가상 머신 I/O 성능 최적화
VM(가상 머신)의 입력 및 출력(I/O) 기능은 VM의 전체 효율성을 크게 제한할 수 있습니다. 이를 해결하기 위해 블록 I/O 매개변수를 구성하여 VM의 I/O를 최적화할 수 있습니다.
18.5.1. 가상 머신에서 블록 I/O 튜닝
하나 이상의 VM에서 여러 블록 장치를 사용하는 경우 I/O weights 를 수정하여 특정 가상 장치의 I/O 우선 순위를 조정하는 것이 중요할 수 있습니다.
장치의 I/O 가중치를 늘리면 I/O 대역폭의 우선 순위가 증가하므로 더 많은 호스트 리소스를 제공합니다. 마찬가지로, 장치의 가중치를 줄이면 호스트 리소스가 적게 소비됩니다.
각 장치의 가중치
값은 100
~1000
범위 내에 있어야 합니다. 또는 값은 장치별 목록에서 해당 장치를 제거하는 0
일 수 있습니다.
프로세스
VM의 블록 I/O 매개변수를 표시하고 설정하려면 다음을 수행합니다.
VM의 현재 &
lt;blkio
> 매개변수를 표시합니다.# virsh dumpxml VM-name
<domain> [...] <blkiotune> <weight>800</weight> <device> <path>/dev/sda</path> <weight>1000</weight> </device> <device> <path>/dev/sdb</path> <weight>500</weight> </device> </blkiotune> [...] </domain>
<domain> [...] <blkiotune> <weight>800</weight> <device> <path>/dev/sda</path> <weight>1000</weight> </device> <device> <path>/dev/sdb</path> <weight>500</weight> </device> </blkiotune> [...] </domain>
Copy to Clipboard Copied! 지정된 장치의 I/O 가중치를 편집합니다.
virsh blkiotune VM-name --device-weights device, I/O-weight
# virsh blkiotune VM-name --device-weights device, I/O-weight
Copy to Clipboard Copied! 예를 들어, 다음에서는 testguest1 VM의 /dev/sda 장치의 가중치를 500으로 변경합니다.
virsh blkiotune testguest1 --device-weights /dev/sda, 500
# virsh blkiotune testguest1 --device-weights /dev/sda, 500
Copy to Clipboard Copied!
검증
VM의 블록 I/O 매개변수가 올바르게 구성되었는지 확인합니다.
virsh blkiotune testguest1
# virsh blkiotune testguest1 Block I/O tuning parameters for domain testguest1: weight : 800 device_weight : [ {"sda": 500}, ] ...
Copy to Clipboard Copied! 중요특정 커널은 특정 장치의 I/O 가중치 설정을 지원하지 않습니다. 이전 단계에서 가중치가 예상대로 표시되지 않으면 이 기능이 호스트 커널과 호환되지 않을 수 있습니다.
18.5.2. 가상 머신의 디스크 I/O 제한
여러 VM이 동시에 실행되면 과도한 디스크 I/O를 사용하여 시스템 성능을 방해할 수 있습니다. KVM 가상화의 디스크 I/O 제한은 VM에서 호스트 머신으로 전송된 디스크 I/O 요청에 제한을 설정할 수 있는 기능을 제공합니다. 이렇게 하면 VM에서 공유 리소스를 과도하게 활용하고 다른 VM의 성능에 영향을 미치는 것을 방지할 수 있습니다.
디스크 I/O 제한을 활성화하려면 VM에 연결된 각 블록 장치에서 호스트 시스템에 연결된 디스크 I/O 요청에 대한 제한을 설정합니다.
프로세스
virsh domblklist
명령을 사용하여 지정된 VM에 있는 모든 디스크 장치의 이름을 나열합니다.virsh domblklist testguest1
# virsh domblklist testguest1 Target Source ------------------------------------------------ vda /var/lib/libvirt/images/testguest1.qcow2 sda - sdb /home/sample-disk.iso
Copy to Clipboard Copied! throttle이 마운트되는 가상 디스크가 마운트된 호스트 블록 장치를 찾습니다.
예를 들어 이전 단계의
sdb
가상 디스크를 제한하려면 다음 출력에서 디스크가/dev/nvme0n1p3
파티션에 마운트되었음을 보여줍니다.lsblk
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT zram0 252:0 0 4G 0 disk [SWAP] nvme0n1 259:0 0 238.5G 0 disk ├─nvme0n1p1 259:1 0 600M 0 part /boot/efi ├─nvme0n1p2 259:2 0 1G 0 part /boot └─nvme0n1p3 259:3 0 236.9G 0 part └─luks-a1123911-6f37-463c-b4eb-fxzy1ac12fea 253:0 0 236.9G 0 crypt /home
Copy to Clipboard Copied! virsh blkiotune
명령을 사용하여 블록 장치의 I/O 제한을 설정합니다.virsh blkiotune VM-name --parameter device,limit
# virsh blkiotune VM-name --parameter device,limit
Copy to Clipboard Copied! 다음 예제에서는
testguest1
VM의sdb
디스크를 초당 1000개의 읽기 및 쓰기 작업과 초당 50MB의 읽기 및 쓰기 처리량으로 제한합니다.virsh blkiotune testguest1 --device-read-iops-sec /dev/nvme0n1p3,1000 --device-write-iops-sec /dev/nvme0n1p3,1000 --device-write-bytes-sec /dev/nvme0n1p3,52428800 --device-read-bytes-sec /dev/nvme0n1p3,52428800
# virsh blkiotune testguest1 --device-read-iops-sec /dev/nvme0n1p3,1000 --device-write-iops-sec /dev/nvme0n1p3,1000 --device-write-bytes-sec /dev/nvme0n1p3,52428800 --device-read-bytes-sec /dev/nvme0n1p3,52428800
Copy to Clipboard Copied!
추가 리소스
- 디스크 I/O 제한은 다양한 상황에서 유용할 수 있습니다(예: 서로 다른 고객에 속하는 VM이 동일한 호스트에서 실행 중이거나 다른 VM에 대한 서비스 품질 보장이 제공되는 경우). 디스크 I/O 제한은 느린 디스크를 시뮬레이션하는 데에도 사용할 수 있습니다.
- I/O 제한은 VM에 연결된 각 블록 장치에 독립적으로 적용할 수 있으며 처리량 및 I/O 작업에 대한 제한을 지원합니다.
-
Red Hat은
virsh blkdeviotune
명령을 사용하여 VM에서 I/O 제한을 구성하는 것을 지원하지 않습니다.
18.5.3. 스토리지 장치에서 다중 대기열 활성화
VM(가상 시스템)에서 virtio-blk
또는 virtio-scsi
스토리지 장치를 사용하는 경우 멀티 큐 기능을 통해 스토리지 성능과 확장성을 개선할 수 있습니다. 각 vCPU(가상 CPU)가 다른 vCPU에 영향을 주지 않고 별도의 대기열과 인터럽트를 사용할 수 있도록 합니다.
멀티 큐 기능은 Q35
시스템 유형에 대해 기본적으로 활성화되어 있지만 i440fx
머신 유형에서는 수동으로 활성화해야 합니다. 워크로드에 최적의 대기열 수를 조정할 수 있지만 각 워크로드 유형에 따라 최적의 수가 다르며 경우에 가장 적합한 대기열 수를 테스트해야 합니다.
프로세스
스토리지 장치에서
다중 큐
를 활성화하려면 VM의 XML 구성을 편집합니다.virsh edit <example_vm>
# virsh edit <example_vm>
Copy to Clipboard Copied! XML 구성에서 의도한 스토리지 장치를 찾고 여러 I/O 대기열을 사용하도록
queues
매개변수를 변경합니다. N 을 VM의 vCPU 수(최대 16개)로 바꿉니다.virtio-blk
예제:<disk type='block' device='disk'> <driver name='qemu' type='raw' queues='N'/> <source dev='/dev/sda'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk>
<disk type='block' device='disk'> <driver name='qemu' type='raw' queues='N'/> <source dev='/dev/sda'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk>
Copy to Clipboard Copied! virtio-scsi
예:<controller type='scsi' index='0' model='virtio-scsi'> <driver queues='N' /> </controller>
<controller type='scsi' index='0' model='virtio-scsi'> <driver queues='N' /> </controller>
Copy to Clipboard Copied!
- 변경 사항을 적용하려면 VM을 다시 시작합니다.
18.5.4. 전용 IOThreads 구성
VM(가상 머신)에서 디스크의 I/O(입력/출력) 성능을 개선하기 위해 VM 디스크의 IO 작업을 관리하는 데 사용되는 전용 IOThread
를 구성할 수 있습니다.
일반적으로 디스크의 I/O 작업은 기본 QEMU 스레드의 일부이므로 집중적 I/O 워크로드 중에 VM의 응답성을 줄일 수 있습니다. I/O 작업을 전용 IOThread
로 분리하면 VM의 응답성 및 성능을 크게 높일 수 있습니다.
프로세스
- 실행 중인 경우 선택한 VM을 종료합니다.
호스트에서 VM의 XML 구성에서 <
;iothreads
> 태그를 추가하거나 편집합니다. 예를 들어testguest1
VM에 대한 단일IOThread
를 생성하려면 다음을 수행합니다.virsh edit <testguest1>
# virsh edit <testguest1> <domain type='kvm'> <name>testguest1</name> ... <vcpu placement='static'>8</vcpu> <iothreads>1</iothreads> ... </domain>
Copy to Clipboard Copied! 참고최적의 결과를 얻으려면 호스트에서 CPU당 1-2개의
IOThreads
만 사용합니다.VM 디스크에 전용
IOThread
를 할당합니다. 예를 들어 ID가 1인IOThread
를testguest
VM의 디스크에 할당하려면 다음을 수행합니다.1
virsh edit <testguest1>
# virsh edit <testguest1> <domain type='kvm'> <name>testguest1</name> ... <devices> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none' io='native' iothread='1'/> <source file='/var/lib/libvirt/images/test-disk.raw'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </disk> ... </devices> ... </domain>
Copy to Clipboard Copied! 참고IOThread
ID는 1에서 시작하며 단일IOThread
만 디스크에만 사용해야 합니다.일반적으로 최적의 성능을 위해 VM당 하나의 전용
IOThread
로 충분합니다.virtio-scsi
스토리지 장치를 사용하는 경우 전용IOThread
를virtio-scsi
컨트롤러에 할당합니다. 예를 들어 ID가 1인IOThread
를testguest
VM의 컨트롤러에 할당하려면 다음을 수행합니다.1
virsh edit <testguest1>
# virsh edit <testguest1> <domain type='kvm'> <name>testguest1</name> ... <devices> <controller type='scsi' index='0' model='virtio-scsi'> <driver iothread='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/> </controller> ... </devices> ... </domain>
Copy to Clipboard Copied!
검증
- VM 성능에 대한 변경 사항의 영향을 평가합니다. 자세한 내용은 가상 머신 성능 모니터링 툴을 참조하십시오.
18.5.5. 가상 디스크 캐싱 구성
KVM은 여러 가상 디스크 캐싱 모드를 제공합니다. IIO(Intent Input/Output) 워크로드의 경우 최적의 캐싱 모드를 선택하면 VM(가상 머신) 성능이 크게 증가할 수 있습니다.
가상 디스크 캐시 모드 개요
writethrough
- 호스트 페이지 캐시는 읽기에만 사용됩니다. 쓰기는 데이터가 스토리지 장치에 커밋된 경우에만 완료된 것으로 보고됩니다. 유지 관리되는 IO 성능은 줄어들지만 이 모드에서는 쓰기가 좋습니다.
writeback
-
호스트 페이지 캐시는 읽기 및 쓰기 모두에 사용됩니다. 데이터가 물리적 스토리지가 아닌 호스트의 메모리 캐시에 도달하면 쓰기가 완료된 것으로 보고됩니다. 이 모드는
writethrough
보다 IO 성능이 빠르지만 호스트 실패 시 데이터가 손실될 수 있습니다. none
- 호스트 페이지 캐시는 완전히 무시됩니다. 이 모드는 물리적 디스크의 쓰기 대기열에 직접 의존하므로 예측 가능한 IO 성능을 갖추고 안정적인 게스트에서 쓰기 보장을 제공합니다. VM 실시간 마이그레이션의 안전한 캐시 모드이기도 합니다.
프로세스
- 실행 중인 경우 선택한 VM을 종료합니다.
선택한 VM의 XML 구성을 편집합니다.
virsh edit <vm_name>
# virsh edit <vm_name>
Copy to Clipboard Copied! 디스크 장치를 찾아
드라이버
태그에서캐시
옵션을 편집합니다.<domain type='kvm'> <name>testguest1</name> ... <devices> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none' io='native' iothread='1'/> <source file='/var/lib/libvirt/images/test-disk.raw'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </disk> ... </devices> ... </domain>
<domain type='kvm'> <name>testguest1</name> ... <devices> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none' io='native' iothread='1'/> <source file='/var/lib/libvirt/images/test-disk.raw'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </disk> ... </devices> ... </domain>
Copy to Clipboard Copied!
18.6. 가상 머신 CPU 성능 최적화
호스트 시스템의 물리적 CPU와 마찬가지로 vCPU는 VM(가상 머신) 성능에 매우 중요합니다. 결과적으로 vCPU 최적화는 VM의 리소스 효율성에 큰 영향을 미칠 수 있습니다. vCPU를 최적화하려면 다음을 수행합니다.
- VM에 할당된 호스트 CPU 수를 조정합니다. CLI 또는 웹 콘솔 을 사용하여 이 작업을 수행할 수 있습니다.
vCPU 모델이 호스트의 CPU 모델에 일치하는지 확인합니다. 예를 들어 호스트의 CPU 모델을 사용하도록 testguest1 VM을 설정하려면 다음을 수행합니다.
virt-xml testguest1 --edit --cpu host-model
# virt-xml testguest1 --edit --cpu host-model
Copy to Clipboard Copied! - 커널 동일 페이지 병합(KSM)을 관리합니다.
호스트 시스템이 NUMA(Non-Uniform Memory Access)를 사용하는 경우 해당 VM에 맞게 NUMA를 구성할 수도 있습니다. 그러면 호스트의 CPU 및 메모리 프로세스를 VM의 CPU 및 메모리 프로세스에 최대한 가깝게 매핑합니다. 실제로 NUMA 튜닝은 vCPU에 VM에 할당된 시스템 메모리에 대한 보다 간소화된 액세스를 제공하므로 vCPU 처리 효과를 향상시킬 수 있습니다.
자세한 내용은 가상 머신 의 NUMA 구성 및 특정 워크로드에 대한 가상 머신 성능 최적화 구성을 참조하십시오.
18.6.1. vCPU 과다 할당
가상 CPU(vCPU) 과다 할당을 사용하면 호스트에서 실행 중인 VM(가상 머신)의 모든 vCPU 합계가 호스트의 물리적 CPU 수를 초과하는 설정을 수행할 수 있습니다. 그러나 호스트에서 물리적으로 사용 가능한 것보다 VM에서 동시에 더 많은 코어를 실행할 때 성능이 저하될 수 있습니다.
최상의 성능을 위해 각 VM에서 의도한 워크로드를 실행하는 데 필요한 만큼의 vCPU만으로 VM을 할당합니다.
vCPU 과다 할당 제안:
- 최상의 성능을 위해 VM의 워크로드에 필요한 최소 vCPU 양을 할당합니다.
- 광범위한 테스트없이 프로덕션에서 vCPU 과다 할당을 방지합니다.
- vCPU를 덮어쓸 경우 안전한 비율은 일반적으로 5개의 vCPU에서 100 % 미만의 물리적 CPU 1개입니다.
- 물리적 프로세서 코어당 총 10개의 vCPU를 할당하지 않는 것이 좋습니다.
- CPU 사용량을 모니터링하여 부하가 많은 성능 저하를 방지합니다.
메모리 또는 처리 리소스의 100%를 사용하는 애플리케이션은 오버 커밋된 환경에서 불안정해질 수 있습니다. CPU 과다 할당 비율은 워크로드에 따라 대규모 테스트 없이 프로덕션 환경에서 메모리 또는 CPU를 과다 할당하지 마십시오.
18.6.2. 명령줄을 사용하여 가상 CPU 추가 및 제거
VM(가상 머신)의 CPU 성능을 늘리거나 최적화하기 위해 VM에 할당된 가상 CPU(vCPU)를 추가하거나 제거할 수 있습니다.
실행 중인 VM에서 수행되는 경우 이를 vCPU 핫플러그 및 핫 언플러그라고 합니다. 그러나 RHEL 10에서는 vCPU 핫 언플러그가 지원되지 않으며 Red Hat은 사용하지 않는 것이 좋습니다.
프로세스
선택 사항: 선택한 VM에서 vCPU의 현재 상태를 확인합니다. 예를 들어 testguest VM의 vCPU 수를 표시하려면 다음을 수행합니다.
virsh vcpucount testguest
# virsh vcpucount testguest maximum config 4 maximum live 2 current config 2 current live 1
Copy to Clipboard Copied! 이 출력은 testguest 가 현재 1개의 vCPU를 사용하고 있으며 VM 성능을 높이기 위해 1개의 vCPu를 핫 플러그할 수 있음을 나타냅니다. 그러나 재부팅 후 testguest 에서 사용하는 vCPU 수가 2로 변경되고 더 많은 vCPU 2를 핫 플러그할 수 있습니다.
VM에 연결할 수 있는 최대 vCPU 수를 조정하여 VM의 다음 부팅에 적용됩니다.
예를 들어 testguest VM의 최대 vCPU 수를 8로 늘리려면 다음을 수행합니다.
virsh setvcpus testguest 8 --maximum --config
# virsh setvcpus testguest 8 --maximum --config
Copy to Clipboard Copied! 최대 크기는 CPU 토폴로지, 호스트 하드웨어, 하이퍼바이저 및 기타 요인에 의해 제한될 수 있습니다.
이전 단계에서 구성한 최대 VM에 연결된 현재 vCPU 수를 조정합니다. 예를 들면 다음과 같습니다.
실행 중인 testguest VM에 연결된 vCPU 수를 4로 늘리려면 다음을 수행합니다.
virsh setvcpus testguest 4 --live
# virsh setvcpus testguest 4 --live
Copy to Clipboard Copied! 이렇게 하면 VM의 다음 부팅될 때까지 testguest 의 VM 성능 및 호스트 로드 공간이 증가합니다.
testguest VM에 연결된 vCPU 수를 1로 영구적으로 줄입니다.
virsh setvcpus testguest 1 --config
# virsh setvcpus testguest 1 --config
Copy to Clipboard Copied! 이렇게 하면 VM의 다음 부팅 후 VM의 성능과 testguest 의 호스트 로드 공간이 줄어듭니다. 그러나 필요한 경우 추가 vCPU를 VM에 핫 플러그하여 일시적으로 성능을 향상시킬 수 있습니다.
검증
VM의 현재 vCPU 상태가 변경 사항을 반영하는지 확인합니다.
virsh vcpucount testguest
# virsh vcpucount testguest maximum config 8 maximum live 4 current config 1 current live 4
Copy to Clipboard Copied!
18.6.3. 웹 콘솔을 사용하여 가상 CPU 관리
RHEL 10 웹 콘솔을 사용하면 웹 콘솔이 연결된 VM(가상 머신)에서 사용하는 가상 CPU를 검토하고 구성할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
- 웹 콘솔 VM 플러그인이 시스템에 설치되어 있습니다.
프로세스
RHEL 10 웹 콘솔에 로그인합니다.
자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.
VM의 그래픽 인터페이스에 액세스하기 위한 선택한 VM 및 콘솔 섹션에 대한 기본 정보가 포함된 개요 섹션이 포함된 새 페이지가 열립니다.
개요 창에서 vCPU 수 옆에 있는
를 클릭합니다.vCPU 세부 정보 대화 상자가 나타납니다.
선택한 VM에 대한 가상 CPU를 구성합니다.
vCPU 수 - 현재 사용 중인 vCPU 수입니다.
참고vCPU 수는 vCPU 최대값보다 클 수 없습니다.
- vCPU 최대 - VM에 대해 구성할 수 있는 최대 가상 CPU 수입니다. 이 값이 vCPU 수보다 크면 추가 vCPU 를 VM에 연결할 수 있습니다.
- sockets - VM에 노출할 소켓 수입니다.
- 소켓당 코어 - VM에 노출할 각 소켓의 코어 수입니다.
코어당 스레드 - VM에 노출할 각 코어의 스레드 수입니다.
소켓 , 소켓 당 코어, 코어당 스레드 옵션은 VM의 CPU 토폴로지를 조정합니다. 이는 vCPU 성능에 유용할 수 있으며 게스트 OS에서 특정 소프트웨어의 기능에 영향을 미칠 수 있습니다. 배포에 다른 설정이 필요하지 않은 경우 기본값을 유지합니다.
VM의 가상 CPU가 구성되어 있습니다.
참고가상 CPU 설정 변경은 VM을 재시작한 후에만 적용됩니다.
18.6.4. 가상 머신에서 NUMA 구성
여러 방법을 사용하여 RHEL 10 호스트에서 VM(가상 머신)의 NUMA(Non-Uniform Memory Access) 설정을 구성할 수 있습니다.
사용하기 쉽도록 자동화된 유틸리티 및 서비스를 사용하여 VM의 NUMA 구성을 설정할 수 있습니다. 그러나 수동 NUMA 설정은 성능이 크게 향상될 가능성이 높습니다.
사전 요구 사항
호스트는 NUMA 호환 머신입니다. 이 경우인지 여부를 감지하려면
virsh nodeinfo
명령을 사용하고NUMA 셀을
참조하십시오.virsh nodeinfo
# virsh nodeinfo CPU model: x86_64 CPU(s): 48 CPU frequency: 1200 MHz CPU socket(s): 1 Core(s) per socket: 12 Thread(s) per core: 2 NUMA cell(s): 2 Memory size: 67012964 KiB
Copy to Clipboard Copied! 행 값이 2 이상인 경우 호스트는 NUMA와 호환됩니다.
선택 사항:
numactl
패키지가 호스트에 설치되어 있어야 합니다.dnf install numactl
# dnf install numactl
Copy to Clipboard Copied!
프로세스
자동 방법
VM의 NUMA 정책을
Preferred
로 설정합니다. 예를 들어 testguest5 VM을 구성하려면 다음을 수행합니다.virt-xml testguest5 --edit --vcpus placement=auto virt-xml testguest5 --edit --numatune mode=preferred
# virt-xml testguest5 --edit --vcpus placement=auto # virt-xml testguest5 --edit --numatune mode=preferred
Copy to Clipboard Copied! numad
서비스를 사용하여 VM CPU를 메모리 리소스에 자동으로 조정합니다.echo 1 > /proc/sys/kernel/numa_balancing
# echo 1 > /proc/sys/kernel/numa_balancing
Copy to Clipboard Copied! numad
서비스를 시작하여 VM CPU를 메모리 리소스에 자동으로 조정합니다.systemctl start numad
# systemctl start numad
Copy to Clipboard Copied!
수동 방법
NUMA 설정을 수동으로 튜닝하려면 특정 VM에 특별히 할당될 호스트 NUMA 노드를 지정할 수 있습니다. 이렇게 하면 VM의 vCPU에 의해 호스트 메모리 사용량을 개선할 수 있습니다.
선택 사항:
numactl
명령을 사용하여 호스트의 NUMA 토폴로지를 확인합니다.numactl --hardware
# numactl --hardware available: 2 nodes (0-1) node 0 size: 18156 MB node 0 free: 9053 MB node 1 size: 18180 MB node 1 free: 6853 MB node distances: node 0 1 0: 10 20 1: 20 10
Copy to Clipboard Copied! VM의 XML 구성을 편집하여 특정 NUMA 노드에 CPU 및 메모리 리소스를 할당합니다. 예를 들어 다음 구성에서는 NUMA 노드
0
에서 vCPU 0-7을 사용하고 NUMA 노드1
에서 vCPUS 8-15를 사용하도록 testguest6 을 설정합니다. 두 노드 모두 16GiB의 VM 메모리도 할당됩니다.virsh edit <testguest6>
# virsh edit <testguest6> <domain type='kvm'> <name>testguest6</name> ... <vcpu placement='static'>16</vcpu> ... <cpu ...> <numa> <cell id='0' cpus='0-7' memory='16' unit='GiB'/> <cell id='1' cpus='8-15' memory='16' unit='GiB'/> </numa> ... </domain>
Copy to Clipboard Copied! - VM이 실행 중인 경우 다시 시작하여 구성을 적용합니다.
최상의 성능을 얻으려면 호스트의 각 NUMA 노드의 최대 메모리 크기를 준수하는 것이 좋습니다.
18.6.5. 가상 CPU 고정 구성
VM(가상 머신)의 CPU 성능을 개선하기 위해 호스트의 특정 물리적 CPU 스레드에 vCPU(가상 CPU)를 고정할 수 있습니다. 이렇게 하면 vCPU에 전용 물리적 CPU 스레드가 있어 vCPU 성능을 크게 향상시킬 수 있습니다.
CPU 성능을 추가로 최적화하기 위해 지정된 VM과 연결된 QEMU 프로세스 스레드를 특정 호스트 CPU에 고정할 수도 있습니다.
프로세스
호스트에서 CPU 토폴로지를 확인합니다.
lscpu -p=node,cpu
# lscpu -p=node,cpu Node,CPU 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 1,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7
Copy to Clipboard Copied! 이 예에서 출력에는 NUMA 노드와 호스트에서 사용 가능한 물리적 CPU 스레드가 포함됩니다.
VM 내에서 vCPU 스레드 수를 확인합니다.
lscpu -p=node,cpu
# lscpu -p=node,cpu Node,CPU 0,0 0,1 0,2 0,3
Copy to Clipboard Copied! 이 예에서 출력에는 NUMA 노드와 VM 내부에서 사용 가능한 vCPU 스레드가 포함됩니다.
VM에서 특정 호스트 CPU 또는 CPU 범위로 특정 vCPU 스레드를 고정합니다. 이는 vCPU 성능 개선의 안전한 방법인 것이 좋습니다.
예를 들어 다음 명령은 각각 testguest6 VM의 vCPU 스레드 0~3을 CPU 1, 3, 5, 7을 호스팅하도록 고정합니다.
virsh vcpupin testguest6 0 1 virsh vcpupin testguest6 1 3 virsh vcpupin testguest6 2 5 virsh vcpupin testguest6 3 7
# virsh vcpupin testguest6 0 1 # virsh vcpupin testguest6 1 3 # virsh vcpupin testguest6 2 5 # virsh vcpupin testguest6 3 7
Copy to Clipboard Copied! 선택 사항: vCPU 스레드가 CPU에 성공적으로 고정되었는지 확인합니다.
virsh vcpupin testguest6
# virsh vcpupin testguest6 VCPU CPU Affinity ---------------------- 0 1 1 3 2 5 3 7
Copy to Clipboard Copied! 선택 사항: vCPU 스레드를 고정한 후 지정된 VM과 연결된 QEMU 프로세스 스레드를 특정 호스트 CPU 또는 CPU 범위에 고정할 수도 있습니다. 이렇게 하면 QEMU 프로세스가 물리적 CPU에서 더 효율적으로 실행되는 데 도움이 될 수 있습니다.
예를 들어 다음 명령은 testguest6 의 QEMU 프로세스 스레드를 CPU 2 및 4에 고정하고 이 스레드가 성공했는지 확인합니다.
virsh emulatorpin testguest6 2,4 virsh emulatorpin testguest6
# virsh emulatorpin testguest6 2,4 # virsh emulatorpin testguest6 emulator: CPU Affinity ---------------------------------- *: 2,4
Copy to Clipboard Copied!
18.6.6. 가상 CPU 제한 구성
가상 CPU(vCPU) 용량을 사용하여 VM(가상 머신)에서 사용할 수 있는 CPU 리소스의 양을 제한할 수 있습니다. vCPU 제한은 단일 VM에서 호스트의 CPU 리소스를 과도하게 사용하지 않고 하이퍼바이저가 CPU 스케줄링을 더 쉽게 관리할 수 있도록 하여 전체 성능을 향상시킬 수 있습니다.
프로세스
호스트의 현재 vCPU 스케줄링 구성을 확인합니다.
virsh schedinfo <vm_name>
# virsh schedinfo <vm_name> Scheduler : posix cpu_shares : 0 vcpu_period : 0 vcpu_quota : 0 emulator_period: 0 emulator_quota : 0 global_period : 0 global_quota : 0 iothread_period: 0 iothread_quota : 0
Copy to Clipboard Copied! VM에 대한 절대 vCPU 제한을 구성하려면
vcpu_period
및vcpu_quota
매개변수를 설정합니다. 두 매개변수는 마이크로초 단위로 기간을 나타내는 숫자 값을 사용합니다.virsh schedinfo
명령을 사용하여vcpu_period
매개변수를 설정합니다. 예를 들면 다음과 같습니다.virsh schedinfo <vm_name> --set vcpu_period=100000
# virsh schedinfo <vm_name> --set vcpu_period=100000
Copy to Clipboard Copied! 이 예에서
vcpu_period
는 100,000 마이크로초로 설정됩니다. 즉, 스케줄러는 이 시간 간격 동안 vCPU 제한을 적용합니다.--live --config
옵션을 사용하여 다시 시작하지 않고 실행 중인 VM을 구성할 수도 있습니다.virsh schedinfo
명령을 사용하여vcpu_quota
매개변수를 설정합니다. 예를 들면 다음과 같습니다.virsh schedinfo <vm_name> --set vcpu_quota=50000
# virsh schedinfo <vm_name> --set vcpu_quota=50000
Copy to Clipboard Copied! 이 예에서
vcpu_quota
는vcpu_period
시간 간격 동안 VM에서 사용할 수 있는 최대 CPU 시간을 지정하는 50,000 마이크로초로 설정됩니다. 이 경우vcpu_quota
는vcpu_period
의 절반으로 설정되므로 VM에서 해당 간격 동안 최대 50%의 CPU 시간을 사용할 수 있습니다.--live --config
옵션을 사용하여 다시 시작하지 않고 실행 중인 VM을 구성할 수도 있습니다.
검증
vCPU 스케줄링 매개변수에 올바른 값이 있는지 확인합니다.
virsh schedinfo <vm_name>
# virsh schedinfo <vm_name> Scheduler : posix cpu_shares : 2048 vcpu_period : 100000 vcpu_quota : 50000 ...
Copy to Clipboard Copied!
18.6.7. CPU 가중치 튜닝
CPU 가중치 (또는 CPU 공유) 설정은 실행 중인 다른 VM에 비해 VM(가상 머신)이 수신하는 CPU 시간을 제어합니다. 특정 VM의 CPU 가중치 를 늘리면 이 VM이 다른 VM에 비해 더 많은 CPU 시간을 얻을 수 있습니다. 여러 VM 간에 CPU 시간 할당 우선 순위를 지정하려면 cpu_shares
매개변수를 설정합니다.
가능한 CPU 가중치 값은 0 에서 262144 사이이고 새 KVM VM의 기본값은 1024 입니다.
프로세스
VM의 현재 CPU 가중치 를 확인합니다.
virsh schedinfo <vm_name>
# virsh schedinfo <vm_name> Scheduler : posix cpu_shares : 1024 vcpu_period : 0 vcpu_quota : 0 emulator_period: 0 emulator_quota : 0 global_period : 0 global_quota : 0 iothread_period: 0 iothread_quota : 0
Copy to Clipboard Copied! CPU 가중치 를 기본 값으로 조정합니다.
virsh schedinfo <vm_name> --set cpu_shares=2048
# virsh schedinfo <vm_name> --set cpu_shares=2048 Scheduler : posix cpu_shares : 2048 vcpu_period : 0 vcpu_quota : 0 emulator_period: 0 emulator_quota : 0 global_period : 0 global_quota : 0 iothread_period: 0 iothread_quota : 0
Copy to Clipboard Copied! 이 예에서
cpu_shares
는 2048로 설정됩니다. 즉, 다른 모든 VM의 값이 1024로 설정되면 이 VM은 약 2배의 CPU 시간이 됩니다.--live --config
옵션을 사용하여 다시 시작하지 않고 실행 중인 VM을 구성할 수도 있습니다.
18.6.8. 커널 동일한 페이지 병합 활성화 및 비활성화
KSM(커널 동일 페이지 병합)은 VM(가상 머신) 간에 동일한 메모리 페이지를 공유하여 메모리 밀도를 향상시킵니다. 따라서 KSM을 활성화하면 VM 배포의 메모리 효율성을 향상시킬 수 있습니다.
그러나 KSM을 활성화하면 CPU 사용률도 증가하고 워크로드에 따라 전체 성능에 부정적인 영향을 미칠 수 있습니다.
RHEL 10에서 KSM은 기본적으로 비활성화되어 있습니다. KSM을 활성화하고 VM 성능에 미치는 영향을 테스트하려면 다음 지침을 참조하십시오.
사전 요구 사항
- 호스트 시스템에 대한 루트 액세스.
프로세스
KSM을 활성화합니다.
주의KSM을 활성화하면 CPU 사용률이 증가하고 전체 CPU 성능에 영향을 미칩니다.
ksmtuned
서비스를 설치합니다.dnf install ksmtuned
# dnf install ksmtuned
Copy to Clipboard Copied! 서비스를 시작합니다.
단일 세션에 대해 KSM을 활성화하려면
systemctl
유틸리티를 사용하여ksm
및ksmtuned
서비스를 시작합니다.systemctl start ksm systemctl start ksmtuned
# systemctl start ksm # systemctl start ksmtuned
Copy to Clipboard Copied! KSM을 영구적으로 활성화하려면
systemctl
유틸리티를 사용하여ksm
및ksmtuned
서비스를 활성화합니다.systemctl enable ksm systemctl enable ksmtuned
# systemctl enable ksm Created symlink /etc/systemd/system/multi-user.target.wants/ksm.service → /usr/lib/systemd/system/ksm.service # systemctl enable ksmtuned Created symlink /etc/systemd/system/multi-user.target.wants/ksmtuned.service → /usr/lib/systemd/system/ksmtuned.service
Copy to Clipboard Copied!
- KSM 활성화의 이점을 평가하기 위해 호스트에서 VM의 성능 및 리소스 사용량을 모니터링합니다. 특히 KSM의 추가 CPU 사용량이 메모리 개선 사항을 오프셋하지 않고 추가 성능 문제가 발생하지 않도록 합니다. 대기 시간에 민감한 워크로드에서는 NUMA 간 페이지 병합에도 주의하십시오.
선택 사항: KSM이 VM 성능을 개선하지 않은 경우 비활성화합니다.
단일 세션에 대해 KSM을 비활성화하려면
systemctl
유틸리티를 사용하여ksm
및ksmtuned
서비스를 중지합니다.systemctl stop ksm systemctl stop ksmtuned
# systemctl stop ksm # systemctl stop ksmtuned
Copy to Clipboard Copied! KSM을 영구적으로 비활성화하려면
systemctl
유틸리티를 사용하여ksm
및ksmtuned
서비스를 비활성화합니다.systemctl disable ksm systemctl disable ksmtuned
# systemctl disable ksm Removed /etc/systemd/system/multi-user.target.wants/ksm.service. # systemctl disable ksmtuned Removed /etc/systemd/system/multi-user.target.wants/ksmtuned.service.
Copy to Clipboard Copied! 참고KSM을 비활성화하기 전에 VM 간에 공유되는 메모리 페이지는 공유된 상태로 유지됩니다. 공유를 중지하려면 다음 명령을 사용하여 시스템의 모든
PageKSM
페이지를 삭제합니다.echo 2 > /sys/kernel/mm/ksm/run
# echo 2 > /sys/kernel/mm/ksm/run
Copy to Clipboard Copied! 그러나 이 명령은 메모리 사용량을 늘리고 호스트 또는 VM에서 성능 문제가 발생할 수 있습니다.
18.7. 가상 머신 네트워크 성능 최적화
VM의 NIC(네트워크 인터페이스 컨트롤러)의 가상 특성으로 인해 VM은 할당된 호스트 네트워크 대역폭의 일부를 손실하여 VM의 전체 워크로드 효율성을 줄일 수 있습니다. VM 구성을 수정하여 가상 NIC(vNIC) 처리량에 가상화의 부정적인 영향을 최소화할 수 있습니다.
프로세스
다음 방법 중 하나를 사용하여 VM 네트워크 성능에 유용한 영향을 미치는지 확인합니다.
- vhost_net 모듈 활성화
호스트에서
vhost_net
커널 기능이 활성화되어 있는지 확인합니다.lsmod | grep vhost
# lsmod | grep vhost vhost_net 32768 1 vhost 53248 1 vhost_net tap 24576 1 vhost_net tun 57344 6 vhost_net
Copy to Clipboard Copied! 이 명령의 출력이 비어 있으면
vhost_net
커널 모듈을 활성화합니다.modprobe vhost_net
# modprobe vhost_net
Copy to Clipboard Copied!
- 다중 대기열 virtio-net 설정
VM의 다중 대기열 virtio-net 기능을 설정하려면
virsh edit
명령을 사용하여 VM의 XML 구성을 편집합니다. XML에서 <devices
> 섹션에 다음을 추가하고N
을 VM의 vCPU 수(최대 16개)로 바꿉니다.<interface type='network'> <source network='default'/> <model type='virtio'/> <driver name='vhost' queues='N'/> </interface>
<interface type='network'> <source network='default'/> <model type='virtio'/> <driver name='vhost' queues='N'/> </interface>
Copy to Clipboard Copied! VM이 실행 중인 경우 변경 사항을 적용하려면 VM을 다시 시작합니다.
- 네트워크 패킷 배치
전송 경로가 긴 Linux VM 구성에서 패킷을 커널에 제출하기 전에 패킷을 배치하면 캐시 사용률이 향상될 수 있습니다. 패킷 일괄 처리를 설정하려면 호스트에서 다음 명령을 사용하고 VMs에서 사용하는 네트워크 인터페이스 이름으로 tap0 을 바꿉니다.
ethtool -C tap0 rx-frames 64
# ethtool -C tap0 rx-frames 64
Copy to Clipboard Copied! - SR-IOV
- 호스트 NIC가 SR-IOV를 지원하는 경우 vNICs에 SR-IOV 장치 할당을 사용합니다.
자세한 내용은 SR-IOV 장치 관리를 참조하십시오.
18.8. 가상 머신 성능 모니터링 툴
가장 많은 VM 리소스를 소비하는 것과 VM 성능의 최적화가 필요한 측면을 확인하기 위해 일반 및 VM 관련 성능 진단 툴을 사용할 수 있습니다.
기본 OS 성능 모니터링 툴
표준 성능 평가를 위해 호스트 및 게스트 운영 체제에서 기본적으로 제공하는 유틸리티를 사용할 수 있습니다.
RHEL 10 호스트에서 root로
상위
유틸리티 또는 시스템 모니터 애플리케이션을 사용하고 출력에서qemu
및virt
을 찾습니다. 이는 VM에서 사용하는 호스트 시스템 리소스의 양을 보여줍니다.-
모니터링 툴에서
qemu
또는virt
프로세스가 호스트 CPU 또는 메모리 용량의 많은 부분을 사용하도록 표시되면perf
유틸리티를 사용하여 조사합니다. 자세한 내용은 아래를 참조하십시오. -
또한, 예를 들어
vhost_net
-1234 에 대해 이름이 지정된 vhost_net 스레드 프로세스가 과도한 양의 호스트 CPU 용량을 사용하는 것으로 표시되면다중 대기열 virtio-net
과 같은 가상 네트워크 최적화 기능을 사용하는 것이 좋습니다.
-
모니터링 툴에서
게스트 운영 체제에서는 시스템에서 사용 가능한 성능 유틸리티와 애플리케이션을 사용하여 가장 많은 시스템 리소스를 사용하는 프로세스를 평가합니다.
-
Linux 시스템에서는
top
유틸리티를 사용할 수 있습니다. - Windows 시스템에서는 작업 관리자 애플리케이션을 사용할 수 있습니다.
-
Linux 시스템에서는
perf kvm
perf
유틸리티를 사용하여 RHEL 10 호스트의 성능에 대한 가상화 관련 통계를 수집하고 분석할 수 있습니다. 이렇게 하려면 다음을 수행합니다.
호스트에서 perf 패키지를 설치합니다.
dnf install perf
# dnf install perf
Copy to Clipboard Copied! perf kvm stat
명령 중 하나를 사용하여 가상화 호스트에 대한 perf 통계를 표시합니다.-
하이퍼바이저를 실시간 모니터링하려면
perf kvm stat live
명령을 사용합니다. -
일정 기간 동안 하이퍼바이저의 perf 데이터를 기록하려면
perf kvm stat record
명령을 사용하여 로깅을 활성화합니다. 명령이 취소되거나 중단된 후 데이터는perf kvm stat report
명령을 사용하여 분석할 수 있는perf.data.guest
파일에 저장됩니다.
-
하이퍼바이저를 실시간 모니터링하려면
VM-EXIT
이벤트 유형과 해당 배포에 대한perf
출력을 분석합니다. 예를 들어PAUSE_INSTRUCTION
이벤트는 자주 발생하지 않아야 하지만 다음 출력에서는 호스트 CPU가 실행 중인 vCPU를 잘 처리하지 않음을 시사합니다. 이러한 시나리오에서는 활성 VM 중 일부를 종료하거나 이러한 VM에서 vCPU를 제거하거나 vCPU의 성능을 조정하는 것이 좋습니다.perf kvm stat report
# perf kvm stat report Analyze events for all VMs, all VCPUs: VM-EXIT Samples Samples% Time% Min Time Max Time Avg time EXTERNAL_INTERRUPT 365634 31.59% 18.04% 0.42us 58780.59us 204.08us ( +- 0.99% ) MSR_WRITE 293428 25.35% 0.13% 0.59us 17873.02us 1.80us ( +- 4.63% ) PREEMPTION_TIMER 276162 23.86% 0.23% 0.51us 21396.03us 3.38us ( +- 5.19% ) PAUSE_INSTRUCTION 189375 16.36% 11.75% 0.72us 29655.25us 256.77us ( +- 0.70% ) HLT 20440 1.77% 69.83% 0.62us 79319.41us 14134.56us ( +- 0.79% ) VMCALL 12426 1.07% 0.03% 1.02us 5416.25us 8.77us ( +- 7.36% ) EXCEPTION_NMI 27 0.00% 0.00% 0.69us 1.34us 0.98us ( +- 3.50% ) EPT_MISCONFIG 5 0.00% 0.00% 5.15us 10.85us 7.88us ( +- 11.67% ) Total Samples:1157497, Total events handled time:413728274.66us.
Copy to Clipboard Copied! perf kvmstat
의 출력에서 문제를 신호할 수 있는 기타 이벤트 유형은 다음과 같습니다.-
INSN_EMULATION
- 하위 VM I/O 구성 을 제안합니다.
-
perf
를 사용하여 가상화 성능을 모니터링하는 방법에 대한 자세한 내용은 시스템의 perf-kvm(1)
매뉴얼 페이지를 참조하십시오.
numastat
시스템의 현재 NUMA 구성을 보려면 numactl 패키지를 설치하여 제공하는 numastat
유틸리티를 사용할 수 있습니다.
다음은 4개의 실행 중인 VM이 있는 호스트를 나타내며 각각 여러 NUMA 노드에서 메모리를 가져옵니다. 이는 vCPU 성능에 최적이 아니며 조정을 보장합니다.
numastat -c qemu-kvm
# numastat -c qemu-kvm
Per-node process memory usage (in MBs)
PID Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
--------------- ------ ------ ------ ------ ------ ------ ------ ------ -----
51722 (qemu-kvm) 68 16 357 6936 2 3 147 598 8128
51747 (qemu-kvm) 245 11 5 18 5172 2532 1 92 8076
53736 (qemu-kvm) 62 432 1661 506 4851 136 22 445 8116
53773 (qemu-kvm) 1393 3 1 2 12 0 0 6702 8114
--------------- ------ ------ ------ ------ ------ ------ ------ ------ -----
Total 1769 463 2024 7462 10037 2672 169 7837 32434
반면, 다음에서는 단일 노드에서 각 VM에 제공되는 메모리를 보여줍니다. 이는 훨씬 더 효율적입니다.
numastat -c qemu-kvm
# numastat -c qemu-kvm
Per-node process memory usage (in MBs)
PID Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
--------------- ------ ------ ------ ------ ------ ------ ------ ------ -----
51747 (qemu-kvm) 0 0 7 0 8072 0 1 0 8080
53736 (qemu-kvm) 0 0 7 0 0 0 8113 0 8120
53773 (qemu-kvm) 0 0 7 0 0 0 1 8110 8118
59065 (qemu-kvm) 0 0 8050 0 0 0 0 0 8051
--------------- ------ ------ ------ ------ ------ ------ ------ ------ -----
Total 0 0 8072 0 8072 0 8114 8110 32368
19장. 가상 머신 보안
VM(가상 머신)이 있는 RHEL 10 시스템의 관리자로서 VM이 최대한 안전하게 보호되도록 게스트 및 호스트 OS의 위험을 크게 줄일 수 있습니다.
다음 섹션에서는 RHEL 10 호스트에서 VM 보안 메커니즘 을 간략하게 설명하고 VM 보안을 강화하는 방법 목록을 제공합니다.
19.1. 가상 머신에서 보안이 작동하는 방식
가상 머신(VM)을 사용하는 경우 여러 운영 체제를 단일 호스트 시스템에 저장할 수 있습니다. 이러한 시스템은 하이퍼바이저를 통해 호스트와 연결되며 일반적으로 가상 네트워크를 통해 연결됩니다. 결과적으로 각 VM은 악성 소프트웨어로 호스트를 공격하기 위한 벡터로 사용할 수 있으며 호스트는 VM을 공격하기 위한 벡터로 사용할 수 있습니다.
그림 19.1. 가상화 호스트의 잠재적인 악성 코드 공격 벡터

하이퍼바이저는 호스트 커널을 사용하여 VM을 관리하므로 VM의 운영 체제에서 실행되는 서비스는 호스트 시스템에 악성 코드를 삽입하는 데 자주 사용됩니다. 그러나 호스트 및 게스트 시스템에서 여러 보안 기능을 사용하여 이러한 보안 위협으로부터 시스템을 보호할 수 있습니다.
SELinux 또는 QEMU 샌드박스와 같은 이러한 기능은 악성 코드가 하이퍼바이저를 공격하고 호스트와 VM 간 전송을 더 어렵게 만드는 다양한 조치를 제공합니다.
그림 19.2. 가상화 호스트에서 악성 코드 공격을 방지

RHEL 10이 VM 보안을 위해 제공하는 대부분의 기능은 항상 활성화되어 있으며 활성화 또는 구성할 필요가 없습니다. 자세한 내용은 가상 머신 보안의 기본 기능을 참조하십시오.
또한 다양한 모범 사례를 준수하여 VM 및 하이퍼바이저의 취약점을 최소화할 수 있습니다. 자세한 내용은 가상 머신 보안을 위한 모범 사례를 참조하십시오.
19.2. 가상 머신 보안을 위한 모범 사례
아래 지침에 따라 가상 머신이 악성 코드에 감염되는 위험을 크게 줄이고 호스트 시스템을 감염시키기 위한 공격 벡터로 사용됩니다.
게스트 측에서 다음을 수행합니다.
가상 머신은 마치 물리적 머신인 것처럼 보호합니다. 보안을 강화하기 위해 사용할 수 있는 특정 방법은 게스트 OS에 따라 다릅니다.
VM이 RHEL 10 을 실행하는 경우 게스트 시스템의 보안 개선에 대한 자세한 내용은 RHEL 10 보안을 참조하십시오.
호스트 측에서:
- VM을 원격으로 관리하는 경우 SSH 및 네트워크 프로토콜과 같은 암호화 유틸리티 를 사용하여 VM에 연결합니다.
SELinux가 강제 적용 모드에 있는지 확인합니다.
getenforce
# getenforce Enforcing
Copy to Clipboard Copied! SELinux가 비활성화되거나 허용 모드에서 허용되는 경우 강제 모드 활성화에 대한 지침은 SELinux 사용 문서를 참조하십시오.
참고SELinux Enforcing 모드에서는 sVirt RHEL 10 기능도 사용할 수 있습니다. 이는 가상화를 위한 특수 SELinux 부울 세트로, 세분화된 VM 보안 관리를 위해 수동으로 조정할 수 있습니다.
SecureBoot 와 함께 VM 사용 :
SecureBoot는 VM이 암호화 서명된 OS를 실행하도록 하는 기능입니다. 이렇게 하면 악성 코드 공격에 의해 OS가 변경된 VM이 부팅되지 않습니다.
SecureBoot는 AMD64 또는 Intel 64 호스트에서 OVMF 펌웨어를 사용하는 Linux VM을 설치할 때만 적용할 수 있습니다. 자세한 내용은 SecureBoot 가상 머신 생성을 참조하십시오.
qemu-kvm
과 같은qemu-*
명령을 사용하지 마십시오.QEMU는 RHEL 10의 가상화 아키텍처의 필수 구성 요소이지만 수동으로 관리하기가 어렵고 부적절한 QEMU 구성으로 인해 보안 취약점이 발생할 수 있습니다. 따라서 대부분의
qemu-*
명령 사용은 Red Hat에서 지원되지 않습니다. 대신 모범 사례에 따라 QEMU를 오케스트레이션하므로virsh
,virt-install
,virt-xml
과 같은 libvirt 유틸리티를 사용합니다.그러나
qemu-img
유틸리티는 가상 디스크 이미지 관리에 지원됩니다.
19.3. 가상 머신 보안을 위한 기본 기능
가상 머신 보안을 위한 모범 사례에 나열된 가상 머신의 보안을 개선할 수 있는 수동 방법 외에도 여러 보안 기능이 libvirt
소프트웨어 제품군에서 제공되며 RHEL 10에서 가상화를 사용할 때 자동으로 활성화됩니다. 여기에는 다음이 포함됩니다.
- 시스템 및 세션 연결
RHEL 10 호스트에서 가상 머신 관리에 사용 가능한 모든 유틸리티에 액세스합니다.
libvirt
의 시스템 연결을 사용해야 합니다(qemu:///system
). 이렇게 하려면 시스템에 대한 root 권한이 있거나 libvirt 사용자 그룹의 일부여야 합니다.libvirt 그룹에 없는 루트가 아닌 사용자는 리소스에 액세스할 때 로컬 사용자의 액세스 권한을 준수해야 하는
libvirt
(qemu:///session
)의 세션 연결에 만 액세스할 수 있습니다.자세한 내용은 가상화의 사용자 공간 연결 유형을 참조하십시오.
- 가상 머신 분리
- 개별 VM은 호스트에서 분리된 프로세스로 실행되며 호스트 커널에서 시행하는 보안을 사용합니다. 따라서 VM은 동일한 호스트에서 다른 VM의 메모리 또는 스토리지에 읽거나 액세스할 수 없습니다.
- QEMU 샌드박스
- QEMU 코드가 호스트의 보안을 손상시킬 수 있는 시스템 호출을 실행하지 못하도록 하는 기능입니다.
- 커널 주소 공간 순위화 (KASLR)
- 커널 이미지의 압축을 해제하는 물리적 및 가상 주소를 임의화할 수 있습니다. 따라서 KASLR은 커널 오브젝트의 위치에 따라 게스트 보안 취약점을 방지합니다.
19.4. Windows 가상 머신에서 표준 하드웨어 보안 활성화
Windows VM(가상 머신)을 보호하려면 Windows 장치의 표준 하드웨어 기능을 사용하여 기본 수준 보안을 활성화할 수 있습니다.
사전 요구 사항
- 최신 WHQL 인증 VirtIO 드라이버를 설치했는지 확인합니다.
- VM의 펌웨어가 UEFI 부팅을 지원하는지 확인합니다.
호스트 시스템에
edk2-OVMF
패키지를 설치합니다.dnf install edk2-ovmf
# dnf install edk2-ovmf
Copy to Clipboard Copied! 호스트 시스템에
vTPM
패키지를 설치합니다.dnf install swtpm libtpms
# dnf install swtpm libtpms
Copy to Clipboard Copied! - VM에서 Q35 시스템 아키텍처를 사용하고 있는지 확인합니다.
- Windows 설치 미디어가 있는지 확인합니다.
프로세스
VM의 XML 구성의 <
devices>
섹션에 다음 매개변수를 추가하여 TPM 2.0을 활성화합니다.<devices> [...] <tpm model='tpm-crb'> <backend type='emulator' version='2.0'/> </tpm> [...] </devices>
<devices> [...] <tpm model='tpm-crb'> <backend type='emulator' version='2.0'/> </tpm> [...] </devices>
Copy to Clipboard Copied! UEFI 모드에서 Windows를 설치합니다.
이를 수행하는 방법에 대한 자세한 내용은 SecureBoot 가상 머신 생성을 참조하십시오.
- Windows VM에 VirtIO 드라이버를 설치합니다. 이렇게 하는 방법에 대한 자세한 내용은 Windows 게스트에 virtio 드라이버 설치를 참조하십시오.
- UEFI에서 Secure Boot를 활성화합니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 Secure Boot 를 참조하십시오.
검증
Windows 머신의 장치 보안 페이지에 다음 메시지가 표시되는지 확인합니다.
설정 > 업데이트 및 보안 > Windows 보안 > 장치 보안
Your device meets the requirements for standard hardware security.
Your device meets the requirements for standard hardware security.
Copy to Clipboard Copied!
19.5. Windows 가상 머신에서 향상된 하드웨어 보안 활성화
Windows 가상 머신(VM)을 추가로 보호하려면 HVCI(하이퍼바이저 보호 코드 무결성)라고도 하는 코드 무결성의 가상화 기반 보호를 활성화할 수 있습니다.
사전 요구 사항
- 표준 하드웨어 보안이 활성화되어 있는지 확인합니다. 자세한 내용은 Windows 가상 머신에서 표준 하드웨어 보안 활성화를 참조하십시오.
- Hyper-V를 사용하도록 설정했는지 확인합니다. 자세한 내용은 Hyper-V 항목 활성화를 참조하십시오.
프로세스
Windows VM의 XML 구성을 엽니다. 다음 예제에서는 Example-L1 VM의 구성을 엽니다.
virsh edit Example-L1
# virsh edit Example-L1
Copy to Clipboard Copied! <
;cpu&
gt; 섹션에서 CPU 모드를 지정하고 policy 플래그를 추가합니다.중요-
Intel CPU의 경우
vmx
정책 플래그를 활성화합니다. -
AMD CPU의 경우
svm
정책 플래그를 활성화합니다. -
사용자 지정 CPU를 지정하지 않으려면 <
cpu mode
>를host-passthrough
로 설정할 수 있습니다.
<cpu mode='custom' match='exact' check='partial'> <model fallback='allow'>Skylake-Client-IBRS</model> <topology sockets='1' dies='1' cores='4' threads='1'/> <feature policy='require' name='vmx'/> </cpu>
<cpu mode='custom' match='exact' check='partial'> <model fallback='allow'>Skylake-Client-IBRS</model> <topology sockets='1' dies='1' cores='4' threads='1'/> <feature policy='require' name='vmx'/> </cpu>
Copy to Clipboard Copied! -
Intel CPU의 경우
- XML 구성을 저장하고 VM을 재부팅합니다.
VMs 운영 체제에서 코어 격리 세부 정보 페이지로 이동합니다.
설정 > 업데이트 및 보안 > Windows 보안 > 장치 보안 > 핵심 격리 세부 정보
- 스위치를 전환하여 메모리 무결성을 활성화합니다.
- VM을 재부팅합니다.
HVCI를 활성화하는 다른 방법은 관련 Microsoft 설명서를 참조하십시오.
검증
Windows VM의 장치 보안 페이지에 다음 메시지가 표시되는지 확인합니다.
설정 > 업데이트 및 보안 > Windows 보안 > 장치 보안
Your device meets the requirements for enhanced hardware security.
Your device meets the requirements for enhanced hardware security.
Copy to Clipboard Copied! 또는 Windows VM에 대한 시스템 정보를 확인합니다.
-
명령 프롬프트에서
msinfo32.exe
를 실행합니다. - Credential Guard, Hypervisor 적용 코드 무결성이 가상화 기반 보안 서비스 실행 목록에 나열되어 있는지 확인합니다.
-
명령 프롬프트에서
19.6. SecureBoot 가상 머신 생성
VM이 암호화 서명된 OS를 실행 중인지 확인하는 SecureBoot 기능을 사용하는 Linux 가상 머신(VM)을 생성할 수 있습니다. 이는 VM의 게스트 OS가 악성 코드에 의해 변경된 경우 유용할 수 있습니다. 이러한 시나리오에서 SecureBoot는 VM이 부팅되지 않도록 하여 호스트 머신에 악성 코드가 발생할 수 있는 확산을 중지합니다.
사전 요구 사항
- VM은 Q35 시스템 유형입니다.
- 호스트 시스템은 AMD64 또는 Intel 64 아키텍처를 사용합니다.
edk2-OVMF
패키지가 설치되어 있습니다.dnf install edk2-ovmf
# dnf install edk2-ovmf
Copy to Clipboard Copied! 운영 체제(OS) 설치 소스는 로컬 또는 네트워크에서 사용할 수 있습니다. 다음 형식 중 하나일 수 있습니다.
- 설치 미디어의 ISO 이미지
기존 VM 설치의 디스크 이미지
주의RHEL 10에서는 호스트 CD-ROM 또는 DVD-ROM 장치에서 설치할 수 없습니다. RHEL 10에서 사용 가능한 VM 설치 방법을 사용할 때 CD-ROM 또는 DVD-ROM을 설치 소스로 선택하면 설치에 실패합니다. 자세한 내용은 Red Hat Knowledgebase 솔루션 RHEL 7 이상에서 CD/DVD-ROM에서 게스트 OS를 설치할 수 없습니다.
- 선택 사항: 설치보다 빠르고 쉽게 구성할 수 있도록 Kickstart 파일을 제공할 수 있습니다.
프로세스
명령행을 사용하여 가상 머신 생성에 설명된 대로
virt-install
명령을 사용하여 VM을 생성합니다.--boot
옵션의 경우uefi,nvram_template=/usr/share/OVMF/OVMF_VARS.secboot.fd
값을 사용합니다. 이는 SecureBoot 기능을 활성화하는OVMF_VARS.secboot.fd
및OVMF_CODE.secboot.fd
파일을 VM의 NVMe(Non-volatile RAM) 설정 템플릿으로 사용합니다.예를 들면 다음과 같습니다.
virt-install --name rhel8sb --memory 4096 --vcpus 4 --os-variant rhel10.0 --boot uefi,nvram_template=/usr/share/OVMF/OVMF_VARS.secboot.fd --disk boot_order=2,size=10 --disk boot_order=1,device=cdrom,bus=scsi,path=/images/RHEL-{ProductNumber}.0-installation.iso
# virt-install --name rhel8sb --memory 4096 --vcpus 4 --os-variant rhel10.0 --boot uefi,nvram_template=/usr/share/OVMF/OVMF_VARS.secboot.fd --disk boot_order=2,size=10 --disk boot_order=1,device=cdrom,bus=scsi,path=/images/RHEL-{ProductNumber}.0-installation.iso
Copy to Clipboard Copied! - 화면의 지침에 따라 OS 설치 절차를 따르십시오.
검증
- 게스트 OS가 설치되면 그래픽 게스트 콘솔에서 터미널을 열거나 SSH를 사용하여 게스트 OS에 연결하여 VM의 명령줄에 액세스합니다.
VM에서 SecureBoot가 활성화되어 있는지 확인하려면
mokutil --sb-state
명령을 사용합니다.mokutil --sb-state
# mokutil --sb-state SecureBoot enabled
Copy to Clipboard Copied!
19.7. 가상 머신 사용자가 사용할 수 있는 작업 제한
경우에 따라 RHEL 10에서 호스팅되는 VM(가상 머신) 사용자가 기본적으로 수행할 수 있는 작업은 보안 위험이 발생할 수 있습니다. 이 경우 호스트 머신에서 polkit
정책 툴킷을 사용하도록 libvirt
데몬을 구성하여 VM 사용자가 사용할 수 있는 작업을 제한할 수 있습니다.
프로세스
선택 사항:
libvirt
와 관련된 시스템의polkit
제어 정책이 기본 설정에 따라 설정되었는지 확인합니다./usr/share/polkit-1/actions/
및/usr/share/polkit-1/rules.d/
디렉토리에서 모든 libvirt 관련 파일을 찾습니다.ls /usr/share/polkit-1/actions | grep libvirt ls /usr/share/polkit-1/rules.d | grep libvirt
# ls /usr/share/polkit-1/actions | grep libvirt # ls /usr/share/polkit-1/rules.d | grep libvirt
Copy to Clipboard Copied! 파일을 열고 규칙 설정을 검토합니다.
polkit
제어 정책의 구문을 읽는 방법에 대한 자세한 내용은man polkit
을 사용합니다.libvirt
제어 정책을 수정합니다. 이렇게 하려면 다음을 수행합니다.-
/etc/polkit-1/
디렉터리에 새 .rules 파일을 만듭니다.rules.
d/ 이 파일에 사용자 지정 정책을 추가하고 저장합니다.
libvirt
제어 정책의 자세한 내용 및 예제는libvirt
업스트림 설명서를 참조하십시오.
-
polkit
에 의해 결정된 액세스 정책을 사용하도록 VM을 구성합니다.이렇게 하려면
/etc/libvirt/
디렉토리에서 가상화 드라이버의 모든 구성 파일을 찾고 해당 파일에서access_drivers = [ "polkit" ]
행의 주석을 제거합니다.find /etc/libvirt/ -name virt*d.conf -exec sed -i 's/#access_drivers = \[ "polkit" \]/access_drivers = \[ "polkit" \]/g' {} +
# find /etc/libvirt/ -name virt*d.conf -exec sed -i 's/#access_drivers = \[ "polkit" \]/access_drivers = \[ "polkit" \]/g' {} +
Copy to Clipboard Copied! 이전 단계에서 수정한 각 파일에 대해 해당 서비스를 다시 시작합니다.
예를 들어
/etc/libvirt/virtqemud.conf
를 수정한 경우virtqemud
서비스를 다시 시작하십시오.systemctl try-restart virtqemud
# systemctl try-restart virtqemud
Copy to Clipboard Copied!
검증
제한하려는 VM 작업이 있는 사용자로 제한된 작업 중 하나를 수행합니다.
예를 들어 권한이 없는 사용자가 시스템 세션에서 생성된 VM을 볼 수 없도록 제한되는 경우:
virsh -c qemu:///system list --all
$ virsh -c qemu:///system list --all Id Name State -------------------------------
Copy to Clipboard Copied! 이 명령이 시스템에 하나 이상의 VM이 있어도 VM을 나열하지 않으면
polkit
에서 권한이 없는 사용자에 대한 작업을 성공적으로 제한합니다.
문제 해결
현재
polkit
을 사용하도록libvirt
를 구성하면libvirt-dbus
서비스와의 비호환성 때문에 RHEL 10 웹 콘솔을 사용하여 VM에 연결할 수 없습니다.웹 콘솔에서 VM에 대한 세분화된 액세스 제어가 필요한 경우 사용자 지정 D-Bus 정책을 생성합니다. 자세한 내용은 Cockpit에서 가상 머신에 대한 세분화된 제어를 구성하는 Red Hat 지식베이스 솔루션을 참조하십시오.
19.8. VNC 암호 구성
VM(가상 머신)의 그래픽 출력에 대한 액세스를 관리하려면 VM의 VNC 콘솔에 대한 암호를 구성할 수 있습니다.
VM에 VNC 암호가 구성된 경우 VM 사용자는 VM의 VNC 그래픽 콘솔(예: virt-viewer
유틸리티 사용)을 보거나 상호 작용하려고 할 때 암호를 입력해야 합니다.
VNC 암호는 VM 환경의 보안을 보장하기에 충분하지 않습니다. 자세한 내용은 VNC 보안에 대한 QEMU 설명서를 참조하십시오.
또한 VNC 암호는 VM 구성에 일반 텍스트로 저장되므로 암호가 적용되려면 사용자가 VM 구성을 표시할 수 없어야 합니다.
사전 요구 사항
VNC 암호로 보호하려는 VM에는 VNC 그래픽이 구성되어 있습니다.
이 경우
virsh dumpxml
명령을 다음과 같이 사용합니다.virsh dumpxml <vm-name> | grep graphics
# virsh dumpxml <vm-name> | grep graphics <graphics type='vnc' ports='-1' autoport=yes listen=127.0.0.1> </graphics>
Copy to Clipboard Copied!
프로세스
VNC 암호를 할당할 VM의 구성을 엽니다.
virsh edit <vm-name>
# virsh edit <vm-name>
Copy to Clipboard Copied! 구성 줄에서
passwd
특성과 password 문자열을 추가합니다. 암호는 8자 이상이어야 합니다.<graphics type='vnc' ports='-1' autoport=yes listen=127.0.0.1 passwd='<password>'>
<graphics type='vnc' ports='-1' autoport=yes listen=127.0.0.1 passwd='<password>'>
Copy to Clipboard Copied! 선택 사항: 또한 암호가 만료되는 날짜 및 시간을 정의합니다.
<graphics type='vnc' ports='-1' autoport=yes listen=127.0.0.1 passwd='<password>' passwdValidTo='2025-02-01T15:30:00'>
<graphics type='vnc' ports='-1' autoport=yes listen=127.0.0.1 passwd='<password>' passwdValidTo='2025-02-01T15:30:00'>
Copy to Clipboard Copied! 이 예에서 암호는 2025년 2월 1일 UTC 15:30에 만료됩니다.
- 설정을 저장합니다.
검증
수정된 VM을 시작합니다.
virsh start <vm-name>
# virsh start <vm-name>
Copy to Clipboard Copied! VM의 그래픽 콘솔을 엽니다. 예를 들면
virt-viewer
유틸리티를 사용합니다.virt-viewer <vm-name>
# virt-viewer <vm-name>
Copy to Clipboard Copied! VNC 암호가 올바르게 구성된 경우 암호를 입력하라는 대화 상자가 표시됩니다.
19.9. 가상화를 위한 SELinux 부울
RHEL 10에서는 강제 모드의 SELinux가 있는 호스트에서 자동으로 활성화된 특수 SELinux 부울 세트인 sVirt
기능을 제공합니다.
RHEL 10 시스템에서 가상 시스템 보안을 세밀하게 구성하려면 호스트에서 SELinux 부울을 구성하여 하이퍼바이저가 특정 방식으로 작동하도록 할 수 있습니다.
모든 가상화 관련 부울 및 해당 상태를 나열하려면 getsebool -a | grep virt
명령을 사용합니다.
getsebool -a | grep virt
$ getsebool -a | grep virt
[...]
virt_sandbox_use_netlink --> off
virt_sandbox_use_sys_admin --> off
virt_transition_userdomain --> off
virt_use_comm --> off
virt_use_execmem --> off
virt_use_fusefs --> off
[...]
특정 부울을 활성화하려면 명령에 root로 setsebool -P boolean_name on
명령을 사용합니다. 부울을 비활성화하려면 setsebool -P boolean_name off
를 사용합니다.
다음 표에는 RHEL 10에서 사용할 수 있는 가상화 관련 부울과 활성화 시 수행하는 작업이 나열되어 있습니다.
SELinux 부울 | 설명 |
---|---|
staff_use_svirt | 루트가 아닌 사용자가 VM을 생성하고 sVirt로 전환할 수 있습니다. |
unprivuser_use_svirt | 권한이 없는 사용자가 VM을 생성하고 sVirt로 전환할 수 있습니다. |
virt_sandbox_use_audit | 샌드박스 컨테이너가 감사 메시지를 보낼 수 있습니다. |
virt_sandbox_use_netlink | 샌드박스 컨테이너에서 netlink 시스템 호출을 사용할 수 있습니다. |
virt_sandbox_use_sys_admin | 샌드박스 컨테이너가 mount와 같은 sys_admin 시스템 호출을 사용하도록 활성화합니다. |
virt_transition_userdomain | 가상 프로세스를 사용자 도메인으로 실행할 수 있습니다. |
virt_use_comm | virt이 직렬/병렬 통신 포트를 사용할 수 있습니다. |
virt_use_execmem | 제한된 가상 게스트가 실행 가능 메모리 및 실행 가능한 스택을 사용할 수 있도록 합니다. |
virt_use_fusefs | virt에서 FUSE 마운트된 파일을 읽을 수 있습니다. |
virt_use_nfs | virt을 통해 NFS 마운트된 파일을 관리할 수 있습니다. |
virt_use_rawip | virt이 rawip 소켓과 상호 작용할 수 있습니다. |
virt_use_samba | virt을 통해 CIFS 마운트 파일을 관리할 수 있습니다. |
virt_use_sanlock | 제한된 가상 게스트가 sanlock과 상호 작용할 수 있습니다. |
virt_use_usb | virt에서 USB 장치를 사용할 수 있습니다. |
virt_use_xserver | 가상 머신이 X Window System과 상호 작용할 수 있도록 합니다. |
20장. 호스트와 가상 머신 간의 파일 공유
호스트 시스템과 실행되는 가상 머신(VM) 간에 데이터를 공유해야 하는 경우가 많습니다. 이를 빠르고 효율적으로 수행하려면 virtio
파일 시스템(virtiofs
)을 사용할 수 있습니다.
20.1. virtiofs를 사용하여 호스트와 가상 머신 간의 파일 공유
virtio
파일 시스템(virtiofs
)을 사용하여 로컬 파일 시스템 구조와 동일하게 작동하는 디렉터리 트리와 호스트(VM) 간에 파일을 공유할 수 있습니다.
20.1.1. 명령줄을 사용하여 호스트와 Windows 가상 머신 간의 파일 공유
RHEL 10을 하이퍼바이저로 사용하는 경우 virtiofs
기능을 사용하여 virtio-win
패키지와 함께 호스트 시스템과 Windows VM(가상 머신) 간에 파일을 효율적으로 공유할 수 있습니다.
명령과 virtiofs
.exe-i
매개변수를 사용하여 Windows VM에서 virtiofs 서비스를 대소문자를 구분하지 않는 모드로 실행할 수 있습니다.
사전 요구 사항
VM과 공유할 디렉터리입니다. 기존 디렉터리를 공유하지 않으려면 새 디렉터리를 생성합니다(예: shared-files ).
mkdir /root/shared-files
# mkdir /root/shared-files
Copy to Clipboard Copied! -
virtio
드라이버 설치 미디어를 VM에 연결했습니다.
-
Windows VM에
virtio-win
패키지를 설치했습니다.
프로세스
VM과 공유할 호스트의 각 디렉터리에 대해 VM의 XML 구성에서 virtiofs 파일 시스템으로 설정합니다.
의도한 VM의 XML 구성을 엽니다.
virsh edit vm-name
# virsh edit vm-name
Copy to Clipboard Copied! VM의 XML 구성의 <
devices&
gt; 섹션에 다음과 유사한 항목을 추가합니다.<filesystem type='mount' accessmode='passthrough'> <driver type='virtiofs'/> <binary path='/usr/libexec/virtiofsd' xattr='on'/> <source dir='/root/shared-files'/> <target dir='host-file-share'/> </filesystem>
<filesystem type='mount' accessmode='passthrough'> <driver type='virtiofs'/> <binary path='/usr/libexec/virtiofsd' xattr='on'/> <source dir='/root/shared-files'/> <target dir='host-file-share'/> </filesystem>
Copy to Clipboard Copied! 이 예에서는 호스트의
/root/shared-files
디렉터리를 VM에host-file-share
로 표시하도록 설정합니다.
VM의 공유 메모리를 설정합니다. 이렇게 하려면 XML 구성의 <
domain>
섹션에 공유 메모리 지원을 추가합니다.<domain> [...] <memoryBacking> <access mode='shared'/> </memoryBacking> [...] </domain>
<domain> [...] <memoryBacking> <access mode='shared'/> </memoryBacking> [...] </domain>
Copy to Clipboard Copied! VM을 부팅합니다.
virsh start vm-name
# virsh start vm-name
Copy to Clipboard Copied! Windows VM에 WinFsp를 설치합니다. 이렇게 하려면
virtio-win
ISO 이미지를 마운트하고,winfsp
Cryostat 설치 프로그램을 시작한 다음 프롬프트를 따릅니다.설치 마법사의 사용자 지정 설정 창에서 VM에 설치할 기능을 선택합니다.
virtiofs 서비스를 시작합니다.
sc start VirtioFsSvc
# sc start VirtioFsSvc
Copy to Clipboard Copied! 이 PC 로 이동합니다.
File Explorer → This PC
올바르게 구성된 경우 Windows VM에서
Z:
부터 사용 가능한 첫 번째 드라이브 문자로virtiofs
를 사용할 수 있으며 뒤로 이동합니다. 예를 들어my_viofs (Z:)
.중요공유 디렉터리에 액세스하려면 각 VM이 재부팅된 후
virtiofs
서비스를 다시 시작해야 합니다.선택 사항: 추가
virtiofs
인스턴스를 설정하려면 다음을 수행합니다.virtiofs
서비스를 중지합니다.sc stop VirtioFsSvc sc config VirtioFsSvc start=demand
# sc stop VirtioFsSvc # sc config VirtioFsSvc start=demand
Copy to Clipboard Copied! WinFSP.Launcher 서비스를 구성하여 여러 virtiofs 인스턴스를 설정합니다.
"C:\Program Files (x86)\WinFsp\bin\fsreg.bat" virtiofs "<path to the binary>\virtiofs.exe" "-t %1 -m %2"
# "C:\Program Files (x86)\WinFsp\bin\fsreg.bat" virtiofs "<path to the binary>\virtiofs.exe" "-t %1 -m %2"
Copy to Clipboard Copied! 드라이브에
virtiofs
인스턴스를 마운트합니다.예를 들어
mount_tag0
태그가 있는virtiofs
를Y:
드라이브에 마운트하려면 다음을 수행합니다."C:\Program Files (x86)\WinFsp\bin\launchctl-x64.exe" start virtiofs viofsY mount_tag0 Y:
"C:\Program Files (x86)\WinFsp\bin\launchctl-x64.exe" start virtiofs viofsY mount_tag0 Y:
Copy to Clipboard Copied! -
이전 단계를 반복하여 모든
virtiofs
인스턴스를 마운트합니다. virtiofs
인스턴스를 마운트 해제하려면 다음을 수행합니다."C:\Program Files (x86)\WinFsp\bin\launchctl-x64.exe" stop virtiofs viofsY
"C:\Program Files (x86)\WinFsp\bin\launchctl-x64.exe" stop virtiofs viofsY
Copy to Clipboard Copied!
검증
Windows VM에서 이 PC 로 이동합니다.
File Explorer → This PC
-
virtiofs
서비스를 설정할 때 마운트 지점을 지정하지 않은 경우z:
로 시작하는 첫 번째 사용 가능한 드라이브 문자를 사용하고 뒤로 이동합니다. -
virtiofs
인스턴스가 여러 개 설정된 경우 인스턴스에 할당된 문자와 함께 드라이브로 표시됩니다.
-
21장. 가상 머신 문제 진단
VM(가상 머신)으로 작업할 때 다양한 수준의 심각도에 문제가 발생할 수 있습니다. 일부 문제는 빠르고 쉽게 해결할 수 있지만 VM 관련 데이터 및 로그를 캡처하여 문제를 보고하거나 진단해야 할 수 있습니다.
다음 섹션에서는 로그 생성 및 몇 가지 일반적인 VM 문제 진단 및 이러한 문제 보고에 대한 자세한 정보를 제공합니다.
21.1. libvirt 디버그 로그 생성
VM(가상 머신) 문제를 진단하려면 libvirt
디버그 로그를 생성하고 검토하는 것이 좋습니다. 디버그 로그를 첨부하는 것은 VM 관련 문제를 해결하기 위한 지원을 요청할 때도 유용합니다.
21.1.1. libvirt 디버그 로그 이해
디버그 로그는 VM(가상 머신) 런타임 중에 발생하는 이벤트에 대한 데이터를 포함하는 텍스트 파일입니다. 로그는 호스트 라이브러리 및 libvirt
데몬과 같은 기본 서버 측 기능에 대한 정보를 제공합니다. 로그 파일에는 실행 중인 모든 VM의 표준 오류 출력(stderr
)도 포함됩니다.
디버그 로깅은 기본적으로 활성화되어 있지 않으며 libvirt
를 시작할 때 활성화해야 합니다.
-
현재 세션에 대한
libvirt
디버그 로그를 수집하려면 런타임 중 libvirt 디버그 로그 활성화를 참조하십시오. -
libvirt
디버그 로그를 기본적으로 수집하려면 libvirt 디버그 로그 활성화를 참조하십시오.
나중에 VM 문제에 대한 지원을 요청할 때 로그를 연결할 수 있습니다. 자세한 내용은 요청을 지원하기 위해 libvirt 디버그 로그 연결을 참조하십시오.
21.1.2. libvirt 디버그 로그 활성화
libvirt가 시작될 때마다
디버그 로깅이 자동으로 활성화되도록 구성할 수 있습니다. 기본적으로 libvirt
virtqemud
는 RHEL 10의 기본 libvirt
데몬입니다. libvirt
구성을 영구적으로 변경하려면 /etc/libvirt
디렉터리에 있는 virtqemud.conf
파일을 편집해야 합니다.
프로세스
-
편집기에서
virtqemud.conf
파일을 엽니다. 요구 사항에 따라 필터를 교체하거나 설정합니다.
표 21.1. 필터 값 디버깅 1
libvirt
에서 생성된 모든 메시지를 기록합니다.2
모든 디버깅되지 않은 정보를 기록합니다.
3
모든 경고 및 오류 메시지를 기록합니다. 이는 기본값입니다.
4
오류 메시지만 기록합니다.
예 21.1. 로깅 필터의 데몬 설정 예
다음 설정은 다음과 같습니다.
-
원격
,util.json
및rpc
계층의 모든 오류 및 경고 메시지를 기록합니다. -
이벤트
계층의 오류 메시지만 기록합니다. -
필터링된 로그를
/var/log/libvirt/libvirt.log
에 저장
log_filters="3:remote 4:event 3:util.json 3:rpc" log_outputs="1:file:/var/log/libvirt/libvirt.log"
log_filters="3:remote 4:event 3:util.json 3:rpc" log_outputs="1:file:/var/log/libvirt/libvirt.log"
Copy to Clipboard Copied! -
- 저장 및 종료합니다.
libvirt
데몬을 다시 시작합니다.systemctl restart virtqemud.service
$ systemctl restart virtqemud.service
Copy to Clipboard Copied!
21.1.3. 런타임 중 libvirt 디버그 로그 활성화
libvirt
데몬의 런타임 설정을 수정하여 디버그 로그를 활성화하고 출력 파일에 저장할 수 있습니다.
이 기능은 문제를 다시 시작하거나 동시에 실행 중인 마이그레이션 또는 백업과 같은 다른 프로세스가 있기 때문에 libvirt
데몬을 다시 시작할 수 없는 경우 유용합니다. 구성 파일을 편집하거나 데몬을 다시 시작하지 않고 명령을 시도하려는 경우 런타임 설정 수정에도 유용합니다.
사전 요구 사항
-
libvirt-admin
패키지가 설치되어 있는지 확인합니다.
프로세스
선택 사항: 활성 로그 필터 세트를 백업합니다.
virt-admin -c virtqemud:///system daemon-log-filters >> virt-filters-backup
# virt-admin -c virtqemud:///system daemon-log-filters >> virt-filters-backup
Copy to Clipboard Copied! 이렇게 하면 로그를 생성한 후 활성 필터 세트를 복원할 수 있습니다. 필터를 복원하지 않으면 메시지가 계속 기록되어 시스템 성능에 영향을 줄 수 있습니다.
virt-admin
유틸리티를 사용하여 디버깅을 활성화하고 요구 사항에 따라 필터를 설정합니다.표 21.2. 필터 값 디버깅 1
libvirt에서 생성된 모든 메시지를 기록합니다.
2
모든 디버깅되지 않은 정보를 기록합니다.
3
모든 경고 및 오류 메시지를 기록합니다. 이는 기본값입니다.
4
오류 메시지만 기록합니다.
예 21.2. 로깅 필터를 위한 virt-admin 설정 샘플
다음 명령은 다음과 같습니다.
-
원격
,util.json
및rpc
계층의 모든 오류 및 경고 메시지를 기록합니다. -
이벤트
계층의 오류 메시지만 기록합니다.
virt-admin -c virtqemud:///system daemon-log-filters "3:remote 4:event 3:util.json 3:rpc"
# virt-admin -c virtqemud:///system daemon-log-filters "3:remote 4:event 3:util.json 3:rpc"
Copy to Clipboard Copied! -
virt-admin
유틸리티를 사용하여 로그를 특정 파일 또는 디렉터리에 저장합니다.예를 들어 다음 명령은 로그 출력을
/var/log/libvirt/
디렉터리의libvirt.log
파일에 저장합니다.virt-admin -c virtqemud:///system daemon-log-outputs "1:file:/var/log/libvirt/libvirt.log"
# virt-admin -c virtqemud:///system daemon-log-outputs "1:file:/var/log/libvirt/libvirt.log"
Copy to Clipboard Copied! 선택 사항: 필터를 제거하여 모든 VM 관련 정보가 포함된 로그 파일을 생성할 수도 있습니다. 그러나 이 파일에는 libvirt의 모듈에서 생성된 많은 중복 정보가 포함될 수 있으므로 권장되지 않습니다.
virt-admin
유틸리티를 사용하여 빈 필터 세트를 지정합니다.virt-admin -c virtqemud:///system daemon-log-filters
# virt-admin -c virtqemud:///system daemon-log-filters Logging filters:
Copy to Clipboard Copied!
선택 사항: 이전에 만든 백업 파일을 사용하여 필터를 원래 상태로 복원합니다.
virt-admin -c virtqemud:///system daemon-log-filters "<original-filters>"
# virt-admin -c virtqemud:///system daemon-log-filters "<original-filters>"
Copy to Clipboard Copied! 이 명령에서 <
original-filters
>를virt-filters-backup
의 내용으로 바꿉니다.필터를 복원하지 않으면 메시지가 계속 기록되므로 시스템 성능에 영향을 줄 수 있습니다.
21.1.4. 요청을 지원하기 위해 libvirt 디버그 로그 연결
VM(가상 머신) 문제를 진단하고 해결하기 위해 추가 지원을 요청해야 할 수 있습니다. 지원 요청에 디버그 로그를 연결하는 것이 좋습니다. 지원 팀이 VM 관련 문제를 신속하게 해결하는 데 필요한 모든 정보에 액세스할 수 있도록 하는 것이 좋습니다.
프로세스
- 문제를 보고하고 지원을 요청하려면 지원 케이스를 작성하십시오.
발생한 문제에 따라 보고서와 함께 다음 로그를 연결합니다.
-
libvirt
서비스에 문제가 있는 경우 호스트에서/var/log/libvirt/libvirt.log
파일을 연결합니다. 특정 VM에 문제가 있는 경우 해당 로그 파일을 첨부합니다.
예를 들어 testguest1 VM의 경우
/var/log/libvirt/qemu/
파일을 연결합니다.testguest1.log
에 있는 testguest1.log
-
21.2. 가상 머신 코어 덤프
VM(가상 머신)이 충돌하거나 오작동한 이유를 분석하기 위해 나중에 분석 및 진단을 위해 VM 코어를 디스크의 파일에 덤프할 수 있습니다.
21.2.1. 가상 머신 코어 덤프 작동 방식
VM(가상 머신)을 사용하려면 실행 중인 수많은 프로세스가 정확하고 효율적으로 작동해야 합니다. 사용하는 동안 실행 중인 VM이 예기치 않게 또는 오작동이 종료될 수 있는 경우도 있습니다. VM을 다시 시작하면 데이터가 재설정되거나 손실될 수 있으므로 VM이 충돌하는 정확한 문제를 진단하기가 어렵습니다.
이러한 경우 VM을 재부팅하기 전에 virsh dump
유틸리티를 사용하여 VM의 코어를 파일로 저장(또는 덤프)할 수 있습니다. 코어 덤프 파일에는 VM에 대한 자세한 정보가 포함된 VM의 원시 물리적 메모리 이미지가 포함되어 있습니다. 이 정보는 수동으로 또는 crash
유틸리티와 같은 도구를 사용하여 VM 문제를 진단하는 데 사용할 수 있습니다.
21.2.2. 가상 머신 코어 덤프 파일 생성
VM(가상 머신) 코어 덤프에는 언제든지 VM 상태에 대한 자세한 정보가 포함되어 있습니다. VM의 스냅샷과 유사한 이 정보는 VM이 오작동하거나 갑자기 종료되는 경우 문제를 감지하는 데 도움이 될 수 있습니다.
사전 요구 사항
- 파일을 저장할 충분한 디스크 공간이 있는지 확인합니다. VM에 사용되는 공간은 VM에 할당된 RAM 크기에 따라 다릅니다.
프로세스
virsh dump
유틸리티를 사용합니다.예를 들어 다음 명령은
test-guest1
VM의 코어, 메모리 및 CPU 공통 레지스터 파일을/core/file
디렉터리의sample-core.file
에 덤프합니다.virsh dump test-guest1 /core/file/sample-core.file --memory-only
# virsh dump test-guest1 /core/file/sample-core.file --memory-only Domain 'test-guest1' dumped to /core/file/sample-core.file
Copy to Clipboard Copied!
크래시
유틸리티는 더 이상 virsh dump 명령의 기본 파일 형식을 지원하지 않습니다. 크래시
를 사용하여 코어 덤프 파일을 분석하려면 --memory-only
옵션을 사용하여 파일을 생성해야 합니다.
또한 Red Hat 지원 케이스에 연결하려면 코어 덤프 파일을 생성할 때 --memory-only
옵션을 사용해야 합니다.
문제 해결
메모리 오류 시 System(시스템)의 교착 상태에
있는 virsh dump
명령이 실패하는 경우 코어 덤프 파일에 충분한 메모리를 할당하고 있는지 확인합니다. 이렇게 하려면 다음 crashkernel
옵션 값을 사용합니다. 또는 코어 덤프 메모리를 자동으로 할당하는 crashkernel
을 전혀 사용하지 마십시오.
crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M
crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M
21.3. 가상 머신 프로세스 역행
VM(가상 머신)의 오작동과 관련된 프로세스는 gstack
명령과 함께 PID(프로세스 ID)와 함께 사용하여 오작동 프로세스의 실행 스택 추적을 생성할 수 있습니다. 프로세스가 스레드 그룹의 일부인 경우 모든 스레드도 추적합니다.
사전 요구 사항
GDB
패키지가 설치되었는지 확인합니다.GDB
및 사용 가능한 구성 요소 설치에 대한 자세한 내용은 GNU Debugger 설치를 참조하십시오.역추적할 프로세스의 PID를 알고 있는지 확인합니다.
pgrep
명령 다음에 프로세스 이름을 입력하여 PID를 찾을 수 있습니다. 예를 들면 다음과 같습니다.pgrep libvirt
# pgrep libvirt 22014 22025
Copy to Clipboard Copied!
프로세스
gstack
유틸리티 다음에 역추적 프로세스의 PID를 사용합니다.예를 들어 다음 명령은 PID 22014를 사용하여
libvirt
프로세스를 역추적합니다.gstack 22014
# gstack 22014 Thread 3 (Thread 0x7f33edaf7700 (LWP 22017)): #0 0x00007f33f81aef21 in poll () from /lib64/libc.so.6 #1 0x00007f33f89059b6 in g_main_context_iterate.isra () from /lib64/libglib-2.0.so.0 #2 0x00007f33f8905d72 in g_main_loop_run () from /lib64/libglib-2.0.so.0 ...
Copy to Clipboard Copied!
21.4. 가상 머신 문제를 보고하고 로그를 제공하기 위한 추가 리소스
추가 도움말 및 지원을 요청하려면 다음을 수행할 수 있습니다.
redhat-support-tool 명령줄 옵션, Red Hat Portal UI 또는 여러 FTP 방법을 사용하여 서비스 요청을 제기합니다.
- 문제를 보고하고 지원을 요청하려면 지원 케이스 열기를 참조하십시오.
서비스 요청을 제출할 때 SOS 보고서 및 로그 파일을 업로드합니다.
이를 통해 Red Hat 지원 엔지니어는 참조에 필요한 모든 진단 정보를 사용할 수 있습니다.
- SOS 보고서에 대한 자세한 내용은 Red Hat Knowledgebase 솔루션 What is an SOS Report and how to create one in Red Hat Enterprise Linux에서 참조하십시오.
- 로그 파일 첨부에 대한 자세한 내용은 Red Hat 지식베이스 솔루션에서 Red Hat 지원에 파일을 제공하는 방법을참조하십시오.
22장. 중첩된 가상 머신 생성
로컬 호스트가 실행 중인 것과 다른 호스트 운영 체제가 필요한 경우 중첩된 VM(가상 머신)을 사용할 수 있습니다. 이를 통해 추가 물리적 하드웨어가 필요하지 않습니다.
대부분의 환경에서 중첩된 가상화는 RHEL 10에서 기술 프리뷰로 만 사용할 수 있습니다.
지원되는 환경과 지원되지 않는 환경에 대한 자세한 내용은 중첩된 가상화에 대한 지원 제한 사항을 참조하십시오.
22.1. 중첩된 가상화란 무엇입니까?
중첩된 가상화를 사용하면 다른 VM 내에서 VM(가상 머신)을 실행할 수 있습니다. 물리적 호스트에서 실행되는 표준 VM도 두 번째 하이퍼바이저로 작동하여 자체 VM을 생성할 수 있습니다.
중첩된 가상화 용어
- Level 0 (
L0
) - 베어 메탈 시스템인 물리적 호스트.
- Level 1 (
L1
) -
추가 가상 호스트 역할을 할 수 있는
L0
물리적 호스트에서 실행되는 표준 VM입니다. - Level 2 (
L2
) L1
가상 호스트에서 실행되는 중첩된 VM입니다.중요: 두 번째 수준의 가상화는
L2
VM의 성능을 심각하게 제한합니다. 이러한 이유로 중첩된 가상화는 주로 다음과 같은 개발 및 테스트 시나리오를 위한 것입니다.- 제한된 환경에서 하이퍼바이저 디버깅
- 제한된 양의 물리적 리소스에서 대규모 가상 배포 테스트
대부분의 환경에서 중첩된 가상화는 RHEL 10에서 기술 프리뷰로 만 사용할 수 있습니다.
지원되는 환경과 지원되지 않는 환경에 대한 자세한 내용은 중첩된 가상화에 대한 지원 제한 사항을 참조하십시오.
22.2. 중첩된 가상화에 대한 지원 제한 사항
대부분의 환경에서 중첩된 가상화는 RHEL 10에서 기술 프리뷰로만 사용할 수 있습니다.
그러나 Windows 가상 머신(WSL2)과 함께 Windows VM(가상 머신)을 사용하여 Windows VM 내에 가상 Linux 환경을 생성할 수 있습니다. 이 사용 사례는 특정 조건에서 RHEL 10에서 완전히 지원됩니다.
중첩된 가상화의 관련 용어에 대한 자세한 내용은 중첩된 가상화 란?를 참조하십시오.
지원되는 환경
지원되는 중첩된 가상화 배포를 생성하려면 RHEL 9 또는 RHEL 10 L0
호스트에서 L1
Windows VM을 생성하고 WSL2를 사용하여 L1
Windows VM 내에 가상 Linux 환경을 생성합니다. 현재 지원되는 유일한 중첩된 환경입니다.
L0
호스트는 Intel 또는 AMD 시스템이어야 합니다. ARM 또는 IBM Z와 같은 기타 아키텍처는 현재 지원되지 않습니다.
다음 운영 체제 버전만 사용해야 합니다.
L0 호스트에서 다음을 수행합니다. | L1 VM에서 다음을 수행합니다. |
---|---|
RHEL 10.0 이상 | Windows Server 2019 이상(WSL2 포함) |
WSL2를 사용한 Windows 10 이상 |
WSL2 설치 및 지원되는 Linux 배포를 선택하는 방법에 대한 지침은 Microsoft 설명서 를 참조하십시오.
지원되는 중첩된 환경을 생성하려면 다음 절차 중 하나를 사용합니다.
기술 프리뷰 환경
이러한 중첩된 환경은 기술 프리뷰로만 사용할 수 있으며 지원되지 않습니다.
L0
호스트는 Intel, AMD 또는 IBM Z 시스템이어야 합니다. 현재 중첩된 가상화는 ARM과 같은 다른 아키텍처에서는 작동하지 않습니다.
배포가 작동하려면 다음 운영 체제 버전만 사용해야 합니다.
L0 호스트에서 다음을 수행합니다. | L1 VM에서 다음을 수행합니다. | L2 VM에서 다음을 수행합니다. |
---|---|---|
RHEL 10.0 이상 | RHEL 9.6 이상 | RHEL 9.6 이상 |
RHEL 10.0 이상 | RHEL 10.0 이상 | |
Hyper-V를 사용한 Windows Server 2016 이상 | Windows Server 2019 이상 | |
Hyper-V를 사용한 Windows 10 이상 |
다른 Red Hat 가상화 제품에서 사용할 때 RHEL L1
VM 생성은 테스트되지 않습니다. 여기에는 다음이 포함됩니다.
- Red Hat Virtualization
- Red Hat OpenStack Platform
- OpenShift Virtualization
기술 프리뷰 중첩 환경을 생성하려면 다음 절차 중 하나를 사용합니다.
하이퍼바이저 제한
-
현재 Red Hat은 RHEL-KVM에서만 중첩을 테스트합니다. RHEL을
L0
하이퍼바이저로 사용하는 경우 RHEL 또는 Windows를L1
하이퍼바이저로 사용할 수 있습니다. -
VMware ESXi 또는 AWS(Amazon Web Services)와 같은 비KVM
L0
하이퍼바이저에서L1
RHEL VM을 사용하는 경우 RHEL 게스트 운영 체제에서L2
VM 생성이 테스트되지 않았으며 작동하지 않을 수 있습니다.
기능 제한
-
L2
VM을 하이퍼바이저로 사용하고L3
게스트를 생성하는 것은 제대로 테스트되지 않았으며 작동하지 않을 것으로 예상됩니다. -
중첩된 가상화가
L0
호스트에서 활성화된 경우 현재 VM 마이그레이션은 AMD 시스템에서 작동하지 않습니다. IBM Z 시스템에서는 대규모 페이지 백업 스토리지 및 중첩된 가상화를 동시에 사용할 수 없습니다.
modprobe kvm hpage=1 nested=1 dmesg |tail -1
# modprobe kvm hpage=1 nested=1 modprobe: ERROR: could not insert 'kvm': Invalid argument # dmesg |tail -1 [90226.508366] kvm-s390: A KVM host that supports nesting cannot back its KVM guests with huge pages
Copy to Clipboard Copied! -
L0
호스트에서 사용 가능한 일부 기능은L1
하이퍼바이저에서 사용할 수 없습니다.
22.3. Intel에서 중첩된 가상 머신 생성
Intel 호스트에서 중첩된 가상화를 활성화하고 구성하려면 아래 단계를 수행합니다.
대부분의 환경에서 중첩된 가상화는 RHEL 10에서 기술 프리뷰로 만 사용할 수 있습니다.
지원되는 환경과 지원되지 않는 환경에 대한 자세한 내용은 중첩된 가상화에 대한 지원 제한 사항을 참조하십시오.
사전 요구 사항
- L1 VM(가상 머신)을 실행하는 L0 RHEL 10 호스트.
-
하이퍼바이저 CPU는 중첩된 가상화를 지원해야 합니다. 확인하려면 L0 하이퍼바이저에서
cat /proc/cpuinfo
명령을 사용합니다. 명령의 출력에vmx
및ept
플래그가 포함된 경우 L2 VM을 생성할 수 있습니다. 이는 일반적으로 Intel Xeon v3 코어 이상에서 발생합니다. L0 호스트에서 중첩된 가상화가 활성화되어 있는지 확인합니다.
cat /sys/module/kvm_intel/parameters/nested
# cat /sys/module/kvm_intel/parameters/nested
Copy to Clipboard Copied! - 명령이 1 또는 Y 를 반환하면 기능이 활성화됩니다. 나머지 사전 요구 사항을 건너뛰고 Procedure 섹션을 계속합니다.
명령이 0 또는 N 을 반환하지만 시스템이 중첩된 가상화를 지원하는 경우 다음 단계를 사용하여 기능을 활성화합니다.
kvm_intel
모듈을 언로드합니다.modprobe -r kvm_intel
# modprobe -r kvm_intel
Copy to Clipboard Copied! 중첩 기능을 활성화합니다.
modprobe kvm_intel nested=1
# modprobe kvm_intel nested=1
Copy to Clipboard Copied! 이제 중첩 기능이 활성화되지만 L0 호스트를 다음 재부팅할 때까지만 활성화됩니다. 영구적으로 활성화하려면
/etc/modprobe.d/kvm.conf
파일에 다음 행을 추가합니다.options kvm_intel nested=1
options kvm_intel nested=1
Copy to Clipboard Copied!
프로세스
중첩된 가상화를 위해 L1 VM을 구성합니다.
VM의 XML 구성을 엽니다. 다음 예제에서는 Intel-L1 VM의 구성을 엽니다.
virsh edit Intel-L1
# virsh edit Intel-L1
Copy to Clipboard Copied! <
cpu
> 요소를 편집하여host-passthrough
CPU 모드를 사용하도록 VM을 구성합니다.<cpu mode='host-passthrough'/>
<cpu mode='host-passthrough'/>
Copy to Clipboard Copied! VM에서 특정 CPU 모델을 사용해야 하는 경우
사용자 지정
CPU 모드를 사용하도록 VM을 구성합니다. <cpu
> 요소 내에서 <feature policy='require' name='vmx'/
> 요소 및 CPU모델이
지정된 CPU 모델이 있는 <model> 요소를 추가합니다. 예를 들면 다음과 같습니다.<cpu mode ='custom' match ='exact' check='partial'> <model fallback='allow'>Haswell-noTSX</model> <feature policy='require' name='vmx'/> ... </cpu>
<cpu mode ='custom' match ='exact' check='partial'> <model fallback='allow'>Haswell-noTSX</model> <feature policy='require' name='vmx'/> ... </cpu>
Copy to Clipboard Copied!
- L1 VM 내에 L2 VM을 생성합니다. 이렇게 하려면 L1 VM을 생성할 때와 동일한 절차를 따르십시오.
22.4. AMD에서 중첩된 가상 머신 생성
아래 단계에 따라 AMD 호스트에서 중첩된 가상화를 활성화하고 구성합니다.
대부분의 환경에서 중첩된 가상화는 RHEL 10에서 기술 프리뷰로 만 사용할 수 있습니다.
지원되는 환경과 지원되지 않는 환경에 대한 자세한 내용은 중첩된 가상화에 대한 지원 제한 사항을 참조하십시오.
사전 요구 사항
- L1 VM(가상 머신)을 실행하는 L0 RHEL 10 호스트.
-
하이퍼바이저 CPU는 중첩된 가상화를 지원해야 합니다. 확인하려면 L0 하이퍼바이저에서
cat /proc/cpuinfo
명령을 사용합니다. 명령의 출력에svm
및npt
플래그가 포함된 경우 L2 VM을 생성할 수 있습니다. 이는 일반적으로 AMD EPYC 코어 이상에서 발생합니다. L0 호스트에서 중첩된 가상화가 활성화되어 있는지 확인합니다.
cat /sys/module/kvm_amd/parameters/nested
# cat /sys/module/kvm_amd/parameters/nested
Copy to Clipboard Copied! - 명령이 1 또는 Y 를 반환하면 기능이 활성화됩니다. 나머지 사전 요구 사항을 건너뛰고 Procedure 섹션을 계속합니다.
명령이 0 또는 N 을 반환하는 경우 다음 단계를 사용하여 기능을 활성화합니다.
- L0 호스트에서 실행 중인 모든 VM을 중지합니다.
kvm_amd
모듈을 언로드합니다.modprobe -r kvm_amd
# modprobe -r kvm_amd
Copy to Clipboard Copied! 중첩 기능을 활성화합니다.
modprobe kvm_amd nested=1
# modprobe kvm_amd nested=1
Copy to Clipboard Copied! 이제 중첩 기능이 활성화되지만 L0 호스트를 다음 재부팅할 때까지만 활성화됩니다. 영구적으로 활성화하려면
/etc/modprobe.d/kvm.conf
파일에 다음을 추가합니다.options kvm_amd nested=1
options kvm_amd nested=1
Copy to Clipboard Copied!
프로세스
중첩된 가상화를 위해 L1 VM을 구성합니다.
VM의 XML 구성을 엽니다. 다음 예제에서는 AMD-L1 VM의 구성을 엽니다.
virsh edit AMD-L1
# virsh edit AMD-L1
Copy to Clipboard Copied! <
cpu
> 요소를 편집하여host-passthrough
CPU 모드를 사용하도록 VM을 구성합니다.<cpu mode='host-passthrough'/>
<cpu mode='host-passthrough'/>
Copy to Clipboard Copied! VM에서 특정 CPU 모델을 사용해야 하는 경우
사용자 지정
CPU 모드를 사용하도록 VM을 구성합니다. <cpu
> 요소 내에서 <feature policy='require' name='svm'/
> 요소 및 CPU모델이
지정된 CPU 모델이 있는 <model> 요소를 추가합니다. 예를 들면 다음과 같습니다.<cpu mode="custom" match="exact" check="none"> <model fallback="allow">EPYC-IBPB</model> <feature policy="require" name="svm"/> ... </cpu>
<cpu mode="custom" match="exact" check="none"> <model fallback="allow">EPYC-IBPB</model> <feature policy="require" name="svm"/> ... </cpu>
Copy to Clipboard Copied!
- L1 VM 내에 L2 VM을 생성합니다. 이렇게 하려면 L1 VM을 생성할 때와 동일한 절차를 따르십시오.
22.5. IBM Z에서 중첩된 가상 머신 생성
아래 단계에 따라 IBM Z 호스트에서 중첩된 가상화를 활성화하고 구성합니다.
IBM Z는 실제로 베어 메탈 L0
호스트를 제공하지 않습니다. 대신 사용자 시스템은 이미 가상화된 시스템인 LPAR(Logical partition)에 설정되므로 L1
이라고 하는 경우가 많습니다. 그러나 이 가이드의 다른 아키텍처와 더 잘 정렬하려면 L0
호스트를 제공하는 것처럼 IBM Z를 참조하십시오.
중첩된 가상화에 대한 자세한 내용은 중첩된 가상화의 내용을 참조하십시오.
대부분의 환경에서 중첩된 가상화는 RHEL 10에서 기술 프리뷰로 만 사용할 수 있습니다.
지원되는 환경과 지원되지 않는 환경에 대한 자세한 내용은 중첩된 가상화에 대한 지원 제한 사항을 참조하십시오.
사전 요구 사항
- L1 VM(가상 머신)을 실행하는 L0 RHEL 10 호스트.
-
하이퍼바이저 CPU는 중첩된 가상화를 지원해야 합니다. 이 경우 L0 하이퍼바이저에서
cat /proc/cpuinfo
명령을 사용합니다. 명령의 출력에sie
플래그가 포함된 경우 L2 VM을 생성할 수 있습니다. L0 호스트에서 중첩된 가상화가 활성화되어 있는지 확인합니다.
cat /sys/module/kvm/parameters/nested
# cat /sys/module/kvm/parameters/nested
Copy to Clipboard Copied! - 명령이 1 또는 Y 를 반환하면 기능이 활성화됩니다. 나머지 사전 요구 사항을 건너뛰고 Procedure 섹션을 계속합니다.
명령이 0 또는 N 을 반환하는 경우 다음 단계를 사용하여 기능을 활성화합니다.
- L0 호스트에서 실행 중인 모든 VM을 중지합니다.
kvm
모듈을 언로드합니다.modprobe -r kvm
# modprobe -r kvm
Copy to Clipboard Copied! 중첩 기능을 활성화합니다.
modprobe kvm nested=1
# modprobe kvm nested=1
Copy to Clipboard Copied! 이제 중첩 기능이 활성화되지만 L0 호스트를 다음 재부팅할 때까지만 활성화됩니다. 영구적으로 활성화하려면
/etc/modprobe.d/kvm.conf
파일에 다음 행을 추가합니다.options kvm nested=1
options kvm nested=1
Copy to Clipboard Copied!
프로세스
- L1 VM 내에 L2 VM을 생성합니다. 이렇게 하려면 L1 VM을 생성할 때와 동일한 절차를 따르십시오.
23장. RHEL 10 가상화의 기능 지원 및 제한 사항
이 문서에서는 RHEL 10(Red Hat Enterprise Linux 10) 가상화의 기능 지원 및 제한 사항에 대해 설명합니다.
23.1. RHEL 가상화 지원 작동 방식
지원 제한 사항 세트는 RHEL 10(Red Hat Enterprise Linux 10)의 가상화에 적용됩니다. 즉, RHEL 10에서 가상 머신을 사용할 때 특정 기능을 사용하거나 할당된 리소스를 초과할 때 Red Hat은 특정 서브스크립션 계획이 없는 한 해당 게스트에 대한 제한된 지원만 제공합니다.
RHEL 10 가상화의 권장 기능에 나열된 기능은 RHEL 10 시스템의 KVM 하이퍼바이저와 함께 작동하도록 Red Hat에서 테스트하고 인증했습니다. 따라서 RHEL 10의 가상화에서 완전히 지원 및 사용하는 것이 좋습니다.
RHEL 10 가상화의 Unsupported 기능에 나열된 기능은 작동할 수 있지만 RHEL 10에서는 지원되지 않으며 사용할 수 없습니다. 따라서 Red Hat은 KVM에서 RHEL 10에서 이러한 기능을 사용하지 않는 것이 좋습니다.
RHEL 10 가상화의 리소스 할당 제한 에는 RHEL 10의 KVM 게스트에서 지원되는 최대 특정 리소스 양이 나열됩니다. 이 제한을 초과하는 게스트는 Red Hat의 기술 프리뷰로 간주됩니다.
별도로 명시하지 않는 한 RHEL 10 가상화에 대한 문서에서 사용하는 모든 기능 및 솔루션이 지원됩니다. 그러나 이 중 일부는 완전히 테스트되지 않았으므로 완전히 최적화되지 않을 수 있습니다.
이러한 제한 사항은 OpenShift Virtualization 또는 RHOSP(Red Hat OpenStack Platform)와 같이 Red Hat에서 제공하는 다른 가상화 솔루션에는 적용되지 않습니다.
23.2. RHEL 10 가상화에서 권장 기능
다음 기능은 Red Hat Enterprise Linux 10(RHEL 10)에 포함된 KVM 하이퍼바이저와 함께 사용하는 것이 좋습니다.
호스트 시스템 아키텍처
KVM이 포함된 RHEL 10은 다음 호스트 아키텍처에서만 지원됩니다.
- AMD64 및 Intel 64
다른 모든 하드웨어 아키텍처는 RHEL 10을 KVM 가상화 호스트로 사용하는 데 지원되지 않으며 Red Hat은 그렇게 하지 않는 것이 좋습니다.
게스트 운영 체제
Red Hat은 특정 게스트 운영 체제(OS)를 사용하는 KVM 가상 머신을 지원합니다. 인증된 게스트 OS의 자세한 목록은 Red Hat KnowledgeBase의 Certified Guest Operating Systems 를 참조하십시오.
그러나 기본적으로 게스트 OS는 호스트와 동일한 서브스크립션을 사용하지 않습니다. 따라서 게스트 OS가 제대로 작동하려면 별도의 라이센스 또는 서브스크립션을 활성화해야 합니다.
또한 VM에 연결하는 패스스루 장치는 호스트 OS와 게스트 OS 모두에서 지원해야 합니다.
마찬가지로 배포의 최적 기능을 위해 VM의 XML 구성에 정의된 CPU 모델 및 기능은 호스트 OS와 게스트 OS 모두에서 지원됩니다.
다양한 RHEL 버전에 대해 인증된 CPU 및 기타 하드웨어를 보려면 Red Hat Ecosystem Catalog 를 참조하십시오.
머신 유형
VM이 호스트 아키텍처와 호환되고 게스트 OS가 최적으로 실행되도록 하려면 VM에서 적절한 시스템 유형을 사용해야 합니다.
RHEL 10에서는 이전 주요 버전의 RHEL에서 기본적으로 제공되는 pc-i440fx-rhel7.6.0
및 이전 시스템 유형이 더 이상 지원되지 않습니다. 결과적으로 RHEL 10 호스트에서 이러한 머신 유형으로 VM을 시작하려고 하면 지원되지 않는 구성
오류와 함께 실패합니다. 호스트를 RHEL 10으로 업그레이드한 후 이 문제가 발생하면 RHEL 9 및 최신 하이퍼바이저에서 작업하는 데 사용된 Red Hat 지식베이스 솔루션 잘못된 가상 머신을 참조하십시오.
명령줄을 사용하여 VM을 생성할 때 virt-install
유틸리티는 시스템 유형을 설정하는 여러 방법을 제공합니다.
-
--os-variant
옵션을 사용하면virt-install
은 호스트 CPU에 권장되는 머신 유형을 자동으로 선택하고 게스트 OS에서 지원합니다. -
--os-variant
을 사용하지 않거나 다른 머신 유형이 필요한 경우--machine
옵션을 사용하여 머신 유형을 명시적으로 지정합니다. -
지원되지 않거나 호스트와 호환되지 않는
--machine
값을 지정하면virt-install
이 실패하고 오류 메시지가 표시됩니다.
지원되는 아키텍처에서 KVM 가상 머신에 권장되는 머신 유형과 --machine
옵션의 해당 값은 다음과 같습니다. Y 는 RHEL 10의 최신 마이너 버전을 나타냅니다.
아키텍처 | 권장 머신 유형 | 머신 유형 값 |
---|---|---|
Intel 64 및 AMD64 (x86_64) |
|
|
기존 VM의 머신 유형을 가져오려면 다음을 수행합니다.
virsh dumpxml VM-name | grep machine=
# virsh dumpxml VM-name | grep machine=
호스트에서 지원되는 전체 머신 유형 목록을 보려면 다음을 수행합니다.
/usr/libexec/qemu-kvm -M help
# /usr/libexec/qemu-kvm -M help
23.3. RHEL 10 가상화에서 지원되지 않는 기능
다음 기능은 RHEL 10(Red Hat Enterprise Linux 10)에 포함된 KVM 하이퍼바이저에서 지원되지 않습니다.
이러한 제한 사항은 OpenShift Virtualization 또는 RHOSP(Red Hat OpenStack Platform)와 같이 Red Hat에서 제공하는 다른 가상화 솔루션에는 적용되지 않을 수 있습니다.
다른 가상화 솔루션에서 지원하는 기능은 다음과 같습니다.
해당 가상화 솔루션에 대한 지원 세부 정보는 관련 문서를 참조하십시오.
호스트 시스템 아키텍처
RHEL 10 KVM은 RHEL 10 가상화의 권장 기능에 나열되지 않은 호스트 아키텍처에서 지원되지 않습니다.
게스트 운영 체제
다음 게스트 운영 체제(OS)를 사용하는 KVM 가상 머신(VM)은 RHEL 10 호스트에서 지원되지 않습니다.
- Windows 8.1 및 이전 버전
- Windows Server 2012 R2 및 이전 버전
- macOS
- Solaris for x86 시스템
- 2009년 이전에 출시된 모든 운영 체제
RHEL 호스트 및 기타 가상화 솔루션에서 지원되는 게스트 OS 목록은 Certified Guest Operating Systems in Red Hat OpenStack Platform, Red Hat Virtualization, OpenShift Virtualization 및 Red Hat Enterprise Linux with KVM 을 참조하십시오.
컨테이너에서 VM 생성
Red Hat은 RHEL 10 하이퍼바이저(예: QEMU
에뮬레이터 또는 libvirt
패키지)의 요소를 포함하는 모든 유형의 컨테이너에서 KVM 가상 머신 생성을 지원하지 않습니다.
컨테이너에서 VM을 생성하려면 OpenShift Virtualization 오퍼링을 사용하는 것이 좋습니다.
특정 virsh 명령 및 옵션
virsh
유틸리티와 함께 사용할 수 있는 모든 매개변수가 Red Hat에서 프로덕션 준비 상태로 테스트 및 인증된 것은 아닙니다. 따라서 Red Hat 문서에서 명시적으로 권장되지 않는 virsh
명령 및 옵션은 올바르게 작동하지 않을 수 있으며 프로덕션 환경에서 사용하지 않는 것이 좋습니다.
특히 지원되지 않는 virsh
명령은 다음과 같습니다.
-
virsh iface-*
명령(예:virsh iface-start
및virsh iface-destroy
) -
virsh blkdeviotune
-
외부 스냅샷을 지원하지 않는
virsh snapshot-*
명령 자세한 내용은 가상 머신 스냅샷에 대한 지원 제한 사항을 참조하십시오.
QEMU 명령줄
QEMU는 RHEL 10의 가상화 아키텍처의 필수 구성 요소이지만 수동으로 관리하기가 어렵고 잘못된 QEMU 구성으로 인해 보안 취약점이 발생할 수 있습니다. 따라서 qemu-*
명령줄 유틸리티(예: qemu-kvm
) 사용은 Red Hat에서 지원되지 않습니다. 대신 모범 사례에 따라 QEMU를 오케스트레이션하므로 virt-install
,virt-xml
및 지원되는 virsh
명령과 같은 libvirt 유틸리티를 사용합니다. 그러나 qemu-img
유틸리티는 가상 디스크 이미지 관리에 지원됩니다.
vCPU 핫 언플러그
실행 중인 VM에서 vCPU(가상 CPU) 제거( vCPU 핫 언플러그라고도 함)는 RHEL 10에서 지원되지 않습니다. 실행 중인 VM 또는 vCPU 핫 플러그에 vCPU 추가가 지원됩니다.
RDMA 기반 마이그레이션
RHEL 10에서는 RDMA(Remote Direct Memory Access)를 사용하여 VM(가상 머신) 마이그레이션을 더 이상 지원하지 않습니다. 따라서 Red Hat은 VM 마이그레이션에 rdma
URI를 사용하지 않는 것이 좋습니다.
QEMU-side I/O throttling
virsh blkdeviotune
유틸리티를 사용하여 QEMU-side I/O throttling이라고도 하는 가상 디스크의 작업에 대한 최대 입력 및 출력 수준을 구성하는 것은 RHEL 10에서 지원되지 않습니다.
RHEL 10에서 I/O 제한을 설정하려면 virsh blkiotune
을 사용합니다. 이는 libvirt-side I/O throttling이라고도 합니다. 자세한 내용은 가상 머신의 디스크 I/O 제한 을 참조하십시오.
기타 솔루션:
- RHOSP에서는 QEMU 측 I/O 제한도 지원됩니다. 자세한 내용은 RHOSP 스토리지 가이드의 Red Hat 지식베이스 솔루션 설정 디스크의 리소스 제한 설정 섹션 및 RHOSP 스토리지 가이드 의 서비스 품질 사양 사용 섹션을 참조하십시오.
- 또한 OpenShift Virtualizaton은 QEMU 측 I/O 제한도 지원합니다.
스토리지 실시간 마이그레이션
RHEL 10에서는 실행 중인 VM의 디스크 이미지를 호스트 간에 마이그레이션하는 것은 지원되지 않습니다.
기타 솔루션:
- 스토리지 실시간 마이그레이션은 RHOSP에서 지원되지만 몇 가지 제한 사항이 있습니다. 자세한 내용은 볼륨 마이그레이션을 참조하십시오.
vhost 데이터 경로 가속
RHEL 10 호스트에서 virtio 장치에 대해 vHost Data Path Acceleration(vDPA)을 구성할 수 있지만 Red Hat은 현재 이 기능을 지원하지 않으며 프로덕션 환경에서 사용하지 않는 것이 좋습니다.
vhost-user
RHEL 10은 사용자 공간 vHost 인터페이스 구현을 지원하지 않습니다.
기타 솔루션:
-
vhost-user
는 RHOSP에서 지원되지만virtio-net
인터페이스에만 지원됩니다. 자세한 내용은 Red Hat Knowledgebase 솔루션 virtio-net 구현 및 vhost 사용자 포트를 참조하십시오. -
OpenShift Virtualization에서는
vhost-user
도 지원합니다.
S3 및 S4 시스템 전원 상태
VM을 Suspend to RAM (S3) 또는 Suspend to disk (S4) 시스템 전원 상태를 일시 중지하는 것은 지원되지 않습니다. 이러한 기능은 기본적으로 비활성화되어 있으며 이를 활성화하면 VM을 Red Hat에서 지원하지 않습니다.
S3 및 S4 상태는 현재 Red Hat에서 제공하는 다른 가상화 솔루션에서도 지원되지 않습니다.
다중 경로 vDisk의 S3PR
RHEL 10에서는 다중 경로 vDisk의 SCSI3 영구 예약(S3-PR)이 지원되지 않습니다. 결과적으로 RHEL 10에서는 Windows 클러스터가 지원되지 않습니다.
virtio-crypto
RHEL 10에서 virtio-crypto 장치를 사용하는 것은 지원되지 않으며 RHEL은 사용하지 않는 것이 좋습니다.
virtio-crypto 장치는 Red Hat에서 제공하는 다른 가상화 솔루션에서도 지원되지 않습니다.
virtio-multitouch-device, virtio-multitouch-pci
RHEL 10에서 virtio-multitouch-device 및 virtio-multitouch-pci 장치를 사용하는 것은 지원되지 않으며 RHEL은 사용하지 않는 것이 좋습니다.
증분 라이브 백업
마지막 백업 (조리적 라이브 백업이라고도 함) 이후 VM 변경 사항만 저장하는 VM 백업을 구성하는 것은 RHEL 10에서 지원되지 않으며 Red Hat은 그 사용을 권장하지 않습니다.
다른 솔루션: * 대신 타사 백업 솔루션을 사용하십시오.
net_failover
net_failover
드라이버를 사용하여 자동화된 네트워크 장치 장애 조치 메커니즘을 설정하는 것은 RHEL 10에서 지원되지 않습니다.
net_failover
는 현재 Red Hat에서 제공하는 다른 가상화 솔루션에서도 지원되지 않습니다.
TCG
QEMU 및 libvirt에는 QEMU Tiny Code Generator(TCG)를 사용한 동적 변환 모드가 포함되어 있습니다. 이 모드에서는 하드웨어 가상화 지원이 필요하지 않습니다. 그러나 Red Hat은 TCG를 지원하지 않습니다.
TCG 기반 게스트는 예를 들어 virsh dumpxml
명령을 사용하여 XML 구성을 검사하여 인식할 수 있습니다.
TCG 게스트의 구성 파일에는 다음 행이 포함되어 있습니다.
<domain type='qemu'>
<domain type='qemu'>
Copy to Clipboard Copied! KVM 게스트의 구성 파일에는 다음 행이 포함되어 있습니다.
<domain type='kvm'>
<domain type='kvm'>
Copy to Clipboard Copied!
SR-IOV InfiniBand 네트워킹 장치
SR-IOV(Single-root I/O Virtualization)를 사용하여 VM에 InfiniBand 네트워킹 장치를 연결할 수 없습니다.
SGIO
RHEL 10에서는 SCSI 일반 I/O(SGIO)를 사용하여 SCSI 장치를 VM에 연결할 수 없습니다. VM에 연결된 SGIO 장치가 있는지 여부를 감지하려면 다음 행에 대해 VM 구성을 확인합니다.
<disk type="block" device="lun">
<disk type="block" device="lun">
<hostdev mode='subsystem' type='scsi'>
<hostdev mode='subsystem' type='scsi'>
23.4. RHEL 10 가상화의 리소스 할당 제한
다음 제한은 RHEL 10(Red Hat Enterprise Linux 10) 호스트의 단일 KVM 가상 머신(VM)에 할당할 수 있는 가상화된 리소스에 적용됩니다. VM이 이러한 제한을 초과하는 경우 Red Hat의 기술 프리뷰로 간주됩니다.
이러한 제한 사항은 OpenShift Virtualization 또는 RHOSP(Red Hat OpenStack Platform)와 같이 Red Hat에서 제공하는 다른 가상화 솔루션에는 적용되지 않습니다.
VM당 최대 vCPU 수
RHEL 10 호스트에서 실행되는 단일 VM에서 지원되는 최대 vCPU 및 메모리 양은 KVM을 사용하는 Red Hat Enterprise Linux의 가상화 제한을 참조하십시오.
VM당 PCI 장치
RHEL 10은 VM 버스당 32 개의 PCI 장치 슬롯과 장치 슬롯당 8 개의 PCI 기능을 지원합니다. 이는 VM에서 다중 기능 기능이 활성화되고 PCI 브리지가 사용되지 않는 경우 버스당 최대 256 PCI 기능을 제공합니다.
각 PCI 브리지는 새 버스를 추가하여 다른 256 장치 주소를 활성화할 수 있습니다. 그러나 일부 버스는 모든 256 장치 주소를 사용자에게 제공하지 않습니다. 예를 들어 루트 버스에는 슬롯을 사용하는 여러 개의 내장 장치가 있습니다.
가상화된 IDE 장치
KVM은 VM당 최대 4 개의 가상화된 IDE 장치로 제한됩니다.