Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

가상화 배포 및 관리 가이드

Red Hat Enterprise Linux 7

RHEL 물리적 머신에서 가상 머신 설치, 구성 및 관리

초록

이 가이드에서는 가상화 호스트 시스템으로 작동하도록 Red Hat Enterprise Linux 7 시스템을 구성하는 방법과 KVM 하이퍼바이저를 사용하여 게스트 가상 머신을 설치 및 구성하는 방법에 대해 설명합니다. 다른 주제에는 PCI 장치 구성, SR-IOV, 네트워킹, 스토리지, 장치 및 게스트 가상 머신 관리, 문제 해결, 호환성 및 제한 사항이 있습니다. 게스트 가상 머신에서 실행해야 하는 절차는 명시적으로 표시됩니다.
중요
이 가이드에 설명된 모든 절차는 달리 명시되지 않는 한 AMD64 또는 Intel 64 호스트 시스템에서 수행됩니다. AMD64 및 Intel 64 이외의 아키텍처에서 Red Hat Enterprise Linux 7 가상화를 사용하려면 부록 B. 여러 아키텍처에서 KVM 가상화 사용 에서 참조하십시오.
Red Hat에서 제공하는 가상화 솔루션에 대한 보다 일반적인 내용은 Red Hat Enterprise Linux 7 Virtualization 시작하기 가이드 를 참조하십시오.

I 부. Deployment

이 부분에서는 가상화 호스트 시스템의 역할을 하도록 Red Hat Enterprise Linux 7 시스템을 설치 및 구성하는 방법과 KVM 하이퍼바이저를 사용하여 게스트 가상 머신을 설치 및 구성하는 방법에 대한 지침을 제공합니다.

1장. 시스템 요구 사항

가상화는 Intel 64 및 AMD64 아키텍처의 Red Hat Enterprise Linux 7용 KVM 하이퍼바이저에서 사용할 수 있습니다. 이 장에서는 VM이라고도 하는 가상 시스템 실행에 대한 시스템 요구 사항을 나열합니다.
가상화 패키지 설치에 대한 자세한 내용은 2장. 가상화 패키지 설치 을 참조하십시오.

1.1. 호스트 시스템 요구 사항

최소 호스트 시스템 요구 사항

  • 6GB의 디스크 여유 공간
  • 2GB RAM.
게스트 가상 머신 요구 사항은 7장. KVM을 사용하여 오버 커밋 에서 더 자세히 설명되어 있습니다.

1.2. KVM Hypervisor 요구 사항

KVM 하이퍼바이저에는 다음이 필요합니다.
  • x86 기반 시스템용 Intel VT-x 및 Intel 64 가상화 확장 기능이 있는 Intel 프로세서
  • AMD-V 및 AMD64 가상화 확장 기능이 있는 AMD 프로세서.
완전한 가상화에는 가상화 확장(Intel VT-x 또는 AMD-V)이 필요합니다. 다음 명령을 입력하여 시스템에 하드웨어 가상화 확장 기능이 있는지, 활성화되어 있는지 확인합니다.

절차 1.1. 가상화 확장 확인

  1. CPU 가상화 확장 기능을 사용할 수 있는지 확인

    다음 명령을 입력하여 CPU 가상화 확장 기능을 사용할 수 있는지 확인합니다.
    $ grep -E 'svm|vmx' /proc/cpuinfo
  2. 출력 분석

    • 다음 예제 출력에는 Intel VT-x 확장이 포함된 Intel 프로세서를 나타내는 vmx 항목이 포함되어 있습니다.
      flags   : fpu tsc msr pae mce cx8 vmx apic mtrr mca cmov pat pse36 clflush
      dts acpi mmx fxsr sse sse2 ss ht tm syscall lm constant_tsc pni monitor ds_cpl
      vmx est tm2 cx16 xtpr lahf_lm
      
    • 다음 예제 출력에는 AMD-V 확장이 있는 AMD 프로세서를 나타내는 svm 항목이 포함되어 있습니다.
      flags   :  fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush
      mmx fxsr sse sse2 ht syscall nx mmxext svm fxsr_opt lm 3dnowext 3dnow pni cx16
      lahf_lm cmp_legacy svm cr8legacy ts fid vid ttp tm stc
      
    grep -E 'svm|vmx' /proc/cpuinfo 명령이 출력을 반환하는 경우 프로세서는 하드웨어 가상화 확장 기능이 포함됩니다. 경우에 따라 제조업체가 BIOS에서 가상화 확장을 비활성화합니다. 확장 기능이 나타나지 않거나 전체 가상화가 작동하지 않는 경우 BIOS 구성 유틸리티의 확장 활성화에 대한 지침은 절차 A.3. “BIOS에서 가상화 확장 활성화” 에서 참조하십시오.
  3. KVM 커널 모듈이 로드되었는지 확인

    추가 검사로 다음 명령을 사용하여 kvm 모듈이 커널에 로드되었는지 확인합니다.
    # lsmod | grep kvm
    출력에 kvm_intel 또는 kvm_amd 가 포함된 경우 kvm 하드웨어 가상화 모듈이 로드됩니다.
참고
virsh 유틸리티( libvirt-client 패키지에서 제공)는 다음 명령을 사용하여 시스템의 가상화 기능 전체 목록을 출력할 수 있습니다.
# virsh capabilities

1.3. KVM 게스트 가상 머신 호환성

Red Hat Enterprise Linux 7 서버에는 특정 지원 제한이 있습니다.
다음 URL은 Red Hat Enterprise Linux에 대한 프로세서 및 메모리 용량 제한을 설명합니다.
다음 URL에는 Red Hat Enterprise Linux KVM 호스트에서 실행되도록 인증된 게스트 운영 체제가 나열되어 있습니다.
참고
KVM 하이퍼바이저의 제한 사항 및 지원 제한에 대한 자세한 내용은 부록 C. 가상화 제한 사항 을 참조하십시오.

1.4. 지원되는 게스트 CPU 모델

모든 하이퍼바이저에는 게스트가 기본적으로 표시되는 CPU 기능에 대한 자체 정책이 있습니다. 하이퍼바이저가 게스트에 제공되는 CPU 기능 세트는 게스트 가상 머신 구성에서 선택한 CPU 모델에 따라 다릅니다.

1.4.1. 게스트 CPU 모델 나열

아키텍처 유형에 대해 지원되는 CPU 모델의 전체 목록을 보려면 virsh cpu-models architecture 명령을 실행합니다. 예를 들면 다음과 같습니다.
$ virsh cpu-models x86_64
486
pentium
pentium2
pentium3
pentiumpro
coreduo
n270
core2duo
qemu32
kvm32
cpu64-rhel5
cpu64-rhel6
kvm64
qemu64
Conroe
Penryn
Nehalem
Westmere
SandyBridge
Haswell
athlon
phenom
Opteron_G1
Opteron_G2
Opteron_G3
Opteron_G4
Opteron_G5
$ virsh cpu-models ppc64
POWER7
POWER7_v2.1
POWER7_v2.3
POWER7+_v2.1
POWER8_v1.0
지원되는 CPU 모델 및 기능의 전체 목록은 /usr/share/libvirt/ 에 있는 cpu_map.xml 파일에 포함되어 있습니다.
# cat /usr/share/libvirt/cpu_map.xml
게스트의 CPU 모델 및 기능은 도메인 XML 파일의 <cpu> 섹션에서 변경할 수 있습니다. 자세한 내용은 23.12절. “CPU 모델 및 토폴로지”를 참조하십시오.
호스트 모델은 필요에 따라 지정된 기능 세트를 사용하도록 구성할 수 있습니다. 자세한 내용은 23.12.1절. “지정된 CPU의 기능 세트 변경”의 내용을 참조하십시오.

2장. 가상화 패키지 설치

가상화를 사용하려면 Red Hat Virtualization 패키지를 컴퓨터에 설치해야 합니다. Red Hat Enterprise Linux를 설치할 때 또는 yum 명령 및 Subscription Manager 애플리케이션을 사용하여 설치 후에 가상화 패키지를 설치할 수 있습니다.
KVM 하이퍼바이저는 kvm 커널 모듈과 함께 기본 Red Hat Enterprise Linux 커널을 사용합니다.

2.1. Red Hat Enterprise Linux 설치 중 가상화 패키지 설치

이 섹션에서는 Red Hat Enterprise Linux를 설치하는 동안 가상화 패키지 설치에 대한 정보를 제공합니다.
참고
Red Hat Enterprise Linux 설치에 대한 자세한 내용은 Red Hat Enterprise Linux 7 설치 가이드 를 참조하십시오.
중요
Anaconda 인터페이스는 Red Hat Enterprise Linux Server를 설치하는 동안 Red Hat Virtualization 패키지를 설치하는 옵션만 제공합니다.
Red Hat Enterprise Linux Workstation을 설치할 때 Red Hat 가상화 패키지는 워크스테이션 설치가 완료된 후에만 설치할 수 있습니다. 보기 2.2절. “기존 Red Hat Enterprise Linux 시스템에 가상화 패키지 설치”

절차 2.1. 가상화 패키지 설치

  1. 소프트웨어 선택

    설치 요약 화면이 나타날 때까지 설치 절차를 따르십시오.

    그림 2.1. 설치 요약 화면

    이미지에는 그룹 제목 아래에 구성 가능한 옵션을 나열하는 설치 요약 화면이 표시됩니다. Localization 제목에서 : 날짜 및 시간,언어 지원, keyboard . 소프트웨어 제목에 따라: 설치 소스 및 소프트웨어 선택. 시스템 제목 아래에: 설치 대상 및 네트워크 및 호스트 이름.
    설치 요약 화면에서 소프트웨어 선택 을 클릭합니다. Software Selection 화면이 열립니다.
  2. 서버 유형 및 패키지 그룹 선택

    기본 가상화 패키지만 사용하거나 그래픽 사용자 인터페이스를 통해 게스트를 관리할 수 있는 패키지로 Red Hat Enterprise Linux 7을 설치할 수 있습니다. 다음 중 하나를 수행합니다.
    • 최소한의 가상화 호스트 설치
      Base Environment (기본 환경) 창에서 Virtualization Host (가상화 호스트) 라디오 버튼을 선택하고 Selected Environment(선택된 환경) 창에 대한 애드온의 가상화 플랫폼 확인란을 선택합니다. 이렇게 하면 virsh 또는 네트워크를 통해 원격으로 실행할 수 있는 기본 가상화 환경이 설치됩니다.

      그림 2.2. 소프트웨어 선택 화면에서 선택한 가상화 호스트

      이미지는 두 개의 제목 아래에 옵션을 나열하는 소프트웨어 선택 화면을 보여줍니다. 선택한 환경을 위한 기본 환경 및 애드온. 가상화 호스트 는 기본 환경 아래의 옵션에서 강조 표시되며 선택한 환경의 애드온에 있는 옵션에서 가상화 플랫폼이 강조 표시됩니다.
    • 그래픽 사용자 인터페이스를 사용하여 가상화 호스트 설치
      Base Environment (기본 환경) 창에서 Server with GUI (그래프로 서버) 라디오 버튼을 선택하고 선택한 환경 추가 창의 Virtualization Client,Virtualization Hypervisor, 및 Virtualization Tools (가상화 툴) 확인란을 선택합니다. 이렇게 하면 게스트 가상 머신을 설치 및 관리하기 위한 그래픽 툴과 함께 가상화 환경이 설치됩니다.

      그림 2.3. 소프트웨어 선택 화면에서 GUI가 선택된 서버

      이미지는 두 개의 제목 아래에 옵션을 나열하는 소프트웨어 선택 화면을 보여줍니다. 선택한 환경을 위한 기본 환경 및 애드온. GUI를 사용하는 서버는 Base Environment, Virtualization Client,Virtualization Hypervisor, Virtualization Tools 의 옵션에서 강조 표시됩니다. 선택한 환경의 애드온에 있는 옵션에서 강조 표시됩니다.
  3. 설치 완료

    Done 을 클릭하고 설치를 계속합니다.
중요
가상화 패키지에 대한 업데이트를 받으려면 유효한 Red Hat Enterprise Linux 서브스크립션이 필요합니다.

2.1.1. Kickstart 파일을 사용하여 KVM 패키지 설치

Kickstart 파일을 사용하여 가상화 패키지와 함께 Red Hat Enterprise Linux를 설치하려면 Kickstart 파일의 %packages 섹션에 다음 패키지 그룹을 추가합니다.
@virtualization-hypervisor
@virtualization-client
@virtualization-platform
@virtualization-tools
Kickstart 파일을 사용하여 설치하는 방법에 대한 자세한 내용은 Red Hat Enterprise Linux 7 설치 가이드 를 참조하십시오.

2.2. 기존 Red Hat Enterprise Linux 시스템에 가상화 패키지 설치

이 섹션에서는 기존 Red Hat Enterprise Linux 7 시스템에 KVM 하이퍼바이저를 설치하는 단계를 설명합니다.
패키지를 설치하려면 시스템을 Red Hat 고객 포털에 등록하고 등록해야 합니다. Red Hat Subscription Manager를 사용하여 등록하려면 subscription-manager register 명령을 실행하고 프롬프트를 따릅니다. 또는 데스크탑의 애플리케이션 → 시스템 툴에서 Red Hat Subscription Manager 애플리케이션을 실행하여 등록합니다.
유효한 Red Hat 서브스크립션이 없는 경우 Red Hat 온라인 스토어 를 방문하여 정보를 확인하십시오. Red Hat 고객 포털에 시스템 등록 및 등록에 대한 자세한 내용은 의 내용을 참조하십시오 https://access.redhat.com/solutions/253273.

2.2.1. 수동으로 가상화 패키지 설치

Red Hat Enterprise Linux에서 가상화를 사용하려면 최소한 다음 패키지를 설치해야 합니다.
  • qemu-kvm: 이 패키지는 사용자 수준 KVM 에뮬레이터를 제공하며 호스트와 게스트 가상 머신 간의 통신을 용이하게 합니다.
  • QEMU-img: 이 패키지는 게스트 가상 머신에 대한 디스크 관리를 제공합니다.
    참고
    qemu-img 패키지는 qemu-kvm 패키지의 종속성으로 설치됩니다.
  • libvirt: 이 패키지는 하이퍼바이저 및 호스트 시스템과의 상호 작용을 위한 서버 및 호스트 측 라이브러리와 라이브러리 호출을 처리하고, 가상 시스템을 관리하고, 하이퍼바이저를 제어하는 libvirtd 데몬을 제공합니다.
이러한 패키지를 설치하려면 다음 명령을 입력합니다.
# yum install qemu-kvm libvirt
가상화를 사용할 때 몇 가지 추가 가상화 관리 패키지도 사용할 수 있습니다.
  • virt-install: 이 패키지는 명령줄에서 가상 머신을 생성하기 위한 virt-install 명령을 제공합니다.
  • libvirt-python: 이 패키지에는 Python 프로그래밍 언어로 작성된 애플리케이션이 libvirt API에서 제공하는 인터페이스를 사용하도록 허용하는 모듈이 포함되어 있습니다.
  • virt-manager: 이 패키지는 Virtual Machine Manager 라고도 하는 virt-manager 도구를 제공합니다. 가상 머신을 관리하기 위한 그래픽 도구입니다. libvirt-client 라이브러리를 관리 API로 사용합니다.
  • libvirt-client: 이 패키지는 libvirt 서버에 액세스하기 위한 클라이언트 측 API 및 라이브러리를 제공합니다. libvirt-client 패키지에는 명령줄 또는 특수 가상화 쉘에서 가상 머신 및 하이퍼바이저를 관리하고 제어하는 virsh 명령줄 툴이 포함되어 있습니다.
다음 명령을 사용하여 이러한 권장 가상화 패키지를 모두 설치할 수 있습니다.
# yum install virt-install libvirt-python virt-manager virt-install libvirt-client

2.2.2. 가상화 패키지 그룹 설치

가상화 패키지는 패키지 그룹에서도 설치할 수 있습니다. yum grouplist hidden commad를 실행하여 사용 가능한 그룹 목록을 볼 수 있습니다.
사용 가능한 패키지 그룹 전체 목록의 다음 표에서는 가상화 패키지 그룹과 제공하는 사항에 대해 설명합니다.

표 2.1. 가상화 패키지 그룹

패키지 그룹 설명 필수 패키지 선택적 패키지
가상화 Hypervisor 가능한 가장 작은 가상화 호스트 설치 libvirt, qemu-kvm, qemu-img qemu-kvm-tools
가상화 클라이언트 가상화 인스턴스 설치 및 관리를 위한 클라이언트 gnome-boxes, virt-install, virt-manager, virt-viewer, qemu-img virt-top, libguestfs-tools, libguestfs-tools-c
가상화 플랫폼 가상 머신 및 컨테이너에 액세스 및 제어하는 인터페이스 제공 libvirt, libvirt-client, virt-who, qemu-img fence-virtd-libvirt, fence-virtd-multicast, fence-virtd-serial, libvirt-cim, libvirt-java, libvirt-snmp, perl-Sys-Virt
가상화 툴 오프라인 가상 이미지 관리 툴 libguestfs, qemu-img libguestfs-java, libguestfs-tools, libguestfs-tools-c
패키지 그룹을 설치하려면 yum group install package_group 명령을 실행합니다. 예를 들어 모든 패키지 유형이 포함된 Virtualization Tools 패키지 그룹을 설치하려면 다음을 실행합니다.
# yum group install "Virtualization Tools" --setopt=group_package_types=mandatory,default,optional
패키지 그룹 설치에 대한 자세한 내용은 Red Hat Enterprise Linux에서 yum을 사용하여 패키지 그룹을 설치하는 방법을참조하십시오. 지식 베이스 문서.

3장. 가상 머신 생성

Red Hat Enterprise Linux 7 호스트 시스템에 가상화 패키지를 설치한 후 virt-manager 인터페이스를 사용하여 가상 머신을 생성하고 게스트 운영 체제를 설치할 수 있습니다. 또는 매개변수 목록 또는 스크립트로 virt-install 명령줄 유틸리티를 사용할 수도 있습니다. 두 방법 모두 이 장에 설명되어 있습니다.

3.1. 게스트 가상 머신 배포 고려 사항

게스트 가상 머신을 생성하기 전에 다양한 요소를 고려해야 합니다. 가상 시스템의 역할도 배포 전에 평가되어야 하지만 변수 요인(로드, 클라이언트 양)을 기반으로 정기적으로 모니터링 및 평가해야 합니다. 다음과 같은 요인이 있습니다.
성능
게스트 가상 머신은 의도한 작업을 기반으로 배포 및 구성해야 합니다. 일부 게스트 시스템(예: 데이터베이스 서버를 실행하는 게스트)에는 특별한 성능 고려 사항이 필요할 수 있습니다. 게스트에 역할 및 예상 시스템 로드에 따라 더 할당된 CPU 또는 메모리가 필요할 수 있습니다.
입력/출력 요구 사항 및 입력/출력 유형
일부 게스트 가상 머신에는 특히 높은 I/O 요구 사항이 있거나 I/O 유형(예: 일반적인 디스크 블록 크기 액세스 또는 클라이언트 양)에 따라 추가 고려 사항이나 예측이 필요할 수 있습니다.
스토리지
일부 게스트 가상 머신에는 스토리지 또는 더 빠른 디스크 유형에 대한 우선 순위가 높은 액세스 권한이 필요할 수 있으며 스토리지 영역에 독점적으로 액세스해야 할 수도 있습니다. 또한 게스트가 사용하는 스토리지 용량을 정기적으로 모니터링하고 스토리지를 배포하고 유지 관리할 때 고려해야 합니다. Red Hat Enterprise Linux 7 Virtualization 보안 가이드에 설명된 모든 고려 사항을 확인하십시오. 또한 물리적 스토리지에서 가상 스토리지의 옵션을 제한할 수 있다는 점을 이해하는 것이 중요합니다.
네트워킹 및 네트워크 인프라
환경에 따라 일부 게스트 가상 머신에는 다른 게스트보다 빠른 네트워크 링크가 필요할 수 있습니다. 대역폭 또는 대기 시간은 특히 요구 사항 또는 로드 변경에 따라 게스트를 배포하고 유지 관리할 때 고려해야 하는 경우가 많습니다.
요청 요구사항
다음 예와 같이 virtio 드라이브가 전체 디스크에서 백업되는 경우 virtio 드라이브의 게스트 가상 머신에 SCSI 요청을 실행할 수 있으며, 디스크 장치 매개 변수는 도메인 XML 파일에서 lun 으로 설정됩니다.
<devices>
  <emulator>/usr/libexec/qemu-kvm</emulator>
  <disk type='block' device='lun'>

3.2. virt-install을 사용하여 게스트 생성

virt-install 명령을 사용하여 가상 머신을 생성하고 명령줄에서 해당 가상 머신에 운영 체제를 설치할 수 있습니다. virt-install 은 대화식 또는 스크립트의 일부로 가상 머신 생성을 자동화할 수 있습니다. 대화형 그래픽 설치를 사용하는 경우 virt-install 을 실행하기 전에 virt-viewer 가 설치되어 있어야 합니다. 또한 virt-install 과 kickstart 파일을 사용하여 가상 머신 운영 체제의 자동 설치를 시작할 수 있습니다.
참고
일부 virt-install 명령을 성공적으로 완료하려면 root 권한이 필요할 수 있습니다.
virt-install 유틸리티는 여러 가지 명령줄 옵션을 사용합니다. 그러나 대부분의 virt-install 옵션은 필요하지 않습니다.
가상 게스트 머신 설치에 필요한 주요 옵션은 다음과 같습니다.
--name
가상 머신의 이름입니다.
--memory
게스트에 할당할 메모리(RAM) 양(MiB)입니다.
게스트 스토리지
다음 게스트 스토리지 옵션 중 하나를 사용합니다.
  • --disk
    가상 머신의 스토리지 구성 세부 정보입니다. --disk none 옵션을 사용하면 가상 머신이 디스크 공간 없이 생성됩니다.
  • --filesystem
    가상 머신 게스트의 파일 시스템 경로입니다.
설치 방법
다음 설치 방법 중 하나를 사용합니다.
  • --location
    설치 미디어의 위치입니다.
  • --cdrom
    가상 CD-ROM 장치로 사용되는 파일 또는 장치입니다. ISO 이미지 경로 또는 최소 부팅 ISO 이미지를 가져오거나 액세스할 URL일 수 있습니다. 그러나 물리적 호스트 CD-ROM 또는 DVD-ROM 장치가 될 수 없습니다.
  • --pxe
    PXE 부팅 프로토콜을 사용하여 게스트 설치 프로세스를 시작하기 위해 초기 램디스크 및 커널을 로드합니다.
  • --import
    OS 설치 프로세스를 건너뛰고 기존 디스크 이미지에 대해 게스트를 빌드합니다. 부팅에 사용되는 장치는 디스크 또는 파일 시스템 옵션으로 지정된 첫 번째 장치입니다.
  • --boot
    설치 후 VM 부팅 구성입니다. 이 옵션을 사용하면 부팅 장치 순서를 지정하고 선택적 커널 인수를 사용하여 커널 및 initrd를 영구적으로 부팅하고 BIOS 부팅 메뉴를 활성화할 수 있습니다.
전체 옵션 목록을 보려면 다음 명령을 입력합니다.
# virt-install --help
옵션에 대한 전체 속성 목록을 보려면 다음 명령을 입력합니다.
# virt install --option=?
virt-install man 페이지는 각 명령 옵션, 중요한 변수 및 예제도 문서화합니다.
virt-install 을 실행하기 전에 qemu-img 를 사용하여 스토리지 옵션을 구성해야 할 수도 있습니다. qemu-img 사용에 대한 자세한 내용은 14장. qemu-img 사용 을 참조하십시오.

3.2.1. ISO 이미지에서 가상 머신 설치

다음 예제에서는 ISO 이미지에서 가상 머신을 설치합니다.
# virt-install \ 
  --name guest1-rhel7 \ 
  --memory 2048 \ 
  --vcpus 2 \ 
  --disk size=8 \ 
  --cdrom /path/to/rhel7.iso \ 
  --os-variant rhel7 
--cdrom /path/to/rhel7.iso 옵션은 지정된 위치에 있는 CD 또는 DVD 이미지에서 가상 시스템이 설치되도록 지정합니다.

3.2.2. 가상 머신 이미지 가져오기

다음 예제에서는 가상 디스크 이미지에서 가상 머신을 가져옵니다.
# virt-install \ 
  --name guest1-rhel7 \ 
  --memory 2048 \ 
  --vcpus 2 \ 
  --disk /path/to/imported/disk.qcow \ 
  --import \ 
  --os-variant rhel7 
--import 옵션은 --disk /path/to/imported/disk.qcow 옵션으로 지정된 가상 디스크 이미지에서 가상 머신을 가져오도록 지정합니다.

3.2.3. 네트워크에서 가상 머신 설치

다음 예제에서는 네트워크 위치에서 가상 머신을 설치합니다.
# virt-install \ 
  --name guest1-rhel7 \ 
  --memory 2048 \ 
  --vcpus 2 \ 
  --disk size=8 \ 
  --location http://example.com/path/to/os \ 
  --os-variant rhel7 
--location http://example.com/path/to/os 옵션은 설치 트리가 지정된 네트워크 위치에 있음을 지정합니다.

3.2.4. PXE를 사용하여 가상 머신 설치

PXE 부팅 프로토콜을 사용하여 가상 머신을 설치할 때 bridged 네트워크와 --pxe 옵션을 지정하는 --network 옵션 모두 지정해야 합니다.
다음 예제에서는 PXE를 사용하여 가상 머신을 설치합니다.
# virt-install \ 
  --name guest1-rhel7 \ 
  --memory 2048 \ 
  --vcpus 2 \ 
  --disk size=8 \ 
  --network=bridge:br0 \ 
  --pxe \ 
  --os-variant rhel7 

3.2.5. Kickstart를 사용하여 가상 머신 설치

다음 예제에서는 Kickstart 파일을 사용하여 가상 머신을 설치합니다.
# virt-install \ 
  --name guest1-rhel7 \ 
  --memory 2048 \ 
  --vcpus 2 \ 
  --disk size=8 \ 
  --location http://example.com/path/to/os \ 
  --os-variant rhel7 \
  --initrd-inject /path/to/ks.cfg \ 
  --extra-args="ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8" 
initrd-injectextra-args 옵션은 Kickstarter 파일을 사용하여 가상 머신이 설치되도록 지정합니다.

3.2.6. 게스트 생성 중 게스트 가상 머신 네트워크 구성

게스트 가상 머신을 생성할 때 가상 머신의 네트워크를 지정하고 구성할 수 있습니다. 이 섹션에서는 각 게스트 가상 머신 기본 네트워크 유형에 대한 옵션을 제공합니다.

NAT가 있는 기본 네트워크

기본 네트워크는 libvirtd 의 NAT(네트워크 주소 변환) 가상 네트워크 스위치를 사용합니다. NAT에 대한 자세한 내용은 6.1절. “libvirt를 사용한 NAT(Network Address Translation)” 을 참조하십시오.
NAT를 사용하여 기본 네트워크를 사용하여 게스트 가상 머신을 만들기 전에 libvirt-daemon-config-network 패키지가 설치되어 있는지 확인합니다.
게스트 가상 머신에 대해 NAT 네트워크를 구성하려면 virt-install 에 다음 옵션을 사용하십시오.
--network default
참고
네트워크 옵션이 지정되지 않은 경우 게스트 가상 시스템은 NAT를 사용하는 기본 네트워크로 구성됩니다.

DHCP를 사용한 브리지 네트워크

브리지 네트워킹에 대해 구성된 경우 게스트는 외부 DHCP 서버를 사용합니다. 이 옵션은 호스트에 정적 네트워킹 구성이 있고 게스트에 로컬 영역 네트워크(LAN)를 사용하여 전체 인바운드 및 아웃바운드 연결이 필요한 경우 이 옵션을 사용해야 합니다. 게스트 가상 머신과 함께 실시간 마이그레이션을 수행하는 경우 사용해야 합니다. 게스트 가상 머신의 DHCP를 사용하여 브리지 네트워크를 구성하려면 다음 옵션을 사용합니다.
--network br0
참고
virt-install 을 실행하기 전에 브리지를 별도로 생성해야 합니다. 네트워크 브리지 생성에 대한 자세한 내용은 6.4.1절. “Red Hat Enterprise Linux 7 호스트에서 브리지 네트워킹 구성” 을 참조하십시오.

고정 IP 주소가 있는 브리지 네트워크

브리지된 네트워킹은 고정 IP 주소를 사용하도록 게스트를 구성하는 데도 사용할 수 있습니다. 게스트 가상 머신의 고정 IP 주소를 사용하여 브리지 네트워크를 구성하려면 다음 옵션을 사용합니다.
--network br0 \
--extra-args "ip=192.168.1.2::192.168.1.1:255.255.255.0:test.example.com:eth0:none"
네트워크 부팅 옵션에 대한 자세한 내용은 Red Hat Enterprise Linux 7 설치 가이드 를 참조하십시오.

네트워크 없음

네트워크 인터페이스 없이 게스트 가상 머신을 구성하려면 다음 옵션을 사용합니다.
--network=none

3.3. virt-manager를 사용하여 게스트 생성

virt-manager 라고도 하는 Virtual Machine Manager는 게스트 가상 머신을 생성하고 관리하기 위한 그래픽 도구입니다.
이 섹션에서는 virt-manager 를 사용하여 Red Hat Enterprise Linux 7 호스트에서 Red Hat Enterprise Linux 7 게스트 가상 머신 을 설치하는 방법에 대해 설명합니다.
이 절차에서는 KVM 하이퍼바이저 및 기타 모든 필수 패키지가 설치되어 있고 호스트가 가상화용으로 구성되어 있다고 가정합니다. 가상화 패키지 설치에 대한 자세한 내용은 2장. 가상화 패키지 설치 을 참조하십시오.

3.3.1. virt-manager 설치 개요

New VM 마법사는 가상 머신 생성 프로세스를 5 단계로 나눕니다.
  1. 하이퍼바이저 및 설치 유형 선택
  2. 설치 미디어 위치 찾기 및 구성
  3. 메모리 및 CPU 옵션 구성
  4. 가상 머신의 스토리지 구성
  5. 가상 머신 이름, 네트워킹, 아키텍처 및 기타 하드웨어 설정 구성
virt-manager 가 계속하기 전에 설치 미디어(로컬 또는 네트워크를 통해)에 액세스할 수 있는지 확인합니다.

3.3.2. virt-manager를 사용하여 Red Hat Enterprise Linux 7 게스트 생성

이 절차에서는 로컬에 저장된 설치 DVD 또는 DVD 이미지를 사용하여 Red Hat Enterprise Linux 7 게스트 가상 머신을 생성하는 방법을 설명합니다. Red Hat Enterprise Linux 7 DVD 이미지는 Red Hat 고객 포털에서 사용할 수 있습니다.
참고
SecureBoot가 활성화된 가상 머신을 설치하려면 virt-manager를 사용한 SecureBoot Red Hat Enterprise Linux 7 게스트 생성 을 참조하십시오.

절차 3.1. 로컬 설치 미디어를 사용하여 virt-manager 를 사용하여 Red Hat Enterprise Linux 7 게스트 가상 머신 생성

  1. 선택 사항: 준비

    가상 머신에 대한 스토리지 환경을 준비합니다. 스토리지 준비에 대한 자세한 내용은 13장. 가상 머신용 스토리지 관리 을 참조하십시오.
    중요
    게스트 가상 머신을 저장하는 데 다양한 스토리지 유형을 사용할 수 있습니다. 그러나 가상 머신이 마이그레이션 기능을 사용하려면 네트워크 스토리지에 가상 머신을 생성해야 합니다.
    Red Hat Enterprise Linux 7에는 최소 1GB의 스토리지 공간이 필요합니다. 그러나 Red Hat은 Red Hat Enterprise Linux 7 설치를 위한 최소 5GB의 스토리지 공간 및 이 가이드의 절차에 대해 권장합니다.
  2. virt-manager를 열고 마법사를 시작합니다.

    virt-manager 명령을 root로 실행하거나 애플리케이션시스템 도구가상 머신 관리자를 실행하여 virt-manager를 엽니다.

    그림 3.1. 가상 머신 관리자 창

    가상 머신 관리자 창
    선택적으로 하이퍼바이저를 선택하고 Connect 버튼을 클릭하여 원격 하이퍼바이저를 엽니다.
    을 클릭하여 가상화된 게스트 마법사를 시작합니다.
    New VM 창이 열립니다.
  3. 설치 유형 지정

    설치 유형을 선택합니다.
    로컬 설치 미디어 (ISO 이미지 또는 CDROM)
    이 방법은 설치 디스크의 이미지(예: .iso)를 사용합니다. 그러나 호스트 CD-ROM 또는 DVD-ROM 장치를 사용할 수 없습니다.
    네트워크 설치(HTTP, FTP 또는 NFS)
    이 방법은 미러링된 Red Hat Enterprise Linux 또는 Fedora 설치 트리를 사용하여 게스트를 설치하는 것입니다. 설치 트리는 HTTP, FTP 또는 NFS를 통해 액세스할 수 있어야 합니다.
    Network Install 을 선택한 경우 설치 URL과 필요한 경우 커널 옵션을 제공합니다.
    Network Boot (PXE)
    이 방법은 PXE(Preboot eXecution Environment) 서버를 사용하여 게스트 가상 머신을 설치합니다. PXE 서버 설정은 Red Hat Enterprise Linux 7 설치 가이드에서 다룹니다. 네트워크 부팅을 사용하여 설치하려면 게스트에 라우팅 가능한 IP 주소 또는 공유 네트워크 장치가 있어야 합니다.
    Network Boot 를 선택한 경우 STEP 5로 이동합니다. 모든 단계가 완료되면 DHCP 요청이 전송되고 유효한 PXE 서버가 발견되면 게스트 가상 머신의 설치 프로세스가 시작됩니다.
    기존 디스크 이미지 가져오기
    이 방법을 사용하면 새 게스트 가상 머신을 생성하고 사전 설치된 부팅 가능한 운영 체제가 있는 디스크 이미지를 가져올 수 있습니다.

    그림 3.2. 가상 머신 설치 방법

    가상 머신 설치 방법
    계속하려면 Forward 를 클릭합니다.
  4. 설치 소스 선택

    1. 로컬 설치 미디어(ISO 이미지 또는 CDROM) 를 선택한 경우 원하는 로컬 설치 미디어를 지정합니다.

      그림 3.3. 로컬 ISO 이미지 설치

      로컬 ISO 이미지 설치
      주의
      옵션이 현재 GUI에 있지만 호스트의 물리적 CD-ROM 또는 DVD 장치에서 설치할 수 없습니다. 따라서 Use CDROM 또는 DVD 옵션을 선택하면 VM 설치가 실패합니다. 자세한 내용은 Red Hat 지식 베이스 를 참조하십시오.
      ISO 이미지에서 설치하려면 ISO 이미지 사용을 선택하고 찾아보기... 버튼을 클릭하여 Locate 미디어 볼륨 창을 엽니다.
      사용하려는 설치 이미지를 선택하고 볼륨 선택을 클릭합니다.
      Locate 미디어 볼륨 창에 이미지가 표시되지 않는 경우 로컬 찾아보기 버튼을 클릭하여 설치 디스크가 포함된 호스트 또는 DVD 드라이브의 호스트 시스템을 찾습니다. 설치 디스크가 포함된 설치 이미지 또는 DVD 드라이브를 선택하고 Open; 사용을 위해 볼륨이 선택되고 새 가상 머신 생성 마법사로 돌아갑니다.
      중요
      ISO 이미지 파일 및 게스트 스토리지 이미지의 경우 사용할 권장 위치는 /var/lib/libvirt/images/ 입니다. 기타 모든 위치에는 SELinux의 추가 구성이 필요할 수 있습니다. SELinux 구성에 대한 자세한 내용은 Red Hat Enterprise Linux Virtualization 보안 가이드 또는 Red Hat Enterprise Linux SELinux 사용자 및 관리자 가이드 를 참조하십시오.
    2. Network Install 을 선택한 경우 설치 소스의 URL과 필요한 커널 옵션(있는 경우)을 입력합니다. URL은 설치 트리의 루트 디렉터리를 가리키며 HTTP, FTP 또는 NFS를 통해 액세스할 수 있어야 합니다.
      Kickstart 설치를 수행하려면 ks=부터 커널 옵션에 Kickstart 파일의 URL을 지정합니다.

      그림 3.4. 네트워크 Kickstart 설치

      네트워크 Kickstart 설치
      참고
      커널 옵션의 전체 목록은 Red Hat Enterprise Linux 7 설치 가이드 를 참조하십시오.
    다음으로 OS 유형 및 설치 버전 을 구성합니다. 가상 머신에 적합한 운영 체제 유형을 선택해야 합니다. 이는 수동으로 지정하거나 설치 미디어 확인란을 기반으로 자동 감지 운영 체제를 선택하여 지정할 수 있습니다.
    계속하려면 Forward 를 클릭합니다.
  5. 메모리(RAM) 및 가상 CPU 구성

    가상 머신에 할당할 CPU 수 및 메모리 크기(RAM)를 지정합니다. 마법사는 할당할 수 있는 CPU 수와 메모리 양을 표시합니다. 이러한 값은 호스트 및 게스트 성능에 영향을 미칩니다.
    가상 시스템에는 효율적이고 효과적으로 실행하려면 충분한 실제 메모리(RAM)가 필요합니다. Red Hat은 가상 머신에 대해 최소 512MB의 RAM을 지원합니다. Red Hat은 각 논리 코어에 대해 최소 1024MB의 RAM을 권장합니다.
    가상 머신에 충분한 가상 CPU를 할당합니다. 가상 머신이 다중 스레드 애플리케이션을 실행하는 경우 게스트 가상 시스템을 실행하는 데 필요한 가상 CPU 수를 할당합니다.
    호스트 시스템에서 사용 가능한 물리적 프로세서(또는 하이퍼스레드)보다 많은 가상 CPU를 할당할 수 없습니다. 사용 가능한 가상 CPU 수는 최대 X 사용 가능한 필드에 표시됩니다.

    그림 3.5. 메모리 및 CPU 구성

    메모리 및 CPU 구성
    메모리 및 CPU 설정을 구성한 후 앞으로 를 클릭하여 계속합니다.
    참고
    메모리 및 가상 CPU를 오버 커밋할 수 있습니다. 오버 커밋에 대한 자세한 내용은 7장. KVM을 사용하여 오버 커밋 을 참조하십시오.
  6. 스토리지 구성

    가상 머신 및 필요한 애플리케이션에 충분한 공간을 활성화하고 할당합니다. 데스크탑 설치의 경우 최소 5GB 이상 또는 최소 설치의 경우 1GB 이상을 할당합니다.

    그림 3.6. 가상 스토리지 구성

    가상 스토리지 구성
    참고
    실시간 마이그레이션에서는 공유 네트워크 스토리지에 가상 머신을 설치해야 합니다. 가상 머신의 공유 스토리지 설정에 대한 자세한 내용은 15.4절. “공유 스토리지 예: 간단한 마이그레이션을 위한 NFS” 을 참조하십시오.
    1. 기본 로컬 스토리지

      컴퓨터의 하드 드라이브 라디오 버튼에 디스크 이미지 만들기 버튼을 선택하여 기본 스토리지 풀인 /var/lib/libvirt/images/ 디렉터리에 파일 기반 이미지를 생성합니다. 생성할 디스크 이미지의 크기를 입력합니다. Allocate entire disk now 확인란을 선택하면 지정된 크기의 디스크 이미지가 즉시 생성됩니다. 그렇지 않으면 디스크 이미지가 채워지기 때문에 증가합니다.
      참고
      스토리지 풀은 가상 컨테이너이지만 두 가지 요인으로 제한됩니다. qemu-kvm에서 허용하는 최대 크기와 호스트 물리적 시스템의 디스크 크기입니다. 스토리지 풀은 호스트 물리적 시스템의 디스크 크기를 초과할 수 없습니다. 최대 크기는 다음과 같습니다.
      • virtio-blk = 2^63바이트 또는 8 Exabytes( raw 파일 또는 디스크 사용)
      • Ext4 = ~ 16TB (4KB 블록 크기 사용)
      • XFS = ~8 Exabytes
      • qcow2 및 호스트 파일 시스템은 이미지 크기를 매우 크게 시도할 때 자체 메타데이터와 확장성을 평가/tuned해야 합니다. 원시 디스크를 사용하면 확장성 또는 최대 크기에 영향을 줄 수 있는 계층이 줄어듭니다.
      Forward 를 클릭하여 로컬 하드 드라이브에 디스크 이미지를 만듭니다. 또는 Select managed or other existing storage 를 선택한 다음 찾아보기 를 선택하여 관리 스토리지를 구성합니다.
    2. 스토리지 풀 사용

      스토리지 풀을 사용할 관리형 또는 기타 기존 스토리지 선택을 선택하는 경우 찾아보기 를 클릭하여 Locate 또는 create storage 볼륨 창을 엽니다.

      그림 3.7. 스토리지 볼륨 선택 창

      스토리지 볼륨 선택 창
      1. 스토리지 목록에서 스토리지 풀을 선택합니다.
      2. 선택 사항: 을 클릭하여 새 스토리지 볼륨을 생성합니다. 스토리지 볼륨 추가 화면이 표시됩니다. 새 스토리지 볼륨의 이름을 입력합니다.
        형식 드롭다운 메뉴에서 형식 옵션을 선택합니다.Choose a format option from the Format drop-down menu. 형식 옵션에는 raw, qcow2, 및 qed 가 있습니다. 필요에 따라 다른 필드를 조정합니다. 여기에서 사용되는 qcow2 버전은 버전 3입니다. qcow 버전을 변경하려면 다음을 참조하십시오. 23.19.2절. “대상 요소 설정”

        그림 3.8. 스토리지 볼륨 추가 창

        스토리지 볼륨 추가 창
    새 볼륨을 선택하고 볼륨 선택을 클릭합니다. 그런 다음 Finish 를 클릭하여 New VM 마법사로 돌아갑니다. 계속하려면 Forward 를 클릭합니다.
  7. 이름 및 최종 구성

    가상 머신의 이름을 지정합니다. 가상 머신 이름에는 문자, 숫자 및 다음 문자가 포함될 수 있습니다.밑줄(_), 마침표( . ), 하이픈(-)입니다. 가상 머신 이름은 마이그레이션에 대해 고유해야 하며 숫자만 구성될 수 없습니다.
    기본적으로 가상 머신은 'default'라는 네트워크에 대해 NAT(네트워크 주소 변환)를 사용하여 생성됩니다. 네트워크 선택을 변경하려면 네트워크 선택을 클릭하고 호스트 장치 및 소스 모드를 선택합니다.
    가상 시스템의 설정을 확인하고 충족 시 Finish 를 클릭합니다. 이렇게 하면 지정된 네트워킹 설정, 가상화 유형 및 아키텍처가 있는 가상 시스템이 생성됩니다.

    그림 3.9. 구성 확인

    구성 확인
    또는 가상 머신의 하드웨어를 추가로 구성하려면 설치 전에 구성 사용자 지정 확인란을 선택하여 게스트 스토리지 또는 네트워크 장치를 변경하거나 반가상화(virtio) 드라이버를 사용하거나 장치를 추가로 추가합니다. 그러면 가상 머신의 하드웨어 설정을 추가, 제거 및 구성할 수 있는 다른 마법사가 열립니다.
    참고
    Red Hat Enterprise Linux 4 또는 Red Hat Enterprise Linux 5 게스트 가상 머신은 그래픽 모드를 사용하여 설치할 수 없습니다. 따라서 비디오 카드로 "QXL" 대신 "Cirrus"를 선택해야 합니다.
    가상 머신의 하드웨어를 구성한 후 Apply.virt-manager 를 클릭하면 지정된 하드웨어 설정으로 가상 머신을 생성합니다.
    주의
    Red Hat Enterprise Linux 7 게스트 가상 머신을 원격 매체에서 설치할 때 TCP/IP 연결이 구성되지 않은 경우 설치에 실패합니다. 그러나 이러한 상황에서 Red Hat Enterprise Linux 5 또는 6의 게스트 가상 머신을 설치할 때 설치 프로그램은 "Configure TCP/IP" 인터페이스를 엽니다.
    이 차이점에 대한 자세한 내용은 관련 지식베이스 문서를 참조하십시오.
    Finish 를 클릭하여 Red Hat Enterprise Linux 설치 시퀀스로 이동합니다. Red Hat Enterprise Linux 7 설치에 대한 자세한 내용은 Red Hat Enterprise Linux 7 설치 가이드 를 참조하십시오.
Red Hat Enterprise Linux 7 게스트 가상 머신이 ISO 설치 디스크 이미지에서 생성됩니다.

3.4. virt-install 및 virt-manager 설치 옵션 비교

이 표는 가상 머신을 설치할 때 에 해당하는 virt-installvirt-manager 설치 옵션을 비교하는 빠른 참조를 제공합니다.
대부분의 virt-install 옵션은 필요하지 않습니다. 최소 요구 사항은 --name,--memory, 게스트 스토리지(--disk,--filesystem 또는 --disk none) 및 설치 방법(--location,--cdrom,--pxe,--import )입니다. 이러한 옵션은 인수와 함께 지정됩니다. 명령 옵션 및 관련 인수의 전체 목록을 보려면 다음 명령을 입력합니다.
# virt-install --help
virt-manager 에서는 최소한 이름, 설치 방법, 메모리(RAM), vCPU가 필요합니다.

표 3.1. 게스트 설치를 위한 virt-install 및 virt-manager 구성 비교

가상 머신 구성 virt-install 옵션 virt-manager 설치 마법사 레이블 및 단계 번호
가상 머신 이름 --name, -n 이름 (단계 5)
할당할 RAM(MiB) --ram, -r 메모리(RAM) (단계 3)
스토리지 - 스토리지 미디어 지정 --disk 이 가상 머신의 스토리지 활성화 → 컴퓨터의 하드 드라이브에 디스크 이미지 생성 또는 관리 또는 기타 기존 스토리지 선택(단계 4)
스토리지 - 호스트 디렉터리를 게스트로 내보내기 --filesystem 이 가상 머신의 스토리지 활성화 → 관리형 또는 기타 기존 스토리지 선택(단계 4)
스토리지 - 게스트에 로컬 디스크 스토리지 구성 --nodisks Enable storage for this virtual machine 확인란을 선택 취소 (단계 4)
설치 미디어 위치(로컬 설치) --file 로컬 설치 미디어 → 설치 미디어 찾기 ( ~ 2 단계)
배포 트리를 사용하여 설치(네트워크 설치) --location 네트워크 설치 → URL (단계 ~ 2 단계)
PXE를 사용하여 게스트 설치 --PXE 네트워크 부팅(단계 1)
vCPU 수 --vcpus CPU (단계 3)
호스트 네트워크 --network 고급 옵션 드롭다운 메뉴 (단계 5)
운영 체제 변형/버전 --os-variant 버전 (단계 2)
그래픽 표시 방법 --graphics, --nographics * virt-manager는 GUI 설치만 제공

4장. 가상 머신 복제

게스트 복사본을 생성하는 데 사용되는 게스트 가상 머신 인스턴스에는 다음 두 가지 유형이 있습니다.
  • 복제본은 단일 가상 시스템의 인스턴스입니다. 복제본은 동일한 가상 머신의 네트워크를 설정하는 데 사용할 수 있으며 다른 대상에도 배포할 수 있습니다.
  • 템플릿 은 복제 소스로 사용하도록 설계된 가상 머신의 인스턴스입니다. 템플릿에서 복제를 여러 개 생성하고 각 복제본을 약간 수정할 수 있습니다. 이 기능은 시스템에서 이러한 변경 사항의 영향을 확인하는 데 유용합니다.
복제와 템플릿 모두 가상 머신 인스턴스입니다. 이 둘의 차이점은 사용 방법에 있습니다.
생성된 복제본이 제대로 작동하려면 복제하기 전에 일반적으로 복제 중인 가상 머신과 고유한 정보 및 구성을 제거해야 합니다. 복제를 사용하는 방법에 따라 제거해야 하는 정보는 다릅니다.
제거할 정보 및 구성은 다음 수준에 있을 수 있습니다.
  • 플랫폼 수준 정보 및 구성에는 가상화 솔루션에서 가상 머신에 할당된 모든 항목이 포함됩니다. 예를 들면 NIC(네트워크 인터페이스 카드) 수 및 해당 MAC 주소가 포함됩니다.
  • 게스트 운영 체제 수준 정보 및 구성에는 가상 머신 내에 구성된 모든 항목이 포함됩니다. 예를 들면 SSH 키가 있습니다.
  • 애플리케이션 수준 정보 및 구성에는 가상 시스템에 설치된 애플리케이션에 의해 구성된 모든 항목이 포함됩니다. 예를 들면 활성화 코드 및 등록 정보가 있습니다.
    참고
    정보와 접근 방식은 각 애플리케이션에 고유하기 때문에 애플리케이션 수준 제거에 대한 정보는 포함되지 않습니다.
따라서 일부 정보와 구성은 가상 시스템 내에서 제거해야 하지만 가상화 환경(예: Virtual Machine Manager 또는 VMware)을 사용하여 가상 시스템에서 기타 정보 및 구성을 제거해야 합니다.
참고
스토리지 볼륨 복제에 대한 자세한 내용은 13.3.2.1절. “virsh를 사용하여 스토리지 볼륨 생성” 을 참조하십시오.

4.1. 복제를 위한 가상 머신 준비

가상 머신을 복제하기 전에 디스크 이미지에서 virt-sysprep 유틸리티를 실행하거나 다음 단계를 사용하여 준비해야 합니다.

절차 4.1. 복제를 위한 가상 머신 준비

  1. 가상 머신 설정

    1. 복제 또는 템플릿에 사용할 가상 머신을 빌드합니다.
      • 복제본에 필요한 소프트웨어를 설치합니다.
      • 운영 체제에 대해 고유하지 않은 설정을 구성합니다.
      • 고유하지 않은 애플리케이션 설정을 구성합니다.
  2. 네트워크 구성 제거

    1. 다음 명령을 사용하여 영구 udev 규칙을 제거합니다.
      # rm -f /etc/udev/rules.d/70-persistent-net.rules
      참고
      udev 규칙이 제거되지 않으면 첫 번째 NIC의 이름이 eth0 대신 eth1일 수 있습니다.
    2. /etc/sysconfig/network-scripts/ifcfg-eth[x] 를 다음과 같이 편집하여 ifcfg 스크립트에서 고유한 네트워크 세부 정보를 제거합니다.
      1. HWADDR 및 정적 행 제거
        참고
        HWADDR이 새 게스트의 MAC 주소와 일치하지 않으면 ifcfg가 무시됩니다. 따라서 파일에서 HWADDR을 제거하는 것이 중요합니다.
        DEVICE=eth[x]
        BOOTPROTO=none
        ONBOOT=yes
        #NETWORK=10.0.1.0       <- REMOVE
        #NETMASK=255.255.255.0  <- REMOVE
        #IPADDR=10.0.1.20       <- REMOVE
        #HWADDR=xx:xx:xx:xx:xx  <- REMOVE
        #USERCTL=no             <- REMOVE
        # Remove any other *unique* or non-desired settings, such as UUID.
        
      2. HWADDR 또는 고유한 정보가 포함되지 않은 DHCP 구성이 남아 있는지 확인합니다.
        DEVICE=eth[x]
        BOOTPROTO=dhcp
        ONBOOT=yes
        
      3. 파일에 다음 행이 포함되어 있는지 확인합니다.
        DEVICE=eth[x]
        ONBOOT=yes
        
    3. 다음 파일이 있는 경우 해당 파일에 동일한 콘텐츠가 포함되어 있는지 확인합니다.
      • /etc/sysconfig/networking/devices/ifcfg-eth[x]
      • /etc/sysconfig/networking/profiles/default/ifcfg-eth[x]
      참고
      NetworkManager 또는 특수 설정을 가상 시스템과 함께 사용하는 경우 추가 고유 정보가 ifcfg 스크립트에서 제거되었는지 확인합니다.
  3. 등록 세부 정보 삭제

    1. 다음 중 하나를 사용하여 등록 세부 정보를 삭제합니다.
      • RHN(Red Hat Network) 등록된 게스트 가상 머신의 경우 다음 명령을 사용하십시오.
        # rm /etc/sysconfig/rhn/systemid
      • RHSM(Red Hat Subscription Manager)의 경우 게스트 가상 머신은 다음과 같습니다.
        • 원래 가상 머신을 사용하지 않는 경우 다음 명령을 사용하십시오.
          # subscription-manager unsubscribe --all
          # subscription-manager unregister
          # subscription-manager clean
        • 원래 가상 머신을 사용하는 경우 다음 명령만 실행합니다.
          # subscription-manager clean
          원래 RHSM 프로필은 포털에 남아 있습니다. 복제 후 가상 머신에서 RHSM 등록을 다시 활성화하려면 다음을 수행하십시오.
          1. 고객 ID 코드를 가져옵니다.
            # subscription-manager identity
            subscription-manager identity: 71rd64fx-6216-4409-bf3a-e4b7c7bd8ac9
            
          2. 가져온 ID 코드를 사용하여 가상 머신을 등록합니다.
            # subscription-manager register --consumerid=71rd64fx-6216-4409-bf3a-e4b7c7bd8ac9
  4. 다른 고유한 세부 정보 제거

    1. 다음 명령을 사용하여 sshd 공개/개인 키 쌍을 제거합니다.
      # rm -rf /etc/ssh/ssh_host_*
      참고
      ssh 키를 제거하면 ssh 클라이언트의 문제가 이러한 호스트를 신뢰하지 않습니다.
    2. 여러 시스템에서 실행되는 경우 충돌이 발생할 수 있는 기타 애플리케이션별 식별자 또는 구성을 제거합니다.
  5. 다음 부팅 시 구성 마법사를 실행하도록 가상 머신 구성

    1. 다음에 다음 중 하나를 수행하여 부팅될 때 관련 구성 마법사를 실행하도록 가상 머신을 구성합니다.
      • Red Hat Enterprise Linux 6 이하의 경우 다음 명령을 사용하여 .unconfigured라는 루트 파일 시스템에 빈 파일을 만듭니다.
        # touch /.unconfigured
      • Red Hat Enterprise Linux 7의 경우 다음 명령을 실행하여 첫 번째 부팅 및 초기 설정 마법사를 활성화합니다.
        # sed -ie 's/RUN_FIRSTBOOT=NO/RUN_FIRSTBOOT=YES/' /etc/sysconfig/firstboot
        # systemctl enable firstboot-graphical
        # systemctl enable initial-setup-graphical
      참고
      다음 부팅 시 실행되는 마법사는 가상 머신에서 제거된 구성에 따라 다릅니다. 또한 복제가 처음 부팅되면 호스트 이름을 변경하는 것이 좋습니다.

4.2. 가상 머신 복제

복제를 진행하기 전에 가상 머신을 종료합니다. virt-clone 또는 virt-manager 를 사용하여 가상 머신을 복제할 수 있습니다.

4.2.1. virt-clone을 사용하여 게스트 복제

virt-clone 을 사용하여 명령줄에서 가상 머신을 복제할 수 있습니다.
virt-clone 을 성공적으로 완료하려면 root 권한이 필요합니다.
virt-clone 명령은 명령줄에 전달할 수 있는 여러 옵션을 제공합니다. 여기에는 일반 옵션, 스토리지 구성 옵션, 네트워킹 구성 옵션 및 기타 옵션이 포함됩니다. --original 만 필요합니다. 전체 옵션 목록을 보려면 다음 명령을 입력합니다.
# virt-clone --help
virt-clone 도움말 페이지에는 각 명령 옵션, 중요한 변수 및 예제도 문서화됩니다.
다음 예제에서는 기본 연결에서 "demo"라는 게스트 가상 머신을 복제하여 새 이름과 디스크 복제 경로를 자동으로 생성하는 방법을 보여줍니다.

예 4.1. virt-clone 을 사용하여 게스트 복제

# virt-clone --original demo --auto-clone
다음 예는 여러 디스크를 사용하여 QEMU 게스트 가상 머신 "demo"를 복제하는 방법을 보여줍니다.

예 4.2. virt-clone 을 사용하여 게스트 복제

# virt-clone --connect qemu:///system --original demo --name newdemo --file /var/lib/libvirt/images/newdemo.img --file /var/lib/libvirt/images/newdata.img

4.2.2. virt-manager를 사용하여 게스트 복제

다음 절차에서는 virt-manager 유틸리티를 사용하여 게스트 가상 머신 복제를 설명합니다.

절차 4.2. virt-manager를 사용하여 가상 머신 복제

  1. virt-manager를 엽니다.

    virt-manager 를 시작합니다. Applications (애플리케이션) 메뉴 및 System Tools (시스템 도구) 하위 메뉴에서 Virtual Machine Manager 애플리케이션을 시작합니다. 또는 root로 virt-manager 명령을 실행합니다.
    가상 머신 관리자 의 게스트 가상 머신 목록에서 복제하려는 게스트 가상 머신을 선택합니다.
    복제하려는 게스트 가상 머신을 마우스 오른쪽 버튼으로 클릭하고 Clone 을 선택합니다. Clone Virtual Machine(가상 시스템 복제) 창이 열립니다.

    그림 4.1. 가상 머신 복제 창

    가상 머신 복제 창
  2. 복제 구성

    • 복제본의 이름을 변경하려면 복제본의 새 이름을 입력합니다.
    • 네트워킹 구성을 변경하려면 세부 정보를 클릭합니다.
      복제본의 새 MAC 주소를 입력합니다.
      OK를 클릭합니다.

      그림 4.2. MAC 주소 창 변경

      MAC 주소 창 변경
    • 복제된 게스트 가상 머신의 각 디스크에 대해 다음 옵션 중 하나를 선택합니다.
      • 이 디스크 복제 - 복제된 게스트 가상 머신에 대해 디스크가 복제됨
      • 게스트 가상 머신 이름으로디스크 공유 - 복제할 게스트 가상 머신과 해당 복제본에서 디스크를 공유합니다.
      • 세부 정보 - 디스크의 새 경로를 선택할 수 있는 스토리지 경로 변경 창을 엽니다.

        그림 4.3. 스토리지 경로 창 변경

        스토리지 경로 창 변경
  3. 게스트 가상 머신을 복제합니다.

    Clone 을 클릭합니다.

5장. KVM Paravirtualized (virtio) 드라이버

반가상화 드라이버는 게스트의 성능을 향상시키고 게스트 I/O 대기 시간을 줄이고 베어 메탈 수준의 처리량을 높입니다. I/O-heavy 작업 및 애플리케이션을 실행하는 완전 가상화된 게스트에 반가상화 드라이버를 사용하는 것이 좋습니다.
virtio 드라이버는 KVM의 반가상화 장치 드라이버로, guest 가상 머신에 KVM 호스트에서 실행 가능합니다. 이러한 드라이버는 virtio 패키지에 포함되어 있습니다. virtio 패키지는 블록(스토리지) 장치 및 네트워크 인터페이스 컨트롤러를 지원합니다.
참고
PCI 장치는 가상화된 시스템 아키텍처에 의해 제한됩니다. 할당된 장치를 사용할 때 추가 제한 사항은 16장. 게스트 가상 머신 장치 구성 을 참조하십시오.

5.1. 기존 스토리지 장치에 KVM virtio 드라이버 사용

가상화된 IDE 드라이버 대신 virtio 드라이버를 사용하도록 게스트에 연결된 기존 하드 디스크 장치를 수정할 수 있습니다. 이 섹션에 표시된 예제에서는 libvirt 구성 파일을 편집합니다. 이러한 단계를 수행하기 위해 게스트 가상 머신을 종료할 필요는 없지만 게스트가 완전히 종료되고 재부팅될 때까지 변경 사항이 적용되지 않습니다.

절차 5.1. 기존 장치에 KVM virtio 드라이버 사용

  1. 이 절차를 계속 진행하기 전에 적절한 드라이버(viostor)를 설치했는지 확인하십시오.
  2. virsh edit guestname 명령을 root로 실행하여 장치의 XML 구성 파일을 편집합니다. 예를 들어 virsh는 guest1을 편집합니다. 구성 파일은 /etc/libvirt/qemu/ 디렉터리에 있습니다.
  3. 다음은 가상화된 IDE 드라이버를 사용하는 파일 기반 블록 장치입니다. 이는 virtio 드라이버를 사용하지 않는 가상 머신에 대한 일반적인 항목입니다.
    <disk type='file' device='disk'>
    	 ...
       <source file='/var/lib/libvirt/images/disk1.img'/>
       <target dev='hda' bus='ide'/>
    	 <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
  4. bus= 항목을 virtio 로 수정하여 virtio 장치를 사용하도록 항목을 변경합니다. 디스크가 이전 IDE인 경우 hda,hdb 또는 hdc 와 유사한 대상이 있습니다. bus=virtio 로 변경할 때 대상을 vda, pxe 또는RuntimeClass변경해야 합니다.
    <disk type='file' device='disk'>
       ...
       <source file='/var/lib/libvirt/images/disk1.img'/>
       <target dev='vda' bus='virtio'/>
    	 <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
  5. 디스크 태그 내에서 address 태그를 제거합니다. 이 절차가 작동하려면 이 작업을 수행해야 합니다. libvirt는 다음에 가상 머신을 시작할 때 주소 태그를 적절하게 다시 생성합니다.
또는 virt-manager,virsh attach-disk 또는 virsh attach-interface 가 virtio 드라이버를 사용하여 새 장치를 추가할 수 있습니다.
Virtio 사용에 대한 자세한 내용은 libvirt 웹 사이트를 참조하십시오. http://www.linux-kvm.org/page/Virtio

5.2. 새 스토리지 장치에 KVM virtio 드라이버 사용

다음 절차에서는 virt-manager 와 함께 KVM virtio 드라이버를 사용하여 새 스토리지 장치를 생성하는 방법을 설명합니다.
또는 virsh attach-disk 또는 virsh attach-interface 명령을 사용하여 virtio 드라이버를 사용하여 장치를 연결할 수 있습니다.
중요
새 장치를 설치하기 전에 드라이버가 게스트에 설치되어 있는지 확인합니다. 드라이버를 사용할 수없는 경우 장치가 인식되지 않고 작동하지 않습니다.

절차 5.2. virtio 스토리지 드라이버를 사용하여 스토리지 장치 추가

  1. virt-manager 에서 게스트 이름을 두 번 클릭하여 게스트 가상 머신을 엽니다.
  2. 을 클릭하여 가상 하드웨어 세부 정보 표시 탭을 엽니다.
  3. Show virtual hardware details 탭에서 하드웨어 추가 버튼을 클릭합니다.
  4. 하드웨어 유형 선택

    Hardware type 으로 Storage 를 선택합니다.

    그림 5.1. 새 가상 하드웨어 추가 마법사

    스토리지를 사용하여 새 가상 하드웨어 추가 마법사를 하드웨어 유형으로 선택합니다.
  5. 스토리지 장치 및 드라이버를 선택합니다.

    새 디스크 이미지를 생성하거나 스토리지 풀 볼륨을 선택합니다.
    virtio 드라이버를 사용하려면 장치 유형을 Disk 장치 및 Bus 유형을 VirtIO 로 설정합니다.

    그림 5.2. 새 가상 하드웨어 추가 마법사

    Add new virtual hardware wizard Storage 창, "Create a disk image on the computer's hard drive" selected.
    완료 를 클릭하여 절차를 완료합니다.

절차 5.3. virtio 네트워크 드라이버를 사용하여 네트워크 장치 추가

  1. virt-manager 에서 게스트 이름을 두 번 클릭하여 게스트 가상 머신을 엽니다.
  2. 을 클릭하여 가상 하드웨어 세부 정보 표시 탭을 엽니다.
  3. Show virtual hardware details 탭에서 하드웨어 추가 버튼을 클릭합니다.
  4. 하드웨어 유형 선택

    Hardware type 으로 Network 를 선택합니다.

    그림 5.3. 새 가상 하드웨어 추가 마법사

    네트워크를 하드웨어 유형으로 선택한 상태에서 새 가상 하드웨어 추가 마법사
  5. 네트워크 장치 및 드라이버를 선택합니다.

    virtio 드라이버를 사용하려면 장치 모델을 virtio 로 설정합니다. 필요한 호스트 장치를 선택합니다.

    그림 5.4. 새 가상 하드웨어 추가 마법사

    장치 모델이 virtio로 설정된 새 가상 하드웨어 마법사 네트워크 추가 창.
    완료 를 클릭하여 절차를 완료합니다.
새 장치가 모두 추가되면 가상 머신을 재부팅합니다. 가상 머신은 게스트가 재부팅될 때까지 장치를 인식하지 못할 수 있습니다.

5.3. 네트워크 인터페이스 장치에 KVM virtio 드라이버 사용

네트워크 인터페이스가 KVM virtio 드라이버를 사용하는 경우 KVM은 처리 오버헤드를 제거하고 게스트 성능을 향상시킬 수 있는 네트워킹 하드웨어를 에뮬레이션하지 않습니다. Red Hat Enterprise Linux 7에서 virtio는 기본 네트워크 인터페이스 유형으로 사용됩니다. 그러나 시스템에서 이 설정이 다르게 구성된 경우 다음 절차를 사용할 수 있습니다.
  • virtio 네트워크 장치를 게스트에 연결하려면 virsh attach-interface 명령을 model --virtio 옵션과 함께 사용하십시오.
    또는 virt-manager 인터페이스에서 게스트의 가상 하드웨어 세부 정보 화면으로 이동하여 하드웨어 추가 를 클릭합니다. 새 가상 하드웨어 추가 화면에서 Network 를 선택하고 Device modelvirtio 로 변경합니다.
  • 기존 인터페이스의 유형을 virtio 로 변경하려면 virsh edit 명령을 사용하여 원하는 게스트의 XML 구성을 편집하고 모델 유형 속성을 virtio 로 변경합니다. 예를 들면 다음과 같습니다.
      <devices>
        <interface type='network'>
          <source network='default'/>
          <target dev='vnet1'/>
          <model type='virtio'/>
          <driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off'/>
        </interface>
      </devices>
      ...
    
    또는 virt-manager 인터페이스에서 게스트의 가상 하드웨어 세부 정보 화면으로 이동하여 NIC 항목을 선택하고 장치 모델을 virtio 로 변경합니다.
참고
게스트 내부의 네트워크 인터페이스 이름 지정이 재부팅 후에도 일관되지 않은 경우 게스트에 제공되는 모든 인터페이스가 동일한 장치 모델인 virtio-net 이 되도록 하십시오. 자세한 내용은 Red Hat 지식베이스 를 참조하십시오.

6장. 네트워크 설정

이 장에서는 libvirt 기반 게스트 가상 시스템에서 사용하는 일반적인 네트워킹 구성에 대해 설명합니다.
Red Hat Enterprise Linux 7은 가상화를 위해 다음과 같은 네트워킹 설정을 지원합니다.
  • NAT(네트워크 주소 변환)를 사용하는 가상 네트워크
  • PCI 장치 할당을 사용하여 직접 할당된 물리적 장치
  • PCIe SR-IOV를 사용하여 직접 할당된 가상 기능
  • 브리지 네트워크
NAT, 네트워크 브리징을 활성화하거나, 게스트 가상 시스템의 네트워크 서비스에 대한 외부 호스트가 액세스할 수 있도록 PCI 장치를 직접 할당해야 합니다.

6.1. libvirt를 사용한 NAT(Network Address Translation)

네트워크 연결을 공유하는 가장 일반적인 방법 중 하나는 NAT(Network Address Translation) 전달(가상 네트워크라고도 함)을 사용하는 것입니다.

호스트 설정

모든 표준 libvirt 설치는 기본 가상 네트워크로 가상 머신에 NAT 기반 연결을 제공합니다. virsh net-list --all 명령을 사용하여 사용할 수 있는지 확인합니다.

# virsh net-list --all
Name                 State      Autostart
-----------------------------------------
default              active     yes
이 파일이 누락된 경우 게스트의 XML 구성 파일(예: /etc/libvirtd/qemu/myguest.xml)에서 다음을 사용할 수 있습니다.
# ll /etc/libvirt/qemu/
total 12
drwx------. 3 root root 4096 Nov  7 23:02 networks
-rw-------. 1 root root 2205 Nov 20 01:20 r6.4.xml
-rw-------. 1 root root 2208 Nov  8 03:19 r6.xml
기본 네트워크는 /etc/libvirt/qemu/networks/default.xml에서 정의됩니다.
기본 네트워크가 자동으로 시작되도록 표시합니다.
# virsh net-autostart default
Network default marked as autostarted
기본 네트워크를 시작합니다.
# virsh net-start default
Network default started
libvirt 기본 네트워크가 실행되면 분리된 브리지 장치가 표시됩니다. 이 장치에는 물리적 인터페이스가 추가되지 않습니다. 새 장치는 NAT 및 IP 전달을 사용하여 실제 네트워크에 연결합니다. 새 인터페이스를 추가하지 마십시오.
# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.000000000000       yes
libvirtINPUT,FORWARD,OUTPUTPOSTROUTING 체인의 virbr0 장치에 연결된 게스트 가상 머신의 트래픽을 허용하는 iptables 규칙을 추가합니다. libvirtip_forward 매개변수를 활성화합니다. 다른 일부 애플리케이션은 ip_forward 를 비활성화할 수 있으므로 가장 좋은 옵션은 /etc/sysctl.conf 에 다음을 추가하는 것입니다.
 net.ipv4.ip_forward = 1

게스트 가상 머신 구성

호스트 구성이 완료되면 이름을 기반으로 게스트 가상 머신을 가상 네트워크에 연결할 수 있습니다. 게스트를 '기본' 가상 네트워크에 연결하려면 XML 구성 파일(예: /etc/libvirtd/qemu/myguest.xml)에서 게스트를 사용할 수 있습니다.

<interface type='network'>
   <source network='default'/>
</interface>
참고
MAC 주소를 정의하는 것은 선택 사항입니다. 하나를 정의하지 않으면 MAC 주소가 자동으로 생성되고 네트워크에서 사용하는 브리지 장치의 MAC 주소로 사용됩니다. MAC 주소를 수동으로 설정하면 환경 전체에서 일관성 또는 간편한 참조를 유지하거나 충돌 가능성을 매우 적게 방지하는 데 유용할 수 있습니다.
<interface type='network'>
  <source network='default'/>
  <mac address='00:16:3e:1a:b3:4a'/>
</interface>

6.2. vhost-net 비활성화

vhost-net 모듈은 virtio 패킷 처리 작업을 사용자 공간( QEMU 프로세스)에서 이동하고 커널(vhost-net 드라이버)으로 이동하여 가상화 오버헤드를 줄이는 virtio 네트워킹의 커널 수준 백엔드입니다. vhost-net은 virtio 네트워크 인터페이스에만 사용할 수 있습니다. vhost-net 커널 모듈이 로드되면 모든 virtio 인터페이스에 대해 기본적으로 활성화되어 있지만 vhost-net이 사용 중일 때 특정 워크로드가 성능이 저하되는 경우 인터페이스 구성에서 기본적으로 활성화될 수 있습니다.
특히 UDP 트래픽이 호스트 시스템에서 해당 호스트의 게스트 가상 시스템으로 전송되면 게스트 가상 머신이 수신되는 데이터를 호스트 시스템이 전송하는 속도로 처리하면 성능 저하가 발생할 수 있습니다. 이 경우 vhost-net 을 사용하면 UDP 소켓의 수신 버퍼가 더 빠르게 오버플로우되어 패킷이 손실됩니다. 따라서 트래픽 속도가 느려지고 전체 성능을 개선하기 위해 vhost-net 을 비활성화하는 것이 좋습니다.
vhost-net 을 비활성화하려면 게스트 가상 머신의 XML 구성 파일에서 <interface> 하위 요소를 편집하고 다음과 같이 네트워크를 정의합니다.
<interface type="network">
   ...
   <model type="virtio"/>
   <driver name="qemu"/>
   ...
</interface>
드라이버 이름을 qemu 로 설정하면 패킷 처리를 QEMU 사용자 공간으로 강제 비활성화하여 해당 인터페이스에 대해 vhost-net을 효과적으로 비활성화합니다.

6.3. vhost-net zero-copy 활성화

Red Hat Enterprise Linux 7에서 vhost-net zero-copy는 기본적으로 비활성화되어 있습니다. 이 작업을 영구적으로 활성화하려면 다음 콘텐츠를 사용하여 새 파일 vhost-net.conf/etc/modprobe.d 에 추가합니다.
options vhost_net  experimental_zcopytx=1
이 값을 다시 비활성화하려면 다음을 실행합니다.
modprobe -r vhost_net
modprobe vhost_net experimental_zcopytx=0
첫 번째 명령은 이전 파일을 제거하고 두 번째 명령은 새 파일을 만들고 0-copy를 비활성화합니다. 이 값을 사용하여 활성화할 수도 있지만 변경 사항은 영구적으로 적용되지 않습니다.
이 효과가 있는지 확인하려면 cat /sys/module/vhost_net/parameters/experimental_zcopytx 의 출력을 확인합니다. 다음과 같이 표시되어야 합니다.
$ cat /sys/module/vhost_net/parameters/experimental_zcopytx
0

6.4. 브리지 네트워킹

브리지된 네트워킹(네트워크 브리징 또는 가상 네트워크 전환이라고도 함)은 가상 시스템 네트워크 인터페이스를 물리적 인터페이스와 동일한 네트워크에 배치하는 데 사용됩니다. 브릿지에는 최소한의 구성이 필요하며 기존 네트워크에 가상 머신이 표시되므로 관리 오버헤드와 네트워크 복잡성이 줄어듭니다. 브리지에는 몇 가지 구성 요소와 구성 변수가 포함되어 있으므로 필요한 경우 이해하기 쉽고 문제를 해결할 수 있는 투명한 설정을 제공합니다.
브리징은 표준 Red Hat Enterprise Linux 툴, virt-manager 또는 libvirt 를 사용하여 가상화된 환경에서 구성할 수 있으며 다음 섹션에 설명되어 있습니다.
그러나 가상화된 환경에서도 호스트 운영 체제의 네트워킹 툴을 사용하여 브리지를 보다 쉽게 생성할 수 있습니다. 이 브릿지 생성 방법에 대한 자세한 내용은 Red Hat Enterprise Linux 7 네트워킹 가이드 를 참조하십시오.

6.4.1. Red Hat Enterprise Linux 7 호스트에서 브리지 네트워킹 구성

가상화 관리 툴과 관계없이 브릿지된 네트워킹은 Red Hat Enterprise Linux 호스트의 가상 시스템에 맞게 구성할 수 있습니다. 이 구성은 가상화 브리지가 호스트의 유일한 네트워크 인터페이스이거나 호스트의 관리 네트워크 인터페이스인 경우 주로 권장됩니다.
가상화 툴을 사용하지 않고 네트워크 브리징을 구성하는 방법은 Red Hat Enterprise Linux 7 네트워킹 가이드 를 참조하십시오.

6.4.2. 가상 머신 관리자를 사용한 브리지 네트워킹

이 섹션에서는 virt-manager 를 사용하여 호스트 시스템의 인터페이스에서 게스트 가상 머신으로의 브릿지를 생성하는 방법을 설명합니다.
참고
환경에 따라 Red Hat Enterprise Linux 7에서 libvirt 도구를 사용한 브릿지를 설정하려면 Network Manager를 비활성화해야 할 수 있습니다. 이는 Red Hat에서 권장하지 않습니다. 또한 libvirt를 사용하여 만든 브리지는 브리지에서 네트워크 연결을 유지하기 위해 libvirtd를 실행해야 합니다.
브릿지 생성 후 가상 머신 인터페이스를 브리지에 추가하는 동안 Red Hat Enterprise Linux 7 네트워킹 가이드에 설명된 대로 물리적 Red Hat Enterprise Linux 호스트에서 브리지 네트워킹을 구성하는 것이 좋습니다.

절차 6.1. virt-manager를 사용하여 브리지 만들기

  1. virt-manager 메인 메뉴에서 Edit octets Connection Details 를 클릭하여 연결 세부 정보 창을 엽니다.
  2. 네트워크 인터페이스 탭을 클릭합니다.
  3. 창 하단에 있는 + 를 클릭하여 새 네트워크 인터페이스를 구성합니다.
  4. 인터페이스 유형 드롭다운 메뉴에서 브리지 를 선택한 다음 앞으로 를 클릭하여 계속합니다.

    그림 6.1. 브리지 추가

    브리지 추가
    1. 이름 필드에 브리지의 이름을 입력합니다(예: br0 ).
    2. 드롭다운 메뉴에서 시작 모드를 선택합니다. 다음 중 하나를 선택합니다.
      • none - 브리지를 비활성화합니다.
      • ONBOOT - 다음 게스트 가상 머신 재부팅 시 브리지를 활성화합니다.
      • 핫플러그 - 게스트 가상 머신이 실행 중인 경우에도 브릿지를 활성화합니다.
    3. 이제 활성화 확인란을 선택하여 브릿지를 즉시 활성화합니다.
    4. IP 설정 또는 브리지 설정을 구성하려면 적절한 Configure (구성) 버튼을 클릭합니다. 필요한 설정을 지정하기 위해 별도의 창이 열립니다. 필요한 사항을 변경하고 완료되면 확인 을 클릭합니다.
    5. 가상 머신에 연결할 실제 인터페이스를 선택합니다. 인터페이스가 현재 다른 게스트 가상 머신에서 사용 중인 경우 경고 메시지가 표시됩니다.
  5. 완료 를 클릭하고 마법사가 닫히고 연결 메뉴로 돌아갑니다.

    그림 6.2. 브리지 추가

    브리지 추가
사용할 브리지를 선택하고 적용을 클릭하여 마법사를 종료합니다.
인터페이스를 중지하려면 중지 인터페이스 키를 클릭합니다. 브리지가 중지되면 인터페이스를 삭제하려면 Delete Interface (인터페이스 삭제) 키를 클릭합니다.

6.4.3. libvirt를 사용한 브리지 네트워킹

환경에 따라 Red Hat Enterprise Linux 7에서 libvirt를 사용한 브릿지를 설정하려면 Network Manager를 비활성화해야 할 수 있습니다. 이는 Red Hat에서 권장하지 않습니다. 또한 브리지가 작동하기 위해 libvirtd를 실행해야 합니다.
Red Hat Enterprise Linux 7 네트워킹 가이드에 설명된 대로 물리적 Red Hat Enterprise Linux 호스트에서 브리지 네트워킹을 구성하는 것이 좋습니다.
중요
libvirt는 새로운 커널 튜닝 가능 매개 변수를 활용하여 호스트 FDB( bridge forwarding 데이터베이스) 항목을 관리하여 여러 가상 머신을 브리징할 때 시스템 네트워크 성능을 향상시킬 수 있습니다. 네트워크 <bridge> 요소의 macTableManager 속성을 호스트의 XML 구성 파일에서 'libvirt' 로 설정합니다.
<bridge name='br0' macTableManager='libvirt'/>
이렇게 하면 모든 브리지 포트에서 학습 모드가 해제되고 libvirt는 필요에 따라 FDB에 항목을 추가하거나 제거합니다. MAC 주소에 대한 적절한 전달 포트를 학습하는 오버헤드를 제거하는 것과 함께 커널은 네트워크에 브리지를 연결하는 물리적 장치에서 무차별 모드를 비활성화하여 오버헤드를 추가로 줄일 수 있습니다.

7장. KVM을 사용하여 오버 커밋

7.1. 소개

KVM 하이퍼바이저는 CPU 및 메모리를 자동으로 오버 커밋합니다. 즉, 시스템에 실제 리소스가 있는 것보다 더 많은 가상화된 CPU와 메모리를 가상 머신에 할당할 수 있습니다. 대부분의 프로세스는 항상 할당된 리소스의 100%에 액세스하지 않기 때문에 가능합니다.
그 결과 활용도가 낮은 가상화 서버 또는 데스크탑을 통해 더 적은 수의 호스트에서 실행할 수 있으므로 서버 하드웨어에 전력, 밸런싱 및 투자가 적은 순으로 시스템 리소스를 절약할 수 있습니다.

7.2. 메모리 과다 할당

KVM 하이퍼바이저에서 실행되는 게스트 가상 머신에는 전용 물리적 RAM 블록이 할당되어 있지 않습니다. 대신 각 게스트 가상 머신은 요청된 경우에만 호스트의 물리적 머신의 Linux 커널이 메모리를 할당하는 Linux 프로세스로 작동합니다. 또한 호스트의 메모리 관리자는 게스트 가상 시스템의 메모리를 자체 실제 메모리와 스왑 공간 간에 이동할 수 있습니다.
오버 커밋을 수행하려면 호스트 물리적 머신에서 모든 게스트 가상 머신을 수용할 수 있을 뿐만 아니라 호스트 물리적 머신의 프로세스를 위한 충분한 메모리가 필요합니다. 기본 규칙으로 호스트 물리적 시스템의 운영 체제에는 최소 4GB의 스왑 공간과 함께 최대 4GB의 메모리가 필요합니다. 스왑 파티션에 적절한 크기를 결정하는 방법에 대한 고급 지침은 Red Hat 지식베이스 를 참조하십시오.
중요
과다 할당은 일반 메모리 문제에 대한 이상적인 솔루션이 아닙니다. 메모리 부족을 처리하는 권장 방법은 게스트당 더 적은 메모리를 할당하고 호스트에 실제 메모리를 추가하거나 스왑 공간을 사용하는 것입니다.
자주 스왑하면 가상 머신이 느리게 실행됩니다. 또한 오버 커밋으로 인해 시스템이 OOM(메모리 부족)이 발생하여 Linux 커널이 중요한 시스템 프로세스를 종료할 수 있습니다. 메모리를 과다 할당하려면 충분한 테스트를 수행해야 합니다. 과다 할당에 대한 도움이 필요하면 Red Hat 지원에 문의하십시오.
오버 커밋은 모든 가상 머신에서 작동하지 않지만 사용량이 가장 적게 사용하거나 KSM을 사용하여 동일한 게스트를 실행하는 데스크탑 가상화 설정에서 작동하는 것으로 확인되었습니다. KSM 및 오버 커밋에 대한 자세한 내용은 Red Hat Enterprise Linux 7 Virtualization 튜닝 및 최적화 가이드 를 참조하십시오.
중요
장치 할당에서는 메모리 과다 할당이 지원되지 않습니다. 이는 장치 할당 이 사용 중인 경우 할당된 장치를 사용하여 직접 메모리 액세스(DMA)를 활성화하려면 모든 가상 머신 메모리를 정적으로 사전 할당해야 하기 때문입니다.

7.3. 가상화된 CPU 과다 할당

KVM 하이퍼바이저는 가상화된 CPU(vCPU) 오버 커밋을 지원합니다. 가상화된 CPU는 게스트 가상 머신의 부하 제한을 허용하는 한 오버 커밋할 수 있습니다. vCPU를 오버 커밋할 때 주의를 기울여서 100%로 로드하면 요청이 떨어지거나 응답 시간을 사용할 수 없게 될 수 있습니다.
Red Hat Enterprise Linux 7에서는 SMP(대칭 멀티 처리) 가상 머신이라는 vCPU를 사용하여 게스트를 과다 할당할 수 있습니다. 그러나 실제 CPU에 있는 것보다 가상 머신에서 더 많은 코어를 실행하는 경우 성능 저하가 발생할 수 있습니다.
예를 들어 4개의 vCPU가 있는 가상 시스템을 듀얼 코어 프로세서가 있는 호스트 시스템에서 실행할 수 있지만 쿼드 코어 호스트에서는 실행할 수 있습니다. 물리적 처리 코어 수를 초과 커밋하면 필요한 것보다 적은 CPU 시간이 단축된 프로그램으로 인해 성능이 저하됩니다. 또한 물리적 프로세서 코어당 총 10개의 vCPU가 할당된 것은 권장되지 않습니다.
databind 게스트를 사용하면 일부 처리 오버헤드가 고유합니다. 게스트에 리소스를 할당하기 위해 시간 복제를 사용하면 게스트 내부의 CPU 간 통신 속도가 느려질 수 있으므로 CPU 오버 커밋을 통해 NetNamespace 오버헤드가 증가할 수 있습니다. vCPU 수 또는 과다 할당 비율이 많은 게스트로 이러한 오버헤드가 증가합니다.
단일 호스트에 여러 개의 게스트가 있는 경우 가상화된 CPU가 가장 적합하며, 각 게스트에는 호스트 CPU 수에 비해 적은 수의 vCPU가 있습니다. KVM은 5개의 vCPU(가상 시스템 5개)에서 단일 호스트당 하나의 물리적 CPU로 100% 미만의 로드를 안전하게 지원하는 게스트를 지원해야 합니다. KVM 하이퍼바이저는 모든 가상 머신 간에 전환하여 부하가 균형을 유지합니다.
최상의 성능을 위해 Red Hat은 각 게스트 내에 있는 프로그램을 실행하는 데 필요한 vCPU 수만큼만 게스트를 할당할 것을 권장합니다.
중요
메모리 100 % 또는 처리 리소스를 사용하는 애플리케이션은 과다 할당 환경에서 불안정해질 수 있습니다. CPU 과다 할당 비율과 FlexVolume의 양은 작업 부하에 따라 다르기 때문에 광범위한 테스트없이 프로덕션 환경에서 메모리 또는 CPU를 과다 할당하지 마십시오.

8장. KVM 게스트 타이밍 관리

가상화는 게스트 가상 머신의 유지 시간에 대한 몇 가지 문제가 발생합니다.
  • 인터럽트는 항상 동시에 그리고 모든 게스트 가상 머신에 즉시 전달될 수 없습니다. 이는 가상 머신의 인터럽트가 실제 인터럽트가 아니기 때문입니다. 대신 호스트 시스템에 의해 게스트 가상 머신에 삽입됩니다.
  • 호스트는 다른 게스트 가상 머신을 실행하거나 다른 프로세스를 실행할 수 있습니다. 따라서 일반적으로 인터럽트에 필요한 정확한 타이밍이 항상 가능한 것은 아닙니다.
정확한 시간 유지 없이 게스트 가상 머신은 세션 유효성, 마이그레이션 및 기타 네트워크 활동에 대한 타임스탬프가 정확하므로 네트워크 애플리케이션 및 프로세스에 문제가 발생할 수 있습니다.
KVM은 게스트 가상 머신에 반가상화 클럭(kvm-clock)을 제공하여 이러한 문제를 방지합니다. 그러나 게스트 마이그레이션과 같은 부정확성을 유지하는 시간에 의해 영향을 받을 수 있는 활동을 시도하기 전에 타이밍을 테스트하는 것은 여전히 중요합니다.
중요
위에 설명된 문제를 방지하려면 호스트와 게스트 가상 시스템에서 NTP(Network Time Protocol)를 구성해야 합니다. Red Hat Enterprise Linux 6 및 이전 버전을 사용하는 게스트의 경우 NTP는 ntpd 서비스에 의해 구현됩니다. 자세한 내용은 Red Hat Enterprise 6 배포 가이드 를 참조하십시오.
Red Hat Enterprise Linux 7을 사용하는 시스템에서는 ntpd 또는 chronyd 서비스에서 NTP 시간 동기화 서비스를 제공할 수 있습니다. Chrony는 가상 머신에는 몇 가지 장점이 있습니다. 자세한 내용은 Red Hat Enterprise Linux 7 시스템 관리자 가이드 의 chrony Suite 를 사용한 NTP 구성 및 NTP 사용 ntpd 섹션을 참조하십시오.

게스트 가상 머신 시간 동기화의 메커니즘

기본적으로 게스트는 다음과 같이 하이퍼바이저와 시간을 동기화합니다.

  • 게스트 시스템이 부팅되면 게스트가 에뮬레이션된 실시간 Clock(RTC)에서 시간을 읽습니다.
  • NTP 프로토콜이 시작되면 게스트 클럭을 자동으로 동기화합니다. 이후 일반 게스트 작동 중에 NTP는 게스트에서 클럭 조정을 수행합니다.
  • 일시 중지 또는 복원 프로세스 후 게스트를 다시 시작하면 게스트 시계를 지정된 값과 동기화하는 명령이 관리 소프트웨어(예: virt-manager)에서 발행해야 합니다. 이 동기화는 QEMU 게스트 에이전트 가 게스트에 설치되어 해당 기능을 지원하는 경우에만 작동합니다. 게스트 클럭이 동기화하는 값은 일반적으로 호스트 클럭 값입니다.

고정 TSC (Time Stamp Boost)

최신 Intel 및 AMD CPU는 고정 TSC(Time Stamp counter)를 제공합니다. CPU 코어 자체 변경 빈도(예: 전력 절감 정책 준수)의 개수 빈도는 다릅니다. TSC가 연속된 TSC가 있는 CPU는 KVM 게스트의 클럭 소스로 사용하기 위해 필요합니다.

constant_tsc 플래그가 있는 경우 CPU에는 고정 TSC가 있습니다. CPU에 constant_tsc 플래그가 있는지 확인하려면 다음 명령을 입력합니다.
$ cat /proc/cpuinfo | grep constant_tsc
출력을 지정하면 CPU에 constant_tsc bit가 있습니다. 출력을 지정하지 않으면 아래 지침을 따릅니다.

Constant TSC를 사용하지 않고 호스트 구성

일정한 TSC 빈도가 없는 시스템은 TSC를 가상 머신의 클럭 소스로 사용할 수 없으며 추가 구성이 필요합니다. 전원 관리 기능은 정확한 시간 유지를 방해하고 게스트 가상 머신이 KVM을 사용하여 시간을 정확하게 유지하려면 비활성화해야 합니다.

중요
이 지침은 AMD 버전 F CPU에만 적용됩니다.
CPU에 constant_tsc 비트가 없는 경우 모든 전원 관리 기능 을 비활성화합니다. 각 시스템에는 시간을 유지하기 위해 사용하는 여러 타이머가 있습니다. TSC는 호스트에서 안정적이지 않으며, cpufreq 변경, 깊이 C 상태 또는 더 빠른 TSC를 사용하는 호스트로의 마이그레이션으로 인해 발생하는 경우가 있습니다. 딥 C 절전 상태는 TSC를 중지할 수 있습니다. 커널이 딥 C 상태를 사용하는 것을 방지하기 위해 커널 부팅에 processor.max_cstate=1 을 추가합니다. 이 변경 사항을 영구적으로 변경하려면 /etc/default/grub파일에서 GRUB_CMDLINE_LINUX 키 값을 편집합니다. 예를 들어 각 부팅마다 긴급 모드를 활성화하려면 다음과 같이 항목을 편집합니다.
GRUB_CMDLINE_LINUX="emergency"
GRUB 2 부팅 메뉴에 매개 변수를 추가하는 것과 유사하게 GRUB_CMDLINE_LINUX 키에 대해 여러 매개변수를 지정할 수 있습니다.
cpufreq 를 비활성화하려면 ( constant_tsc없이 호스트에만 필요) kernel-tools 를 설치하고 cpupower.service (systemctl enable cpupower.service)를 활성화합니다. 게스트 가상 머신이 부팅될 때마다 이 서비스를 비활성화하려면 /etc/sysconfig/cpupower 에서 구성 파일을 변경하고 CPUPOWER_START_OPTS 및 CPUPOWER_STOP_OPTS 를 변경합니다. 유효한 제한은 /sys/devices/system/cpu/cpuid/cpufreq/scaling_available_governors 파일에서 확인할 수 있습니다. 이 패키지 또는 전원 관리 및 관리자에 대한 자세한 내용은 Red Hat Enterprise Linux 7 전원 관리 가이드 를 참조하십시오.

8.1. 호스트 전체 시간 동기화

KVM 게스트의 가상 네트워크 장치는 하드웨어 타임스탬프를 지원하지 않으므로 NTP 또는 PTP와 같은 네트워크 프로토콜을 사용하는 게스트의 클럭을 10초보다 더 나은 정확도로 동기화하기가 어렵습니다.
게스트의 보다 정확한 동기화가 필요한 경우 NTP 또는 PTP를 사용하여 호스트의 클럭을 하드웨어 타임스탬프와 동기화하고 게스트를 호스트에 직접 동기화하는 것이 좋습니다. Red Hat Enterprise Linux 7.5 이상에서는 게스트가 마이크로초 정확도와 호스트를 동기화할 수 있는 가상 PTP 하드웨어 클럭 (PHC)을 제공합니다.
중요
EgressIPC가 제대로 작동하려면 호스트와 게스트 모두 RHEL 7.5 이상을 운영 체제 (OS)로 사용해야 합니다.
EgressIPC 장치를 활성화하려면 게스트 OS에서 다음을 수행하십시오.
  1. 재부팅 후 로드하도록 ptp_kvm 모듈을 설정합니다.
    # echo ptp_kvm > /etc/modules-load.d/ptp_kvm.conf
  2. /dev/ptp0 시계를 chrony 구성에 대한 참조로 추가합니다.
    # echo "refclock PHC /dev/ptp0 poll 2" >> /etc/chrony.conf
  3. chrony 데몬을 다시 시작하십시오.
    # systemctl restart chronyd
  4. 호스트 게스트 시간 동기화가 올바르게 구성되었는지 확인하려면 게스트에서 chronyc sources 명령을 사용합니다. 출력은 다음과 유사해야 합니다.
    # chronyc sources
    210 Number of sources = 1
    MS Name/IP address         Stratum Poll Reach LastRx Last sample
    ===============================================================================
    #* PHC0                          0   2   377     4     -6ns[   -6ns] +/-  726ns
    

8.2. Red Hat Enterprise Linux 게스트에 필요한 시간 관리 매개 변수

특정 Red Hat Enterprise Linux 게스트 가상 시스템의 경우 시스템 시간을 올바르게 동기화하는 데 추가 커널 매개변수가 필요합니다. 이러한 매개변수는 게스트 가상 머신의 /etc/grub2.cfg 파일에서 /kernel 행의 끝에 추가하여 설정할 수 있습니다.
참고
Red Hat Enterprise Linux 5.5 이상, Red Hat Enterprise Linux 6.0 이상 및 Red Hat Enterprise Linux 7은 kvm-clock 을 기본 클럭 소스로 사용합니다. kvm-clock 을 실행하면 추가 커널 매개변수가 필요하지 않으며 Red Hat에서 사용하는 것이 좋습니다.
아래 표에는 Red Hat Enterprise Linux 버전 및 지정된 시스템에 필요한 매개 변수가 나열되어 있습니다.

표 8.1. 커널 매개변수 요구사항

Red Hat Enterprise Linux 버전 추가 게스트 커널 매개변수
kvm-clock이 있는 AMD64 및 Intel 64 시스템에서 7.0 이상 추가 매개변수가 필요하지 않음
kvm-clock이 있는 AMD64 및 Intel 64 시스템에서 6.1 이상 추가 매개변수가 필요하지 않음
kvm-clock이 있는 AMD64 및 Intel 64 시스템의 6.0 추가 매개변수가 필요하지 않음
kvm-clock이 없는 AMD64 및 Intel 64 시스템에서 6.0 notsc lpj=n
참고
lpj 매개 변수에는 게스트 가상 머신이 실행되는 특정 CPU의 jiffy 값에 해당하는 숫자 값이 필요합니다. 이 값을 모르는 경우 lpj 매개변수를 설정하지 마십시오.

8.3. 느슨한 시간 계산

스틸 타임은 호스트에서 제공하지 않는 게스트 가상 머신에 필요한 CPU 시간입니다. 스틸 타임은 호스트가 이러한 리소스를 다른 게스트로 할당할 때 발생합니다.
스틸 타임은 /proc/stat 의 CPU 시간 필드에 보고됩니다. topvmstat 와 같은 유틸리티에 의해 자동으로 보고됩니다. "%st" 또는 "st" 열에 표시됩니다. 해제할 수 없습니다.
많은 양의 스틸 타임은 CPU 경합을 나타내며 이로 인해 게스트 성능이 저하될 수 있습니다. CPU 경합을 완화하려면 게스트의 CPU 우선 순위 또는 CPU 할당량을 늘리거나 호스트에서 더 적은 수의 게스트를 실행합니다.

9장. libvirt를 사용하여 네트워크 부팅

게스트 가상 머신은 PXE가 활성화된 상태에서 부팅할 수 있습니다. PXE를 사용하면 게스트 가상 머신이 네트워크 자체에서 구성을 부팅 및 로드할 수 있습니다. 이 섹션에서는 libvirt를 사용하여 PXE 게스트를 구성하는 몇 가지 기본 설정 단계를 보여줍니다.
이 섹션에서는 부팅 이미지 또는 PXE 서버 생성을 다루지 않습니다. PXE 부팅이 활성화된 게스트 가상 머신을 부팅하기 위해 사설 또는 브리지된 네트워크에서 libvirt를 구성하는 방법을 설명하는 데 사용됩니다.
주의
이러한 절차는 예제로만 제공됩니다. 진행하기 전에 충분한 백업이 있는지 확인하십시오.

9.1. 부팅 서버 준비

이 장의 단계를 수행하려면 다음이 필요합니다.
  • PXE 서버(DHCP 및 TFTP) - libvirt 내부 서버, 수동으로 구성된 dhcpd 및 tftpd, dnsmasq, Co#150r 또는 기타 다른 서버일 수 있습니다.
  • 부팅 이미지 - 예를 들어 수동으로 또는 Co1.8.0r에 의해 구성된 PXELINUX입니다.

9.1.1. 프라이빗 libvirt 네트워크에서 PXE 부팅 서버 설정

이 예에서는 default 네트워크를 사용합니다. 다음 단계를 수행합니다.

절차 9.1. PXE 부팅 서버 구성

  1. PXE 부팅 이미지와 구성을 /var/lib/tftpboot 에 배치합니다.
  2. 다음 명령을 입력합니다.
    # virsh net-destroy default
    # virsh net-edit default
  3. 적절한 주소, 네트워크 마스크, DHCP 주소 범위 및 부팅 파일을 포함하도록 기본 네트워크의 구성 파일의 <ip> 요소를 편집합니다. 여기서 BOOT_FILENAME 은 게스트 가상 머신을 부팅하는 데 사용하는 파일 이름을 나타냅니다.
    <ip address='192.168.122.1' netmask='255.255.255.0'>
       <tftp root='/var/lib/tftpboot' />
       <dhcp>
          <range start='192.168.122.2' end='192.168.122.254' />
          <bootp file='BOOT_FILENAME' />
       </dhcp>
    </ip>
  4. 다음을 실행합니다.
    # virsh net-start default
  5. PXE를 사용하여 게스트를 부팅합니다( 9.2절. “PXE를 사용하여 게스트 부팅”참조).

9.2. PXE를 사용하여 게스트 부팅

이 섹션에서는 PXE를 사용하여 게스트 가상 머신을 부팅하는 방법을 설명합니다.

9.2.1. 브리지 네트워킹 사용

절차 9.2. PXE 및 브리지 네트워킹을 사용하여 게스트 부팅

  1. 네트워크에서 PXE 부팅 서버를 사용할 수 있도록 브리징이 활성화되었는지 확인합니다.
  2. PXE 부팅이 활성화된 게스트 가상 머신을 부팅합니다. virt-install 명령을 사용하여 다음 예제 명령에 표시된 대로 PXE 부팅이 활성화된 새 가상 머신을 생성할 수 있습니다.
    virt-install --pxe --network bridge=breth0 --prompt
    또는 다음 예와 같이 게스트 네트워크가 브리지 네트워크를 사용하도록 구성되어 있고 XML 게스트 구성 파일에 <os> 요소 내에 <boot dev='network'/> 요소가 있는지 확인합니다.
    <os>
       <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
       <boot dev='network'/>
       <boot dev='hd'/>
    </os>
    <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'/>
    </interface>

9.2.2. 개인 libvirt 네트워크 사용

절차 9.3. 사설 libvirt 네트워크 사용

  1. 9.1.1절. “프라이빗 libvirt 네트워크에서 PXE 부팅 서버 설정” 에 표시된 대로 libvirt에서 PXE 부팅을 구성합니다.
  2. PXE 부팅이 활성화된 libvirt를 사용하여 게스트 가상 머신을 부팅합니다. virt-install 명령을 사용하여 PXE를 사용하여 새 가상 머신을 생성/설치할 수 있습니다.
    virt-install --pxe --network network=default --prompt
또는 다음 예와 같이 게스트 네트워크가 개인 libvirt 네트워크를 사용하도록 구성되어 있고 XML 게스트 구성 파일에 <os> 요소 내에 <boot dev='network'/> 요소가 있는지 확인합니다.
<os>
   <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
   <boot dev='network'/>
   <boot dev='hd'/>
</os>
또한 게스트 가상 머신이 사설 네트워크에 연결되어 있는지 확인합니다.
<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'/>
</interface>

10장. Hypervisor 및 가상 머신 등록

Red Hat Enterprise Linux 6 및 7은 모든 게스트 가상 시스템이 특정 하이퍼바이저에 매핑되어 모든 게스트가 동일한 수준의 서브스크립션 서비스를 할당해야 합니다. 이렇게 하려면 설치 및 등록된 각 KVM 하이퍼바이저에 모든 게스트 가상 머신(VM)을 자동으로 감지하는 서브스크립션 에이전트를 설치해야 하며 이로 인해 호스트에 있는 매핑 파일이 생성됩니다. 이 매핑 파일을 사용하면 모든 게스트 VM이 다음과 같은 이점을 얻을 수 있습니다.
  • 가상 시스템과 관련된 서브스크립션은 쉽게 사용할 수 있으며 모든 관련 게스트 VM에 적용할 수 있습니다.
  • 하이퍼바이저에서 상속할 수 있는 모든 서브스크립션 이점을 즉시 사용할 수 있으며 모든 게스트 VM에 적용할 수 있습니다.
참고
이 장에 제공된 정보는 Red Hat Enterprise Linux 서브스크립션에만 적용됩니다. Red Hat Virtualization 서브스크립션 또는 Red Hat Satellite 서브스크립션도 있는 경우 해당 서브스크립션을 통해 제공되는 virt-who 정보를 참조하십시오. Red Hat 서브스크립션 관리에 대한 자세한 내용은 고객 포털에 있는 Red Hat 서브스크립션 관리 가이드를 참조하십시오.

10.1. 호스트 물리적 시스템에 virt-who 설치

  1. KVM 하이퍼바이저 등록

    터미널에서 subscription-manager register [options] 명령을 호스트 물리적 시스템에서 root 사용자로 실행하여 KVM Hypervisor를 등록합니다. # subscription-manager register --help 메뉴를 사용하여 더 많은 옵션을 사용할 수 있습니다. 사용자 이름 및 암호를 사용하는 경우 Subscription Manager 애플리케이션에 알려진 자격 증명을 사용합니다. 가입이 처음이고 사용자 계정이 없는 경우 고객 지원에 문의하십시오. 예를 들어 'secret'을 암호로 사용하여 'admin'으로 VM을 등록하는 경우 다음 명령을 보냅니다.
    [root@rhel-server ~]# subscription-manager register --username=admin --password=secret --auto-attach
  2. virt-who 패키지 설치

    호스트 물리적 시스템에서 다음 명령을 실행하여 virt-who 패키지를 설치합니다.
    # yum install virt-who
  3. virt-who 설정 파일 만들기

    각 하이퍼바이저에 대해 /etc/virt-who.d/ 디렉터리에 구성 파일을 추가합니다. 최소한 파일에 다음 스니펫이 포함되어야 합니다.
    [libvirt]
    type=libvirt
    
    virt-who 구성에 대한 자세한 내용은 10.1.1절. “virt-who구성” 을 참조하십시오.
  4. virt-who 서비스 시작

    호스트 물리적 머신에서 다음 명령을 실행하여 virt-who 서비스를 시작합니다.
    # systemctl start virt-who.service
    # systemctl enable virt-who.service
  5. virt-who 서비스가 게스트 정보를 수신하는지 확인

    이 시점에서 virt-who 서비스는 호스트에서 도메인 목록을 수집하기 시작합니다. 호스트 물리적 시스템의 /var/log/rhsm/rhsm.log 파일을 확인하여 파일에 게스트 VM 목록이 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.
    2015-05-28 12:33:31,424 DEBUG: Libvirt domains found: [{'guestId': '58d59128-cfbb-4f2c-93de-230307db2ce0', 'attributes': {'active': 0, 'virtWhoType': 'libvirt', 'hypervisorType': 'QEMU'}, 'state': 5}]
    

절차 10.1. 고객 포털에서 서브스크립션 관리

  1. 하이퍼바이저 구독

    가상 머신에서 하이퍼바이저와 동일한 서브스크립션 이점을 받을 예정이므로 하이퍼바이저에 유효한 서브스크립션이 있고 VM을 사용할 수 있는 서브스크립션이 있어야 합니다.
    1. 고객 포털에 로그인합니다.

      Red Hat 고객 포털에서 Red Hat 계정 자격 증명을 제공하여 로그인합니다.
    2. 시스템 링크를 클릭합니다.

      내 서브스크립션 인터페이스의 시스템 섹션으로 이동합니다.
    3. 하이퍼바이저 선택

      시스템 페이지에는 모든 서브스크립션 시스템의 테이블이 있습니다. 하이퍼바이저 이름(예: localhost.localdomain)을 클릭합니다. 열리는 세부 정보 페이지에서 서브스크립션 연결을 클릭하고 나열된 모든 서브스크립션을 선택합니다. Attach Selected 를 클릭합니다. 그러면 게스트가 서브스크립션의 이점을 누릴 수 있도록 호스트의 물리적 서브스크립션이 하이퍼바이저에 연결됩니다.
  2. 게스트 가상 머신 구독 - 처음 사용

    이 단계는 새 서브스크립션이 있고 이전에 게스트 가상 시스템을 서브스크립션하지 않은 사용자를 위한 것입니다. 가상 머신을 추가하는 경우 이 단계를 건너뜁니다. virt-who 서비스를 실행하는 시스템의 하이퍼바이저 프로필에 할당된 서브스크립션을 사용하려면 게스트 가상 머신의 터미널에서 다음 명령을 실행하여 자동으로 등록합니다.
    [root@virt-who ~]# subscription-manager attach --auto
  3. 추가 게스트 가상 머신 구독

    가상 시스템을 처음 서브스크립션한 경우 이 단계를 건너뜁니다. 가상 머신을 추가하는 경우 이 명령을 실행하면 동일한 서브스크립션을 게스트 가상 머신에 다시 연결할 필요가 없습니다. 이는 모든 서브스크립션을 제거하면 자동 연결을 통해 지정된 게스트 가상 시스템에 필요한 항목을 확인할 수 있으므로 이전과 다른 서브스크립션이 사용되기 때문입니다. 시스템에 영향을 미치지 않을 수도 있지만 알아야 할 사항입니다. 아래에 설명되지 않은 가상 머신을 연결하는 데 수동 연결 절차를 사용한 경우 자동 연결이 작동하지 않으므로 해당 가상 머신을 수동으로 다시 연결해야 합니다. 다음 명령을 사용하여 이전 게스트의 서브스크립션을 먼저 제거한 다음 자동 연결을 사용하여 모든 게스트에 서브스크립션을 연결합니다. 게스트 가상 머신에서 다음 명령을 실행합니다.
    [root@virt-who ~]# subscription-manager remove --all
    [root@virt-who ~]# subscription-manager attach --auto
  4. 서브스크립션이 연결되었는지 확인

    게스트 가상 머신에서 다음 명령을 실행하여 서브스크립션이 하이퍼바이저에 연결되어 있는지 확인합니다.
    [root@virt-who ~]# subscription-manager list --consumed
    다음과 유사한 출력이 표시됩니다. 서브스크립션 세부 정보에 주의하십시오. '서브스크립션이 현재 상태'이라고 합니다.
    [root@virt-who ~]# subscription-manager list --consumed
    +-------------------------------------------+
       Consumed Subscriptions
    +-------------------------------------------+
    Subscription Name:	Awesome OS with unlimited virtual guests
    Provides: 		Awesome OS Server Bits
    SKU: 			awesomeos-virt-unlimited
    Contract: 		0
    Account: 		######### Your account number #####
    Serial: 		######### Your serial number ######
    Pool ID: 		XYZ123
    Provides Management: 	No
    Active: 		True
    Quantity Used: 		1
    Service Level:
    Service Type:
    Status Details:		Subscription is current
    Subscription Type:
    Starts: 		01/01/2015
    Ends: 			12/31/2015
    System Type: 		Virtual
    
    ???
    The ID for the subscription to attach to the system is displayed here. You will need this ID if you need to attach the subscription manually.
    ???
    Indicates if your subscription is current. If your subscription is not current, an error message appears. One example is Guest has not been reported on any host and is using a temporary unmapped guest subscription. In this case the guest needs to be subscribed. In other cases, use the information as indicated in 10.5.2절. “서브스크립션 상태 오류가 발생했습니다. 어떻게 해야 합니까?”.
  5. 추가 게스트 등록

    하이퍼바이저에 새 게스트 VM을 설치하는 경우 게스트 가상 머신에서 다음 명령을 실행하여 새 VM을 등록하고 하이퍼바이저에 연결된 서브스크립션을 사용해야 합니다.
    # subscription-manager register
    # subscription-manager attach --auto
    # subscription-manager list --consumed

10.1.1. virt-who구성

virt-who 서비스는 다음 파일을 사용하여 구성됩니다.
  • /etc/virt-who.conf - 연결된 하이퍼바이저의 변경 여부를 확인하는 간격을 포함하여 일반 설정 정보가 포함되어 있습니다.
  • /etc/virt-who.d/hypervisor_name.conf - 특정 하이퍼바이저에 대한 구성 정보가 포함됩니다.
하이퍼바이저 구성 파일과 virt-who.conf 에 필요한 스니펫을 생성하는 웹 기반 마법사가 제공됩니다. 마법사를 실행하려면 고객 포털에서 Red Hat Virtualization Agent(virt-who) 구성 도우미를 찾습니다.
마법사의 두 번째 페이지에서 다음 옵션을 선택합니다.
  • virt-who 보고는 어디에 있습니까?: Subscription Asset Manager
  • 하이퍼바이저 유형:libvirt
마법사를 따라 구성을 완료합니다.Follow the wizard to complete the configuration. 구성이 올바르게 수행되는 경우 virt-who 는 지정된 하이퍼바이저의 기존 및 향후 게스트에 선택한 서브스크립션을 자동으로 제공합니다.
하이퍼바이저 구성 파일에 대한 자세한 내용은 virt-who-config 매뉴얼 페이지를 참조하십시오.

10.2. 새 게스트 가상 머신 등록

이미 등록되어 실행 중인 호스트에서 새 게스트 가상 머신을 생성해야 하는 경우 virt-who 서비스도 실행해야 합니다. 이렇게 하면 virt-who 서비스가 게스트를 하이퍼바이저에 매핑할 수 있으므로 시스템이 가상 시스템으로 올바르게 등록됩니다. 가상 머신을 등록하려면 다음 명령을 입력합니다.
[root@virt-server ~]# subscription-manager register --username=admin --password=secret --auto-attach

10.3. 게스트 가상 머신 제거

게스트 가상 머신이 실행 중인 경우 게스트에서 터미널 창에서 다음 명령을 루트로 실행하여 시스템 등록을 해제합니다.
[root@virt-guest ~]# subscription-manager unregister
그러나 시스템이 삭제되면 가상 서비스에서 서비스가 삭제되거나 일시 중지되었는지 여부를 알 수 없습니다. 이 경우 다음 단계를 사용하여 서버 측에서 시스템을 수동으로 제거해야 합니다.
  1. 서브스크립션 관리자에 로그인

    서브스크립션 관리자는 Red Hat 고객 포털에 있습니다. 화면 상단에 있는 로그인 아이콘을 클릭하여 사용자 이름 및 암호를 사용하여 고객 포털에 로그인합니다.
  2. 서브스크립션 탭을 클릭합니다.

    서브스크립션 탭을 클릭합니다.
  3. 시스템 링크를 클릭합니다.

    페이지를 아래로 스크롤하여 Systems 링크를 클릭합니다.
  4. 시스템 삭제

    시스템 프로필을 삭제하려면 테이블에서 지정된 시스템의 프로필을 찾고 이름 옆에 있는 확인란을 선택하고 삭제를 클릭합니다.

10.4. virt-who 수동 설치

이 섹션에서는 하이퍼바이저에서 제공하는 서브스크립션을 수동으로 연결하는 방법을 설명합니다.

절차 10.2. 서브스크립션을 수동으로 연결하는 방법

  1. 서브스크립션 정보 나열 및 풀 ID 찾기

    먼저 가상 유형의 사용 가능한 서브스크립션을 나열해야 합니다. 다음 명령을 실행합니다.
    [root@server1 ~]# subscription-manager list --avail --match-installed | grep 'Virtual' -B12
    Subscription Name: Red Hat Enterprise Linux ES (Basic for Virtualization)
    Provides:          Red Hat Beta
                       Oracle Java (for RHEL Server)
                       Red Hat Enterprise Linux Server
    SKU:               -------
    Pool ID:           XYZ123
    Available:         40
    Suggested:         1
    Service Level:     Basic
    Service Type:      L1-L3
    Multi-Entitlement: No
    Ends:              01/02/2017
    System Type:       Virtual
    
    표시된 풀 ID를 확인합니다. 다음 단계에서 필요하므로 이 ID를 복사합니다.
  2. 풀 ID로 서브스크립션 연결

    이전 단계에서 복사한 Pool ID를 사용하여 attach 명령을 실행합니다. Pool ID XYZ123 을 검색한 Pool ID로 바꿉니다. 다음 명령을 실행합니다.
    [root@server1 ~]# subscription-manager attach --pool=XYZ123
    
    Successfully attached a subscription for: Red Hat Enterprise Linux ES (Basic for Virtualization)
    

10.5. virt-who 문제 해결

10.5.1. 하이퍼바이저의 상태가 빨간색인 이유는 무엇입니까?

시나리오: 서버 측에서 서브스크립션이 없는 하이퍼바이저에 게스트를 배포합니다. 24시간 후에 하이퍼바이저가 빨간색으로 표시됩니다. 이러한 상황을 해결하기 위해서는 해당 하이퍼바이저에 대한 서브스크립션을 받아야 합니다. 또는 서브스크립션을 사용하여 게스트를 하이퍼바이저로 영구적으로 마이그레이션합니다.

10.5.2. 서브스크립션 상태 오류가 발생했습니다. 어떻게 해야 합니까?

시나리오: 다음 오류 메시지가 표시됩니다.
  • 시스템이 올바르게 서브스크립션되지 않음
  • 상태를 알 수 없음
  • virt-who를 통해 게스트를 하이퍼바이저에 늦은 바인딩(호스트/게스트 매핑)
오류의 이유를 찾으려면 /var/log/rhsm/ 디렉터리에 있는 rhsm.log 라는 virt-who 로그 파일을 엽니다.

11장. QEMU 게스트 에이전트 및 SPICE 에이전트를 사용하여 가상화 개선

QEMU 게스트 에이전트 및 SPICE 에이전트와 같은 Red Hat Enterprise Linux의 에이전트를 배포하여 시스템에서 가상화 툴을 보다 효율적으로 실행할 수 있습니다. 이러한 에이전트는 이 장에 설명되어 있습니다.
참고
호스트 및 게스트 성능을 추가로 최적화하고 튜닝하려면 Red Hat Enterprise Linux 7 Virtualization 튜닝 및 최적화 가이드 를 참조하십시오.

11.1. QEMU 게스트 에이전트

QEMU 게스트 에이전트는 게스트 내에서 실행되며, 호스트 시스템이 libvirt를 사용하여 게스트 운영 체제에 명령을 실행할 수 있어 freezing 및 awing filesystems 와 같은 기능을 사용할 수 있습니다. 그러면 게스트 운영 체제가 이러한 명령에 비동기적으로 응답합니다. QEMU 게스트 에이전트 패키지 qemu-guest-agent 는 기본적으로 Red Hat Enterprise Linux 7에 설치됩니다.
이 섹션에서는 게스트 에이전트에서 사용할 수 있는 libvirt 명령 및 옵션에 대해 설명합니다.
중요
신뢰할 수 있는 게스트에서 실행하는 경우에만 QEMU 게스트 에이전트를 사용하는 것이 안전합니다. 신뢰할 수 없는 게스트는 악의적인 방식으로 게스트 에이전트 프로토콜을 무시하거나 악용할 수 있으며, 호스트에서 서비스 거부 공격을 방지하기 위해 내장 안전 장치가 존재하지만 호스트는 작업을 예상대로 실행하기 위해 게스트 협업이 필요합니다.
QEMU 게스트 에이전트는 게스트가 실행되는 동안 가상 CPU(vCPU)를 활성화 및 비활성화하는 데 사용할 수 있으므로 핫플러그 및 핫플러그 기능을 사용하지 않고 vCPU 수를 조정할 수 있습니다. 자세한 내용은 20.36.6절. “가상 CPU 수 구성”의 내용을 참조하십시오.

11.1.1. QEMU 게스트 에이전트와 호스트 간 통신 설정

호스트 시스템은 호스트와 게스트 머신 간의 VirtIO 직렬 연결을 통해 QEMU 게스트 에이전트와 통신합니다. VirtIO 직렬 채널은 문자 장치 드라이버(일반적으로 Unix 소켓)를 통해 호스트에 연결되고 게스트는 이 직렬 채널에서 수신 대기합니다.
참고
qemu-guest-agent 는 호스트가 VirtIO 직렬 채널을 수신하는지 감지하지 않습니다. 그러나 이 채널의 현재 사용은 host-to-guest 이벤트를 수신하므로 리스너가 없는 채널에 쓰기 때문에 문제가 발생하는 게스트 가상 시스템의 가능성이 매우 낮습니다. 또한 qemu-guest-agent 프로토콜에는 명령을 실행할 때 호스트 물리적 시스템이 다시 동기화되도록 하는 동기화 마커가 포함되어 있으며 libvirt 는 이미 이러한 마커를 사용하므로 게스트 가상 시스템에서 이전 예기치 않은 응답을 안전하게 삭제할 수 있습니다.

11.1.1.1. Linux 게스트에서 QEMU 게스트 에이전트 구성

QEMU 게스트 에이전트는 실행 중이거나 가상 머신을 종료할 수 있습니다. 실행 중인 게스트에 구성된 경우 게스트는 즉시 게스트 에이전트를 사용하기 시작합니다. 게스트가 종료되면 다음 부팅 시 QEMU 게스트 에이전트가 활성화됩니다.
virsh 또는 virt-manager 를 사용하여 게스트와 QEMU 게스트 에이전트 간의 통신을 구성할 수 있습니다. 다음 지침은 Linux 게스트에서 QEMU 게스트 에이전트를 구성하는 방법을 설명합니다.

절차 11.1. Linux 게스트 종료 시 virsh 를 사용하여 게스트 에이전트와 호스트 간 통신 설정

  1. 가상 머신 종료

    QEMU 게스트 에이전트를 구성하기 전에 가상 머신(이 예제의 이름이 rhel7 임)이 종료되었는지 확인합니다.
    # virsh shutdown rhel7 
  2. 게스트 XML 구성에 QEMU 게스트 에이전트 채널 추가

    게스트의 XML 파일을 편집하여 QEMU 게스트 에이전트 세부 정보를 추가합니다.
    # virsh edit rhel7
    게스트의 XML 파일에 다음을 추가하고 변경 사항을 저장합니다.
    <channel type='unix'>
       <target type='virtio' name='org.qemu.guest_agent.0'/>
    </channel>
  3. 가상 머신 시작

    # virsh start rhel7
  4. 게스트에 QEMU 게스트 에이전트 설치

    게스트 가상 머신에 아직 설치되지 않은 경우 QEMU 게스트 에이전트를 설치합니다.
    # yum install qemu-guest-agent
  5. 게스트에서 QEMU 게스트 에이전트 시작

    게스트에서 QEMU 게스트 에이전트 서비스를 시작합니다.
    # systemctl start qemu-guest-agent
또는 다음 단계를 사용하여 실행 중인 게스트에 QEMU 게스트 에이전트를 구성할 수 있습니다.

절차 11.2. 실행 중인 Linux 게스트에서 게스트 에이전트와 호스트 간의 통신 설정

  1. QEMU 게스트 에이전트의 XML 파일 생성

    # cat agent.xml
    <channel type='unix'>
       <target type='virtio' name='org.qemu.guest_agent.0'/>
    </channel>
  2. 가상 머신에 QEMU 게스트 에이전트 연결

    다음 명령을 사용하여 실행 중인 가상 머신(이 예에서는 rhel7 이라는)에 QEMU 게스트 에이전트를 연결합니다.
    # virsh attach-device rhel7 agent.xml
  3. 게스트에 QEMU 게스트 에이전트 설치

    게스트 가상 머신에 아직 설치되지 않은 경우 QEMU 게스트 에이전트를 설치합니다.
    # yum install qemu-guest-agent
  4. 게스트에서 QEMU 게스트 에이전트 시작

    게스트에서 QEMU 게스트 에이전트 서비스를 시작합니다.
    # systemctl start qemu-guest-agent

절차 11.3. virt-manager를 사용하여 QEMU 게스트 에이전트와 호스트 간 통신 설정

  1. 가상 머신 종료

    QEMU 게스트 에이전트를 구성하기 전에 가상 머신이 종료되었는지 확인합니다.
    가상 머신을 종료하려면 Virtual Machine Manager 의 가상 머신 목록에서 선택한 다음 메뉴 표시줄에서 가벼운 스위치 아이콘을 클릭합니다.
  2. 게스트에 QEMU 게스트 에이전트 채널 추가

    게스트 창 상단에 있는 Lightbulb 아이콘을 클릭하여 가상 머신의 하드웨어 세부 정보를 엽니다.
    하드웨어 추가 버튼을 클릭하여 새 가상 하드웨어 추가 창을 열고 채널을 선택합니다.
    이름 드롭다운 목록에서 QEMU 게스트 에이전트를 선택하고 Finish:를 클릭합니다.

    그림 11.1. QEMU 게스트 에이전트 채널 장치 선택

    QEMU 게스트 에이전트 채널 장치 선택
  3. 가상 머신 시작

    가상 머신을 시작하려면 가상 머신 관리자 의 가상 머신 목록에서 선택한 다음 메뉴 표시줄에서 을 클릭합니다.
  4. 게스트에 QEMU 게스트 에이전트 설치

    virt-manager 로 게스트를 열고 게스트 가상 머신에 아직 설치되지 않은 경우 QEMU 게스트 에이전트를 설치합니다.
    # yum install qemu-guest-agent
  5. 게스트에서 QEMU 게스트 에이전트 시작

    게스트에서 QEMU 게스트 에이전트 서비스를 시작합니다.
    # systemctl start qemu-guest-agent
QEMU 게스트 에이전트가 rhel7 가상 머신에 구성되어 있습니다.

11.2. libvirt를 사용하여 QEMU 게스트 에이전트 사용

QEMU 게스트 에이전트를 설치하면 다양한 libvirt 명령이 더 강력해집니다. 게스트 에이전트는 다음 virsh 명령을 향상시킵니다.
  • virsh shutdown --mode=agent - QEMU 게스트 에이전트와 함께 사용되는 virsh shutdown --mode=acpi 이므로 virsh shutdown --mode=acpi 보다 안정성이 높습니다. 에이전트가 존재하지 않는 경우 libvirt는 ACPI 종료 이벤트를 삽입해야 하지만 일부 게스트는 해당 이벤트를 무시하므로 종료하지 않습니다.
    virsh reboot 에 대해 동일한 구문으로 사용할 수 있습니다.
  • virsh snapshot-create --quiesce - 스냅샷이 생성되기 전에 게스트가 I/O를 stable 상태로 플러싱할 수 있으므로 fsck를 수행하거나 부분 데이터베이스 트랜잭션을 손실하지 않고도 스냅샷을 사용할 수 있습니다. 게스트 에이전트에서는 게스트의 작동을 통해 높은 수준의 디스크 콘텐츠 안정성을 확보할 수 있습니다.
  • virsh domfsfreezevirsh domfsthaw - 게스트 파일 시스템을 분리합니다.
  • virsh domfstrim - 게스트에서 파일 시스템을 트리밍합니다.
  • virsh domtime - 게스트의 클럭을 설정하거나 쿼리합니다.
  • virsh setvcpus --guest - 게스트에서 CPU를 오프라인으로 전환합니다.
  • virsh domifaddr --source 에이전트 - 게스트 에이전트를 통해 게스트 운영 체제의 IP 주소를 조회합니다.
  • virsh domfsinfo - 실행 중인 게스트 내에 마운트된 파일 시스템 목록을 표시합니다.
  • virsh set-user-password - 게스트에서 사용자 계정의 암호를 설정합니다.

11.2.1. 게스트 디스크 백업 생성

libvirtqemu-guest-agent 와 통신하여 게스트 가상 시스템 파일 시스템의 스냅샷이 내부적으로 일관성을 유지하고 필요에 따라 사용할 준비가 되었는지 확인할 수 있습니다. 게스트 시스템 관리자는 애플리케이션별 freeze/thaw 후크 스크립트를 작성하고 설치할 수 있습니다. 파일 시스템을 해제하기 전에 qemu-guest-agent 는 기본 후크 스크립트( qemu-guest-agent 패키지에 포함되어 있음)를 호출합니다. 해제 프로세스는 모든 게스트 가상 머신 애플리케이션을 일시적으로 비활성화합니다.
스냅샷 프로세스는 다음 단계로 구성됩니다.
  • 파일 시스템 애플리케이션/데이터베이스가 가상 디스크에 작업 버퍼를 플러시하고 클라이언트 연결 수락 중지
  • 애플리케이션에서 데이터 파일을 일관된 상태로 가져옵니다.
  • 기본 후크 스크립트 반환
  • QEMU-guest-agent 는 파일 시스템을 정지하고 관리 스택에서 스냅샷을 만듭니다.
  • 스냅샷이 확인됨
  • 파일 시스템 기능 재개
이 기능은 다음과 같은 순서로 수행됩니다.
게스트 파일 시스템의 스냅샷을 생성하려면 virsh snapshot-create --quiesce --disk-only 명령(이론적으로 virsh snapshot-create-create-as guest_name --quiesce --disk-only )을 실행합니다. 20.39.2절. “현재 게스트 가상 머신의 스냅샷 생성”에 자세히 설명되어 있습니다.
참고
애플리케이션별 후크 스크립트에는 스크립트가 데이터베이스와 통신하기 위해 소켓에 연결해야 하는 경우와 같이 올바르게 실행되기 위해 다양한 SELinux 권한이 필요할 수 있습니다. 일반적으로 이러한 목적으로 로컬 SELinux 정책을 개발하고 설치해야 합니다. 파일 시스템 노드에 액세스하면 /etc/qemu-ga/fsfreeze-hook.d/ 에서 레이블이 지정된 표 행에서 표 11.1. “QEMU 게스트 에이전트 패키지 콘텐츠” 에 나열된 restorecon -FvvR 명령을 실행하면 됩니다.
qemu-guest-agent 바이너리 RPM에는 다음 파일이 포함되어 있습니다.

표 11.1. QEMU 게스트 에이전트 패키지 콘텐츠

파일 이름 설명
/usr/lib/systemd/system/qemu-guest-agent.service QEMU 게스트 에이전트의 서비스 제어 스크립트(시작/중지)입니다.
/etc/sysconfig/qemu-ga /usr/lib/systemd/system/qemu-guest-agent.service 제어 스크립트에서 읽어오는 QEMU 게스트 에이전트의 구성 파일입니다. 설정은 쉘 스크립트 주석이 있는 파일에 설명되어 있습니다.
/usr/bin/qemu-ga QEMU 게스트 에이전트 바이너리 파일.
/etc/qemu-ga 후크 스크립트용 루트 디렉터리입니다.
/etc/qemu-ga/fsfreeze-hook 기본 후크 스크립트입니다. 여기에 어떤 수정도 필요하지 않습니다.
/etc/qemu-ga/fsfreeze-hook.d 개별 애플리케이션별 후크 스크립트의 디렉터리입니다. 게스트 시스템 관리자는 후크 스크립트를 이 디렉터리에 수동으로 복사하여 해당 디렉터리에 적합한 파일 모드 비트를 확인한 다음 이 디렉터리에서 restorecon -FvvR 을 실행해야 합니다.
/usr/share/qemu-kvm/qemu-ga/ 샘플 스크립트가 있는 디렉터리(예: 전용) 여기에 포함된 스크립트는 실행되지 않습니다.
기본 후크 스크립트 /etc/qemu-ga/fsfreeze-hook 는 애플리케이션별 스크립트의 표준 출력 및 오류 메시지, /var/log/qemu-ga/fsfreeze-hook.log.log를 기록합니다. 자세한 내용은 libvirt 업스트림 웹 사이트를 참조하십시오.

11.3. SPICE 에이전트

SPICE 에이전트를 사용하면 게스트 운영 체제를 SPICE 클라이언트와 통합할 수 있어 virt-manager 와 같은 그래픽 애플리케이션을 보다 원활하게 실행할 수 있습니다.
예를 들어 virt-manager 에서 창을 변경할 때 SPICE 에이전트를 통해 클라이언트 해상도에 대한 자동 X 세션 해상도를 조정할 수 있습니다. SPICE 에이전트는 호스트와 게스트 간의 복사 및 붙여넣기를 지원하며 마우스 커서 지연을 방지합니다.
SPICE 에이전트 기능에 대한 시스템 관련 정보는 spice-vdagent 패키지의 README 파일을 참조하십시오.

11.3.1. SPICE 에이전트와 호스트 간 통신 설정

SPICE 에이전트는 실행 중이거나 가상 머신을 종료할 때 구성할 수 있습니다. 실행 중인 게스트에 구성된 경우 게스트는 즉시 게스트 에이전트를 사용하기 시작합니다. 게스트가 종료되면 다음 부팅 시 SPICE 에이전트가 활성화됩니다.
virsh 또는 virt-manager 를 사용하여 게스트와 SPICE 에이전트 간의 통신을 구성할 수 있습니다. 다음 지침은 Linux 게스트에서 SPICE 에이전트를 구성하는 방법을 설명합니다.

절차 11.4.  Linux 게스트에서 virsh 를 사용하여 게스트 에이전트와 호스트 간 통신 설정

  1. 가상 머신 종료

    SPICE 에이전트를 구성하기 전에 가상 시스템(이 예제의 이름이 rhel7 임)이 종료되었는지 확인합니다.
    # virsh shutdown rhel7 
  2. 게스트 XML 구성에 SPICE 에이전트 채널 추가

    게스트의 XML 파일을 편집하여 SPICE 에이전트 세부 정보를 추가합니다.
    # virsh edit rhel7
    게스트의 XML 파일에 다음을 추가하고 변경 사항을 저장합니다.
    <channel type='spicevmc'>
       <target type='virtio' name='com.redhat.spice.0'/>
    </channel>
  3. 가상 머신 시작

    # virsh start rhel7
  4. 게스트에 SPICE 에이전트 설치

    게스트 가상 머신에 아직 설치되지 않은 경우 SPICE 에이전트를 설치합니다.
    # yum install spice-vdagent
  5. 게스트에서 SPICE 에이전트 시작

    게스트에서 SPICE 에이전트 서비스를 시작합니다.
    # systemctl start spice-vdagent
또는 다음 단계를 통해 실행 중인 게스트에서 SPICE 에이전트를 구성할 수 있습니다.

절차 11.5. 실행 중인 Linux 게스트에서 SPICE 에이전트와 호스트 간 통신 설정

  1. SPICE 에이전트를 위한 XML 파일 생성

    # cat agent.xml
    <channel type='spicevmc'>
       <target type='virtio' name='com.redhat.spice.0'/>
    </channel>
  2. 가상 머신에 SPICE 에이전트 연결

    다음 명령을 사용하여 실행 중인 가상 머신(이 예에서 rhel7 이라는)에 SPICE 에이전트를 연결합니다.
    # virsh attach-device rhel7 agent.xml
  3. 게스트에 SPICE 에이전트 설치

    게스트 가상 머신에 아직 설치되지 않은 경우 SPICE 에이전트를 설치합니다.
    # yum install spice-vdagent
  4. 게스트에서 SPICE 에이전트 시작

    게스트에서 SPICE 에이전트 서비스를 시작합니다.
    # systemctl start spice-vdagent

절차 11.6. virt-manager를 사용하여 SPICE 에이전트와 호스트 간 통신 설정

  1. 가상 머신 종료

    SPICE 에이전트를 구성하기 전에 가상 머신이 종료되었는지 확인합니다.
    가상 머신을 종료하려면 Virtual Machine Manager 의 가상 머신 목록에서 선택한 다음 메뉴 표시줄에서 가벼운 스위치 아이콘을 클릭합니다.
  2. 게스트에 SPICE 에이전트 채널 추가

    게스트 창 상단에 있는 Lightbulb 아이콘을 클릭하여 가상 머신의 하드웨어 세부 정보를 엽니다.
    하드웨어 추가 버튼을 클릭하여 새 가상 하드웨어 추가 창을 열고 채널을 선택합니다.
    이름 드롭다운 목록에서 SPICE 에이전트를 선택하고 채널 주소를 편집한 후 완료 를 클릭합니다.

    그림 11.2. SPICE 에이전트 채널 장치 선택

    SPICE 에이전트 채널 장치 선택
  3. 가상 머신 시작

    가상 머신을 시작하려면 가상 머신 관리자 의 가상 머신 목록에서 선택한 다음 메뉴 표시줄에서 을 클릭합니다.
  4. 게스트에 SPICE 에이전트 설치

    virt-manager 로 게스트를 열고 게스트 가상 머신에 아직 설치되지 않은 경우 SPICE 에이전트를 설치합니다.
    # yum install spice-vdagent
  5. 게스트에서 SPICE 에이전트 시작

    게스트에서 SPICE 에이전트 서비스를 시작합니다.
    # systemctl start spice-vdagent
이제 SPICE 에이전트가 rhel7 가상 시스템에 구성되어 있습니다.

12장. 중첩된 가상화

12.1. 개요

Red Hat Enterprise Linux 7.5부터 중첩된 가상화 는 KVM 게스트 가상 머신의 기술 프리뷰 로 제공됩니다. 이 기능을 사용하면 물리적 호스트( 레벨0 또는 L0)에서 실행되는 게스트 가상 시스템(레벨 1 또는 L1이라고도 함)이 하이퍼바이저 역할을 하고 자체 게스트 가상 시스템(L2)을 생성할 수 있습니다.
중첩된 가상화는 제한된 환경에서 하이퍼바이저를 디버깅하고 제한된 양의 물리적 리소스에서 대규모 가상 배포를 테스트하는 등 다양한 시나리오에서 유용합니다. 그러나 중첩된 가상화는 프로덕션 사용자 환경에서 지원되거나 권장되지 않으며 주로 개발 및 테스트용으로 설계되었습니다.
중첩된 가상화는 호스트 가상화 확장 기능을 사용하기 때문에 Red Hat Enterprise Linux에서 지원되지 않는 QEMU Tiny Code 생성기(TCG) 에뮬레이션을 사용하여 가상 환경에서 실행 중인 게스트와 혼동해서는 안 됩니다.

12.2. 설정

다음 단계에 따라 중첩된 가상화 사용을 활성화, 구성 및 시작합니다.
  1. 활성화: 이 기능은 기본적으로 비활성화되어 있습니다. 이를 활성화하려면 L0 호스트 물리적 시스템에서 다음 절차를 사용하십시오.
    Intel의 경우:
    1. 호스트 시스템에서 중첩된 가상화를 사용할 수 있는지 확인합니다.
      $ cat /sys/module/kvm_intel/parameters/nested
      이 명령에서 Y 또는 1 을 반환하면 기능이 활성화됩니다.
      명령이 0 또는 N 을 반환하는 경우 단계 iiiii 을 사용하십시오.
    2. kvm_intel 모듈을 언로드합니다.
      # modprobe -r kvm_intel
    3. 중첩 기능을 활성화합니다.
      # modprobe kvm_intel nested=1
    4. 이제 L0 호스트를 다음에 재부팅할 때까지만 중첩 기능이 활성화됩니다. 영구적으로 활성화하려면 /etc/modprobe.d/kvm.conf 파일에 다음 행을 추가합니다.
      options kvm_intel nested=1
    AMD의 경우:
    1. 시스템에서 중첩된 가상화를 사용할 수 있는지 확인합니다.
      $ cat /sys/module/kvm_amd/parameters/nested
      이 명령에서 Y 또는 1 을 반환하면 기능이 활성화됩니다.
      명령이 0 또는 N 을 반환하는 경우 단계 iiiii 을 사용하십시오.
    2. kvm_amd 모듈 언로드
      # modprobe -r kvm_amd
    3. 중첩 기능 활성화
      # modprobe kvm_amd nested=1
    4. 이제 L0 호스트를 다음에 재부팅할 때까지만 중첩 기능이 활성화됩니다. 영구적으로 활성화하려면 /etc/modprobe.d/kvm.conf 파일에 다음 행을 추가합니다.
      options kvm_amd nested=1
  2. 다음 방법 중 하나를 사용하여 중첩된 가상화의 L1 가상 머신을 구성합니다.
    virt-manager
    1. 원하는 게스트의 GUI를 열고 가상 하드웨어 세부 정보 표시 아이콘을 클릭합니다.
    2. Processor 메뉴를 선택하고 Configuration (구성) 섹션에서 Model 필드에 host-passthrough 를 입력하고 (드롭다운 선택을 사용하지 않음)을 클릭합니다.
    도메인 XML
    게스트의 도메인 XML 파일에 다음 행을 추가합니다.
    <cpu mode='host-passthrough'/>
    게스트의 XML 구성 파일에 <cpu> 요소가 이미 포함된 경우 다시 작성합니다.
  3. 중첩된 가상화 사용을 시작하려면 L1 게스트 내에 L2 게스트를 설치합니다. 이 작업을 수행하려면 L1 게스트를 설치할 때와 동일한 절차를 따르십시오. 자세한 내용은 3장. 가상 머신 생성 을 참조하십시오.

12.3. 제한 및 제한 사항

  • L0 호스트 및 L1 게스트에서 Red Hat Enterprise Linux 7.2 이상을 실행하는 것이 좋습니다. L2 게스트에는 Red Hat에서 지원하는 게스트 시스템이 포함될 수 있습니다.
  • L1 또는 L2 게스트 마이그레이션은 지원되지 않습니다.
  • L2 게스트를 하이퍼바이저로 사용하고 L3 게스트 생성은 지원되지 않습니다.
  • 호스트에서 사용 가능한 모든 기능을 L1 하이퍼바이저에서 사용할 수 있는 것은 아닙니다. 예를 들어 L1 하이퍼바이저에서 IOMMU/VT-d 또는 APICv를 사용할 수 없습니다.
  • 중첩된 가상화를 사용하려면 호스트 CPU에 필요한 기능 플래그가 있어야 합니다. L0 및 L1 하이퍼바이저가 올바르게 설정되었는지 확인하려면 L0 및 L1 모두에 cat /proc/cpuinfo 명령을 사용하고 두 하이퍼바이저의 각 CPU에 대해 다음 플래그가 나열되어 있는지 확인합니다.
    • Intel - vmx (Hardware Virtualization) 및 ept (Extended Page Tables)
    • AMD - svm (equivalent to vmx) 및 npt (equivalent to ept)

II 부. 관리

이 부분에서는 가상 머신 관리와 관련된 주제를 설명하고 가상 네트워킹, 스토리지, PCI 할당 작업과 같은 가상화 기능을 설명합니다. 또한 이 부분에서는 qemu-img,virt-manager, virsh 도구를 사용하여 장치 및 게스트 가상 머신 관리에 대한 지침을 제공합니다.

13장. 가상 머신용 스토리지 관리

이 장에서는 가상 시스템의 스토리지에 대해 설명합니다. 가상 스토리지는 가상 머신 연결에 할당된 물리적 스토리지에서 추상화됩니다. 스토리지는 반가상화 또는 에뮬레이션된 블록 장치 드라이버를 사용하여 가상 시스템에 연결됩니다.

13.1. 스토리지 개념

스토리지 풀 은 게스트 가상 머신에서 사용할 스토리지 수입니다. 스토리지 풀은 스토리지 볼륨 으로 나뉩니다. 각 스토리지 볼륨은 게스트 가상 머신에 게스트 버스의 블록 장치로 할당됩니다.
스토리지 풀 및 볼륨은 libvirt 를 사용하여 관리합니다. libvirt 의 원격 프로토콜을 사용하면 게스트 가상 시스템의 라이프 사이클의 모든 측면과 게스트 가상 머신에 필요한 리소스의 구성을 관리할 수 있습니다. 이러한 작업은 원격 호스트에서 수행할 수 있습니다. 결과적으로 libvirt 를 사용하여 Virtual Machine Manager 와 같은 관리 애플리케이션을 사용하면 사용자가 게스트 가상 시스템의 호스트 물리적 시스템을 구성하는 데 필요한 모든 작업을 수행할 수 있습니다. 여기에는 리소스 할당, 게스트 가상 머신 실행, 종료, 리소스 할당 취소, 쉘 액세스 또는 기타 제어 채널 없이도 리소스 할당이 포함됩니다.
libvirt API를 사용하여 스토리지 풀의 볼륨 목록을 쿼리하거나 스토리지 풀에서 용량, 할당, 사용 가능한 스토리지에 대한 정보를 가져올 수 있습니다. 스파스 볼륨에 따라 할당 및 용량과 같은 정보를 가져오기 위해 스토리지 풀의 스토리지 볼륨을 쿼리할 수 있습니다.
참고
스파스 볼륨에 대한 자세한 내용은 가상화 시작하기 가이드 를 참조하십시오.
이를 지원하는 스토리지 풀의 경우 libvirt API를 사용하여 스토리지 볼륨을 생성, 복제, 크기 조정 및 삭제할 수 있습니다. API는 데이터를 스토리지 볼륨에 업로드하거나, 스토리지 볼륨에서 데이터를 다운로드하거나, 스토리지 볼륨에서 데이터를 지우거나, 스토리지 볼륨에서 데이터를 제거하는 데도 사용할 수 있습니다.
스토리지 풀을 시작하면 도메인 XML의 볼륨 경로 대신 스토리지 풀 이름 및 스토리지 볼륨 이름을 사용하여 스토리지 볼륨을 게스트에 할당할 수 있습니다.
참고
도메인 XML에 대한 자세한 내용은 23장. 도메인 XML 조작 을 참조하십시오.
스토리지 풀은 중지(고정)할 수 있습니다. 이렇게 하면 데이터의 추상화가 제거되지만 데이터가 그대로 유지됩니다.
예를 들어 mount -t nfs.example.com:/path/to/share /path/to/data 를 사용하는 NFS 서버가 있습니다. 내보낸 서버 경로와 클라이언트 대상 경로를 설명하기 위해 가상화 호스트에서 NFS 스토리지 풀을 정의하는 스토리지 관리자는 다음을 수행할 수 있습니다. 이렇게 하면 libvirt 가 libvirt를 시작할 때 또는 libvirt 가 실행되는 동안 필요에 따라 자동으로 마운트를 수행할 수 있습니다. NFS Server 내보낸 디렉터리가 있는 파일은 NFS 스토리지 풀 내에서 스토리지 볼륨으로 나열됩니다.
게스트에 스토리지 볼륨이 추가되면 관리자는 대상 경로를 볼륨에 추가할 필요가 없습니다. 이름별로 스토리지 풀과 스토리지 볼륨을 추가해야 합니다. 따라서 대상 클라이언트 경로가 변경되면 가상 머신에는 영향을 미치지 않습니다.
스토리지 풀이 시작되면 libvirt 는 시스템 관리자가 nfs.example.com:/path/to/share /vmdata 에 로그인하고 실행한 것처럼 지정된 디렉터리에 공유를 마운트합니다. 스토리지 풀이 자동 시작을 위해 구성된 경우 libvirtlibvirt 를 시작할 때 지정된 디렉터리에 NFS 공유 디스크가 마운트되도록 합니다.
스토리지 풀이 시작되면 NFS 공유 디스크의 파일이 스토리지 볼륨으로 보고되고 libvirt API를 사용하여 스토리지 볼륨 경로를 쿼리할 수 있습니다. 그런 다음 스토리지 볼륨 경로를 게스트 가상 시스템의 블록 장치에 대한 소스 스토리지를 설명하는 게스트 가상 머신의 XML 정의 섹션으로 복사할 수 있습니다. NFS의 경우 libvirt API를 사용하는 애플리케이션은 스토리지 풀(NFS 공유의 파일)에서 스토리지 볼륨(공유 용량)까지 스토리지 볼륨을 생성하고 삭제할 수 있습니다.
일부 스토리지 풀 유형에서 볼륨 생성 및 삭제를 지원하는 것은 아닙니다. 스토리지 풀(pool-destroy)을 중지하면 시작 작업이 취소되며 이 경우 NFS 공유를 마운트 해제합니다. 명령 이름이 제안한 경우에도 공유의 데이터는 destroy 작업에 의해 수정되지 않습니다. 자세한 내용은 man virsh 를 참조하십시오.

절차 13.1. 스토리지 생성 및 할당

이 절차에서는 가상 머신 게스트에 대한 스토리지를 생성하고 할당하는 데 필요한 단계를 자세히 설명합니다.
  1. 스토리지 풀 생성

    사용 가능한 스토리지 미디어에서 하나 이상의 스토리지 풀을 생성합니다. 자세한 내용은 13.2절. “스토리지 풀 사용”의 내용을 참조하십시오.
  2. 스토리지 볼륨 생성

    사용 가능한 스토리지 풀에서 하나 이상의 스토리지 볼륨을 생성합니다. 자세한 내용은 13.3절. “스토리지 볼륨 사용”의 내용을 참조하십시오.
  3. 가상 머신에 스토리지 장치를 할당합니다.

    스토리지 볼륨에서 게스트 가상 머신에 추상화된 하나 이상의 스토리지 장치를 할당합니다. 자세한 내용은 13.3.6절. “게스트에 스토리지 장치 추가”의 내용을 참조하십시오.

13.2. 스토리지 풀 사용

이 섹션에서는 가상 머신에서 스토리지 풀 사용에 대한 정보를 제공합니다. virsh 명령과 Virtual Machine Manager 를 사용하여 스토리지 풀 생성 , 구성, 삭제 에 대한 자세한 정보와 개념적 정보를 제공합니다.

13.2.1. 스토리지 풀 개념

스토리지 풀은 가상 머신에 스토리지를 제공하기 위해 libvirt 에서 관리하는 파일, 디렉터리 또는 스토리지 장치입니다. 스토리지 풀은 가상 머신 이미지를 저장하거나 추가 스토리지로 가상 머신에 연결된 스토리지 볼륨으로 나뉩니다. 여러 게스트가 동일한 스토리지 풀을 공유하여 스토리지 리소스를 보다 효과적으로 할당할 수 있습니다.
스토리지 풀은 로컬 또는 네트워크 기반(공유)일 수 있습니다.
로컬 스토리지 풀
로컬 스토리지 풀은 호스트 서버에 직접 연결됩니다. 여기에는 로컬 디렉터리, 직접 연결된 디스크, 물리 파티션, 로컬 장치의 LVM(Logical Volume Management) 볼륨 그룹이 포함됩니다. 로컬 스토리지 풀은 마이그레이션 또는 다수의 가상 시스템이 필요하지 않은 개발, 테스트 및 소규모 배포에 유용합니다. 로컬 스토리지 풀은 실시간 마이그레이션에 사용할 수 없기 때문에 많은 프로덕션 환경에 적합하지 않을 수 있습니다.
네트워크화된(공유) 스토리지 풀
네트워크 스토리지 풀에는 표준 프로토콜을 사용하여 네트워크를 통해 공유하는 스토리지 장치가 포함됩니다. virt-manager 를 사용하여 호스트 간에 가상 머신을 마이그레이션할 때는 네트워크 스토리지가 필요하지만 virsh 로 마이그레이션할 때는 선택 사항입니다.
가상 머신 마이그레이션에 대한 자세한 내용은 15장. KVM 마이그레이션 을 참조하십시오.
다음은 Red Hat Enterprise Linux에서 지원하는 스토리지 풀 목록입니다.
  • 디렉터리 기반 스토리지 풀
  • 디스크 기반 스토리지 풀
  • 파티션 기반 스토리지 풀
  • GlusterFS 스토리지 풀
  • iSCSI 기반 스토리지 풀
  • LVM 기반 스토리지 풀
  • NFS 기반 스토리지 풀
  • SCSI 장치가 있는 vHBA 기반 스토리지 풀
다음은 Red Hat Enterprise Linux에서 지원하지 않는 libvirt 스토리지 풀 유형 목록입니다.
  • 다중 경로 기반 스토리지 풀
  • RBD 기반 스토리지 풀
  • NovaCronepdog 기반 스토리지 풀
  • Vstorage 기반 스토리지 풀
  • RuntimeClass 기반 스토리지 풀
참고
지원되지 않는 스토리지 풀 유형 중 일부는 Virtual Machine Manager 인터페이스에 나타납니다. 그러나 사용해서는 안 됩니다.

13.2.2. 스토리지 풀 생성

이 섹션에서는 virshVirtual Machine Manager 를 사용하여 스토리지 풀을 생성하는 일반적인 지침을 제공합니다. virsh 를 사용하면 모든 매개변수를 지정할 수 있지만 Virtual Machine Manager 를 사용하면 더 간단한 스토리지 풀을 생성할 수 있는 그래픽 방법을 제공합니다.

13.2.2.1. virsh를 사용하여 스토리지 풀 생성

참고
이 섹션에서는 파티션 기반 스토리지 풀 생성을 예로 보여줍니다.

절차 13.2. virsh를 사용하여 스토리지 풀 생성

  1. 권장 사항을 읽고 모든 사전 요구 사항이 충족되는지 확인합니다.

    일부 스토리지 풀의 경우 이 가이드에서는 특정 사례를 따르는 것이 좋습니다. 또한 일부 유형의 스토리지 풀에는 사전 요구 사항이 있습니다. 권장 사항 및 사전 요구 사항을 보려면 13.2.3절. “스토리지 풀별” 를 참조하십시오.
  2. 스토리지 풀 정의

    스토리지 풀은 영구 또는 일시적일 수 있습니다. 호스트 시스템을 시스템을 다시 시작해도 영구 스토리지 풀입니다. 임시 스토리지 풀은 호스트가 재부팅될 때까지만 존재합니다.
    다음 중 하나를 수행합니다.
    • XML 파일을 사용하여 스토리지 풀을 정의합니다.
      a. 새 장치에 필요한 스토리지 풀 정보가 포함된 임시 XML 파일을 만듭니다.
      XML 파일에는 스토리지 풀 유형에 따라 특정 필드가 포함되어야 합니다. 자세한 내용은 13.2.3절. “스토리지 풀별”의 내용을 참조하십시오.
      다음은 스토리지 풀 정의 XML 파일의 예를 보여줍니다. 이 예에서는 파일이 ~/guest_images.xml에 저장됩니다.
      <pool type='fs'>
        <name>guest_images_fs</name>
        <source>
          <device path='/dev/sdc1'/>
        </source>
        <target>
          <path>/guest_images</path>
        </target>
      </pool>
      b. virsh pool-define 명령을 사용하여 영구 스토리지 풀 또는 virsh pool-create 명령을 생성하여 일시적인 스토리지 풀을 생성하고 시작합니다.
      # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs
      
      또는
      # virsh pool-create ~/guest_images.xml
      Pool created from guest_images_fs
      c. 단계에서 만든 XML 파일을 삭제합니다.
    • virsh pool-define-as 명령을 사용하여 영구 스토리지 풀 또는 virsh pool-create-as 명령을 사용하여 임시 스토리지 풀을 생성합니다.
      다음 예제에서는 영구적으로 생성된 다음 /guest_images 디렉터리의 /dev/sdc1 에 매핑된 임시 파일 시스템 기반 스토리지 풀을 생성합니다.
      # virsh pool-define-as guest_images_fs fs - - /dev/sdc1 - "/guest_images"
      Pool guest_images_fs defined
      또는
      # virsh pool-create-as guest_images_fs fs - - /dev/sdc1 - "/guest_images"
      Pool guest_images_fs created
      참고
      virsh 인터페이스를 사용하는 경우 명령의 옵션 이름은 선택 사항입니다. 옵션 이름을 사용하지 않는 경우 지정할 필요가 없는 필드에 대시를 사용합니다.
  3. 풀이 생성되었는지 확인합니다.

    virsh pool-list --all 을 사용하여 기존 스토리지 풀을 모두 나열합니다.
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images_fs      inactive   no
    
  4. 스토리지 풀 대상 경로 정의

    virsh pool-build 명령을 사용하여 사전 포맷된 파일 시스템 스토리지 풀에 대한 스토리지 풀 대상 경로를 생성하고, 스토리지 소스 장치를 초기화하고, 데이터 형식을 정의합니다. 그런 다음 virsh pool-list 명령을 사용하여 스토리지 풀이 나열되는지 확인합니다.
    # virsh pool-build guest_images_fs
    Pool guest_images_fs built
    # ls -la /guest_images
    total 8
    drwx------.  2 root root 4096 May 31 19:38 .
    dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images_fs      inactive   no
    
    참고
    대상 경로를 빌드하려면 디스크 기반 파일 시스템 기반 및 논리 스토리지 풀에만 필요합니다. libvirt 가 선택한 스토리지 풀 유형과 다른 소스 스토리지 장치의 데이터 포맷을 탐지하면 overwrite 옵션을 지정하지 않는 한 빌드가 실패합니다.
  5. 스토리지 풀 시작

    virsh pool-start 명령을 사용하여 사용할 소스 장치를 준비합니다.
    수행되는 작업은 스토리지 풀 유형에 따라 다릅니다. 예를 들어 파일 시스템 기반 스토리지 풀의 경우 virsh pool-start 명령은 파일 시스템을 마운트합니다. LVM 기반 스토리지 풀의 경우 virsh pool-start 명령은 pxe change 명령을 사용하여 볼륨 그룹을 활성화합니다.
    그런 다음 virsh pool-list 명령을 사용하여 스토리지 풀이 활성 상태인지 확인합니다.
    # virsh pool-start guest_images_fs
    Pool guest_images_fs started
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images_fs      active     no
    
    참고
    virsh pool-start 명령은 영구 스토리지 풀에만 필요합니다. 임시 스토리지 풀은 생성될 때 자동으로 시작됩니다.
  6. 자동 시작 켜기 (선택 사항)

    기본적으로 virsh 로 정의된 스토리지 풀은 libvirtd 가 시작될 때마다 자동으로 시작하도록 설정되지 않습니다. virsh pool-autostart 명령을 사용하여 자동으로 시작하도록 스토리지 풀을 구성할 수 있습니다.
    # virsh pool-autostart guest_images_fs
    Pool guest_images_fs marked as autostarted
    
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images_fs      active     yes
    
    libvirtd 가 시작될 때마다 스토리지 풀이 자동으로 시작됩니다.
  7. 스토리지 풀 확인

    스토리지 풀이 올바르게 생성되었으며 보고된 크기가 예상대로, 상태가 실행 중 으로 보고되는지 확인합니다. 장치가 마운트되었음을 나타내는 파일 시스템의 대상 경로에 "lost+found" 디렉터리가 있는지 확인합니다.
    # virsh pool-info guest_images_fs
    Name:           guest_images_fs
    UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
    State:          running
    Persistent:     yes
    Autostart:      yes
    Capacity:       458.39 GB
    Allocation:     197.91 MB
    Available:      458.20 GB
    # mount | grep /guest_images
    /dev/sdc1 on /guest_images type ext4 (rw)
    # ls -la /guest_images
    total 24
    drwxr-xr-x.  3 root root  4096 May 31 19:47 .
    dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
    drwx------.  2 root root 16384 May 31 14:18 lost+found
    

13.2.2.2. 가상 머신 관리자를 사용하여 스토리지 풀 생성

참고
이 섹션에서는 디스크 기반 스토리지 풀 생성을 예로 보여줍니다.

절차 13.3. 가상 머신 관리자를 사용하여 스토리지 풀 생성

  1. 스토리지 풀을 생성할 매체를 준비합니다.

    이는 스토리지 풀 유형에 따라 다릅니다. 자세한 내용은 13.2.3절. “스토리지 풀별”의 내용을 참조하십시오.
    이 예제에서는 GUID 파티션 테이블 을 사용하여 디스크의 레이블을 다시 지정해야 할 수 있습니다.
  2. 스토리지 설정을 엽니다.

    1. Virtual Machine Manager 에서 구성할 호스트 연결을 선택합니다.
      편집 메뉴를 열고 연결 세부 정보를 선택합니다.
    2. 연결 세부 정보 창에서 스토리지 탭을 클릭합니다.

      그림 13.1. 스토리지 탭

      스토리지 탭
  3. 새 스토리지 풀 생성

    참고
    Virtual Machine Manager 를 사용하면 영구 스토리지 풀만 생성할 수 있습니다. 임시 스토리지 풀은 virsh 를 통해서만 만들 수 있습니다.
    1. 새 스토리지 풀(파트 1) 추가

      창 하단에 있는 버튼을 클릭합니다. 새 스토리지 풀 추가 마법사가 표시됩니다.
      스토리지 풀의 이름을 입력합니다. 이 예에서는 이름이 guest_images_fs 를 사용합니다.
      유형 드롭다운 목록에서 생성할 스토리지 풀 유형을 선택합니다. 이 예에서는 fs를 사용합니다. 사전 포맷된 블록 장치.

      그림 13.2. 스토리지 풀 이름 및 유형

      스토리지 풀 이름 및 유형
      계속하려면 Forward 버튼을 클릭합니다.
    2. 새 풀 추가 (part 2)

      그림 13.3. 스토리지 풀 경로

      스토리지 풀 경로
      관련 매개 변수를 사용하여 스토리지 풀을 구성합니다. 각 스토리지 풀 유형의 매개변수에 대한 자세한 내용은 13.2.3절. “스토리지 풀별” 을 참조하십시오.
      일부 유형의 스토리지 풀의 경우 빌드 풀 확인란이 대화 상자에 나타납니다. 스토리지에서 스토리지 풀을 빌드하려면 Build Pool 확인란을 선택합니다.
      세부 정보를 확인하고 Finish (완료) 버튼을 클릭하여 스토리지 풀을 생성합니다.

13.2.3. 스토리지 풀별

이 섹션에서는 사전 요구 사항, 매개 변수 및 추가 정보를 포함하여 각 스토리지 풀 유형에 고유한 정보를 제공합니다. 여기에는 다음 항목이 포함됩니다.

13.2.3.1. 디렉터리 기반 스토리지 풀

매개 변수
다음 표에서는 디렉터리 기반 스토리지 풀을 생성하기 위해 XML 파일, virsh pool-define-as 명령 및 Virtual Machine Manager 애플리케이션에 필요한 매개 변수 목록을 제공합니다.

표 13.1. 디렉터리 기반 스토리지 풀 매개변수

설명XMLpool-define-as가상 머신 관리자
스토리지 풀의 유형입니다. <pool type='dir'> [type] 디렉토리 dir: 파일 시스템 디렉터리
스토리지 풀의 이름 <name>name</name> [name] 이름 이름
대상을 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로입니다.

<target>
  <path>target_path</path>
</target>

target path_to_pool 대상 경로
virsh 를 사용하여 스토리지 풀을 생성하는 경우 풀이 생성되었는지 확인합니다.
다음은 /guest_images 디렉터리를 기반으로 하는 스토리지 풀의 XML 파일의 예입니다.
<pool type='dir'>
  <name>dirpool</name>
  <target>
    <path>/guest_images</path>
  </target>
</pool>
다음은 /guest_images 디렉터리를 기반으로 스토리지 풀을 생성하는 명령의 예입니다.
# virsh pool-define-as dirpool dir --target "/guest_images"
Pool FS_directory defined
다음 이미지는 /guest_images 디렉토리를 기반으로 스토리지 풀을 생성하기 위한 새 스토리지 풀 추가 대화 상자의 가상 머신 관리자 추가 대화 상자의 예를 보여줍니다.

그림 13.4. 새 디렉터리 기반 스토리지 풀 예 추가

새 디렉터리 기반 스토리지 풀 예 추가

13.2.3.2. 디스크 기반 스토리지 풀

권장 사항
디스크 기반 스토리지 풀을 생성하기 전에 다음 사항에 유의하십시오.
  • 사용 중인 libvirt 버전에 따라 디스크를 스토리지 풀에 고정하면 현재 디스크 장치에 저장된 모든 데이터를 다시 포맷하고 지울 수 있습니다. 스토리지 풀을 생성하기 전에 스토리지 장치의 데이터를 백업하는 것이 좋습니다.
  • 게스트는 전체 디스크 또는 블록 장치(예: /dev/sdb)에 대한 쓰기 액세스 권한을 부여해서는 안 됩니다. 파티션(예: /dev/sdb1) 또는 LVM 볼륨을 사용합니다.
    전체 블록 장치를 게스트에 전달하면 게스트가 파티션을 지정하거나 자체 LVM 그룹을 만들 수 있습니다. 이로 인해 호스트 물리적 시스템에서 이러한 파티션 또는 LVM 그룹을 감지하고 오류가 발생할 수 있습니다.
사전 요구 사항
참고
이 섹션의 단계는 virsh pool-build 명령을 실행하지 않는 경우에만 필요합니다.
호스트 디스크에서 디스크 기반 스토리지 풀을 생성하려면 먼저 디스크의 레이블을 GUID 파티션 테이블 (GPT)으로 다시 지정해야 합니다. GPT 디스크 레이블을 사용하면 각 장치에 최대 128개의 파티션을 만들 수 있습니다.
# parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel
New disk label type? gpt
(parted) quit
Information: You may need to update /etc/fstab.
#
디스크 레이블을 다시 지정한 후 스토리지 풀을 정의하여 스토리지 풀을 계속 생성합니다.
매개 변수
다음 표에서는 디스크 기반 스토리지 풀을 생성하기 위한 XML 파일, virsh pool-define-as 명령 및 Virtual Machine Manager 애플리케이션에 필요한 매개 변수 목록을 제공합니다.

표 13.2. 디스크 기반 스토리지 풀 매개변수

설명XMLpool-define-as가상 머신 관리자
스토리지 풀의 유형입니다. <pool type='disk'> [type] 디스크 디스크: 물리 디스크 장치
스토리지 풀의 이름 <name>name</name> [name] 이름 이름
스토리지 장치를 지정하는 경로입니다. 예: /dev/sdb

<source>
  <device path=/dev/sdb/>
<source>

source-dev path_to_disk 소스 경로
대상을 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로입니다.

<target>
  <path>/path_to_pool</path>
</target>

target path_to_pool 대상 경로
virsh 를 사용하여 스토리지 풀을 생성하는 경우 스토리지 풀을 계속 정의합니다.
다음은 디스크 기반 스토리지 풀의 XML 파일의 예입니다.
<pool type='disk'>
  <name>phy_disk</name>
  <source>
    <device path='/dev/sdb'/>
    <format type='gpt'/>
  </source>
  <target>
    <path>/dev</path>
  </target>
</pool>
다음은 디스크 기반 스토리지 풀을 생성하는 명령의 예입니다.
# virsh pool-define-as phy_disk disk --source-format=gpt --source-dev=/dev/sdb --target /dev
Pool phy_disk defined
다음 이미지는 가상 머신 XML 구성 가상 머신 관리자Virtual Machine Manager Add a New Storage Pool 대화 상자의 예를 보여줍니다.

그림 13.5. 새 디스크 기반 스토리지 풀 예 추가

새 디스크 기반 스토리지 풀 예 추가

13.2.3.3. 파일 시스템 기반 스토리지 풀

권장 사항
이 섹션의 절차를 사용하여 전체 디스크를 스토리지 풀(예: /dev/sdb)으로 할당하지 마십시오. 게스트에 전체 디스크 또는 블록 장치에 대한 쓰기 액세스 권한을 부여해서는 안 됩니다. 이 방법은 파티션(예: /dev/sdb1)을 스토리지 풀에 할당하는 데만 사용해야 합니다.
사전 요구 사항
참고
virsh pool-build 명령을 실행하지 않는 경우에만 필요합니다.
파티션에서 스토리지 풀을 생성하려면 파일 시스템을 ext4로 포맷합니다.
# mkfs.ext4 /dev/sdc1
파일 시스템을 포맷한 후 스토리지 풀을 정의 하여 스토리지 풀을 계속 생성합니다.
매개 변수
다음 표에서는 파티션에서 파일 시스템 기반 스토리지 풀을 생성하기 위한 XML 파일, virsh pool-define-as 명령 및 Virtual Machine Manager 애플리케이션에 필요한 매개 변수 목록을 제공합니다.

표 13.3. 파일 시스템 기반 스토리지 풀 매개변수

설명XMLpool-define-as가상 머신 관리자
스토리지 풀의 유형입니다. <pool type='fs'> [type] fs fs: 사전 포맷된 블록 장치
스토리지 풀의 이름 <name>name</name> [name] 이름 이름
파티션을 지정하는 경로입니다. 예: /dev/sdc1

<source>
  <device path='source_path' />

[source] path_to_partition 소스 경로
파일 시스템 유형(예: ext4)

  <format type='fs_type' />
</source>

[source format] FS-format 해당 없음
대상을 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로입니다.

<target>
  <path>/path_to_pool</path>
</target>

[target] path_to_pool 대상 경로
virsh 를 사용하여 스토리지 풀을 생성하는 경우 스토리지 풀이 생성되었는지 계속 확인합니다.
다음은 파일 시스템 기반 스토리지 풀에 대한 XML 파일의 예입니다.
<pool type='fs'>
  <name>guest_images_fs</name>
  <source>
    <device path='/dev/sdc1'/>
    <format type='auto'/>
  </source>
  <target>
    <path>/guest_images</path>
  </target>
</pool>
다음은 파티션 기반 스토리지 풀을 생성하는 명령의 예입니다.
# virsh pool-define-as guest_images_fs fs --source-dev /dev/sdc1 --target /guest_images
Pool guest_images_fs defined
다음 이미지는 가상 머신 XML 구성 가상 머신 관리자Virtual Machine Manager Add a New Storage Pool 대화 상자에서 파일 시스템 기반 스토리지 풀을 생성하는 방법을 보여줍니다.

그림 13.6. 파일 시스템 기반 스토리지 풀 예 추가

파일 시스템 기반 스토리지 풀 예 추가

13.2.3.4. GlusterFS 기반 스토리지 풀

권장 사항
GlusterFS는 FUSE(사용자 공간)에서 파일 시스템을 사용하는 사용자 공간 파일 시스템입니다.
사전 요구 사항
호스트에서 GlusterFS 기반 스토리지 풀을 생성하려면 Gluster 서버를 준비해야 합니다.

절차 13.4. Gluster 서버 준비

  1. 다음 명령을 사용하여 상태를 나열하여 Gluster 서버의 IP 주소를 가져옵니다.
    # gluster volume status
    Status of volume: gluster-vol1
    Gluster process						Port	Online	Pid
    ------------------------------------------------------------------------------
    Brick 222.111.222.111:/gluster-vol1 			49155	Y	18634
    
    Task Status of Volume gluster-vol1
    ------------------------------------------------------------------------------
    There are no active volume tasks
    
  2. 설치되지 않은 경우 glusterfs-adapter 패키지를 설치합니다.
  3. 활성화되지 않은 경우 virt_use_adapterfs 부울을 활성화합니다. 활성화되어 있는지 확인합니다.
    # setsebool virt_use_fusefs on
    # getsebool virt_use_fusefs
    virt_use_fusefs --> on
    
필요한 패키지가 설치되고 활성화되도록 확인한 후 스토리지 풀을 계속 생성하면 스토리지 풀을 계속 생성합니다.
매개 변수
다음 표에서는 GlusterFS 기반 스토리지 풀을 생성하기 위한 XML 파일, virsh pool-define-as 명령 및 Virtual Machine Manager 애플리케이션에 필요한 매개 변수 목록을 제공합니다.

표 13.4. GlusterFS 기반 스토리지 풀 매개변수

설명XMLpool-define-as가상 머신 관리자
스토리지 풀의 유형입니다. <pool type='gluster'> [type] gluster Gluster: Gluster Filesystem
스토리지 풀의 이름 <name>name</name> [name] 이름 이름
Gluster 서버의 호스트 이름 또는 IP 주소

<source>
  <hostname='hostname' />

source-host hostname 호스트 이름
Gluster 서버의 이름   <name='Gluster-name' /> source-name Gluster-name 소스 이름
스토리지 풀에 사용되는 Gluster 서버의 경로입니다.

  <dir path='Gluster-path' />
</source>

source-path Gluster-path 소스 경로
virsh 를 사용하여 스토리지 풀을 생성하는 경우 스토리지 풀이 생성되었는지 계속 확인합니다.
다음은 GlusterFS 기반 스토리지 풀에 대한 XML 파일의 예입니다.
<pool type='gluster'>
  <name>Gluster_pool</name>
  <source>
    <host name='111.222.111.222'/>
    <dir path='/'/>
    <name>gluster-vol1</name>
  </source>
</pool>
다음은 GlusterFS 기반 스토리지 풀을 생성하는 명령의 예입니다.
# pool-define-as --name Gluster_pool --type gluster --source-host 111.222.111.222 --source-name gluster-vol1 --source-path /
Pool Gluster_pool defined
다음 이미지는 가상 머신 XML 구성 가상 머신 관리자Virtual Machine Manager Add a New Storage Pool 대화 상자에서 GlusterFS 기반 스토리지 풀을 생성하는 방법을 보여줍니다.

그림 13.7. 새로운 GlusterFS 기반 스토리지 풀 예 추가

새로운 GlusterFS 기반 스토리지 풀 예 추가

13.2.3.5. iSCSI 기반 스토리지 풀

권장 사항
iSCSI(Internet Small Computer System Interface)는 스토리지 장치 공유를 위한 네트워크 프로토콜입니다. iSCSI는 IP 계층을 통해 SCSI 명령을 사용하여 이니시에이터(스토리지 클라이언트)를 대상(스토리지 서버)에 연결합니다.
iSCSI 기반 장치를 사용하여 게스트 가상 시스템을 저장하면 iSCSI를 블록 스토리지 장치로 사용하는 등 보다 유연한 스토리지 옵션을 사용할 수 있습니다. iSCSI 장치는 Linux-IO(Linux-IO) 대상을 사용합니다. 이는 Linux의 멀티프로토콜 SCSI 대상입니다. iSCSI 외에도 LIO는 FCoE(Fibre Channel over Ethernet)를 지원합니다.
사전 요구 사항
iSCSI 기반 스토리지 풀을 생성하기 전에 iSCSI 대상을 만들어야 합니다. iSCSI 대상은 소프트웨어 지원 iSCSI 대상을 생성하기 위한 명령 집합을 제공하는 RuntimeClass 패키지로 생성됩니다.

절차 13.5. iSCSI 대상 생성

  1. RuntimeClass 패키지 설치

    # yum install targetcli
  2. rootfs 명령 세트를 시작합니다.

    # targetcli
  3. 스토리지 오브젝트 생성

    스토리지 풀을 사용하여 스토리지 오브젝트 3개를 생성합니다.
    1. 블록 스토리지 오브젝트 생성
      1. /backstores/block 디렉터리로 이동합니다.
      2. create 명령을 실행합니다.
        # create [block-name][filepath]
        예를 들면 다음과 같습니다.
        # create block1 dev=/dev/sdb1
    2. fileio 오브젝트 생성
      1. /fileio 디렉토리로 이동합니다.
      2. create 명령을 실행합니다.
        # create [fileio-name][image-name] [image-size]
        예를 들면 다음과 같습니다.
        # create fileio1 /foo.img 50M
    3. ramdisk 오브젝트 생성
      1. /ramdisk 디렉터리로 이동합니다.
      2. create 명령을 실행합니다.
        # create [ramdisk-name] [ramdisk-size]
        예를 들면 다음과 같습니다.
        # create ramdisk1 1M
    4. 이 단계에서 생성된 디스크의 이름을 기록해 둡니다. 나중에 사용하게 될 것입니다.
  4. iSCSI 대상 만들기

    1. /iscsi 디렉터리로 이동합니다.
    2. 다음 두 가지 방법 중 하나로 대상을 생성합니다.
      • 매개 변수 없이 create 명령을 실행합니다.
        iSCSI 정규화된 이름 (IQN)이 자동으로 생성됩니다.
      • IQN과 서버를 지정하는 create 명령을 실행합니다. 예를 들면 다음과 같습니다.
        # create iqn.2010-05.com.example.server1:iscsirhel7guest
  5. 포털 IP 주소 정의

    iSCSI를 통해 블록 스토리지를 내보내려면 포털, LUN, 액세스 제어 목록 ACL을 먼저 구성해야 합니다.
    포털에는 대상이 모니터링하는 IP 주소 및 TCP와 연결할 이니시에이터가 포함됩니다. iSCSI는 포트 3260을 사용합니다. 이 포트는 기본적으로 구성됩니다.
    포트 3260에 연결하려면 다음을 수행합니다.
    1. /tpg 디렉토리로 이동합니다.
    2. 다음을 실행합니다.
      # portals/ create
      이 명령을 수행하면 포트 3260에서 사용 가능한 모든 IP 주소를 수신 대기합니다.
      포트 3260을 수신할 단일 IP 주소만 사용하려면 명령 끝에 IP 주소를 추가합니다. 예를 들면 다음과 같습니다.
      # portals/ create 143.22.16.33
  6. LUN을 구성하고 스토리지 오브젝트를 패브릭에 할당

    이 단계에서는 스토리지 오브젝트를 생성할 때 생성된 스토리지 오브젝트 를 사용합니다.
    1. 포털 IP 주소 정의 에서 생성된 TPG의 luns 디렉토리로 이동합니다. 예를 들면 다음과 같습니다.
      # iscsi>iqn.iqn.2010-05.com.example.server1:iscsirhel7guest
    2. 램디스크에 첫 번째 LUN을 할당합니다. 예를 들면 다음과 같습니다.
      # create /backstores/ramdisk/ramdisk1
    3. 두 번째 LUN을 블록 디스크에 할당합니다. 예를 들면 다음과 같습니다.
      # create /backstores/block/block1
    4. fileio 디스크에 세 번째 LUN을 할당합니다. 예를 들면 다음과 같습니다.
      # create /backstores/fileio/fileio1
    5. 결과 LUN을 나열합니다.
      /iscsi/iqn.20...csirhel7guest ls
      
      o- tgp1 ............................................................[enabled, auth]
        o- acls...................................................................[0 ACL]
        o- luns..................................................................[3 LUNs]
        | o- lun0......................................................[ramdisk/ramdisk1]
        | o- lun1...............................................[block/block1 (dev/vdb1)]
        | o- lun2................................................[fileio/file1 (foo.img)]
        o- portals.............................................................[1 Portal]
          o- IP-ADDRESS:3260.........................................................[OK]
      
  7. 각 이니시에이터에 대한 ACL 생성

    이니시에이터가 연결할 때 인증을 활성화합니다. 지정된 LUN을 사용하여 지정된 인티터를 지정할 수도 있습니다. 대상 및 이니시에이터에는 고유한 이름이 있습니다. iSCSI 이니시에이터는 IQN을 사용합니다.
    1. 이니시에이터 이름을 사용하여 iSCSI 이니시에이터의 IQN을 찾습니다. 예를 들면 다음과 같습니다.
      # cat /etc/iscsi/initiator2.iscsi
      InitiatorName=create iqn.2010-05.com.example.server1:iscsirhel7guest
      이 IQN은 ACL을 생성하는 데 사용됩니다.
    2. acls 디렉터리로 이동합니다.
    3. 다음 중 하나를 수행하여 ACL을 생성합니다.
      • 매개 변수 없이 create 명령을 실행하여 모든 LUN 및 이니시에이터에 대해 ACLS를 생성합니다.
        # create
      • 특정 LUN 및 이니시에이터에 대한 ACL을 생성하고, iSCSI intiator의 IQN을 지정하는 create 명령을 실행합니다. 예를 들면 다음과 같습니다.
        # create iqn.2010-05.com.example.server1:888
      • 모든 이니시에이터에 단일 사용자 ID와 암호를 사용하도록 커널 대상을 구성합니다.
        # set auth userid=user_ID
        # set auth password=password
        # set attribute authentication=1
        # set attribute generate_node_acls=1
    이 절차를 완료한 후 스토리지 풀을 보호하십시오.
  8. 설정을 저장합니다.

    이전 부팅 설정을 덮어 쓰기하여 구성을 영구적으로 설정합니다.
    # saveconfig
  9. 서비스 활성화

    다음 부팅 시 저장된 설정을 적용하려면 서비스를 활성화합니다.
    # systemctl enable target.service
선택적 절차
iSCSI 기반 스토리지 풀을 생성하기 전에 iSCSI 타겟으로 수행할 수 있는 몇 가지 선택적 프로시저가 있습니다.

절차 13.6. RAID 배열의 논리 볼륨 구성

  1. RAID5 어레이 생성

    RAID5 어레이 생성에 대한 자세한 내용은 Red Hat Enterprise Linux 7 스토리지 관리 가이드 를 참조하십시오.
  2. RAID5 배열에 LVM 논리 볼륨 생성

    RAID5 배열에 LVM 논리 볼륨 생성에 대한 자세한 내용은 Red Hat Enterprise Linux 7 Logical Volume Manager 관리 가이드 를 참조하십시오.

절차 13.7. 검색 기능 테스트

  • 새 iSCSI 장치를 검색할 수 있는지 확인합니다.

    # iscsiadm --mode discovery --type sendtargets --portal server1.example.com
    143.22.16.33:3260,1 iqn.2010-05.com.example.server1:iscsirhel7guest

절차 13.8. 장치 연결 테스트

  1. 새 iSCSI 장치 연결

    새 장치(Waitn.2010-05.com.example.server1:iscsirhel7guest)를 연결하여 장치를 연결할 수 있는지 확인합니다.
    # iscsiadm -d2 -m node --login
    scsiadm: Max file limits 1024 1024
    
    Logging in to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260]
    Login to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260] successful.
    
  2. 장치 분리

    # iscsiadm -d2 -m node --logout
    scsiadm: Max file limits 1024 1024
    
    Logging out of session [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260
    Logout of [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260] successful.

절차 13.9. iSCSI 스토리지 풀에 libvirt 보안 사용

참고
이 절차는 iSCSI 대상을 생성할user_ID암호를 정의한 경우 필요합니다.
iSCSI 스토리지 풀을 보호하도록 virsh 를 사용하여 사용자 이름 및 암호 매개 변수를 구성할 수 있습니다. 이 설정은 풀을 정의하기 전이나 후에 구성할 수 있지만 인증 설정을 적용하려면 풀을 시작해야 합니다.
  1. libvirt 보안 파일 만들기

    challenge-handshake 인증 프로토콜(CHAP) 사용자 이름을 사용하여 libvirt 시크릿 파일을 만듭니다. 예를 들면 다음과 같습니다.
    <secret ephemeral='no' private='yes'>
        <description>Passphrase for the iSCSI example.com server</description>
        <usage type='iscsi'>
            <target>iscsirhel7secret</target>
        </usage>
    </secret>
  2. 보안 정의

    # virsh secret-define secret.xml
  3. UUID 확인

    # virsh secret-list
    UUID                                  Usage
    --------------------------------------------------------------------------------
    2d7891af-20be-4e5e-af83-190e8a922360  iscsi iscsirhel7secret
  4. UID에 시크릿 할당

    다음 명령을 사용하여 이전 단계의 출력에서 UUID에 시크릿을 할당합니다. 이렇게 하면 CHAP 사용자 이름과 암호가 libvirt 제어된 시크릿 목록에 있습니다.
    # MYSECRET=`printf %s "password123" | base64`
    # virsh secret-set-value 2d7891af-20be-4e5e-af83-190e8a922360 $MYSECRET
  5. 스토리지 풀에 인증 항목 추가

    virsh edit 를 사용하여 스토리지 풀의 XML 파일에서 <source> 항목을 수정하고, 인증 유형,사용자 이름 및 시크릿 사용량 을 지정하여 <auth> 요소를 추가합니다.
    예를 들면 다음과 같습니다.
    <pool type='iscsi'>
      <name>iscsirhel7pool</name>
        <source>
           <host name='192.168.122.1'/>
           <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
           <auth type='chap' username='redhat'>
              <secret usage='iscsirhel7secret'/>
           </auth>
        </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
    참고
    <auth> 하위 요소는 게스트 XML의 <pool><disk> 요소 내의 다른 위치에 있습니다. <pool> 의 경우 인증은 일부 풀 소스(iSCSI 및 RBD)의 속성이므로 풀 소스를 찾을 위치를 설명하므로 <source> 요소 내에 <auth> 가 지정됩니다. 도메인의 하위 요소인 <disk> 의 경우 iSCSI 또는 RBD 디스크에 대한 인증은 디스크의 속성입니다.
    또한 디스크의 <auth> 하위 요소는 스토리지 풀과 다릅니다.
    <auth username='redhat'>
      <secret type='iscsi' usage='iscsirhel7secret'/>
    </auth>
  6. 변경 사항 활성화

    이러한 변경 사항을 활성화하려면 스토리지 풀을 시작해야 합니다.
    • 스토리지 풀이 아직 시작되지 않은 경우 virsh로 스토리지 풀 생성 단계를 수행하여 스토리지 풀을 정의하고 시작합니다.
    • 풀이 이미 시작된 경우 다음 명령을 입력하여 스토리지 풀을 중지하고 다시 시작합니다.
      # virsh pool-destroy iscsirhel7pool
      # virsh pool-start iscsirhel7pool
매개 변수
다음 표에서는 iSCSI 기반 스토리지 풀을 생성하기 위한 XML 파일, virsh pool-define-as 명령 및 Virtual Machine Manager 애플리케이션에 필요한 매개 변수 목록을 제공합니다.

표 13.5. iSCSI 기반 스토리지 풀 매개변수

설명XMLpool-define-as가상 머신 관리자
스토리지 풀의 유형입니다. <pool type='iscsi'> [type] iscsi iSCSI: iSCSI 대상
스토리지 풀의 이름 <name>name</name> [name] 이름 이름
호스트의 이름입니다.

<source>
  <host name='hostname' />

source-host hostname 호스트 이름
iSCSI IQN.

  device path="iSCSI_IQN" />
</source>

source-dev iSCSI_IQN 소스 IQN
대상을 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로입니다.

<target>
  <path>/dev/disk/by-path</path>
</target>

target path_to_pool 대상 경로
(선택 사항) iSCSI 이니시에이터의 IQN입니다. ACL이 특정 이니시에이터로 LUN을 제한하는 경우에만 필요합니다.

<initiator>
  <iqn name='initiator0' />
</initiator>

아래 노트를 참조하십시오. 이니시에이터 IQN
참고
iSCSI 이니시에이터의 IQN은 virsh find-storage-pool-sources-as iscsi 명령을 사용하여 확인할 수 있습니다.
virsh 를 사용하여 스토리지 풀을 생성하는 경우 스토리지 풀이 생성되었는지 계속 확인합니다.
다음은 iSCSI 기반 스토리지 풀의 XML 파일의 예입니다.
<pool type='iscsi'>
  <name>iSCSI_pool</name>
  <source>
    <host name='server1.example.com'/>
    <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>

다음은 iSCSI 기반 스토리지 풀을 생성하는 명령의 예입니다.
# virsh pool-define-as --name iSCSI_pool --type iscsi --source-host server1.example.com --source-dev iqn.2010-05.com.example.server1:iscsirhel7guest --target /dev/disk/by-path
Pool iSCSI_pool defined
다음 이미지는 가상 머신 XML 구성 가상 머신 관리자Virtual Machine Manager Add a New Storage Pool 대화 상자의 예를 보여줍니다.

그림 13.8. 새 iSCSI 기반 스토리지 풀 예 추가

새 iSCSI 기반 스토리지 풀 예 추가

13.2.3.6. LVM 기반 스토리지 풀

권장 사항
LVM 기반 스토리지 풀을 생성하기 전에 다음 사항에 유의하십시오.
  • LVM 기반 스토리지 풀은 LVM의 모든 유연성을 제공하지 않습니다.
  • libvirt 는 씬 논리 볼륨을 지원하지만 씬 스토리지 풀의 기능은 제공하지 않습니다.
  • LVM 기반 스토리지 풀은 볼륨 그룹입니다. Logical Volume Manager 명령 또는 virsh 명령을 사용하여 볼륨 그룹을 만들 수 있습니다. virsh 인터페이스를 사용하여 볼륨 그룹을 관리하려면 virsh 명령을 사용하여 볼륨 그룹을 만듭니다.
    볼륨 그룹에 대한 자세한 내용은 Red Hat Enterprise Linux Logical Volume Manager 관리 가이드 를 참조하십시오.
  • LVM 기반 스토리지 풀에는 전체 디스크 파티션이 필요합니다. 이러한 절차를 통해 새 파티션이나 장치를 활성화하면 파티션이 포맷되고 모든 데이터가 지워집니다. 호스트의 기존 볼륨 그룹(VG)을 사용하는 경우 아무것도 삭제되지 않습니다. 다음 절차를 시작하기 전에 스토리지 장치를 백업하는 것이 좋습니다.
    LVM 볼륨 그룹 생성에 대한 자세한 내용은 Red Hat Enterprise Linux Logical Volume Manager 관리 가이드 를 참조하십시오.
  • 기존 VG에서 LVM 기반 스토리지 풀을 생성하는 경우 pool-build 명령을 실행하지 않아야 합니다.
VG가 준비되었는지 확인한 후 스토리지 풀을 정의하여 계속 스토리지 풀을 생성합니다.
매개 변수
다음 표에서는 LVM 기반 스토리지 풀을 생성하기 위해 XML 파일, virsh pool-define-as 명령 및 Virtual Machine Manager 애플리케이션에 필요한 매개 변수 목록을 제공합니다.

표 13.6. LVM 기반 스토리지 풀 매개변수

설명XMLpool-define-as가상 머신 관리자
스토리지 풀의 유형입니다. <pool type='logical'> [type] 논리 logical: LVM 볼륨 그룹
스토리지 풀의 이름 <name>name</name> [name] 이름 이름
스토리지 풀의 장치 경로입니다.

<source>
  <device path='device_path' />

source-dev device_path 소스 경로
볼륨 그룹의 이름   <name='VG-name' /> source-name VG-name 소스 경로
가상 그룹 형식

  <format type='lvm2' />
</source>

source-format lvm2 해당 없음
대상 경로입니다.

<target>
  <path='target-path' />
</target>

대상 target-path 대상 경로
참고
논리 볼륨 그룹이 여러 디스크 파티션으로 구성된 경우 여러 소스 장치가 나열될 수 있습니다. 예를 들면 다음과 같습니다.
<source>
  <device path='/dev/sda1'/>
  <device path='/dev/sdb3'/>
  <device path='/dev/sdc2'/>
  ...
  </source>
virsh 를 사용하여 스토리지 풀을 생성하는 경우 스토리지 풀이 생성되었는지 계속 확인합니다.
다음은 LVM 기반 스토리지 풀의 XML 파일의 예입니다.
<pool type='logical'>
  <name>guest_images_lvm</name>
  <source>
    <device path='/dev/sdc'/>
    <name>libvirt_lvm</name>
    <format type='lvm2'/>
  </source>
  <target>
    <path>/dev/libvirt_lvm</path>
  </target>
</pool>
다음은 LVM 기반 스토리지 풀을 생성하는 명령의 예입니다.
# virsh pool-define-as guest_images_lvm logical --source-dev=/dev/sdc --source-name libvirt_lvm --target /dev/libvirt_lvm
Pool guest_images_lvm defined
다음 이미지는 가상 머신 XML 구성 가상 머신 관리자Virtual Machine Manager Add a New Storage Pool 대화 상자의 예를 보여줍니다.

그림 13.9. 새 LVM 기반 스토리지 풀 예 추가

새 LVM 기반 스토리지 풀 예 추가

13.2.3.7. NFS 기반 스토리지 풀

사전 요구 사항
NFS(네트워크 파일 시스템) 기반 스토리지 풀을 생성하려면 호스트 시스템에서 사용할 NFS 서버를 이미 구성해야 합니다. NFS에 대한 자세한 내용은 Red Hat Enterprise Linux Storage 관리 가이드 를 참조하십시오.
NFS 서버가 올바르게 구성되었는지 확인한 후 스토리지 풀을 정의 하여 계속 생성합니다.
매개 변수
다음 표에서는 NFS 기반 스토리지 풀을 생성하기 위해 XML 파일, virsh pool-define-as 명령 및 Virtual Machine Manager 애플리케이션에 필요한 매개 변수 목록을 제공합니다.

표 13.7. NFS 기반 스토리지 풀 매개변수

설명XMLpool-define-as가상 머신 관리자
스토리지 풀의 유형입니다. <pool type='netfs'> [type] netfs netfs: 네트워크 내보내기 디렉터리
스토리지 풀의 이름 <name>name</name> [name] 이름 이름
마운트 지점이 있는 NFS 서버의 호스트 이름입니다. 호스트 이름 또는 IP 주소일 수 있습니다.

<source>
  <host name='host_name' />

source-host host_name 호스트 이름
NFS 서버에서 사용되는 디렉터리

  <dir path='source_path' />
</source>

source-path source_path 소스 경로
대상을 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로입니다.

<target>
  <path>/target_path</path>
</target>

target target_path 대상 경로
virsh 를 사용하여 스토리지 풀을 생성하는 경우 스토리지 풀이 생성되었는지 계속 확인합니다.
다음은 NFS 기반 스토리지 풀의 XML 파일의 예입니다.
<pool type='netfs'>
  <name>nfspool</name>
  <source>
    <host name='localhost'/>
    <dir path='/home/net_mount'/>
  </source>
  <target>
    <path>/var/lib/libvirt/images/nfspool</path>
  </target>
</pool>
다음은 NFS 기반 스토리지 풀을 생성하는 명령의 예입니다.
# virsh pool-define-as nfspool netfs --source-host localhost --source-path /home/net_mount --target /var/lib/libvirt/images/nfspool
Pool nfspool defined
다음 이미지는 가상 머신 XML 구성 가상 머신 관리자Virtual Machine Manager Add a New Storage Pool 대화 상자의 예를 보여줍니다.

그림 13.10. 새 NFS 기반 스토리지 풀 예 추가

새 NFS 기반 스토리지 풀 예 추가

13.2.3.8. SCSI 장치를 사용하는 vHBA 기반 스토리지 풀

참고
가상 머신 관리자를 사용하여 SCSI 장치를 사용하여 vHBA 기반 스토리지 풀을 생성할 수 없습니다.
권장 사항
NPIV(N_Port ID Virtualization)는 단일 물리 파이버 채널 버스 어댑터(HBA)를 공유할 수 있는 소프트웨어 기술입니다. 이를 통해 여러 게스트가 여러 물리적 호스트의 동일한 스토리지를 볼 수 있으므로 스토리지에 대한 마이그레이션 경로가 쉬워집니다. 따라서 올바른 스토리지 경로가 지정된 경우 스토리지를 생성하거나 복사하기 위해 마이그레이션이 필요하지 않습니다.
가상화에서 가상 호스트 버스 어댑터 또는 vHBA 는 가상 시스템의 논리 단위 번호(LUN)를 제어합니다. 호스트에서 여러 KVM 게스트 간에 하나의 파이버 채널 장치 경로를 공유하려면 각 가상 머신에 대해 vHBA를 생성해야 합니다. 여러 KVM 게스트에서 단일 vHBA를 사용해서는 안 됩니다.
NPIV의 각 vHBA는 부모 HBA와 WWNN (WWNN) 및 WWNN(WWNN) 및 WWPN(W Wide Port Name)에 의해 식별됩니다. 스토리지 경로는 WWNN 및 WWPN 값에 따라 결정됩니다. 상위 HBA는 scsi_host# 또는 WWNN/WWPN 쌍으로 정의할 수 있습니다.
참고
상위 HBA가 scsi_host# 으로 정의되고 하드웨어가 호스트 시스템에 추가되면 scsi_host# 할당이 변경될 수 있습니다. 따라서 WWNN/WWPN 쌍을 사용하여 상위 HBA를 정의하는 것이 좋습니다.
vHBA 구성을 유지하므로 vHBA를 기반으로 libvirt 스토리지 풀을 정의하는 것이 좋습니다.
libvirt 스토리지 풀을 사용하면 다음과 같은 두 가지 주요 이점이 있습니다.
  • libvirt 코드는 virsh 명령 출력을 사용하여 LUN의 경로를 쉽게 찾을 수 있습니다.
  • 가상 머신 마이그레이션은 대상 머신에서 동일한 vHBA 이름으로 스토리지 풀을 정의하고 시작해야 합니다. 이렇게 하려면 가상 머신의 XML 구성에 vHBA LUN, libvirt 스토리지 풀 및 볼륨 이름을 지정해야 합니다. 예를 들어 13.2.3.8절. “SCSI 장치를 사용하는 vHBA 기반 스토리지 풀” 을 참조하십시오.
참고
vHBA를 만들기 전에 호스트 LUN에서 SAN(Storage array) 측 zoning을 구성하여 게스트 간에 격리를 제공하고 데이터 손상 가능성을 방지하는 것이 좋습니다.
영구 vHBA 구성을 만들려면 먼저 아래 형식을 사용하여 libvirt 'scsi' 스토리지 풀 XML 파일을 만듭니다. 동일한 물리적 HBA에서 스토리지 풀을 사용하는 단일 vHBA를 생성할 때는 시스템의 /dev/disk/by-{path|id|uuid} 위치 중 하나와 같은 <path> 값에 안정적인 위치를 사용하는 것이 좋습니다.
동일한 물리 HBA에서 스토리지 풀을 사용하는 여러 vHBA를 생성하는 경우 <path> 필드의 값은 /dev/ 여야 합니다. 그렇지 않으면 스토리지 풀 볼륨은 vHBA 중 하나에만 표시되고 호스트의 장치는 NPIV 구성을 사용하여 여러 게스트에 노출할 수 없습니다.
<path><target> 의 요소에 대한 자세한 내용은 업스트림 libvirt 문서를 참조하십시오.
사전 요구 사항
SCSI 장치로 vHBA 기반 스토리지 풀을 생성하기 전에 vHBA를 생성합니다.

절차 13.10. vHBA 생성

  1. 호스트 시스템에서 HBA 검색

    호스트 시스템에서 HBA를 찾으려면 virsh nodedev-list --cap vports 명령을 사용합니다.
    다음 예제에서는 vHBA를 지원하는 두 개의 HBA가 있는 호스트를 보여줍니다.
    # virsh nodedev-list --cap vports
    scsi_host3
    scsi_host4
    
  2. HBA의 세부 정보 확인

    virsh nodedev-dumpxml HBA_device 명령을 사용하여 HBA의 세부 정보를 확인합니다.
    # virsh nodedev-dumpxml scsi_host3
    명령의 출력에는 vHBA를 생성하는 데 사용되는 <name>, <wwnn><wwpn> 필드가 나열됩니다. <max_vports> 에는 지원되는 최대 vHBA 수가 표시됩니다. 예를 들면 다음과 같습니다.
    <device>
      <name>scsi_host3</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3</path>
      <parent>pci_0000_10_00_0</parent>
      <capability type='scsi_host'>
        <host>3</host>
        <unique_id>0</unique_id>
        <capability type='fc_host'>
          <wwnn>20000000c9848140</wwnn>
          <wwpn>10000000c9848140</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
        <capability type='vport_ops'>
          <max_vports>127</max_vports>
          <vports>0</vports>
        </capability>
      </capability>
    </device>
    이 예에서 <max_vports> 값은 HBA 구성에서 사용할 수 있는 총 127개의 가상 포트가 있음을 보여줍니다. <vports> 값은 현재 사용 중인 가상 포트 수를 표시합니다. 이 값은 vHBA를 생성한 후 업데이트됩니다.
  3. vHBA 호스트 장치 만들기

    vHBA 호스트에 대해 다음 중 하나와 유사한 XML 파일을 만듭니다. 이 예에서 파일 이름은 vhba_host3.xml 입니다.
    이 예에서는 scsi_host3 을 사용하여 상위 vHBA를 설명합니다.
    # cat vhba_host3.xml
    <device>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>
    이 예에서는 WWNN/WWPN 쌍을 사용하여 상위 vHBA를 설명합니다.
    # cat vhba_host3.xml
    <device>
      <name>vhba</name>
      <parent wwnn='20000000c9848140' wwpn='10000000c9848140'/>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>
    참고
    WWNN 및 WWPN 값은 절차 13.10. “vHBA 생성” 에 표시된 HBA 세부 정보에 있는 값과 일치해야 합니다.
    <parent> 필드는 이 vHBA 장치와 연결할 HBA 장치를 지정합니다. <device> 태그의 세부 정보는 다음 단계에서 호스트에 대한 새 vHBA 장치를 만드는 데 사용됩니다. nodedev XML 형식에 대한 자세한 내용은 libvirt 업스트림 페이지를 참조하십시오.
  4. vHBA 호스트 장치에서 새 vHBA 생성

    vhba_host3 을 기반으로 vHBA를 생성하려면 virsh nodedev-create 명령을 사용합니다.
    # virsh nodedev-create vhba_host3.xml
    Node device scsi_host5 created from vhba_host3.xml
  5. vHBA 확인

    virsh nodedev-dumpxml 명령을 사용하여 새 vHBA의 세부 정보(scsi_host5)를 확인합니다.
    # virsh nodedev-dumpxml scsi_host5
    <device>
      <name>scsi_host5</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3/vport-3:0-0/host5</path>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <host>5</host>
        <unique_id>2</unique_id>
        <capability type='fc_host'>
          <wwnn>5001a4a93526d0a1</wwnn>
          <wwpn>5001a4ace3ee047d</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
      </capability>
    </device>
vHBA를 확인한 후 스토리지 풀을 정의 하여 스토리지 풀을 계속 생성합니다.
매개 변수
다음 표에서는 vHBA 기반 스토리지 풀을 생성하기 위한 XML 파일, virsh pool-define-as 명령 및 Virtual Machine Manager 애플리케이션에 필요한 매개 변수 목록을 제공합니다.

표 13.8. vHBA 기반 스토리지 풀 매개변수

설명XMLpool-define-as
스토리지 풀의 유형입니다. <pool type='scsi'> scsi
스토리지 풀의 이름 <name>name</name> --adapter-name name
vHBA의 식별자입니다. 상위 속성은 선택 사항입니다.

<source>
  <adapter type='fc_host'
  [parent=parent_scsi_device]
  wwnn='WWNN'
  wwpn='WWPN' />
</source>

[--adapter-parent parent]
--adapter-wwnn wwnn
--adapter-wpnn wwpn

대상을 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로입니다.

<target>
  <path>target_path</path>
</target>

target path_to_pool
중요
<path> 필드가 /dev/ 이면 libvirt 는 볼륨 장치 경로에 고유한 짧은 장치 경로를 생성합니다. 예: /dev/sdc. 그렇지 않으면 물리적 호스트 경로가 사용됩니다. 예: /dev/disk/by-path/pci-0000:10:00.0-fc-0x500x5006016044602198-lun-0. 고유한 짧은 장치 경로를 사용하면 여러 스토리지 풀에서 동일한 볼륨을 여러 게스트에 나열할 수 있습니다. 여러 게스트에서 물리적 호스트 경로를 사용하는 경우 중복 장치 유형 경고가 발생할 수 있습니다.
참고
<adapter> 필드에서 parent 속성을 사용하여 다양한 경로에 따라 NPIV LUN을 사용할 수 있는 물리적 HBA 부모를 식별할 수 있습니다. 이 필드 scsi_hostNvportsmax_vports 속성과 결합하여 상위 ID를 완료합니다. parent, parent_wwnn, parent_wwpn 또는 parent_fabric_wwn 속성은 호스트가 동일한 HBA를 재부팅한 후 다양한 보장을 제공합니다.
  • parent 을 지정하지 않으면 libvirt 에서 NPIV를 지원하는 첫 번째 scsi_hostN 어댑터를 사용합니다.
  • parent 만 지정하면 구성에 추가 SCSI 호스트 어댑터가 추가되는 경우 문제가 발생할 수 있습니다.
  • parent_wwnn 또는 parent_wwpn 을 지정하면 호스트가 동일한 HBA를 재부팅한 후 사용됩니다.
  • parent_fabric_wwn 을 사용하는 경우, 호스트가 scsi_hostN 사용된 와 관계없이 동일한 패브릭의 HBA를 재부팅한 후 선택합니다.
virsh 를 사용하여 스토리지 풀을 생성하는 경우 스토리지 풀이 생성되었는지 계속 확인합니다.
다음은 vHBA 기반 스토리지 풀의 XML 파일의 예입니다. 첫 번째 예는 HBA의 유일한 스토리지 풀인 스토리지 풀의 예입니다. 두 번째 예는 단일 vHBA를 사용하고 상위 속성을 사용하여 SCSI 호스트 장치를 식별하는 여러 스토리지 풀 중 하나인 스토리지 풀에 대한 예입니다.
<pool type='scsi'>
  <name>vhbapool_host3</name>
  <source>
    <adapter type='fc_host' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>
<pool type='scsi'>
  <name>vhbapool_host3</name>
  <source>
    <adapter type='fc_host' parent='scsi_host3' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>
다음은 vHBA 기반 스토리지 풀을 생성하는 명령의 예입니다.
# virsh pool-define-as vhbapool_host3 scsi --adapter-parent scsi_host3 --adapter-wwnn 5001a4a93526d0a1 --adapter-wwpn 5001a4ace3ee047d --target /dev/disk/by-path
Pool vhbapool_host3 defined
참고
virsh 명령은 parent_wwnn, parent_wwpn 또는 parent_fabric_wwn 속성을 정의하는 방법을 제공하지 않습니다.
vHBA LUN을 사용하도록 가상 머신 구성
vHBA에 대한 스토리지 풀을 생성한 후 vHBA LUN을 가상 머신 구성에 추가해야 합니다.
  1. 가상 머신의 XML에 있는 가상 머신에 디스크 볼륨을 생성합니다.
  2. <source> 매개변수에 storage poolstorage volume 을 지정합니다.
다음은 예를 보여줍니다.
<disk type='volume' device='disk'>
  <driver name='qemu' type='raw'/>
  <source pool='vhbapool_host3' volume='unit:0:4:0'/>
  <target dev='hda' bus='ide'/>
</disk>
lun 대신 disk 장치를 지정하려면 다음 예제를 참조하십시오.
<disk type='volume' device='lun' sgio='unfiltered'>
  <driver name='qemu' type='raw'/>
  <source pool='vhbapool_host3' volume='unit:0:4:0' mode='host'/>
  <target dev='sda' bus='scsi'/>
  <shareable />
</disk>
게스트에 SCSI LUN 기반 스토리지를 추가하는 XML 구성 예제는 13.3.6.3절. “게스트에 SCSI LUN 기반 스토리지 추가” 을 참조하십시오.
하드웨어 오류가 발생할 경우 LUN을 성공적으로 다시 연결하도록 하려면 fast_io_fail_tmodev_loss_tmo 옵션을 편집하는 것이 좋습니다. 자세한 내용은 하드웨어 오류 발생 후 노출된 LUN에 대한 연결을 참조하십시오.

13.2.4. 스토리지 풀 삭제

virsh 또는 Virtual Machine Manager 를 사용하여 스토리지 풀을 삭제할 수 있습니다.

13.2.4.1. 스토리지 풀 삭제 사전 요구 사항

삭제하려는 스토리지 풀을 사용하는 다른 게스트 가상 머신에 부정적인 영향을 미치지 않으려면 스토리지 풀을 중지하고 사용하는 리소스를 해제하는 것이 좋습니다.

13.2.4.2. virsh를 사용하여 스토리지 풀 삭제

  1. 정의된 스토리지 풀을 나열합니다.
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images_pool    active     yes
    
  2. 삭제할 스토리지 풀을 중지합니다.
    # virsh pool-destroy guest_images_disk
  3. (선택 사항) 일부 유형의 스토리지 풀의 경우 스토리지 풀이 상주하는 디렉터리를 선택적으로 제거할 수 있습니다.
    # virsh pool-delete guest_images_disk
  4. 스토리지 풀의 정의를 제거합니다.
    # virsh pool-undefine guest_images_disk
  5. 풀이 정의되지 않음을 확인합니다.
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    
    

13.2.4.3. 가상 머신 관리자를 사용하여 스토리지 풀 삭제

  1. 연결 세부 정보 창의 스토리지 탭에서 스토리지 풀 목록에서 삭제할 스토리지 풀을 선택합니다.
  2. 스토리지 창 하단에 있는 를 클릭합니다. 이렇게 하면 스토리지 풀이 중지되고 사용 중인 모든 리소스가 해제됩니다.
  3. 을 클릭합니다.
    참고
    아이콘은 스토리지 풀이 중지된 경우에만 활성화됩니다.
    스토리지 풀이 삭제됩니다.

13.3. 스토리지 볼륨 사용

이 섹션에서는 스토리지 볼륨 사용에 대한 정보를 제공합니다. virsh 명령과 Virtual Machine Manager 를 사용하여 스토리지 볼륨을 생성, 구성 및 삭제하는 방법에 대한 자세한 정보와 개념적 정보를 제공합니다.

13.3.1. 스토리지 볼륨 개념

스토리지 풀은 스토리지 볼륨 으로 나뉩니다. 스토리지 볼륨은 물리 파티션, LVM 논리 볼륨, 파일 기반 디스크 이미지 및 libvirt에서 처리하는 기타 스토리지 유형의 추상화입니다. 스토리지 볼륨은 기본 하드웨어에 관계없이 게스트 가상 머신에 로컬 스토리지 장치로 제공됩니다.
참고
아래 섹션에는 virsh가 스토리지 볼륨 관리에 제공하는 모든 명령과 인수가 포함되어 있지 않습니다. 자세한 내용은 20.30절. “스토리지 볼륨 명령” 을 참조하십시오.
호스트 시스템에서 스토리지 볼륨은 해당 이름과 이 이름이 파생된 스토리지 풀의 식별자로 참조됩니다. virsh 명령줄에서 --pool storage_pool volume_name.
예를 들어 guest_images 풀에 firstimage 라는 볼륨이 있습니다.
# virsh vol-info --pool guest_images firstimage
  Name:           firstimage
  Type:           block
  Capacity:       20.00 GB
  Allocation:     20.00 GB
추가 매개변수 및 인수는 20.34절. “볼륨 정보 나열” 에서 참조하십시오.

13.3.2. 스토리지 볼륨 생성

이 섹션에서는 virshVirtual Machine Manager 를 사용하여 스토리지 풀에서 스토리지 볼륨을 생성하는 일반적인 지침을 제공합니다. 스토리지 볼륨을 생성한 후 게스트에 스토리지 장치를 추가할 수 있습니다.

13.3.2.1. virsh를 사용하여 스토리지 볼륨 생성

다음 중 하나를 수행합니다.
  • XML 파일을 사용하여 스토리지 볼륨을 정의합니다.
    a. 새 장치에 필요한 스토리지 볼륨 정보가 포함된 임시 XML 파일을 만듭니다.
    XML 파일에는 다음을 포함한 특정 필드가 포함되어야 합니다.
    • name - 스토리지 볼륨의 이름입니다.
    • 할당 - 스토리지 볼륨의 총 스토리지 할당
    • 용량 - 스토리지 볼륨의 논리 용량입니다. 볼륨이 스파스인 경우 이 값은 할당 값과 다를 수 있습니다.
    • target - 호스트 시스템의 스토리지 볼륨 경로 및 선택 옵션으로 권한 및 레이블입니다.
    다음은 스토리지 볼륨 정의 XML 파일의 예를 보여줍니다. 이 예에서는 파일이 ~/guest_volume.xml에 저장됩니다.
      <volume>
        <name>volume1</name>
        <allocation>0</allocation>
        <capacity>20G</capacity>
        <target>
          <path>/var/lib/virt/images/sparse.img</path>
        </target>
      </volume>
    
    b. virsh vol-create 명령을 사용하여 XML 파일을 기반으로 스토리지 볼륨을 생성합니다.
    # virsh vol-create guest_images_dir ~/guest_volume.xml
      Vol volume1 created
    
    c. 단계에서 만든 XML 파일을 삭제합니다.
  • virsh vol-create-as 명령을 사용하여 스토리지 볼륨을 만듭니다.
    # virsh vol-create-as guest_images_dir volume1 20GB --allocation 0
  • virsh vol-clone 명령을 사용하여 기존 스토리지 볼륨을 복제합니다. virsh vol-clone 명령은 복제할 스토리지 볼륨과 새로 생성된 스토리지 볼륨의 이름을 포함하는 스토리지 풀을 지정해야 합니다.
    # virsh vol-clone --pool guest_images_dir volume1 clone1

13.3.2.2. 가상 머신 관리자를 사용하여 스토리지 볼륨 생성

절차 13.11. 가상 머신 관리자를 사용하여 스토리지 볼륨 생성

  1. 스토리지 설정을 엽니다.

    1. 가상 머신 관리자에서 편집 메뉴를 열고 연결 세부 정보를 선택합니다.
    2. 연결 세부 정보 창에서 스토리지 탭을 클릭합니다.

      그림 13.11. 스토리지 탭

      스토리지 탭
      연결 세부 정보 창 왼쪽에 있는 창에는 스토리지 풀 목록이 표시됩니다.
  2. 스토리지 볼륨을 생성할 스토리지 풀을 선택합니다.

    스토리지 풀 목록에서 스토리지 볼륨을 생성할 스토리지 풀을 클릭합니다.
    선택한 스토리지 풀에 구성된 스토리지 볼륨이 창 하단에 있는 Volumes (볼륨) 창에 표시됩니다.
  3. 새 스토리지 볼륨 추가

    Volumes (볼륨) 목록 위에 있는 버튼을 클릭합니다. 스토리지 볼륨 추가 대화 상자가 나타납니다.

    그림 13.12. 스토리지 볼륨 생성

    스토리지 볼륨 생성
  4. 스토리지 볼륨 구성

    다음 매개 변수를 사용하여 스토리지 볼륨을 구성합니다.
    • 이름 필드에 스토리지 풀의 이름을 입력합니다.
    • 형식 목록에서 스토리지 볼륨의 형식 을 선택합니다.
    • Max Capacity (최대 용량) 필드에 스토리지 볼륨의 최대 크기를 입력합니다.
  5. 생성 완료

    완료를 클릭합니다. 스토리지 볼륨 추가 대화 상자가 닫히고 볼륨 목록에 스토리지 볼륨이 표시됩니다.

13.3.3. 스토리지 볼륨 보기

스토리지 풀에서 여러 스토리지 볼륨을 생성할 수 있습니다. virsh vol-list 명령을 사용하여 스토리지 풀의 스토리지 볼륨을 나열할 수도 있습니다. 다음 예에서 guest_images_disk 에는 세 개의 볼륨이 포함되어 있습니다.
virsh vol-create-as guest_images_disk volume1 8G
Vol volume1 created

# virsh vol-create-as guest_images_disk volume2 8G
Vol volume2 created

# virsh vol-create-as guest_images_disk volume3 8G
Vol volume3 created

# virsh vol-list guest_images_disk
Name                 Path
-----------------------------------------
volume1              /home/VirtualMachines/guest_images_dir/volume1
volume2              /home/VirtualMachines/guest_images_dir/volume2
volume3              /home/VirtualMachines/guest_images_dir/volume3

13.3.4. 데이터 관리

이 섹션에서는 스토리지 볼륨의 데이터 관리에 대한 정보를 제공합니다.
참고
일부 유형의 스토리지 볼륨은 모든 데이터 관리 명령을 지원하지 않습니다. 자세한 내용은 아래 섹션을 참조하십시오.

13.3.4.1. 스토리지 볼륨 삭제

스토리지 볼륨에 있는 데이터에 액세스할 수 없도록 virsh vol-wipe 명령을 사용하여 스토리지 볼륨을 제거할 수 있습니다.
virsh vol-wipe 명령을 사용하여 스토리지 볼륨 제거:
# virsh vol-wipe new-vol vdisk
기본적으로 데이터는 0으로 덮어씁니다. 그러나 스토리지 볼륨 삭제에 대해 지정할 수 있는 다양한 방법이 있습니다. virsh vol-wipe 명령에 대한 모든 옵션에 대한 자세한 내용은 20.32절. “스토리지 볼륨의 콘텐츠 삭제” 를 참조하십시오.

13.3.4.2. 스토리지 볼륨에 데이터 업로드

virsh vol-upload 명령을 사용하여 지정된 로컬 파일의 데이터를 스토리지 볼륨에 업로드할 수 있습니다.
# virsh vol-upload --pool pool-or-uuid --offset bytes --length bytes vol-name-or-key-or-path local-file
다음은 주요 virsh vol-upload 옵션입니다.
  • --pool pool-or-uuid - 볼륨이 있는 스토리지 풀의 이름 또는 UUID입니다.
  • gr-name-or-key-or-path - 업로드할 볼륨의 이름 또는 키 또는 경로입니다.
  • --offset 바이트: 데이터 쓰기를 시작할 스토리지 볼륨의 위치입니다.
  • --length length - 업로드할 데이터 양에 대한 상한입니다.
    참고
    local-file 이 지정된 --length 보다 크면 오류가 발생합니다.

예 13.1. 스토리지 볼륨에 데이터 업로드

# virsh vol-upload sde1 /tmp/data500m.empty disk-pool
이 예에서 sde1disk-pool 스토리지 풀의 볼륨입니다. /tmp/data500m.empty 의 데이터는 sde1 로 복사됩니다.

13.3.4.3. 스토리지 볼륨으로 데이터 다운로드

virsh vol-download 명령을 사용하여 스토리지 볼륨에서 지정된 로컬 파일로 데이터를 다운로드할 수 있습니다.
# vol-download --pool pool-or-uuid --offset bytes --length bytes vol-name-or-key-or-path local-file
다음은 주요 virsh vol-download 옵션입니다.
  • --pool pool-or-uuid - 볼륨이 있는 스토리지 풀의 이름 또는 UUID입니다.
  • gr-name-or-key-or-path - 다운로드할 볼륨의 이름, 키 또는 경로입니다.
  • --offset - 데이터 읽기를 시작할 스토리지 볼륨의 위치입니다.
  • --length length - 다운로드할 데이터 양에 대한 상한입니다.

예 13.2. 스토리지 볼륨에서 데이터 다운로드

# virsh vol-download sde1 /tmp/data-sde1.tmp disk-pool
이 예에서 sde1disk-pool 스토리지 풀의 볼륨입니다. sde1 의 데이터는 /tmp/data-sde1.tmp 로 다운로드됩니다.

13.3.4.4. 스토리지 볼륨 크기 조정

vol-resize 명령을 사용하여 지정된 스토리지 볼륨의 용량 크기를 조정할 수 있습니다.
# virsh vol-resize --pool pool-or-uuid vol-name-or-path pool-or-uuid capacity --allocate --delta --shrink
용량 은 바이트로 표시됩니다. 명령에는 볼륨이 있는 스토리지 풀의 이름 또는 UUID인 --pool pool-or-uuid 가 필요합니다. 또한 이 명령에는 크기를 조정할 볼륨의 이름, 키 또는 경로 , vol-name-or-key-or-path 가 필요합니다.
--allocate 을 지정하지 않으면 새 용량이 스파스일 수 있습니다. 일반적으로 용량은 새 크기이지만 --delta 가 있는 경우 기존 크기에 추가됩니다. --shrink 가 없으면 볼륨을 축소하려고 하면 실패합니다.
용량--shrink 가 제공되지 않고 음수가 필요하지 않습니다. 용량 은 접미사가 없는 경우 바이트로 기본 설정된 스케일링된 정수입니다. 또한 이 명령은 활성 게스트에서 사용하지 않는 스토리지 볼륨에 대해서만 안전합니다. 실시간 크기 조정은 20.13.3절. “게스트 가상 머신의 블록 장치의 크기 변경” 을 참조하십시오.

예 13.3. 스토리지 볼륨 크기 조정

예를 들어 50M 스토리지 볼륨을 생성한 경우 다음 명령을 사용하여 100M로 크기를 조정할 수 있습니다.
# virsh vol-resize --pool disk-pool sde1 100M

13.3.5. 스토리지 볼륨 삭제

virsh 또는 Virtual Machine Manager 를 사용하여 스토리지 볼륨을 삭제할 수 있습니다.
참고
삭제하려는 스토리지 볼륨을 사용하는 게스트 가상 머신에 부정적인 영향을 미치지 않으려면 이를 사용하여 리소스를 해제하는 것이 좋습니다.

13.3.5.1. virsh를 사용하여 스토리지 볼륨 삭제

virsh vol-delete 명령을 사용하여 스토리지 볼륨을 삭제합니다. 명령에서 스토리지 볼륨의 이름 또는 경로와 스토리지 볼륨이 요약된 스토리지 풀을 지정해야 합니다.
다음 예제는 guest_images_dir 스토리지 풀에서 volume_name 스토리지 볼륨을 삭제합니다.
# virsh vol-delete volume_name --pool guest_images_dir
  vol volume_name deleted

13.3.5.2. 가상 머신 관리자를 사용하여 스토리지 볼륨 삭제

절차 13.12. 가상 머신 관리자를 사용하여 스토리지 볼륨 삭제

  1. 스토리지 설정을 엽니다.

    1. 가상 머신 관리자에서 편집 메뉴를 열고 연결 세부 정보를 선택합니다.
    2. 연결 세부 정보 창에서 스토리지 탭을 클릭합니다.

      그림 13.13. 스토리지 탭

      스토리지 탭
      연결 세부 정보 창 왼쪽에 있는 창에는 스토리지 풀 목록이 표시됩니다.
  2. 삭제할 스토리지 볼륨을 선택합니다.

    1. 스토리지 풀 목록에서 스토리지 볼륨이 요약되는 스토리지 풀을 클릭합니다.
      선택한 스토리지 풀에 구성된 스토리지 볼륨 목록이 창 하단에 Volumes (볼륨) 창에 표시됩니다.
    2. 삭제할 스토리지 볼륨을 선택합니다.
  3. 스토리지 볼륨 삭제

    1. 버튼을 클릭합니다( 볼륨 목록 검토). 확인 대화 상자가 나타납니다.
    2. Yes 를 클릭합니다. 선택한 스토리지 볼륨이 삭제됩니다.

13.3.6. 게스트에 스토리지 장치 추가

virsh 또는 Virtual Machine Manager 를 사용하여 게스트 가상 머신에 스토리지 장치를 추가할 수 있습니다.

13.3.6.1. virsh를 사용하여 게스트에 스토리지 장치 추가

게스트 가상 머신에 스토리지 장치를 추가하려면 attach-disk 명령을 사용합니다. 추가할 디스크에 대한 정보가 포함된 인수는 XML 파일 또는 명령줄에 지정할 수 있습니다.
다음은 스토리지 정의가 있는 샘플 XML 파일입니다.
<disk type='file' device='disk>'>
  <driver name='qemu' type='raw' cache='none'/>
  <source file='/var/lib/libvirt/images/FileName.img'/>
  <target dev='vdb' bus='virtio'/>
</disk>
다음 명령은 NewStorage.xml 이라는 XML 파일을 사용하여 게스트1 에 디스크를 연결합니다.
# virsh attach-disk --config Guest1 ~/NewStorage.xml
다음 명령은 xml 파일을 사용하지 않고 게스트1 에 디스크를 연결합니다.
# virsh attach-disk --config Guest1 --source /var/lib/libvirt/images/FileName.img --target vdb

13.3.6.2. 가상 머신 관리자를 사용하여 게스트에 스토리지 장치 추가

게스트 가상 머신에 스토리지 볼륨을 추가하거나 게스트 가상 머신에 기본 스토리지 장치를 생성하고 추가할 수 있습니다.
13.3.6.2.1. 게스트에 스토리지 볼륨 추가
게스트 가상 머신에 스토리지 볼륨을 추가하려면 다음을 수행합니다.
  1. 가상 머신 하드웨어 세부 정보 창에 가상 머신 관리자를 엽니다.

    virt-manager 명령을 root로 실행하거나 애플리케이션시스템 도구가상 머신 관리자를 실행하여 virt-manager를 엽니다.

    그림 13.14. 가상 머신 관리자 창

    가상 머신 관리자 창
    스토리지 볼륨을 추가할 게스트 가상 머신을 선택합니다.
    열기를 클릭합니다. 가상 머신 창이 열립니다.
    을 클릭합니다. 하드웨어 세부 정보 창이 표시됩니다.

    그림 13.15. 하드웨어 세부 정보 창

    하드웨어 세부 정보 창
  2. 새 가상 하드웨어 추가 창을 엽니다.

    하드웨어 추가를 클릭합니다. Add New Virtual Hardware 창이 표시됩니다.
    하드웨어 유형 창에서 Storage 가 선택되었는지 확인합니다.

    그림 13.16. 새 가상 하드웨어 추가 창

    새 가상 하드웨어 추가 창
  3. 스토리지 볼륨 목록 보기

    Select or create custom storage 옵션 버튼을 선택합니다.
    관리를 클릭합니다. 스토리지 볼륨 선택 대화 상자가 나타납니다.

    그림 13.17. 스토리지 볼륨 선택 창

    스토리지 볼륨 선택 창
  4. 스토리지 볼륨 선택

    Select Storage Volume(스토리지 볼륨 선택) 창 왼쪽에 있는 목록에서 스토리지 풀을 선택합니다. 선택한 스토리지 풀의 스토리지 볼륨 목록이 Volumes 목록에 표시됩니다.
    참고
    스토리지 볼륨 선택 창에서 스토리지 풀을 생성할 수 있습니다. 자세한 내용은 13.2.2.2절. “가상 머신 관리자를 사용하여 스토리지 풀 생성”의 내용을 참조하십시오.
    Volumes (볼륨) 목록에서 스토리지 볼륨을 선택합니다.
    참고
    스토리지 볼륨 선택 창에서 스토리지 볼륨을 생성할 수 있습니다. 자세한 내용은 13.3.2.2절. “가상 머신 관리자를 사용하여 스토리지 볼륨 생성”의 내용을 참조하십시오.
    볼륨 선택을 클릭합니다. 스토리지 볼륨 선택 창은 닫힙니다.
  5. 스토리지 볼륨 구성

    장치 유형 목록에서 장치 유형을 선택합니다. 사용 가능한 유형은 다음과 같습니다. 디스크 장치, Floppy 장치 및 LUN 통과.
    버스 유형 목록에서 버스 유형을 선택합니다. 사용 가능한 버스 유형은 선택한 장치 유형에 따라 다릅니다.
    캐시 모드 목록에서 캐시 모드를 선택합니다. 사용 가능한 캐시 모드는 다음과 같습니다. 하이퍼바이저 기본, none, writethrough, writeback, directsync, unsafe
    완료를 클릭합니다. 새 가상 하드웨어 추가 창이 닫힙니다.
13.3.6.2.2. 게스트에 기본 스토리지 추가
기본 스토리지 풀은 /var/lib/libvirt/images/ 디렉터리의 파일 기반 이미지입니다.
게스트 가상 머신에 기본 스토리지를 추가하려면 다음을 수행합니다.
  1. 가상 머신 하드웨어 세부 정보 창에 가상 머신 관리자를 엽니다.

    virt-manager 명령을 root로 실행하거나 애플리케이션시스템 도구가상 머신 관리자를 실행하여 virt-manager를 엽니다.

    그림 13.18. 가상 머신 관리자 창

    가상 머신 관리자 창
    스토리지 볼륨을 추가할 게스트 가상 머신을 선택합니다.
    열기를 클릭합니다. 가상 머신 창이 열립니다.
    을 클릭합니다. 하드웨어 세부 정보 창이 표시됩니다.

    그림 13.19. 하드웨어 세부 정보 창

    하드웨어 세부 정보 창
  2. 새 가상 하드웨어 추가 창을 엽니다.

    하드웨어 추가를 클릭합니다. Add New Virtual Hardware 창이 표시됩니다.
    하드웨어 유형 창에서 Storage 가 선택되었는지 확인합니다.

    그림 13.20. 새 가상 하드웨어 추가 창

    새 가상 하드웨어 추가 창
  3. 게스트용 디스크 만들기

    가상 머신의 디스크 이미지 생성 옵션을 확인합니다.
    가상 머신의 디스크 이미지 만들기 버튼 아래에 텍스트 상자에 생성할 디스크 크기를 입력합니다.
    완료를 클릭합니다. 새 가상 하드웨어 추가 창이 닫힙니다.

13.3.6.3. 게스트에 SCSI LUN 기반 스토리지 추가

호스트 SCSI LUN을 전체적으로 게스트에 노출하는 방법은 여러 가지가 있습니다. SCSI LUN을 게스트에 노출하면 게스트의 LUN에 SCSI 명령을 직접 실행할 수 있습니다. 이는 게스트 간에 LUN을 공유하고 호스트 간에 파이버 채널 스토리지를 공유하는 수단으로 유용합니다.
SCSI LUN 기반 스토리지에 대한 자세한 내용은 SCSI 장치를 사용하는 vHBA 기반 스토리지 풀을 참조하십시오.
중요
선택 사항인 sgio 속성은 device='lun' 디스크에 대해 권한이 없는 SCSI 일반 I/O(SG_IO) 명령이 필터링되는지 여부를 제어합니다. sgio 특성은 'filtered' 또는 'filtered' 로 지정할 수 있지만 영구 예약 의 게스트를 통해 SG_IO ioctl 명령을 전달할 수 있도록 '필터되지 않음 '으로 설정해야 합니다.
sgio='unfiltered' 를 설정하는 것 외에도 게스트 간에 LUN을 공유하도록 <shareable> 요소를 설정해야 합니다. 지정되지 않은 경우 sgio 속성은 기본적으로 'filtered' 로 설정됩니다.
<disk> XML 특성 device='lun' 은 다음 게스트 디스크 구성에 유효합니다.
  • type='block' for <source dev='/dev/disk/by-{path|id|uuid|label}'/>
    <disk type='block' device='lun' sgio='unfiltered'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/disk/by-path/pci-0000\:04\:00.1-fc-0x203400a0b85ad1d7-lun-0'/>
      <target dev='sda' bus='scsi'/>
      <shareable/>
    </disk>
    참고
    <source> 장치 이름의 콜론 앞에 백슬래시가 필요합니다.
  • type='network' for <source protocol='iscsi'... />
    <disk type='network' device='lun' sgio='unfiltered'>
      <driver name='qemu' type='raw'/>
      <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-net-pool/1'>
        <host name='example.com' port='3260'/>
        <auth username='myuser'>
          <secret type='iscsi' usage='libvirtiscsi'/>
        </auth>
      </source>
      <target dev='sda' bus='scsi'/>
      <shareable/>
    </disk>
  • iSCSI 또는 NPIV/vHBA 소스 풀을 SCSI 소스 풀로 사용하는 경우 type='volume' 입니다.
    다음 예제 XML에서는 iSCSI 소스 풀(예: iscsi-net-pool)을 SCSI 소스 풀로 사용하는 게스트를 보여줍니다.
    <disk type='volume' device='lun' sgio='unfiltered'>
      <driver name='qemu' type='raw'/>
      <source pool='iscsi-net-pool' volume='unit:0:0:1' mode='host'/>
      <target dev='sda' bus='scsi'/>
      <shareable/>
    </disk>
    참고
    <source> 태그 내의 mode= 옵션은 선택 사항이지만, 사용하는 경우 'host'가 'direct' 가 아닌 'host' 로 설정해야 합니다. 'host' 로 설정하면 libvirt에서 로컬 호스트에서 장치 경로를 찾습니다. 'direct' 로 설정하면 libvirt에서 소스 풀의 소스 호스트 데이터를 사용하여 장치 경로를 생성합니다.
    위 예제의 iSCSI 풀(iscsi-net-pool)에는 다음과 유사한 구성이 있습니다.
    # virsh pool-dumpxml iscsi-net-pool
    <pool type='iscsi'>
      <name>iscsi-net-pool</name>
      <capacity unit='bytes'>11274289152</capacity>
      <allocation unit='bytes'>11274289152</allocation>
      <available unit='bytes'>0</available>
      <source>
        <host name='192.168.122.1' port='3260'/>
        <device path='iqn.2013-12.com.example:iscsi-chap-netpool'/>
        <auth type='chap' username='redhat'>
          <secret usage='libvirtiscsi'/>
        </auth>
      </source>
      <target>
        <path>/dev/disk/by-path</path>
        <permissions>
          <mode>0755</mode>
        </permissions>
      </target>
    </pool>
    iSCSI 소스 풀에서 사용 가능한 LUN의 세부 정보를 확인하려면 다음 명령을 입력합니다.
    # virsh vol-list iscsi-net-pool
    Name                 Path
    ------------------------------------------------------------------------------
    unit:0:0:1           /dev/disk/by-path/ip-192.168.122.1:3260-iscsi-iqn.2013-12.com.example:iscsi-chap-netpool-lun-1
    unit:0:0:2           /dev/disk/by-path/ip-192.168.122.1:3260-iscsi-iqn.2013-12.com.example:iscsi-chap-netpool-lun-2
  • NPIV/vHBA 소스 풀을 SCSI 소스 풀로 사용하는 경우 type='volume' 입니다.
    다음 예제 XML에서는 NPIV/vHBA 소스 풀(이름 vhbapool_host3)을 SCSI 소스 풀로 사용하는 게스트를 보여줍니다.
    <disk type='volume' device='lun' sgio='unfiltered'>
      <driver name='qemu' type='raw'/>
      <source pool='vhbapool_host3' volume='unit:0:1:0'/>
      <target dev='sda' bus='scsi'/>
      <shareable/>
    </disk>
    위 예제의 NPIV/vHBA 풀(vhbapool_host3)에는 다음과 유사한 구성이 있습니다.
    # virsh pool-dumpxml vhbapool_host3
    <pool type='scsi'>
      <name>vhbapool_host3</name>
      <capacity unit='bytes'>0</capacity>
      <allocation unit='bytes'>0</allocation>
      <available unit='bytes'>0</available>
      <source>
        <adapter type='fc_host' parent='scsi_host3' managed='yes' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee045d'/>
      </source>
      <target>
        <path>/dev/disk/by-path</path>
        <permissions>
          <mode>0700</mode>
          <owner>0</owner>
          <group>0</group>
        </permissions>
      </target>
    </pool>
    vHBA에서 사용 가능한 LUN의 세부 정보를 확인하려면 다음 명령을 입력합니다.
    # virsh vol-list vhbapool_host3
    Name                 Path
    ------------------------------------------------------------------------------
    unit:0:0:0           /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0
    unit:0:1:0           /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016844602198-lun-0
    SCSI 장치에서 NPIV vHBA를 사용하는 방법에 대한 자세한 내용은 13.2.3.8절. “SCSI 장치를 사용하는 vHBA 기반 스토리지 풀” 을 참조하십시오.
다음 절차에서는 SCSI LUN 기반 스토리지 장치를 게스트에 추가하는 방법을 보여줍니다. 위의 <disk device='lun'> 게스트 디스크 구성 중 하나를 이 방법으로 연결할 수 있습니다. 환경에 따라 구성을 대체합니다.

절차 13.13. 게스트에 SCSI LUN 기반 스토리지 연결

  1. 새 파일에 <disk> 요소를 작성하여 장치 파일을 생성하고 XML 확장자(이 예에서는 sda.xml)를 사용하여 이 파일을 저장합니다.
    # cat sda.xml
    <disk type='volume' device='lun' sgio='unfiltered'>
      <driver name='qemu' type='raw'/>
      <source pool='vhbapool_host3' volume='unit:0:1:0'/>
      <target dev='sda' bus='scsi'/>
      <shareable/>
    </disk>
  2. sda.xml 에서 생성된 장치를 게스트 가상 시스템과 연결합니다(예:Guest1 ).
    # virsh attach-device --config Guest1 ~/sda.xml
    참고
    --config 옵션을 사용하여 virsh attach-device 명령을 실행하려면 게스트를 다시 부팅하여 게스트에 영구적으로 장치를 추가해야 합니다. 또는 게스트에 장치를 핫플러그하는 데 사용할 수도 있는 --config 대신 --persistent 옵션을 사용할 수 있습니다.
또는 virt-manager 를 사용하여 게스트에서 SCSI LUN 기반 스토리지를 연결하거나 구성할 수 있습니다. virt-manager 를 사용하여 이를 구성하려면 하드웨어 추가 버튼을 클릭하고 필수 매개 변수가 있는 가상 디스크를 추가하거나 이 창에서 기존 SCSI LUN 장치의 설정을 변경합니다. Red Hat Enterprise Linux 7.2 이상에서는 virt-manager 에서 SGIO 값을 구성할 수도 있습니다.

그림 13.21. virt-manager를 사용하여 SCSI LUN 스토리지 구성

virt-manager를 사용하여 SCSI LUN 스토리지 구성

하드웨어 장애 후 노출된 LUN에 다시 연결

하드웨어(예: 호스트 버스 어댑터) 오류가 발생하여 노출된 파이버 채널(FC) LUN에 대한 연결이 손실된 경우 게스트의 노출된 LUN은 하드웨어 오류가 수정된 후에도 계속 실패할 수 있습니다. 이를 방지하려면 dev_loss_tmofast_io_fail_tmo 커널 옵션을 편집합니다.
  • dev_loss_tmo 는 SCSI 장치가 실패하는 후 실패한 것으로 표시하기 전에 SCSI 계층을 대기하는 시간을 제어합니다. 시간 제한을 방지하려면 옵션을 2147483647 인 최대 값으로 설정하는 것이 좋습니다.
  • fast_io_fail_tmo 는 I/O로 실패하기 전에 SCSI 장치가 실패한 후 SCSI 계층을 대기하는 시간을 제어합니다. 커널에서 dev_loss_tmo 를 무시하지 않도록 하려면 이 옵션의 값을 dev_loss_tmo 값보다 낮은 수로 설정합니다.
dev_loss_tmofast_io_fail 값을 수정하려면 다음 중 하나를 수행합니다.
  • /etc/multipath.conf 파일을 편집하고 defaults 섹션에 값을 설정합니다.
    defaults {
    ...
    fast_io_fail_tmo     20
    dev_loss_tmo    infinity
    }
    
  • 다음과 같이 FC 호스트 또는 원격 포트 수준에서 dev_loss_tmofast_io_fail 를 설정합니다.
    # echo 20 > /sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/fast_io_fail_tmo
    # echo 2147483647 > /sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/dev_loss_tmo
dev_loss_tmofast_io_fail 의 새 값이 활성화되었는지 확인하려면 다음 명령을 사용합니다.
# find /sys -name dev_loss_tmo -print -exec cat {} \;
매개변수가 올바르게 설정된 경우 출력은 pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_port-1:0-0:0-0:0-0/fc_remote_port-1:0-0: 대신 적절한 장치 또는 장치를 사용하여 이 값과 유사합니다.
# find /sys -name dev_loss_tmo -print -exec cat {} \;
...
/sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/dev_loss_tmo
2147483647
...

13.3.6.4. 게스트 가상 머신에서 스토리지 컨트롤러 관리

virtio 디스크와 달리 SCSI 장치에는 게스트 가상 시스템에 컨트롤러가 있어야 합니다. 이 섹션에서는 가상 SCSI 컨트롤러(호스트 버스 어댑터라고도 함)를 생성하고 게스트 가상 머신에 SCSI 스토리지를 추가하는 데 필요한 단계를 자세히 설명합니다.

절차 13.14. 가상 SCSI 컨트롤러 생성

  1. 게스트 가상 머신(Guest1)의 구성을 표시하고 기존 SCSI 컨트롤러를 찾습니다.
    virsh dumpxml Guest1 | grep controller.*scsi
    장치 컨트롤러가 있는 경우 명령은 다음과 유사한 하나 이상의 행을 출력합니다.
    <controller type='scsi' model='virtio-scsi' index='0'/>
    
  2. 이전 단계에서 장치 컨트롤러가 표시되지 않은 경우 다음 단계를 사용하여 새 파일에 하나에 대한 설명을 생성하여 가상 머신에 추가합니다.
    1. 새 파일에 <controller> 요소를 작성하여 장치 컨트롤러를 생성하고 XML 확장자를 사용하여 이 파일을 저장합니다. 예를 들어 virtio-scsi-controller.xml.
      <controller type='scsi' model='virtio-scsi'/>
      
    2. virtio-scsi-controller.xml 에서 생성한 장치 컨트롤러를 게스트 가상 머신(예: Guest1,)과 연결합니다.
      virsh attach-device --config Guest1 ~/virtio-scsi-controller.xml
      이 예에서 --config 옵션은 디스크에 대해 수행하는 것과 동일하게 작동합니다. 자세한 내용은 13.3.6절. “게스트에 스토리지 장치 추가”를 참조하십시오.
  3. 새 SCSI 디스크 또는 CD-ROM을 추가합니다. 새 디스크는 13.3.6절. “게스트에 스토리지 장치 추가” 의 방법을 사용하여 추가할 수 있습니다. SCSI 디스크를 생성하려면 sd 로 시작하는 대상 장치 이름을 지정합니다.
    참고
    각 컨트롤러에 대해 지원되는 제한은 1024 virtio-scsi 디스크이지만 호스트에서 사용 가능한 다른 리소스(예: 파일 설명자)가 디스크가 더 소모될 수 있습니다.
    자세한 내용은 다음 Red Hat Enterprise Linux 6 백서를 참조하십시오. Red Hat Enterprise Linux Kernel Virtual Machine용 차세대 스토리지 인터페이스: virtio-scsi.
    virsh attach-disk Guest1 /var/lib/libvirt/images/FileName.img sdb --cache none
    게스트 가상 머신의 드라이버 버전에 따라 실행 중인 게스트 가상 머신에서 새 디스크를 즉시 탐지하지 못할 수 있습니다. Red Hat Enterprise Linux Storage 관리 가이드 의 단계를 따르십시오.

13.3.7. 게스트에서 스토리지 장치 제거

virsh 또는 Virtual Machine Manager 를 사용하여 가상 게스트 시스템에서 스토리지 장치를 제거할 수 있습니다.

13.3.7.1. virsh를 사용하여 가상 머신에서 스토리지 제거

다음 예제에서는 Guest1 가상 시스템에서 pxe 스토리지 볼륨을 제거합니다.
# virsh detach-disk Guest1 vdb

13.3.7.2. 가상 머신 관리자를 사용하여 가상 머신에서 스토리지 제거

절차 13.15. 가상 머신 관리자를 사용하여 가상 머신에서 스토리지 제거

가상 머신 관리자를 사용하여 게스트 가상 머신에서 스토리지를 제거하려면 다음을 수행합니다.
  1. 가상 머신 하드웨어 세부 정보 창에 가상 머신 관리자를 엽니다.

    virt-manager 명령을 root로 실행하거나 애플리케이션시스템 도구가상 머신 관리자를 실행하여 virt-manager를 엽니다.
    스토리지 장치를 제거할 게스트 가상 머신을 선택합니다.
    열기를 클릭합니다. 가상 머신 창이 열립니다.
    을 클릭합니다. 하드웨어 세부 정보 창이 표시됩니다.
  2. 게스트 가상 머신에서 스토리지 제거

    하드웨어 세부 정보 창 왼쪽에 있는 하드웨어 목록에서 스토리지 장치를 선택합니다.
    제거를 클릭합니다. 확인 대화 상자가 나타납니다.
    Yes 를 클릭합니다. 게스트 가상 머신에서 스토리지가 제거되었습니다.

14장. qemu-img 사용

qemu-img 명령줄 도구는 KVM. qemu-img 옵션 및 사용법에서 사용하는 다양한 파일 시스템을 포맷, 수정 및 확인하는 데 사용됩니다. 다음 섹션에는 이 옵션이 강조 표시됩니다.
주의
qemu-img 를 사용하여 실행 중인 가상 머신 또는 기타 프로세스에서 사용 중인 이미지를 수정하지 마십시오. 이미지를 삭제할 수 있습니다. 또한 다른 프로세스에서 수정 중인 이미지를 쿼리하는 경우 일관되지 않은 상태가 발생할 수 있습니다.

14.1. 디스크 이미지 확인

파일 이름이 imgname 인 디스크 이미지에서 일관성 검사를 수행하려면 다음을 수행합니다.
# qemu-img check [-f format] imgname
참고
선택한 형식의 그룹만 일관성 검사를 지원합니다. 여기에는 qcow2,vdi,vhdx,vmdk, qed 가 포함됩니다.

14.2. 이미지에 변경 사항 커밋

지정된 이미지 파일(imgname)에 기록된 모든 변경 사항을 qemu-img 커밋 명령으로 파일의 기본 이미지에 커밋합니다. 선택적으로 파일의 형식 유형(fmt)을 지정합니다.
 # qemu-img commit [-f fmt] [-t cache] imgname

14.3. 이미지 비교

지정된 두 개의 이미지 파일(imgname1imgname2)의 콘텐츠를 qemu-img compare 명령과 비교합니다. 선택적으로 파일의 형식 유형(fmt)을 지정합니다. 이미지에는 다른 형식 및 설정이 있을 수 있습니다.
기본적으로 크기가 다른 이미지는 다른 이미지가 종료된 후 해당 영역에 할당되지 않은 섹터 또는 제로된 섹터만 포함하는 경우 동일하게 간주됩니다. 또한 하나의 이미지에 섹터가 할당되지 않고 다른 이미지에서 0바이트만 포함된 경우 동일한 값으로 평가됩니다. -s 옵션을 지정하면 이미지 크기가 다르거나 한 이미지에 섹터가 할당되어 두 번째 이미지에 할당되지 않은 경우 이미지가 동일하게 간주되지 않습니다.
 # qemu-img compare [-f fmt] [-F fmt] [-p] [-s] [-q] imgname1 imgname2
qemu-img compare 명령은 다음 종료 코드 중 하나로 종료됩니다.
  • 0 - 이미지가 동일
  • 1 - 이미지가 다릅니다.
  • 2 - 이미지 중 하나를 여는 동안 오류가 발생했습니다.
  • 3 - 섹터 할당을 확인하는 동안 오류가 발생했습니다.
  • 4 - 데이터를 읽는 동안 오류가 발생했습니다.

14.4. 이미지 매핑

qemu-img map 명령을 사용하여 지정된 이미지 파일(imgname) 및 해당 백업 파일 체인의 메타데이터를 덤프할 수 있습니다. 덤프는 (imgname) 백업 파일 체인에서 이를 할당하는 가장 높은 파일의 모든 섹터의 할당 상태를 표시합니다. 선택적으로 파일의 형식 유형(fmt)을 지정합니다.
 # qemu-img map [-f fmt] [--output=fmt] imgname
human 형식 및 json 형식에는 다음 두 가지 출력 형식이 있습니다.

14.4.1. <인명 형식 >

기본 형식(human)은 0이 아닌 파일 부분만 덤프합니다. 출력은 데이터를 읽을 수 있는 위치와 파일의 오프셋을 식별합니다. 각 행에는 네 개의 필드가 있습니다. 다음은 출력의 예입니다.
Offset          Length          Mapped to       File
0               0x20000         0x50000         /tmp/overlay.qcow2
0x100000        0x10000         0x95380000      /tmp/backing.qcow2
첫 번째 줄은 이미지 오프셋 0에서 시작되는 0x20000 (131072) 바이트가 오프셋 0x50000 (327680)에서 시작되는 tmp /overlay.qcow2( raw format)에서 사용 가능함을 의미합니다. 원시 형식에서 압축, 암호화 또는 사용할 수 없는 데이터는 사람이 지정되는 경우 오류가 발생합니다.
참고
파일 이름은 줄 바꿈 문자를 포함할 수 있습니다. 따라서 스크립트의 사람이 형식으로 출력을 구문 분석하는 것은 안전하지 않습니다.

14.4.2. json 형식

json 옵션이 지정되면 출력은 JSON 형식으로 사전 배열을 반환합니다. human 옵션에 제공된 정보 외에도 출력에는 다음 정보가 포함됩니다.
  • Data - 섹터에 데이터를 포함할지 여부를 표시하는 부울 필드입니다.
  • 0 - 데이터가 0으로 읽히도록 알려진지 여부를 표시하는 부울 필드입니다.
  • depth - 파일 이름의 백업 파일의 깊이
참고
json 옵션을 지정하면 offset 필드가 선택 사항입니다.
qemu-img map 명령 및 추가 옵션에 대한 자세한 내용은 관련 도움말 페이지를 참조하십시오.

14.5. 이미지 수정

이미지 파일의 이미지 형식별 옵션을 수정합니다. 선택적으로 파일의 형식 유형(fmt)을 지정합니다.
# qemu-img amend [-p] [-f fmt] [-t cache] -o options filename
참고
이 작업은 qcow2 파일 형식에 대해서만 지원됩니다.

14.6. 기존 이미지를 다른 형식으로 변환

변환 옵션은 인식되는 하나의 이미지 형식을 다른 이미지 형식으로 변환하는 데 사용됩니다. 허용되는 형식 목록은 14.12절. “지원되는 qemu-img 형식” 을 참조하십시오.
# qemu-img convert [-c] [-p] [-f fmt] [-t cache] [-O output_fmt] [-o options] [-S sparse_size] filename output_filename
p 매개 변수는 명령의 진행률(선택 사항)을 표시하고 -S 플래그를 사용하면 디스크 이미지에 포함된 스파스 파일을 만들 수 있습니다. 스파스 파일은 0만 포함된 물리 블록(즉, 아무것도 없음)을 제외하고 모든 용도의 표준 파일처럼 작동합니다. 운영 체제가 이 파일을 볼 때 실제로는 아무 것도 사용하지 않는 경우에도 존재하는 것으로 취급하고 실제 디스크 공간을 차지합니다. 게스트 가상 머신에 대한 디스크를 생성할 때 특히 유용합니다. 이렇게 하면 디스크가 훨씬 많은 디스크 공간을 차지할 수 있습니다. 예를 들어 10Gb의 디스크 이미지에서 -S를 50Gb로 설정하면 10Gb 만 사용되더라도 10Gb의 디스크 공간 크기는 60Gb로 표시됩니다.
output_format 형식 사용하여 디스크 이미지 파일 이름을 디스크 이미지 output_filename 으로 변환합니다. 디스크 이미지는 선택적으로 -c 옵션으로 압축하거나 -o 옵션으로 암호화할 수 있습니다. -o encryption -o 매개 변수와 함께 사용할 수 있는 옵션은 선택한 형식과 다릅니다.
qcow2qcow2 형식만 암호화 또는 압축을 지원합니다. qcow2 암호화는 보안 128비트 키가 있는 AES 형식을 사용합니다. qcow2 압축은 qcow2 형식에서 변환되는 경우 압축되지 않은 데이터로 새 형식으로 작성됩니다.
이미지 변환은 qcow 또는 와 같이 증가할 수 있는 형식을 사용할 때 작은 이미지를 가져오는 데도 유용합니다. 빈 섹터가 감지되어 대상 이미지에서 억제됩니다.

14.7. 새 이미지 또는 장치 생성 및 포맷

크기 및 형식 형식새 디스크 이미지 파일 이름을 만듭니다.
# qemu-img create [-f format] [-o options] filename [size]
기본 이미지가 -o backing_file=filename 로 지정되면 이미지는 자체와 기본 이미지 간의 차이점만 기록합니다. commit 명령을 사용하지 않는 한 백업 파일은 수정되지 않습니다. 이 경우 크기를 지정할 필요가 없습니다.

14.8. 이미지 정보 표시

info 매개 변수는 디스크 이미지 파일 이름에 대한 정보를 표시합니다. info 옵션의 형식은 다음과 같습니다.
# qemu-img info [-f format] filename
이 명령은 종종 표시된 크기와 다를 수 있는 디스크에 예약된 크기를 검색하는 데 사용됩니다. 스냅샷이 디스크 이미지에 저장된 경우 해당 스냅샷도 표시됩니다. 예를 들어 이 명령은 블록 장치의 qcow2 이미지에 의해 수행되는 공간 크기를 보여줍니다. 이 작업은 qemu-img 를 실행하여 수행합니다. 사용 중인 이미지가 qemu-img info 명령 출력과 일치하는 이미지이며 qemu-img check 명령과 함께 확인할 수 있습니다.
# qemu-img info /dev/vg-90.100-sluo/lv-90-100-sluo
image: /dev/vg-90.100-sluo/lv-90-100-sluo
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 0
cluster_size: 65536

14.9. 이미지 백업 파일 복원

qemu-img 가 이미지의 백업 파일을 변경합니다.
# qemu-img rebase [-f fmt] [-t cache] [-p] [-u] -b backing_file [-F backing_fmt] filename
백업 파일이 backing_file 로 변경되고 ( 파일 이름에서 기능을 지원하는 경우) 백업 파일 형식이 backing_format 로 변경됩니다.
참고
qcow2 형식만 백업 파일 변경을 지원합니다(base).
리베이스 가 작동 할 수있는 두 가지 모드가 있습니다 : 안전안전하지 않은.
안전 모드는 기본적으로 사용되며 실제 업데이트 작업을 수행합니다. 새로운 백업 파일은 이전 버전과 다를 수 있으며 qemu-img rebase 명령은 게스트 가상 머신으로 표시되는 파일 이름의 콘텐츠를 변경되지 않은 상태로 유지합니다. 이를 위해 백업 파일을 변경하기 전에 backing_file 과 이전 파일 이름의 이전 백업 파일이 파일 이름으로 병합됩니다.
안전 모드는 비용이 많이 드는 작업이며 이미지를 변환하는 것과 유사합니다. 성공적으로 완료하려면 이전 백업 파일이 필요합니다.
-u 옵션이 qemu-img 재베이스 에 전달되는 경우 unsafe 모드가 사용됩니다. 이 모드에서는 파일 콘텐츠에 대한 검사를 수행하지 않고 백업 파일 이름 및 파일 이름의 형식만 변경됩니다. 새 백업 파일이 올바르게 지정되었거나 이미지의 게스트 표시 콘텐츠가 손상되는지 확인합니다.
이 모드는 백업 파일의 이름을 변경하거나 이동하는 데 유용합니다. 액세스 가능한 이전 백업 파일 없이 사용할 수 있습니다. 예를 들어 백업 파일이 이미 이동되었거나 이름이 변경된 이미지를 수정하는 데 사용할 수 있습니다.

14.10. 디스크 이미지 다시 크기 조정

크기가 지정된 것처럼 디스크 이미지 파일 이름을 변경합니다. raw 형식의 이미지만 방향 모두에서 크기를 조정할 수 있지만 qcow2 이미지를 늘릴 수는 있지만 축소할 수는 없습니다.
다음을 사용하여 디스크 이미지 파일 이름의 크기를 크기 바이트로 설정합니다.
# qemu-img resize filename size
디스크 이미지의 현재 크기에 따라 크기를 조정할 수도 있습니다. 현재 크기를 기준으로 크기를 지정하려면 바이트 수를 + 로 접두사로 지정하거나 디스크 이미지의 크기를 해당 바이트 수로 줄입니다. 단위 접미사를 추가하면 이미지 크기를 킬로바이트(K), 메가바이트(M), 기가바이트(G) 또는 테라바이트(T)로 설정할 수 있습니다.
# qemu-img resize filename [+|-]size[K|M|G|T]
주의
이 명령을 사용하여 디스크 이미지를 축소하기 전에 할당된 파일 시스템 및 파티션 크기를 적절하게 줄이기 위해 VM 자체 내에서 파일 시스템 및 파티셔닝 툴을 사용해야 합니다. 이렇게 하지 않으면 데이터 손실이 발생합니다.
이 명령을 사용하여 디스크 이미지를 확장한 후 VM 내부의 파일 시스템과 파티셔닝 툴을 사용하여 실제로 장치의 새 공간을 사용해야 합니다.

14.11. 스냅샷 나열, 생성, 적용 및 삭제

qemu-img 스냅샷 명령의 다른 매개변수를 사용하여 지정된 이미지(파일 이름)의 기존스냅샷(스냅샷 )을 나열, 적용, 생성 또는 삭제할 수 있습니다.
# qemu-img snapshot [ -l | -a snapshot | -c snapshot | -d snapshot ] filename
허용되는 인수는 다음과 같습니다.
  • - L은 지정된 디스크 이미지와 연결된 모든 스냅샷을 나열합니다.
  • apply 옵션 -a, 디스크 이미지(파일 이름)를 이전에 저장된 스냅샷 의 상태로 되돌립니다.
  • - C는 이미지의스냅샷(스냅샷)을 생성합니다(파일 이름).
  • - D는 지정된 스냅샷을 삭제합니다.

14.12. 지원되는 qemu-img 형식

형식이 qemu-img 명령에 지정되는 경우 다음 형식 유형이 사용될 수 있습니다.
  • Raw - Raw 디스크 이미지 형식(기본값). 가장 빠른 파일 기반 형식일 수 있습니다. 파일 시스템이 홀을 지원하는 경우(예: ext2 또는 ext3 에서는) 기록된 섹터만 공간을 예약합니다. qemu-img info 를 사용하여 Unix/Linux에서 이미지 또는 ls -ls 에서 사용하는 실제 크기를 가져옵니다. 원시 이미지는 최적의 성능을 제공하지만 원시 이미지에서 매우 기본적인 기능만 사용할 수 있습니다. 예를 들어 사용 가능한 스냅샷이 없습니다.
  • qcow2 - QEMU 이미지 형식, 최상의 기능 세트가 있는 가장 다양한 형식입니다. 이 파일을 사용하여 선택적 AES 암호화, zlib 기반 압축, 여러 VM 스냅샷 지원, 작은 이미지를 사용합니다. 이 이미지는 파일 시스템 에서 유용합니다. 이 확장 기능 세트는 성능 비용으로 제공됩니다.
    위의 형식만 게스트 가상 머신 또는 호스트 물리적 시스템에서 실행할 수 있지만 qemu-img원시 또는 qcow2 형식으로 변환하기 위해 다음 형식도 인식하고 지원합니다. 일반적으로 이미지 형식이 자동으로 감지됩니다. 이러한 형식을 raw 또는 qcow2 로 변환하는 것 외에도 raw 또는 qcow2 에서 원래 형식으로 다시 변환할 수 있습니다. Red Hat Enterprise Linux 7에 제공되는 qcow2 버전은 1.1입니다. 이전 버전의 Red Hat Enterprise Linux와 함께 제공되는 형식은 0.10입니다. qcow2의 이전 버전으로 이미지 파일을 되돌릴 수 있습니다. 사용 중인 버전을 확인하려면 qemu-img info qcow2 [imagefilename.img] 명령을 실행합니다. qcow 버전을 변경하려면 23.19.2절. “대상 요소 설정” 를 참조하십시오.
  • Bochs - 디스크 이미지 형식입니다.
  • cloop - Linux Compressed 루프 이미지, 예를 들어 Knoppix CD-ROM에 있는 직접 압축된 CD-ROM 이미지를 재사용하는 데 유용합니다.
  • 포드 - 사용자 모드 Linux Copy On Write 이미지 형식입니다. 소소 형식은 이전 버전과의 호환성을 위해서만 포함되어 있습니다.
  • DMG - Mac 디스크 이미지 형식입니다.
  • NB D - 네트워크 블록 장치.
  • 병렬 - 병렬 가상화 디스크 이미지 형식입니다.
  • QCOW - Old QEMU 이미지 형식입니다. 이전 버전과의 호환성을 위해서만 포함됩니다.
  • QED - Old QEMU 이미지 형식입니다. 이전 버전과의 호환성을 위해서만 포함됩니다.
  • VDI - Oracle VMoctets 하드 디스크 이미지 형식입니다.
  • VHDX - Microsoft Hyper-V 가상 디스크 이미지 형식입니다.
  • VMDK - VMware 3 및 4 호환 이미지 형식입니다.
  • vvfat - Virtual VFAT 디스크 이미지 형식입니다.

15장. KVM 마이그레이션

이 장에서는 KVM 하이퍼바이저를 다른 호스트로 실행하는 하나의 호스트 물리적 머신의 마이그레이션 게스트 가상 머신에 대해 설명합니다. 가상 머신이 하드웨어에서 직접 실행되는 대신 가상화된 환경에서 실행되므로 게스트 마이그레이션이 가능합니다.

15.1. 마이그레이션 정의 및 이점

마이그레이션은 게스트 가상 머신의 메모리 및 모든 가상화된 장치를 대상 호스트 물리적 시스템으로 전송하여 작동합니다. 마이그레이션할 게스트의 이미지를 저장하기 위해 공유 네트워크 스토리지를 사용하는 것이 좋습니다. 또한 가상 머신을 마이그레이션할 때 공유 스토리지에 libvirt 관리 스토리지 풀을 사용하는 것이 좋습니다.
실시간 (실행 중) 및 비실시간 게스트로 마이그레이션을 수행할 수 있습니다.
실시간 마이그레이션 에서는 게스트의 메모리 페이지가 대상 호스트 시스템으로 전송되는 동안 게스트 가상 머신이 소스 호스트 시스템에서 계속 실행됩니다. 마이그레이션 중에 KVM은 소스에서 이미 전송된 페이지의 변경 사항을 모니터링하고 모든 초기 페이지가 전송되면 이러한 변경 사항을 전송하기 시작합니다. 또한 KVM은 마이그레이션 중에 전송 속도를 추정하므로 전송 속도가 설정 가능한 특정 시간 (10ms)에 도달하면 KVM은 원래 게스트 가상 머신을 중단하고 나머지 데이터를 전송하고, 대상 호스트 물리적 머신에서 동일한 게스트 가상 머신을 다시 시작합니다.
반면 실시간 마이그레이션(오프라인 마이그레이션 )은 게스트 가상 머신을 일시 중지한 다음 게스트의 메모리를 대상 호스트 시스템에 복사합니다. 그런 다음 대상 호스트 시스템에서 게스트가 다시 시작되고 소스 호스트 시스템에서 사용된 게스트가 해제됩니다. 이러한 마이그레이션을 완료하는 데 걸리는 시간은 네트워크 대역폭 및 대기 시간에 따라 다릅니다. 네트워크에 사용량이 크거나 낮은 대역폭이 있는 경우 마이그레이션에 시간이 오래 걸립니다. 원래 게스트 가상 시스템이 KVM이 대상 호스트 물리적 시스템으로 전송할 수 있는 페이지보다 빠르게 페이지를 수정하는 경우 실시간 마이그레이션이 완료되지 않으므로 오프라인 마이그레이션을 사용해야 합니다.
마이그레이션은 다음에 유용합니다.
로드 밸런싱
호스트 시스템이 과부하되는 경우 또는 다른 호스트 시스템이 활용도가 낮은 경우 게스트 가상 머신을 호스트 물리적 시스템으로 이동할 수 있습니다.
하드웨어 독립성
호스트 물리적 시스템에서 하드웨어 장치를 업그레이드, 추가 또는 제거해야 하는 경우 게스트 가상 시스템을 다른 호스트 물리적 시스템에 안전하게 재배치할 수 있습니다. 즉, 게스트 가상 머신에서 하드웨어 개선 시 다운타임이 발생하지 않습니다.
더 많은 비용 절감
가상 머신은 다른 호스트 물리적 머신에 재배포할 수 있으며 로드되지 않은 호스트 시스템의 전원을 꺼 비용을 절감할 수 있습니다.
지리적 마이그레이션
대기 시간이 낮거나 다른 이유로 필요한 경우 가상 머신을 다른 위치로 이동할 수 있습니다.

15.2. 마이그레이션 요구 사항 및 제한 사항

KVM 마이그레이션을 사용하기 전에 시스템이 마이그레이션의 요구 사항을 충족하고 해당 제한 사항을 알고 있는지 확인하십시오.

마이그레이션 요구사항

  • 다음 프로토콜 중 하나를 사용하여 공유 스토리지에 설치된 게스트 가상 머신:
    • 파이버 채널 기반 LUN
    • iSCSI
    • NFS
    • GFS2
    • SCSI RDMA 프로토콜 (SCSI RCP): Infiniband 및 10GbE iWARP 어댑터에서 사용되는 블록 내보내기 프로토콜
  • libvirtd 서비스가 활성화되어 실행되고 있는지 확인합니다.
    # systemctl enable libvirtd.service
    # systemctl restart libvirtd.service
  • 효과적으로 마이그레이션하는 기능은 /etc/libvirt/libvirtd.conf 파일의 매개 변수 설정에 따라 달라집니다. 이 파일을 편집하려면 다음 절차를 사용하십시오.

    절차 15.1. libvirtd.conf 구성

    1. libvirtd.conf 를 실행하려면 root로 명령을 실행해야 합니다.
      # vim /etc/libvirt/libvirtd.conf
    2. 필요에 따라 매개변수를 변경하고 파일을 저장합니다.
    3. libvirtd 서비스를 다시 시작합니다.
      # systemctl restart libvirtd
  • 마이그레이션 플랫폼 및 버전을 확인해야 합니다. 표 15.1. “실시간 마이그레이션 호환성”
  • 공유 스토리지 매체를 내보내는 별도의 시스템을 사용합니다. 스토리지는 마이그레이션에 사용되는 두 개의 호스트 물리적 시스템 중 하나에 상주해서는 안 됩니다.
  • 공유 스토리지는 소스 및 대상 시스템의 동일한 위치에 마운트해야 합니다. 마운트된 디렉터리 이름은 동일해야 합니다. 이미지를 다른 경로를 사용하여 유지할 수는 있지만 권장되지 않습니다. virt-manager 를 사용하여 마이그레이션을 수행하려면 경로 이름이 동일해야 합니다. virsh 를 사용하여 마이그레이션을 수행하려면 --xml 옵션 또는 pre-hooks 의 도움말과 함께 다른 네트워크 구성 및 마운트 디렉토리를 사용할 수 있습니다. pre-hooks에 대한 자세한 내용은 libvirt 업스트림 문서 를 참조하십시오. XML 옵션에 대한 자세한 내용은 23장. 도메인 XML 조작 을 참조하십시오.
  • 공용 bridge+tap 네트워크의 기존 게스트 가상 시스템에서 마이그레이션을 시도할 때 소스 및 대상 호스트 시스템이 동일한 네트워크에 있어야 합니다. 그렇지 않으면 마이그레이션 후 guest 가상 머신 네트워크가 작동하지 않습니다.

마이그레이션 제한

  • 게스트 가상 머신 마이그레이션은 KVM을 기반으로 하는 가상화 기술과 함께 Red Hat Enterprise Linux에서 사용할 때 다음과 같은 제한 사항이 있습니다.
    • 포인트 마이그레이션 지점 - 원래 하이퍼바이저에서 대상 하이퍼바이저를 지정하려면 수동으로 수행해야 합니다.
    • 사용 가능한 검증 또는 롤백이 없음
    • 대상에 대한 결정은 수동으로만 수행할 수 있습니다.
    • 스토리지 마이그레이션은 Red Hat Enterprise Linux 7™ 에서 실시간 수행할 수 없지만 게스트 가상 머신의 전원이 꺼진 상태에서 스토리지를 마이그레이션할 수 있습니다. 실시간 스토리지 마이그레이션은 Red Hat Virtualization™ 에서 사용할 수 있습니다. 자세한 내용은 서비스 담당자에게 문의하십시오.
참고
virtio 장치가 있는 게스트 머신을 마이그레이션하는 경우 플랫폼의 virtio 장치에 벡터 수를 32 이하로 설정해야 합니다. 자세한 내용은 23.17절. “devices” 에서 참조하십시오.

15.3. 실시간 마이그레이션 및 Red Hat Enterprise Linux 버전 호환성

실시간 마이그레이션은 표 15.1. “실시간 마이그레이션 호환성” 에 표시된 대로 지원됩니다.

표 15.1. 실시간 마이그레이션 호환성

Migration Method 릴리스 유형 예제 실시간 마이그레이션 지원 참고
forward 주요 릴리스 6.5+ → 7.x 모두 지원됨 모든 문제는 보고되어야 합니다.
Backward 주요 릴리스 7.x → 6.y 지원되지 않음
forward마이너 릴리스7.x → 7.y (7.0 → 7.1)모두 지원됨모든 문제는 보고되어야 합니다.
Backward마이너 릴리스7.Y → 7.x (7.1 → 7.0)모두 지원됨모든 문제는 보고되어야 합니다.

마이그레이션으로 문제 해결

  • 마이그레이션 프로토콜 관련 문제 - 이전 마이그레이션이 "알 수 없음 오류"로 종료되면 마이그레이션 프로세스를 반복하여 일시적인 오류일 수 있으므로 마이그레이션 프로세스를 반복할 수 있습니다. 그렇지 않은 경우 문제를 보고합니다.
  • 오디오 장치 관련 문제 - Red Hat Enterprise Linux 6.x에서 Red Hat Enterprise Linux 7.y로 마이그레이션할 때 es1370 오디오 카드가 더 이상 지원되지 않습니다. 대신 ac97 오디오 카드를 사용하십시오.
  • 네트워크 카드 관련 문제 - Red Hat Enterprise Linux 6.x에서 Red Hat Enterprise Linux 7.y로 마이그레이션할 때 PCnet 및 ne2k_pci 네트워크 카드가 더 이상 지원되지 않습니다. 대신 virtio-net 네트워크 장치를 사용합니다.

네트워크 스토리지 구성

공유 스토리지를 구성하고 공유 스토리지에 게스트 가상 머신을 설치합니다.

15.4. 공유 스토리지 예: 간단한 마이그레이션을 위한 NFS

중요
이 예에서는 NFS를 사용하여 게스트 가상 머신 이미지를 다른 KVM 호스트 물리적 시스템과 공유합니다. 대규모 설치에는 실용적이지 않지만 마이그레이션 기술만 보여주는 것이 표시됩니다. 몇 개 이상의 게스트 가상 머신을 마이그레이션하거나 실행하는 데 이 예제를 사용하지 마십시오. 또한 synch 매개 변수가 활성화되어 있어야 합니다. 이는 NFS 스토리지를 올바르게 내보내는 데 필요합니다.
대규모 배포 시 iSCSI 스토리지를 선택하는 것이 좋습니다. 자세한 내용은 13.2.3.5절. “iSCSI 기반 스토리지 풀” 에서 참조하십시오.
NFS 구성, IP 테이블 열기 및 방화벽 설정에 대한 자세한 내용은 Red Hat Linux Storage 관리 가이드 를 참조하십시오.
KVM에서 지원되지 않으므로 NFS 파일 잠금이 사용되지 않는지 확인합니다.
  1. libvirt 이미지 디렉토리를 내보냅니다.

    마이그레이션을 수행하려면 마이그레이션 대상 시스템으로 별도의 시스템에 스토리지가 있어야 합니다. 이 별도의 시스템에서 기본 이미지 디렉터리를 /etc/exports 파일에 추가하여 스토리지를 내보냅니다.
    /var/lib/libvirt/images *.example.com(rw,no_root_squash,sync)
    환경에 필요한 hostname 매개변수를 변경합니다.
  2. NFS 시작

    1. 아직 설치되지 않은 경우 NFS 패키지를 설치합니다.
      # yum install nfs-utils
    2. iptables 의 NFS 포트(예: 2049)가 열려 있는지 확인하고 /etc/hosts.allow 파일에 NFS를 추가합니다.
    3. NFS 서비스를 시작합니다.
      # systemctl start nfs-server
  3. 소스 및 대상에 공유 스토리지 마운트

    마이그레이션 소스 및 대상 시스템에서 /var/lib/libvirt/images 디렉터리를 마운트합니다.
    # mount storage_host:/var/lib/libvirt/images /var/lib/libvirt/images
    주의
    소스 호스트 물리적 시스템에 대해 선택한 디렉터리는 대상 호스트 물리적 시스템에서 정확히 동일해야 합니다. 이는 모든 유형의 공유 스토리지에 적용됩니다. 디렉터리가 동일해야 합니다. 그렇지 않으면 virt-manager를 사용한 마이그레이션이 실패합니다.

15.5. virsh를 사용한 실시간 KVM 마이그레이션

virsh 명령을 사용하여 게스트 가상 시스템을 다른 호스트 물리적 시스템으로 마이그레이션할 수 있습니다. migrate 명령은 다음 형식으로 매개변수를 허용합니다.
# virsh migrate --live GuestName DestinationURL
실시간 마이그레이션이 필요하지 않은 경우 --live 옵션이 제거될 수 있습니다. 추가 옵션은 15.5.2절. “virsh migrate 명령의 추가 옵션” 에 기재되어 있습니다.
GuestName 매개변수는 마이그레이션하려는 게스트 가상 머신의 이름을 나타냅니다.
DestinationURL 매개변수는 대상 호스트 물리적 시스템의 연결 URL입니다. 대상 시스템은 동일한 하이퍼바이저를 사용하고 libvirt 를 실행해야 합니다.
참고
일반 마이그레이션 및 peer2peer 마이그레이션의 DestinationURL 매개 변수는 다음과 같은 의미 체계가 다릅니다.
  • 일반 마이그레이션: DestinationURL 은 소스 게스트 가상 머신에 표시된 대로 대상 호스트 물리적 시스템의 URL입니다.
  • peer2peer 마이그레이션: DestinationURL 은 소스 호스트 물리적 시스템에 표시되는 것처럼 대상 호스트 물리적 시스템의 URL입니다.
명령이 입력되면 대상 시스템의 루트 암호를 입력하라는 메시지가 표시됩니다.
중요
마이그레이션이 성공하려면 양쪽(소스 및 대상)에서 이름 확인이 작동해야 합니다. 각 측은 다른 쪽을 찾을 수 있어야합니다. 한 쪽을 다른 쪽으로 ping하여 이름 확인이 작동하는지 확인하십시오.

예: virsh를 사용한 실시간 마이그레이션

이 예제에서는 host1.example.com 에서 host2.example.com 으로 마이그레이션합니다. 해당 환경의 호스트 물리적 시스템 이름을 변경합니다. 이 예에서는 guest1-rhel6-64 라는 가상 머신을 마이그레이션합니다.

이 예에서는 공유 스토리지를 완전히 구성하고 모든 사전 요구 사항을 충족한다고 가정합니다(여기서: 마이그레이션 요구사항).
  1. 게스트 가상 머신이 실행 중인지 확인

    소스 시스템에서 host1.example.com 에서 guest1-rhel6-64 가 실행 중인지 확인합니다.
    [root@host1 ~]# virsh list
    Id Name                 State
    ----------------------------------
     10 guest1-rhel6-64     running
    
  2. 게스트 가상 머신 마이그레이션

    다음 명령을 실행하여 게스트 가상 머신을 대상 host2.example.com 으로 실시간 마이그레이션합니다. 대상 URL 끝에 /system 을 추가하여 libvirt에 전체 액세스 권한이 필요하다는 것을 알립니다.
    # virsh migrate --live guest1-rhel7-64 qemu+ssh://host2.example.com/system
    명령이 입력되면 대상 시스템의 루트 암호를 입력하라는 메시지가 표시됩니다.
  3. wait

    마이그레이션은 게스트 가상 시스템의 부하 및 크기에 따라 다소 시간이 걸릴 수 있습니다. virsh 는 오류만 보고합니다. 게스트 가상 시스템은 완전히 마이그레이션될 때까지 소스 호스트 물리적 시스템에서 계속 실행됩니다.
  4. 게스트 가상 머신이 대상 호스트에 도착했는지 확인합니다.

    대상 시스템에서 host2.example.com 에서 guest1-rhel7-64 가 실행 중인지 확인합니다.
    [root@host2 ~]# virsh list
    Id Name                 State
    ----------------------------------
     10 guest1-rhel7-64     running
    
이제 실시간 마이그레이션이 완료되었습니다.
참고
libvirt는 TLS/SSL, UNIX 소켓, SSH 및 암호화되지 않은 TCP를 비롯한 다양한 네트워킹 방법을 지원합니다. 다른 방법 사용에 대한 자세한 내용은 18장. 게스트의 원격 관리 을 참조하십시오.
참고
다음 명령을 사용하여 실행 중인 게스트 가상 머신을 마이그레이션할 수 있습니다.
# virsh migrate --offline --persistent 

15.5.1. virsh를 사용하여 마이그레이션을 위한 추가 팁

각 마이그레이션이 별도의 명령 쉘에서 실행되는 동시에 여러 실시간 마이그레이션을 수행할 수 있습니다. 그러나 이 작업을 신중하게 수행해야 하며 각 마이그레이션 인스턴스에서 각 사이드(소스 및 대상)에서 하나의 MAX_CLIENT를 사용하므로 신중하게 계산해야 합니다. 기본 설정은 20이므로 설정을 변경하지 않고 10개의 인스턴스를 실행하기에 충분합니다. 설정을 변경해야 하는 경우 절차를 참조하십시오. 절차 15.1. “libvirtd.conf 구성”
  1. 절차 15.1. “libvirtd.conf 구성” 에 설명된 대로 libvirtd.conf 파일을 엽니다.
  2. Processing controls 섹션을 찾습니다.
    #################################################################
    #
    # Processing controls
    #
    
    # The maximum number of concurrent client connections to allow
    # over all sockets combined.
    #max_clients = 5000
    
    # The maximum length of queue of connections waiting to be
    # accepted by the daemon. Note, that some protocols supporting
    # retransmission may obey this so that a later reattempt at
    # connection succeeds.
    #max_queued_clients = 1000
    
    # The minimum limit sets the number of workers to start up
    # initially. If the number of active clients exceeds this,
    # then more threads are spawned, upto max_workers limit.
    # Typically you'd want max_workers to equal maximum number
    # of clients allowed
    #min_workers = 5
    #max_workers = 20
    
    
    # The number of priority workers. If all workers from above
    # pool will stuck, some calls marked as high priority
    # (notably domainDestroy) can be executed in this pool.
    #prio_workers = 5
    
    # Total global limit on concurrent RPC calls. Should be
    # at least as large as max_workers. Beyond this, RPC requests
    # will be read into memory and queued. This directly impact
    # memory usage, currently each request requires 256 KB of
    # memory. So by default upto 5 MB of memory is used
    #
    # XXX this isn't actually enforced yet, only the per-client
    # limit is used so far
    #max_requests = 20
    
    # Limit on concurrent requests from a single client
    # connection. To avoid one client monopolizing the server
    # this should be a small fraction of the global max_requests
    # and max_workers parameter
    #max_client_requests = 5
    
    #################################################################
    
  3. max_clientsmax_workers 매개변수 설정을 변경합니다. 두 매개변수 모두에서 번호가 동일해야 하는 것이 좋습니다. max_clients 는 마이그레이션당 2개의 클라이언트를 사용하며 max_workers 는 완료 단계에서 대상에서 1개의 작업자와 대상에서 1개의 작업자를 사용합니다.
    중요
    max_clientsmax_workers 매개변수 설정은 libvirtd 서비스에 대한 모든 게스트 가상 시스템 연결의 영향을 받습니다. 즉, 동일한 게스트 가상 머신을 사용하고 동시에 마이그레이션을 수행하는 모든 사용자는 max_clientsmax_workers 매개변수 설정에 설정된 제한도 따릅니다. 따라서 동시 실시간 마이그레이션을 수행하기 전에 최대값을 신중하게 고려해야 합니다.
    중요
    max_clients 매개변수는 libvirt에 연결할 수 있는 클라이언트 수를 제어합니다. 다수의 컨테이너가 한 번에 시작되면 이 제한에 쉽게 도달하고 초과할 수 있습니다. 이를 방지하기 위해 max_clients 매개변수의 값이 증가할 수 있지만 이렇게 하면 인스턴스에 대한 DoS(서비스 거부) 공격에 시스템이 더 취약해질 수 있습니다. 이 문제를 완화하기 위해 Red Hat Enterprise Linux 7.0에 새로운 max_anonymous_clients 설정이 도입되어 있지만 아직 인증되지 않은 연결 수를 지정합니다. max_clientsmax_anonymous_clients 조합을 구현하여 워크로드에 맞게 구성할 수 있습니다.
  4. 파일을 저장하고 서비스를 다시 시작합니다.
    참고
    시작된 ssh 세션이 많지만 아직 인증되지 않았기 때문에 마이그레이션 연결이 중단된 경우가 있을 수 있습니다. 기본적으로 sshd 에서는 언제든지 10개의 세션만 "사전 인증 상태"에 있을 수 있습니다. 이 설정은 sshd 구성 파일의 MaxStartups 매개변수에 의해 제어됩니다(여기서는 /etc/ssh/sshd_config) 일부 조정이 필요할 수 있습니다. DoS 공격(및 일반적으로 리소스 초과 사용)을 방지하기 위해 제한 사항이 적용되므로 이 매개 변수를 조정해야 합니다. 이 값을 너무 높게 설정하면 그 용도가 무효화됩니다. 이 매개변수를 변경하려면 /etc/ssh/sshd_config 파일을 편집하고, MaxStartups 행의 시작 부분에서 # 을 제거하고 10 (기본값)을 더 높은 숫자로 변경합니다. 파일을 저장하고 sshd 서비스를 다시 시작하십시오. 자세한 내용은 sshd_config 매뉴얼 페이지를 참조하십시오.

15.5.2. virsh migrate 명령의 추가 옵션

virsh migrate는 --live 외에 다음 옵션을 허용합니다.
  • --direct - 직접 마이그레이션에 사용
  • --p2p - 피어 투 피어 마이그레이션에 사용
  • --tunneled - 터널링된 마이그레이션에 사용
  • --offline - 대상에서 도메인을 시작하지 않고 소스 호스트에서 중지하지 않고 도메인 정의를 마이그레이션합니다. 오프라인 마이그레이션은 비활성 도메인과 함께 사용할 수 있으며 --persistent 옵션과 함께 사용해야 합니다.
  • --persistent - 대상 호스트 물리적 시스템에서 도메인을 영구 상태로 둡니다.
  • --undefinesource - 소스 호스트 물리적 시스템에서 도메인을 분리합니다.
  • --suspend - 대상 호스트 물리적 시스템에서 도메인이 일시 중지됨
  • --change-protection - 마이그레이션이 진행되는 동안 도메인에 호환되지 않는 구성 변경을 시행합니다. 이 플래그는 하이퍼바이저에서 지원하는 경우 암시적으로 활성화되지만 하이퍼바이저의 변경으로 인해 마이그레이션을 명시적으로 거부할 수 있습니다.
  • --unsafe - 모든 안전 절차를 무시하고 마이그레이션을 강제 적용합니다.
  • --verbose - 마이그레이션 진행 상황을 표시합니다.
  • --compressed - 실시간 마이그레이션 중에 반복적으로 전송되어야 하는 메모리 페이지의 압축을 활성화합니다.
  • --abort-on-error - 마이그레이션 중에 소프트 오류(예: I/O 오류)가 발생하면 마이그레이션을 취소합니다.
  • --domain [name] - 도메인 이름, id 또는 uuid를 설정합니다.
  • --desturi [URI] - 클라이언트(일반 마이그레이션) 또는 소스(p2p 마이그레이션)에서 볼 수 있는 대상 호스트의 연결 URI입니다.
  • --migrateuri [URI] - 일반적으로 생략할 수 있는 마이그레이션 URI입니다.
  • --graphicsuri [URI] - 원활한 그래픽 마이그레이션에 사용할 그래픽 URI입니다.
  • --listen-address [address] - 수신 마이그레이션을 위해 하이퍼바이저가 바인딩해야 하는 수신 주소를 설정합니다.
  • --timeout [seconds] - 실시간 마이그레이션 카운터가 N초를 초과하면 게스트 가상 머신이 일시 중지되도록 합니다. 실시간 마이그레이션에서만 사용할 수 있습니다. 시간 초과가 시작되면 중지된 게스트 가상 시스템에서 마이그레이션이 계속됩니다.
  • --DNAME [newname] - 마이그레이션 중에 도메인 이름을 변경하는 데 사용되며 일반적으로 생략할 수도 있습니다.
  • --XML [filename] - 표시된 파일 이름은 대상에서 사용할 대체 XML 파일을 제공하여 도메인 XML의 호스트별 부분에 더 많은 변경 사항을 제공할 수 있습니다(예: 기본 스토리지에 액세스하는 소스 및 대상 간의 이름 지정 차이점 고려). 이 옵션은 일반적으로 생략됩니다.
  • --migrate-disks [disk_identifiers] - 이 옵션을 사용하여 마이그레이션 중에 복사되는 디스크를 선택할 수 있습니다. 이를 통해 특정 디스크가 대상에 이미 존재하는 경우와 같이 특정 디스크를 복사하는 것이 바람직하지 않거나 더 이상 쓸 수 없는 경우와 같이 실시간 마이그레이션을 수행할 수 있습니다. [disk_identifiers] 는 마이그레이션할 디스크의 쉼표로 구분되며, 마이그레이션된 <target dev= /> 줄에 있는 인수로 식별되어야 합니다.
다음 명령도 도움이 될 수 있습니다.
  • virsh migrate-setmaxdowntime [domain] [downtime] - 다른 호스트로 실시간 마이그레이션 중인 도메인에 대해 최대 허용 가능한 다운타임을 설정합니다. 지정된 다운 타임은 밀리초 단위입니다. 지정된 도메인은 마이그레이션 중인 도메인과 동일해야 합니다.
  • virsh migrate-compcache [domain] --size -는 실시간 마이그레이션 중에 반복적으로 전송된 메모리 페이지를 압축하는 데 사용되는 캐시 크기를 바이트 단위로 설정하고 가져옵니다. --size 를 사용하지 않으면 명령은 현재 압축 캐시 크기를 표시합니다. --size 를 사용하고 바이트로 지정하면 현재 크기가 표시된 뒤에 표시된 크기와 일치하도록 하이퍼바이저에 압축을 변경해야 합니다. 도메인은 마이그레이션 진행 상황에 대한 대응과 domjobinfo 에서 얻은 압축 캐시 누락 수를 늘리는 동안 --size 인수를 사용해야 합니다.
  • virsh migrate-setspeed [domain] [bandwidth] - 다른 호스트로 마이그레이션 중인 지정된 도메인에 대해 Mib/sec의 마이그레이션 대역폭을 설정합니다.
  • virsh migrate-getspeed [domain] - 지정된 도메인의 Mib/sec에서 사용 가능한 최대 마이그레이션 대역폭을 가져옵니다.
자세한 내용은 마이그레이션 제한 또는 virsh man 페이지를 참조하십시오.

15.6. virt-manager로 마이그레이션

이 섹션에서는 virt-manager 를 사용하여 하나의 호스트 물리적 시스템에서 다른 호스트로 KVM 게스트 가상 머신을 마이그레이션하는 방법에 대해 설명합니다.
  1. 대상 호스트 물리적 시스템에 연결

    virt-manager 인터페이스 에서 파일 메뉴를 선택하여 대상 호스트 물리적 시스템에 연결한 다음 연결 추가 를 클릭합니다.
  2. 연결 추가

    연결 추가 창이 나타납니다.

    그림 15.1. 대상 호스트 물리적 시스템에 연결 추가

    대상 호스트 물리적 시스템에 연결 추가
    다음 세부 정보를 입력합니다.
    • 하이퍼바이저: QEMU/KVM 을 선택합니다.
    • 방법: 연결 방법을 선택합니다.
    • 사용자 이름: 원격 호스트 물리적 시스템의 사용자 이름을 입력합니다.
    • 호스트 이름: 원격 호스트 물리적 시스템의 호스트 이름을 입력합니다.
    참고
    연결 옵션에 대한 자세한 내용은 19.5절. “원격 연결 추가” 을 참조하십시오.
    연결을 클릭합니다. 이 예에서는 SSH 연결이 사용되므로 다음 단계에 지정된 사용자의 암호를 입력해야 합니다.

    그림 15.2. 암호 입력

    암호 입력
  3. 공유 스토리지 구성

    소스 및 대상 호스트 모두 스토리지(예: NFS 사용 )를 공유하는지 확인합니다.
  4. 게스트 가상 머신 마이그레이션

    마이그레이션할 게스트를 마우스 오른쪽 버튼으로 클릭하고 마이그레이션을 클릭합니다.
    New Host (새 호스트) 필드에서 드롭다운 목록을 사용하여 게스트 가상 시스템을 마이그레이션할 호스트 물리적 시스템을 선택한 후 마이그레이션을 클릭합니다.

    그림 15.3. 대상 호스트 물리적 시스템 선택 및 마이그레이션 프로세스 시작

    대상 호스트 물리적 시스템 선택 및 마이그레이션 프로세스 시작
    진행률 창이 나타납니다.

    그림 15.4. 진행률 창

    진행률 창
    문제가 없이 마이그레이션이 완료되면 virt-manager 에 대상 호스트에서 실행 중인 새로 마이그레이션된 게스트 가상 시스템이 표시됩니다.

    그림 15.5. 대상 호스트 물리적 시스템에서 실행 중인 게스트 가상 머신 마이그레이션

    대상 호스트 물리적 시스템에서 실행 중인 게스트 가상 머신 마이그레이션

16장. 게스트 가상 머신 장치 구성

Red Hat Enterprise Linux 7은 게스트 가상 머신을 위한 세 가지 유형의 장치를 지원합니다.
  • 에뮬레이션된 장치는 실제 하드웨어를 모방하는 순수하게 가상 장치이므로 수정되지 않은 게스트 운영 체제가 표준 인 박스 드라이버를 사용하여 작업할 수 있습니다.
  • virtio 장치 (또는 반가상화라고도 함)는 가상 머신에서 최적으로 작동하도록 설계된 가상 장치입니다. virtio 장치는 에뮬레이션된 장치와 유사하지만 Linux 이외의 가상 시스템에는 기본적으로 필요한 드라이버가 포함되어 있지 않습니다. Virtual Machine Manager(virt-manager)와 같은 가상화 관리 소프트웨어 및 Red Hat Virtualization Hypervisor는 지원되는 비 Linux 게스트 운영 체제에 대해 이러한 드라이버를 자동으로 설치합니다. Red Hat Enterprise Linux 7은 최대 216개의 virtio 장치를 지원합니다. 자세한 내용은 5장. KVM Paravirtualized (virtio) 드라이버 의 내용을 참조하십시오.
  • 할당된 장치는 가상 머신에 노출되는 물리적 장치입니다. 이 방법을 passthrough 라고도 합니다. 장치 할당을 통해 가상 머신은 다양한 작업에 대해 PCI 장치에 독점적으로 액세스할 수 있으며 PCI 장치가 게스트 운영 체제에 물리적으로 연결된 것처럼 표시되고 동작할 수 있습니다. Red Hat Enterprise Linux 7은 가상 머신당 최대 32개의 할당된 장치를 지원합니다.
    장치 할당은 일부 그래픽 장치를 포함하여 PCIe 장치에서 지원됩니다. 병렬 PCI 장치는 할당된 장치로 지원될 수 있지만 보안 및 시스템 구성 충돌로 인해 심각한 제한 사항이 있습니다.
Red Hat Enterprise Linux 7은 가상 머신에 단일 기능 슬롯으로 노출되는 PCI 핫 플러그를 지원합니다. 다기능 호스트 장치 및 다중 기능 호스트 장치의 개별 기능은 이를 활성화하도록 구성할 수 있습니다. 가상 머신에 다중 기능 PCI 슬롯으로 장치를 노출하는 구성은 비 핫 플러그 애플리케이션에만 권장됩니다.
특정 장치 및 관련 제한에 대한 자세한 내용은 23.17절. “devices” 을 참조하십시오.
참고
호스트에서 할당된 장치를 사용하여 게스트를 완전히 격리하려면 인터럽트 재 매핑에 대한 플랫폼 지원이 필요합니다. 이러한 지원이 없으면 호스트는 악의적인 게스트의 삽입 공격을 중단하는 데 취약할 수 있습니다. 게스트가 신뢰하는 환경에서 관리자는 allow_unsafe_interrupts 옵션을 vfio_iommu_type1 모듈에 사용하여 PCI 장치 할당을 계속 허용할 수 있습니다. 다음 내용이 포함된 /etc/modprobe.d 에 .conf 파일(예: local.conf)을 추가하여 이 작업을 영구적으로 수행할 수 있습니다.
options vfio_iommu_type1 allow_unsafe_interrupts=1
또는 sysfs 항목을 사용하여 동일한 작업을 수행하는 것이 좋습니다.
# echo 1 > /sys/module/vfio_iommu_type1/parameters/allow_unsafe_interrupts

16.1. PCI 장치

PCI 장치 할당은 Intel VT-d 또는 AMD IOMMU를 지원하는 하드웨어 플랫폼에서만 사용할 수 있습니다. 호스트 BIOS에서 PCI 장치 할당이 작동하려면 이러한 Intel VT-d 또는 AMD IOMMU 사양을 활성화해야 합니다.

절차 16.1. PCI 장치 할당을 위한 Intel 시스템 준비

  1. Intel VT-d 사양 활성화

    Intel VT-d 사양은 가상 머신에 물리적 장치를 직접 할당하는 하드웨어 지원을 제공합니다. Red Hat Enterprise Linux에서 PCI 장치 할당을 사용하려면 이러한 사양이 필요합니다.
    BIOS에서 Intel VT-d 사양을 활성화해야 합니다. 일부 시스템 제조업체에서는 기본적으로 이러한 사양을 비활성화합니다. 이러한 사양을 확인하는 데 사용되는 용어는 제조업체마다 다를 수 있습니다. 시스템 제조업체의 설명서를 참조하십시오.
  2. 커널에서 Intel VT-d 활성화

    /etc/sysconfig/grub 파일에 있는 따옴표 내에서 intel_iommu=oniommu=pt 매개 변수를 추가하여 커널에서 Intel VT-d를 활성화합니다.
    다음은 Intel VT-d가 활성화된 수정된 grub 파일입니다.
    GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_VolGroup00/LogVol01
    vconsole.font=latarcyrheb-sun16 rd.lvm.lv=vg_VolGroup_1/root
    vconsole.keymap=us $([ -x /usr/sbin/rhcrashkernel-param ] && /usr/sbin/
    rhcrashkernel-param || :) rhgb quiet intel_iommu=on iommu=pt"
  3. 구성 파일 재생성

    다음을 실행하여 /etc/grub2.cfg를 다시 생성합니다.
    grub2-mkconfig -o /etc/grub2.cfg
    UEFI 기반 호스트를 사용하는 경우 대상 파일은 /etc/grub2-efi.cfg 여야 합니다.
  4. 사용 준비

    시스템을 재부팅하여 변경 사항을 활성화합니다. 이제 PCI 장치 할당이 가능합니다.

절차 16.2. PCI 장치 할당을 위한 AMD 시스템 준비

  1. AMD IOMMU 사양 활성화

    Red Hat Enterprise Linux에서 PCI 장치 할당을 사용하려면 AMD IOMMU 사양이 필요합니다. 이 사양은 BIOS에서 활성화해야합니다. 일부 시스템 제조업체에서는 기본적으로 이러한 사양을 비활성화합니다.
  2. IOMMU 커널 지원 활성화

    /etc/sysconfig/grub 의 따옴표 내에 GRUB_CMDLINX_LINUX 행의 끝에 iommu=pt 를 추가하여 AMD IOMMU 사양이 부팅 시 활성화되도록 합니다.
  3. 구성 파일 재생성

    다음을 실행하여 /etc/grub2.cfg를 다시 생성합니다.
    grub2-mkconfig -o /etc/grub2.cfg
    UEFI 기반 호스트를 사용하는 경우 대상 파일은 /etc/grub2-efi.cfg 여야 합니다.
  4. 사용 준비

    시스템을 재부팅하여 변경 사항을 활성화합니다. 이제 PCI 장치 할당이 가능합니다.
참고
IOMMU에 대한 자세한 내용은 부록 E. IOMMU 그룹 작업 을 참조하십시오.

16.1.1. virsh를 사용하여 PCI 장치 할당

이러한 단계는 KVM 하이퍼바이저의 가상 머신에 PCI 장치를 할당하는 단계를 포함합니다.
이 예에서는 PCI 식별자 코드 pci_0000 644300_0guest1-rhel7-64 라는 완전히 가상화된 게스트 시스템과 함께 PCIe 네트워크 컨트롤러를 사용합니다.

절차 16.3. virsh를 사용하여 게스트 가상 머신에 PCI 장치 할당

  1. 장치 식별

    먼저 가상 머신에 대한 장치 할당용으로 지정된 PCI 장치를 식별합니다. lspci 명령을 사용하여 사용 가능한 PCI 장치를 나열합니다. grep 을 사용하여 lspci 출력을 구체화할 수 있습니다.
    이 예에서는 다음 출력에 강조 표시된 이더넷 컨트롤러를 사용합니다.
    # lspci | grep Ethernet
    00:19.0 Ethernet controller: Intel Corporation 82567LM-2 Gigabit Network Connection
    01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    01:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    이 이더넷 컨트롤러는 짧은 식별자 00:19.0 과 함께 표시됩니다. 이 PCI 장치를 가상 머신에 할당하려면 virsh 에서 사용하는 전체 식별자를 찾아야 합니다.
    이렇게 하려면 virsh nodedev-list 명령을 사용하여 호스트 시스템에 연결된 특정 유형(pci)의 모든 장치를 나열합니다. 그런 다음 사용하려는 장치의 짧은 식별자에 매핑되는 문자열의 출력을 확인합니다.
    이 예에서는 짧은 식별자 00:19.0 을 사용하여 이더넷 컨트롤러에 매핑되는 문자열을 보여줍니다. 및 . 문자 전체 식별자에서 밑줄로 교체됩니다.
    # virsh nodedev-list --cap pci
    pci_0000_00_00_0
    pci_0000_00_01_0
    pci_0000_00_03_0
    pci_0000_00_07_0
    pci_0000_00_10_0
    pci_0000_00_10_1
    pci_0000_00_14_0
    pci_0000_00_14_1
    pci_0000_00_14_2
    pci_0000_00_14_3
    pci_0000_00_19_0
    pci_0000_00_1a_0
    pci_0000_00_1a_1
    pci_0000_00_1a_2
    pci_0000_00_1a_7
    pci_0000_00_1b_0
    pci_0000_00_1c_0
    pci_0000_00_1c_1
    pci_0000_00_1c_4
    pci_0000_00_1d_0
    pci_0000_00_1d_1
    pci_0000_00_1d_2
    pci_0000_00_1d_7
    pci_0000_00_1e_0
    pci_0000_00_1f_0
    pci_0000_00_1f_2
    pci_0000_00_1f_3
    pci_0000_01_00_0
    pci_0000_01_00_1
    pci_0000_02_00_0
    pci_0000_02_00_1
    pci_0000_06_00_0
    pci_0000_07_02_0
    pci_0000_07_03_0
    사용할 장치에 매핑되는 PCI 장치 번호를 기록합니다. 다른 단계에서 필요합니다.
  2. 장치 정보 검토

    domain, bus 및 function에 대한 정보는 virsh nodedev-dumpxml 명령의 출력에서 확인할 수 있습니다.

    그림 16.1. 덤프 내용

    
    # virsh nodedev-dumpxml pci_0000_00_19_0
    <device>
      <name>pci_0000_00_19_0</name>
      <parent>computer</parent>
      <driver>
        <name>e1000e</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>0</bus>
        <slot>25</slot>
        <function>0</function>
        <product id='0x1502'>82579LM Gigabit Network Connection</product>
        <vendor id='0x8086'>Intel Corporation</vendor>
        <iommuGroup number='7'>
          <address domain='0x0000' bus='0x00' slot='0x19' function='0x0'/>
        </iommuGroup>
      </capability>
    </device>
    
    
    참고
    IOMMU 그룹은 IOMMU의 관점에서 장치의 가시성과 격리를 기반으로 결정됩니다. 각 IOMMU 그룹은 하나 이상의 장치를 포함할 수 있습니다. 여러 장치가 있는 경우 IOMMU 그룹 내의 모든 끝점을 게스트에 할당할 그룹 내 모든 장치에 대해 요청해야 합니다. 이 작업은 게스트에 추가 엔드포인트를 할당하거나 virsh nodedev-detach 를 사용하여 호스트 드라이버에서 분리하여 수행할 수 있습니다. 단일 그룹에 포함된 장치는 여러 게스트 간에 분할되거나 호스트와 게스트 간에 분할되지 않을 수 있습니다. PCIe 루트 포트, 스위치 포트, 브리지와 같은 비 엔드 포인트 장치는 호스트 드라이버에서 분리해서는 안 되며 끝점 할당을 방해하지 않습니다.
    IOMMU 그룹 내의 장치는 virsh nodedev-dumpxml 출력의 iommuGroup 섹션을 사용하여 확인할 수 있습니다. 그룹의 각 멤버는 별도의 "address" 필드에 제공됩니다. 이 정보는 다음을 사용하여 sysfs에서 찾을 수도 있습니다.
    $ ls /sys/bus/pci/devices/0000:01:00.0/iommu_group/devices/
    이 예제의 예는 다음과 같습니다.
    0000:01:00.0  0000:01:00.1
    0000.01.00.0만 게스트에 할당하려면 게스트를 시작하기 전에 사용되지 않은 엔드 포인트를 호스트에서 분리해야 합니다.
    $ virsh nodedev-detach pci_0000_01_00_1
  3. 필요한 구성 세부 정보 확인

    구성 파일에 필요한 값은 virsh nodedev-dumpxml pci_0000_00_19_0 명령의 출력을 참조하십시오.
    예제 장치에는 bus = 0, 슬롯 = 25 및 function = 0의 값이 있습니다. 10진수 구성은 다음 세 가지 값을 사용합니다.
    bus='0'
    slot='25'
    function='0'
  4. 설정 세부 정보 추가

    virsh edit 를 실행하여 가상 머신 이름을 지정하고 <devices> 섹션에 장치 항목을 추가하여 PCI 장치를 게스트 가상 머신에 할당합니다. 예를 들면 다음과 같습니다.
    # virsh edit guest1-rhel7-64

    그림 16.2. PCI 장치 추가

    
    <devices>
    	[...]
     <hostdev mode='subsystem' type='pci' managed='yes'>
       <source>
          <address domain='0' bus='0' slot='25' function='0'/>
       </source>
     </hostdev>
     [...]
    </devices>
    
    또는 virsh attach-device 를 실행하여 가상 머신 이름과 게스트의 XML 파일을 지정합니다.
    virsh attach-device guest1-rhel7-64 file.xml
    참고
    PCI 장치는 장치에 대한 장치 펌웨어 또는 사전 부팅 드라이버 (예: PXE)를 제공하기 위한 옵션 2.0.0 또는 확장 Makefile(예: PXE)이라고도 하는 선택적 읽기 전용 메모리(ROM) 모듈을 포함할 수 있습니다. 일반적으로 이러한 옵션은 PCI 장치 할당을 사용하여 물리적 PCI 장치를 VM에 연결할 때 가상화된 환경에서도 작동합니다.
    그러나 경우에 따라 옵션 RAM이 불필요하여 VM을 더 느리게 부팅하거나 장치에서 제공하는 사전 부팅 드라이버가 가상화와 호환되지 않을 수 있으므로 게스트 OS 부팅이 실패할 수 있습니다. 이러한 경우 Red Hat은 VM에서 옵션 Rom을 마스킹하는 것을 권장합니다. 이렇게 하려면 다음을 수행합니다.
    1. 호스트에서 할당할 장치에 확장 Makefile 베이스 주소 레지스터(BAR)가 있는지 확인합니다. 이렇게 하려면 장치에 lspci -v 명령을 사용하고 다음이 포함된 행의 출력을 확인합니다.
      Expansion ROM at
    2. <rom bar='off'/> 요소를 게스트의 XML 구성에서 <hostdev> 요소의 자식으로 추가합니다.
      <hostdev mode='subsystem' type='pci' managed='yes'>
        <source>
           <address domain='0' bus='0' slot='25' function='0'/>
        </source>
        <rom bar='off'/>
      </hostdev>
      
  5. 가상 머신 시작

    # virsh start guest1-rhel7-64
이제 PCI 장치를 가상 머신에 할당하고 게스트 운영 체제에 액세스할 수 있어야 합니다.

16.1.2. virt-manager로 PCI 장치 할당

그래픽 virt-manager 도구를 사용하여 PCI 장치를 게스트 가상 머신에 추가할 수 있습니다. 다음 절차에서는 게스트 가상 머신에 Gigabit 이더넷 컨트롤러를 추가합니다.

절차 16.4. virt-manager를 사용하여 게스트 가상 머신에 PCI 장치 할당

  1. 하드웨어 설정 열기

    게스트 가상 머신을 열고 하드웨어 추가 버튼 을 클릭하여 가상 시스템에 새 장치를 추가합니다.

    그림 16.3. 가상 머신 하드웨어 정보 창

    상단 작업 표시줄에서 선택한 Information(정보) 버튼이 있는 가상 머신 하드웨어 창과 왼쪽 메뉴 창에서 선택한 개요입니다.
  2. PCI 장치 선택

    왼쪽의 하드웨어 목록에서 PCI 호스트 장치를 선택합니다.
    사용되지 않는 PCI 장치를 선택합니다. 현재 다른 게스트에서 사용 중인 PCI 장치를 선택하면 오류가 발생합니다. 이 예제에서는 예비 오디오 컨트롤러가 사용됩니다. 완료 를 클릭하여 설정을 완료합니다.

    그림 16.4. 새 가상 하드웨어 추가 마법사

    왼쪽 메뉴 창에서 PCI Host Device를 선택한 상태에서 새 가상 하드웨어 추가 마법사를 사용하여 오른쪽 메뉴 창에서 선택할 호스트 장치 목록을 표시합니다.
  3. 새 장치 추가

    설정이 완료되고 게스트 가상 머신에서 PCI 장치에 직접 액세스할 수 있습니다.

    그림 16.5. 가상 머신 하드웨어 정보 창

    왼쪽 메뉴 창에서 새로 추가된 PCI 장치 목록에 새로 추가된 PCI 장치 목록에 Information(정보) 버튼을 선택한 Information(정보) 버튼을 사용하는 가상 머신 하드웨어 창은 왼쪽 메뉴 창에 새로 추가된 PCI 장치를 표시합니다.
참고
장치 할당에 실패하면 동일한 IOMMU 그룹에 여전히 연결된 다른 끝점이 있을 수 있습니다. virt-manager를 사용하여 그룹 정보를 검색할 수 있는 방법은 없지만 virsh 명령을 사용하여 IOMMU 그룹의 경계를 분석하고 필요한 경우 sequester 장치를 분석할 수 있습니다.
IOMMU 그룹 및 virsh를 사용하여 엔드포인트 장치를 분리하는 방법에 대한 자세한 내용은 16.1.1절. “virsh를 사용하여 PCI 장치 할당”참고 를 참조하십시오.

16.1.3. virt-install을 사용한 PCI 장치 할당

virt-install 명령을 사용하여 게스트를 설치할 때 PCI 장치를 할당할 수 있습니다. 이 작업을 수행하려면 --host-device 매개 변수를 사용합니다.

절차 16.5. virt-install을 사용하여 가상 머신에 PCI 장치 할당

  1. 장치 식별

    게스트 가상 머신에 대한 장치 할당용으로 지정된 PCI 장치를 식별합니다.
    # lspci | grep Ethernet
    00:19.0 Ethernet controller: Intel Corporation 82567LM-2 Gigabit Network Connection
    01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    01:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    virsh nodedev-list 명령은 시스템에 연결된 모든 장치를 나열하고 각 PCI 장치를 문자열로 식별합니다. 출력을 PCI 장치로만 제한하려면 다음 명령을 입력합니다.
    # virsh nodedev-list --cap pci
    pci_0000_00_00_0
    pci_0000_00_01_0
    pci_0000_00_03_0
    pci_0000_00_07_0
    pci_0000_00_10_0
    pci_0000_00_10_1
    pci_0000_00_14_0
    pci_0000_00_14_1
    pci_0000_00_14_2
    pci_0000_00_14_3
    pci_0000_00_19_0
    pci_0000_00_1a_0
    pci_0000_00_1a_1
    pci_0000_00_1a_2
    pci_0000_00_1a_7
    pci_0000_00_1b_0
    pci_0000_00_1c_0
    pci_0000_00_1c_1
    pci_0000_00_1c_4
    pci_0000_00_1d_0
    pci_0000_00_1d_1
    pci_0000_00_1d_2
    pci_0000_00_1d_7
    pci_0000_00_1e_0
    pci_0000_00_1f_0
    pci_0000_00_1f_2
    pci_0000_00_1f_3
    pci_0000_01_00_0
    pci_0000_01_00_1
    pci_0000_02_00_0
    pci_0000_02_00_1
    pci_0000_06_00_0
    pci_0000_07_02_0
    pci_0000_07_03_0
    PCI 장치 번호를 기록합니다. 다른 단계에서 번호가 필요합니다.
    도메인, 버스 및 기능에 대한 정보는 virsh nodedev-dumpxml 명령의 출력에서 확인할 수 있습니다.
    # virsh nodedev-dumpxml pci_0000_01_00_0

    그림 16.6. PCI 장치 파일 콘텐츠

    
    <device>
      <name>pci_0000_01_00_0</name>
      <parent>pci_0000_00_01_0</parent>
      <driver>
        <name>igb</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>1</bus>
        <slot>0</slot>
        <function>0</function>
        <product id='0x10c9'>82576 Gigabit Network Connection</product>
        <vendor id='0x8086'>Intel Corporation</vendor>
        <iommuGroup number='7'>
          <address domain='0x0000' bus='0x00' slot='0x19' function='0x0'/>
        </iommuGroup>
      </capability>
    </device>
    
    참고
    IOMMU 그룹에 끝점이 여러 개 있고 모두 게스트에 할당되지 않은 경우 게스트를 시작하기 전에 다음 명령을 실행하여 호스트에서 다른 끝점을 수동으로 분리해야 합니다.
    $ virsh nodedev-detach pci_0000_00_19_1
    IOMMU 그룹에 대한 자세한 내용은 16.1.1절. “virsh를 사용하여 PCI 장치 할당”참고 를 참조하십시오.
  2. 장치 추가

    virsh nodedev 명령의 PCI 식별자 출력을 --host-device 매개 변수의 값으로 사용합니다.
    virt-install \
    --name=guest1-rhel7-64 \
    --disk path=/var/lib/libvirt/images/guest1-rhel7-64.img,size=8 \
    --vcpus=2 --ram=2048 \
    --location=http://example1.com/installation_tree/RHEL7.0-Server-x86_64/os \
    --nonetworks \
    --os-type=linux \
    --os-variant=rhel7
    --host-device=pci_0000_01_00_0
  3. 설치 완료

    게스트 설치를 완료합니다. PCI 장치를 게스트에 연결해야 합니다.

16.1.4. 할당된 PCI 장치 분리

호스트 PCI 장치가 게스트 시스템에 할당되면 호스트는 더 이상 장치를 사용할 수 없습니다. PCI 장치가 도메인 XML 파일에서 managed ='yes' 매개 변수를 사용하여 구성된 경우 게스트 시스템에 연결하고 게스트 시스템에서 분리한 후 필요에 따라 호스트 시스템에 다시 연결합니다. PCI 장치가 관리 모드가 아닌 경우 게스트 시스템에서 PCI 장치를 분리하고 virsh 또는 virt-manager 를 사용하여 다시 연결할 수 있습니다.

절차 16.6. virsh를 사용하여 게스트에서 PCI 장치 분리

  1. 장치 분리

    다음 명령을 사용하여 게스트의 XML 파일에서 해당 장치를 제거하여 게스트에서 PCI 장치를 분리합니다.
    # virsh detach-device name_of_guest file.xml
  2. 장치를 호스트에 다시 연결(선택 사항)

    장치가 관리 모드에 있는 경우 이 단계를 건너뜁니다. 장치가 호스트에 자동으로 반환됩니다.
    장치가 관리 모드를 사용하지 않는 경우 다음 명령을 사용하여 PCI 장치를 호스트 머신에 다시 연결합니다.
    # virsh nodedev-reattach device
    예를 들어 pci_0000 644300_0 장치를 호스트에 다시 연결하려면 다음을 수행합니다.
    # virsh nodedev-reattach pci_0000_01_00_0
    이제 호스트를 사용할 수 있는 장치를 사용할 수 있습니다.

절차 16.7. virt-manager를 사용하여 게스트에서 PCI 장치 분리

  1. 가상 하드웨어 세부 정보 화면 열기

    virt-manager 에서 장치가 포함된 가상 머신을 두 번 클릭합니다. 가상 하드웨어 세부 정보 표시 버튼을 선택하여 가상 하드웨어 목록을 표시합니다.

    그림 16.7. 가상 하드웨어 세부 정보 버튼

    가상 하드웨어 세부 정보 표시 버튼.
  2. 장치 선택 및 제거

    왼쪽 패널에 있는 가상 장치 목록에서 분리할 PCI 장치를 선택합니다.

    그림 16.8. 분리할 PCI 장치 선택

    PCI 장치 세부 정보 및 제거 버튼
    Remove (제거) 버튼을 클릭하여 확인합니다. 이제 호스트를 사용할 수 있는 장치를 사용할 수 있습니다.

16.1.5. PCI 브리지

주변 구성 요소 상호 연결 (PCI) 브리지는 네트워크 카드, 모뎀 및 음향 카드와 같은 장치에 연결하는 데 사용됩니다. 물리적 대응과 마찬가지로 가상 장치를 PCI 브릿지에 연결할 수도 있습니다. 이전에는 게스트 가상 머신에 31개의 PCI 장치만 추가할 수 있었습니다. 이제 31st PCI 장치가 추가되면 PCI 브리지가 31st 슬롯에 자동으로 배치되어 추가 PCI 장치를 PCI 브리지로 이동합니다. 각 PCI 브릿지에는 31개의 추가 장치에 대한 31개의 슬롯이 있으며, 모두 브리지가 될 수 있습니다. 이러한 방식으로 게스트 가상 시스템에서 900개 이상의 장치를 사용할 수 있습니다.
PCI 브릿지에 대한 XML 구성 예는 PCI 브리지의 도메인 XML 예를 참조하십시오. 이 구성은 자동으로 설정되며 수동으로 조정하는 것은 권장되지 않습니다.

16.1.6. PCI 장치 할당 제한

PCI 장치 할당(가상 머신에 PCI 장치 연결)을 사용하려면 호스트 시스템에 PCIe 장치의 장치 할당을 활성화하기 위해 AMD IOMMU 또는 Intel VT-d 지원이 필요합니다.
Red Hat Enterprise Linux 7은 게스트 장치 드라이버에 의해 제한된 PCI 구성 공간 액세스를 제공합니다. 이 제한은 확장된 PCI 구성 공간에 있는 장치 기능 또는 기능에 종속된 드라이버를 유발하여 구성이 실패할 수 있습니다.
Red Hat Enterprise Linux 7 가상 시스템당 총 32개의 장치를 할당할 수 있습니다. 이는 가상 머신에 있는 PCI 브릿지 수 또는 이러한 기능을 결합하여 멀티 기능 슬롯을 생성하는 방법에 관계없이 32개의 총 PCI 함수로 변환됩니다.
호스트에서 할당된 장치를 사용하여 게스트를 완전히 격리하려면 인터럽트 재 매핑에 대한 플랫폼 지원이 필요합니다. 이러한 지원이 없으면 호스트는 악의적인 게스트의 삽입 공격을 중단하는 데 취약할 수 있습니다. 게스트가 신뢰하는 환경에서 관리자는 allow_unsafe_interrupts 옵션을 vfio_iommu_type1 모듈에 사용하여 PCI 장치 할당을 계속 허용할 수 있습니다. 다음 내용이 포함된 /etc/modprobe.d 에 .conf 파일(예: local.conf)을 추가하여 이 작업을 영구적으로 수행할 수 있습니다.
options vfio_iommu_type1 allow_unsafe_interrupts=1
또는 sysfs 항목을 사용하여 동일한 작업을 수행하는 것이 좋습니다.
# echo 1 > /sys/module/vfio_iommu_type1/parameters/allow_unsafe_interrupts

16.2. SR-IOV 장치를 사용한 PCI 장치 할당

PCI 네트워크 장치( <소스> 요소에 의해 도메인 XML에 지정)는 직접 장치 할당( passthrough 라고도 함)을 사용하여 게스트에 직접 연결할 수 있습니다. 표준 단일 포트 PCI 이더넷 카드 드라이버 설계의 제한으로 인해 SR-IOV( Single Root I/O Virtualization ) VF 장치만 이러한 방식으로 할당할 수 있습니다. 표준 단일 포트 PCI 또는 PCIe 이더넷 카드를 게스트에 할당하려면 기존 <hostdev> 장치 정의를 사용합니다.

그림 16.9. PCI 장치 할당의 XML 예


     <devices>
    <interface type='hostdev'>
      <driver name='vfio'/>
      <source>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
      </source>
      <mac address='52:54:00:6d:90:02'>
      <virtualport type='802.1Qbh'>
        <parameters profileid='finance'/>
      </virtualport>
    </interface>
  </devices>
PCI-SIG (PCI Special Interest Group) 사양에서 개발한 SR-IOV(Single Root I/O Virtualization) 사양은 단일 장치를 여러 가상 머신에 공유할 수 있는 PCI 장치 할당 유형의 표준입니다. SR-IOV는 가상 머신의 장치 성능을 향상시킵니다.

그림 16.10. SR-IOV 작동 방식

SR-IOV 작동 방식
SR-IOV를 사용하면 단일 루트 기능(예: 단일 이더넷 포트)이 여러 개의 개별 물리 장치로 표시될 수 있습니다. SR-IOV 기능이 있는 물리적 장치는 PCI 구성 공간에 여러 기능으로 표시되도록 구성할 수 있습니다. 각 장치에는 Base Address Register(BAR)로 완료된 자체 구성 공간이 있습니다.
SR-IOV는 두 개의 PCI 기능을 사용합니다.
  • 물리적 기능(PF)은 SR-IOV 기능을 포함하는 전체 PCIe 장치입니다. 물리 기능은 일반 PCI 장치로 검색, 관리 및 구성됩니다. 물리 기능은 가상 함수를 할당하여 SR-IOV 기능을 구성하고 관리합니다.
  • VF(가상 기능)는 I/O만 처리하는 간단한 PCIe 기능입니다. 각 가상 기능은 물리 함수에서 파생됩니다. 장치에서 가질 수 있는 Virtual Functions의 수는 장치 하드웨어에 의해 제한됩니다. 물리 장치인 단일 이더넷 포트는 가상 머신에 공유할 수 있는 많은 가상 기능에 매핑될 수 있습니다.
하이퍼바이저는 가상 머신에 하나 이상의 가상 함수를 할당할 수 있습니다. 그런 다음 가상 기능의 구성 공간이 게스트에 제공되는 구성 공간에 할당됩니다.
Virtual Functions에는 실제 하드웨어 리소스가 필요하므로 각 가상 기능은 한 번에 하나의 게스트에만 할당할 수 있습니다. 가상 머신에는 여러 개의 가상 함수가 있을 수 있습니다. 가상 기능은 일반 네트워크 카드와 동일한 방식으로 네트워크 카드로 표시됩니다.
SR-IOV 드라이버는 커널에 구현됩니다. 코어 구현은 PCI 하위 시스템에 포함되어 있지만 물리 기능(PF) 및 VF(Virtual Function) 장치 모두에 대한 드라이버 지원도 있어야 합니다. SR-IOV 가능 장치는 PF에서 VF를 할당할 수 있습니다. VF는 큐 및 레지스터 세트와 같은 리소스를 통해 물리적 PCI 장치에서 지원되는 PCI 장치로 표시됩니다.

16.2.1. SR-IOV의 이점

SR-IOV 장치는 단일 물리적 포트를 여러 가상 머신과 공유할 수 있습니다.
SR-IOV VF가 가상 머신에 할당되면 (가상 머신과 이전)으로 구성할 수 있습니다. 모든 네트워크 트래픽을 특정 VLAN에 남겨 두는 모든 네트워크 트래픽을 특정 VLAN에 배치합니다. 가상 머신은 해당 트래픽이 VLAN에 태그되고 있음을 감지할 수 없으며 이 태그를 변경하거나 제거할 수 없습니다.
가상 함수는 거의 네이티브 성능을 가지며 반가상화 드라이버 및 에뮬레이션된 액세스보다 더 나은 성능을 제공합니다. 가상 기능은 데이터가 하드웨어에 의해 관리 및 제어되는 것과 동일한 물리 서버의 가상 머신 간의 데이터 보호 기능을 제공합니다.
이러한 기능을 통해 데이터 센터 내의 호스트에서 가상 시스템 밀도를 높일 수 있습니다.
SR-IOV는 여러 게스트가 있는 장치의 대역폭을 더 잘 활용할 수 있습니다.

16.2.2. SR-IOV 사용

이 섹션에서는 PCI 패스스루를 사용하여 SR-IOV 가능 멀티포트 네트워크 카드의 가상 기능을 네트워크 장치로 할당하는 방법을 설명합니다.
SR-IOV VF(가상 기능)는 virsh edit 또는 virsh attach-device 명령을 사용하여 <hostdev> 에 장치 항목을 추가하여 가상 머신에 할당할 수 있습니다. 그러나 일반 네트워크 장치와 달리 SR-IOV VF 네트워크 장치에는 고유한 영구 MAC 주소가 없으므로 호스트가 재부팅될 때마다 새 MAC 주소가 할당되기 때문에 문제가 발생할 수 있습니다. 이로 인해 호스트를 재부팅한 후 게스트에 동일한 VF가 할당되더라도 게스트가 새 MAC 주소를 갖는 네트워크 어댑터를 결정합니다. 결과적으로 게스트는 매번 새로운 하드웨어가 연결되었다고 생각하며 일반적으로 게스트의 네트워크 설정을 재구성해야 합니다.
libvirt 에는 <interface type='hostdev'> 인터페이스 장치가 포함되어 있습니다. 이 인터페이스 장치를 사용하여 libvirt 는 먼저 표시된 네트워크별 하드웨어/switch 초기화를 수행합니다(예: MAC 주소, VLAN 태그 또는 802.1Qbh 가상 포트 매개 변수 설정 등) 게스트에 PCI 장치 할당을 수행합니다.
<interface type='hostdev'> 인터페이스 장치를 사용하려면 다음을 수행해야 합니다.
  • SR-IOV 가능 네트워크 카드
  • Intel VT-d 또는 AMD IOMMU 확장 기능을 지원하는 호스트 하드웨어
  • 할당할 VF의 PCI 주소입니다.
중요
SR-IOV 장치를 가상 머신에 할당하려면 호스트 하드웨어에서 Intel VT-d 또는 AMD IOMMU 사양을 지원해야 합니다.
Intel 또는 AMD 시스템에 SR-IOV 네트워크 장치를 연결하려면 다음 절차를 따르십시오.

절차 16.8. Intel 또는 AMD 시스템에 SR-IOV 네트워크 장치 연결

  1. BIOS 및 커널에서 Intel VT-d 또는 AMD IOMMU 사양 활성화

    Intel 시스템에서 BIOS에서 아직 활성화되지 않은 경우 Intel VT-d를 활성화합니다. BIOS 및 커널에서 Intel VT-d를 활성화하는 방법에 대한 도움말은 절차 16.1. “PCI 장치 할당을 위한 Intel 시스템 준비” 을 참조하십시오.
    Intel VT-d가 이미 활성화되어 있고 작동하는 경우 이 단계를 건너뜁니다.
    AMD 시스템에서 BIOS에서 AMD IOMMU 사양이 아직 활성화되지 않은 경우 이를 활성화합니다. BIOS에서 IOMMU 활성화에 대한 도움말은 절차 16.2. “PCI 장치 할당을 위한 AMD 시스템 준비” 을 참조하십시오.
  2. 지원 확인

    SR-IOV 기능이 있는 PCI 장치가 탐지되었는지 확인합니다. 이 예에서는 SR-IOV를 지원하는 Intel 82576 네트워크 인터페이스 카드를 나열합니다. lspci 명령을 사용하여 장치가 감지되었는지 확인합니다.
    # lspci
    03:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    03:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    다른 모든 장치를 제거하도록 출력이 수정되었습니다.
  3. 가상 함수 활성화

    다음 명령을 실행합니다.
    # echo ${num_vfs} > /sys/class/net/enp14s0f0/device/sriov_numvfs
  4. 가상 함수를 영구적으로 설정

    재부팅할 때 Virtual Functions를 영구적으로 유지하려면 선택한 편집기를 사용하여 다음과 유사한 udev 규칙을 만듭니다. 여기서 원하는 VF 수(이 예에서는 2), 네트워크 인터페이스 카드에서 지원되는 한도까지 지정합니다. 다음 예에서 enp14s0f0 을 PF 네트워크 장치 이름으로 바꾸고 사용 중인 드라이버와 일치하도록 ENV{ID_NET_DRIVER} 값을 조정합니다.
    # vim /etc/udev/rules.d/enp14s0f0.rules
    ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe",
    ATTR{device/sriov_numvfs}="2"
    
    이렇게 하면 부팅 시 기능이 활성화됩니다.
  5. 새 가상 함수 검사

    lspci 명령을 사용하여 Intel 82576 네트워크 장치에 연결된 새로 추가된 가상 기능을 나열합니다. (참고로 grep 을 사용하여 Virtual Functions를 지원하는 장치를 검색하려면 grep을 사용하여 가상 함수 를 검색합니다.)
    # lspci | grep 82576
    0b:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    0b:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    0b:10.0 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.1 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.2 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.3 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.4 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.5 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.6 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.7 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.0 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.1 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.2 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.3 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.4 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.5 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    PCI 장치의 식별자는 lspci 명령의 -n 매개 변수를 사용하여 확인할 수 있습니다. 물리 함수는 0b:00.00b:00.1 에 해당합니다. 모든 가상 함수에는 설명에 가상 기능이 있습니다.
  6. virsh를 사용하여 장치 확인

    libvirt 서비스는 가상 머신에 장치를 추가하기 전에 장치를 인식해야 합니다. libvirtlspci 출력과 유사한 표기법을 사용합니다. 모든 구두점 문자 :.. lspci 출력에서는 밑줄(_)으로 변경됩니다.
    virsh nodedev-list 명령과 grep 명령을 사용하여 사용 가능한 호스트 장치 목록에서 Intel 82576 네트워크 장치를 필터링합니다. 0B 는 이 예제에서 Intel 82576 네트워크 장치의 필터입니다. 시스템에 따라 다를 수 있으며 추가 장치가 발생할 수 있습니다.
    # virsh nodedev-list | grep 0b
    pci_0000_0b_00_0
    pci_0000_0b_00_1
    pci_0000_0b_10_0
    pci_0000_0b_10_1
    pci_0000_0b_10_2
    pci_0000_0b_10_3
    pci_0000_0b_10_4
    pci_0000_0b_10_5
    pci_0000_0b_10_6
    pci_0000_0b_11_7
    pci_0000_0b_11_1
    pci_0000_0b_11_2
    pci_0000_0b_11_3
    pci_0000_0b_11_4
    pci_0000_0b_11_5
    가상 기능 및 물리 함수의 PCI 주소는 목록에 있어야 합니다.
  7. virsh를 사용하여 장치 세부 정보 가져오기

    pci_0000_0b_00_0 은 물리 함수 중 하나이며, pci_0000_0b_10_0 은 해당 물리 함수의 첫 번째 해당 가상 기능입니다. virsh nodedev-dumpxml 명령을 사용하여 두 장치에 대한 장치 세부 정보를 가져옵니다.
    # virsh nodedev-dumpxml pci_0000_03_00_0
    <device>
      <name>pci_0000_03_00_0</name>
      <path>/sys/devices/pci0000:00/0000:00:01.0/0000:03:00.0</path>
      <parent>pci_0000_00_01_0</parent>
      <driver>
        <name>igb</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>3</bus>
        <slot>0</slot>
        <function>0</function>
        <product id='0x10c9'>82576 Gigabit Network Connection</product>
        <vendor id='0x8086'>Intel Corporation</vendor>
        <capability type='virt_functions'>
          <address domain='0x0000' bus='0x03' slot='0x10' function='0x0'/>
          <address domain='0x0000' bus='0x03' slot='0x10' function='0x2'/>
          <address domain='0x0000' bus='0x03' slot='0x10' function='0x4'/>
          <address domain='0x0000' bus='0x03' slot='0x10' function='0x6'/>
          <address domain='0x0000' bus='0x03' slot='0x11' function='0x0'/>
          <address domain='0x0000' bus='0x03' slot='0x11' function='0x2'/>
          <address domain='0x0000' bus='0x03' slot='0x11' function='0x4'/>
        </capability>
        <iommuGroup number='14'>
          <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
          <address domain='0x0000' bus='0x03' slot='0x00' function='0x1'/>
        </iommuGroup>
      </capability>
    </device>
    # virsh nodedev-dumpxml pci_0000_03_11_5
    <device>
      <name>pci_0000_03_11_5</name>
      <path>/sys/devices/pci0000:00/0000:00:01.0/0000:03:11.5</path>
      <parent>pci_0000_00_01_0</parent>
      <driver>
        <name>igbvf</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>3</bus>
        <slot>17</slot>
        <function>5</function>
        <product id='0x10ca'>82576 Virtual Function</product>
        <vendor id='0x8086'>Intel Corporation</vendor>
        <capability type='phys_function'>
          <address domain='0x0000' bus='0x03' slot='0x00' function='0x1'/>
        </capability>
        <iommuGroup number='35'>
          <address domain='0x0000' bus='0x03' slot='0x11' function='0x5'/>
        </iommuGroup>
      </capability>
    </device>
    이 예에서는 8단계의 가상 머신에 Virtual Function pci_0000_03_10_2 를 추가합니다. 가상 함수의 버스,슬롯 및 함수 매개 변수는 장치를 추가하는 데 필요합니다.
    예를 들어 이러한 매개변수를 임시 XML 파일(예: /tmp/new-interface.xml )에 복사합니다.
       <interface type='hostdev' managed='yes'>
         <source>
           <address type='pci' domain='0x0000' bus='0x03' slot='0x10' function='0x2'/>
         </source>
       </interface>
    참고
    가상 머신이 시작되면 MAC 주소가 구성된 물리적 어댑터에서 제공하는 유형의 네트워크 장치가 표시됩니다. 이 MAC 주소는 호스트 및 게스트 재부팅 시 변경되지 않습니다.
    다음 <interface> 예제에서는 선택적 <mac address>, <virtualport>, <vlan> 요소의 구문을 보여줍니다. 실제로 예제와 같이 둘 다 동시에 사용할 수 없는 <vlan> 또는 <virtualport> 요소를 사용합니다.
    ...
     <devices>
       ...
       <interface type='hostdev' managed='yes'>
         <source>
           <address type='pci' domain='0' bus='11' slot='16' function='0'/>
         </source>
         <mac address='52:54:00:6d:90:02'>
         <vlan>
            <tag id='42'/>
         </vlan>
         <virtualport type='802.1Qbh'>
           <parameters profileid='finance'/>
         </virtualport>
       </interface>
       ...
     </devices>
    MAC 주소를 지정하지 않으면 자동으로 생성됩니다. <virtualport> 요소는 pxeQbh 하드웨어 스위치에 연결할 때만 사용됩니다. <vlan> 요소는 게스트의 장치를 VLAN 태그 42 에 투명하게 배치합니다.
  8. 가상 머신에 가상 기능 추가

    이전 단계에서 만든 임시 파일과 함께 다음 명령을 사용하여 가상 머신에 가상 기능을 추가합니다. 이는 새 장치를 즉시 연결하고 후속 게스트를 다시 시작하기 위해 저장합니다.
    virsh attach-device MyGuest /tmp/new-interface.xml --live --config
    
    virsh attach-device--live 옵션을 지정하면 새 장치가 실행 중인 게스트에 연결됩니다. --config 옵션을 사용하면 향후 게스트가 다시 시작된 후 새 장치를 사용할 수 있습니다.
    참고
    --live 옵션은 게스트가 실행 중인 경우에만 허용됩니다. virsh 는 실행 중인 게스트에서 --live 옵션이 사용되는 경우 오류를 반환합니다.
가상 머신이 새 네트워크 인터페이스 카드를 감지합니다. 이 새 카드는 SR-IOV 장치의 가상 기능입니다.

16.2.3. SR-IOV 장치를 사용하여 PCI 할당 구성

SR-IOV 네트워크 카드는 PCI 장치 할당을 사용하여 각각 게스트 가상 머신에 개별적으로 할당할 수 있는 여러 VF를 제공합니다. 할당되면 각 작업은 전체 물리적 네트워크 장치 역할을 합니다. 이를 통해 많은 게스트 가상 머신에서 직접 PCI 장치 할당의 성능을 활용하는 동시에 호스트 물리적 머신에서 단일 슬롯만 사용할 수 있습니다.
이러한 VF는 <hostdev> 요소를 사용하여 기존 방식으로 게스트 가상 머신에 할당할 수 있습니다. 그러나 SR-IOV VF 네트워크 장치에는 영구적인 MAC 주소가 없으므로 호스트 물리적 머신이 재부팅될 때마다 게스트 가상 머신의 네트워크 설정을 다시 구성해야 하는 문제가 발생합니다. 이 문제를 해결하려면 게스트 가상 머신을 부팅할 때마다 VF를 호스트 물리적 머신에 할당하기 전에 MAC 주소를 설정해야 합니다. 이 MAC 주소 및 기타 옵션을 할당하려면 다음 절차를 참조하십시오.

절차 16.9. SR-IOV에서 PCI 장치를 할당하는 MAC 주소, vLAN, 가상 포트 구성

<mac>,<vlan>, <virtualport> 요소는 < <hostdev> > 의 유효한 하위 항목이 아니기 때문에 MAC 주소 할당, vLAN 태그 ID 할당 또는 가상 포트 할당과 같은 함수별 항목에 사용할 수 없습니다. 대신, 이러한 요소는 hostdev 인터페이스 유형: <interface type='hostdev'> 와 함께 사용할 수 있습니다. 이 장치 유형은 <인터페이스><hostdev> 의 하이브리드 역할을 합니다. 따라서 게스트 가상 머신에 PCI 장치를 할당하기 전에 libvirt 는 표시된 네트워크별 하드웨어/switch를 초기화합니다(예: MAC 주소 설정, vLAN 태그 설정 또는 게스트 가상 시스템의 XML 구성 파일에서 802.1Qbh 스위치와 연결) vLAN 태그 설정에 대한 자세한 내용은 17.16절. “vLAN 태그 설정” 을 참조하십시오.
  1. 정보 수집

    <인터페이스 type='hostdev'> 를 사용하려면 SR-IOV 가능 네트워크 카드, Intel VT-d 또는 AMD IOMMU 확장 기능을 지원하는 실제 머신 하드웨어가 있고 할당하려는 VF의 PCI 주소를 알아야 합니다.
  2. 게스트 가상 머신 종료

    virsh shutdown 명령을 사용하여 guest 가상 머신을 종료 합니다(여기서는 guestVM).
    # virsh shutdown guestVM
  3. 편집할 XML 파일을 엽니다.

    # virsh edit guestVM.xml
    선택 사항: virsh save 명령으로 생성된 XML 구성 파일의 경우 다음을 실행합니다.
    # virsh save-image-edit guestVM.xml --running 
    설정 파일(이 예에서는 guestVM.xml )이 기본 편집기에서 열립니다. 자세한 내용은 참조하십시오. 20.7.5절. “게스트 가상 머신 구성 편집”
  4. XML 파일 편집

    다음과 유사한 <장치> 항목이 있도록 구성 파일(guestVM.xml)을 업데이트합니다.

    그림 16.11. hostdev 인터페이스 유형의 도메인 XML 샘플

    
     <devices>
       ...
       <interface type='hostdev' managed='yes'>
         <source>
           <address type='pci' domain='0x0' bus='0x00' slot='0x07' function='0x0'/> <!--these values can be decimal as well-->
         </source>
         <mac address='52:54:00:6d:90:02'/>                                         <!--sets the mac address-->
         <virtualport type='802.1Qbh'>                                              <!--sets the virtual port for the 802.1Qbh switch-->
           <parameters profileid='finance'/>
         </virtualport>
         <vlan>                                                                     <!--sets the vlan tag-->
          <tag id='42'/>
         </vlan>
       </interface>
       ...
     </devices>
    
    
    참고
    MAC 주소를 제공하지 않으면 다른 유형의 인터페이스 장치와 마찬가지로 MAC 주소가 자동으로 생성됩니다. 또한 <virtualport> 요소는 pxeQgh 하드웨어 스위치에 연결하는 경우에만 사용됩니다. accessibilityQbg (VEPA") 스위치는 현재 지원되지 않습니다.
  5. 게스트 가상 머신 재시작

    virsh start 명령을 실행하여 2단계에서 종료한 게스트 가상 머신을 재시작합니다. 자세한 내용은 20.6절. “가상 머신 시작, 다시 시작 및 복원”를 참조하십시오.
     # virsh start guestVM 
    게스트 가상 머신이 시작되면 MAC 주소가 구성된 물리적 호스트 시스템의 어댑터에서 제공하는 네트워크 장치가 표시됩니다. 이 MAC 주소는 게스트 가상 머신과 호스트 물리적 시스템 재부팅 간에 변경되지 않고 유지됩니다.

16.2.4. SR-IOV 가상 함수 풀에서 PCI 장치 할당 설정

게스트 구성에 특정 VF(Virtual Functions)의 PCI 주소를 하드 코딩하면 두 가지 중요한 제한 사항이 있습니다.
  • 게스트 가상 머신이 시작될 때마다 지정된 VF를 사용할 수 있어야 합니다. 따라서 관리자는 각 VF를 단일 게스트 가상 머신에 영구적으로 할당해야 합니다(또는 게스트 가상 머신이 시작될 때마다 현재 사용되지 않는 VF의 PCI 주소를 지정하도록 모든 게스트 가상 머신의 구성 파일을 수정해야 합니다.
  • 게스트 가상 머신을 다른 호스트 물리적 시스템으로 이동하는 경우 해당 호스트 물리적 시스템의 하드웨어는 PCI 버스의 동일한 위치에 있어야 합니다(또는 시작하기 전에 게스트 가상 머신 구성을 수정해야 합니다).
SR-IOV 장치의 모든 VF가 포함된 장치 풀을 사용하여 libvirt 네트워크를 생성하여 이러한 문제를 해결할 수 있습니다. 이 작업이 완료되면 이 네트워크를 참조하도록 guest 가상 머신을 구성합니다. 게스트가 시작될 때마다 풀에서 단일 VF가 할당되고 게스트 가상 머신에 할당됩니다. 게스트 가상 머신이 중지되면 다른 게스트 가상 머신에서 사용할 수 있도록 VF가 풀로 반환됩니다.

절차 16.10. 장치 풀 생성

  1. 게스트 가상 머신 종료

    virsh shutdown 명령을 사용하여 guest 가상 머신을 종료 합니다. 여기서 guestVM.
    # virsh shutdown guestVM
  2. 구성 파일 생성

    선택한 편집기를 사용하여 /tmp 디렉터리에 XML 파일(예: passthrough.xml )을 만듭니다. pf dev='eth3 을 고유한 SR-IOV 장치 물리 기능 (PF)의 netdev 이름으로 교체해야 합니다.
    다음은 호스트 물리적 머신의 "eth3'에 PF에서 SR-IOV 어댑터의 모든 VF 풀을 사용할 수 있도록 하는 네트워크 정의의 예입니다.

    그림 16.12. 네트워크 정의 도메인 XML 샘플

          
    <network>
       <name>passthrough</name> <!-- This is the name of the file you created -->
       <forward mode='hostdev' managed='yes'>
         <pf dev='myNetDevName'/>  <!-- Use the netdev name of your SR-IOV devices PF here -->
       </forward>
    </network>
          
    
    
  3. 새 XML 파일을 로드합니다.

    다음 명령을 입력하고 /tmp/passthrough.xml 을 이전 단계에서 생성한 XML 파일의 이름 및 위치로 바꿉니다.
    # virsh net-define /tmp/passthrough.xml
  4. 게스트 다시 시작

    passthrough.xml 을 이전 단계에서 생성한 XML 파일 이름으로 교체하여 다음을 실행합니다.
     # virsh net-autostart passthrough # virsh net-start passthrough 
  5. 게스트 가상 머신 다시 시작

    virsh start 명령을 실행하여 첫 번째 단계에서 종료한 게스트 가상 시스템을 다시 시작합니다(예: guestVM을 게스트 가상 시스템의 도메인 이름으로 사용). 자세한 내용은 20.6절. “가상 머신 시작, 다시 시작 및 복원”를 참조하십시오.
     # virsh start guestVM 
  6. 장치에 대한 패스스루 시작

    단일 장치만 표시되더라도 libvirt는 게스트 가상 머신이 다음과 같은 도메인 XML의 인터페이스 정의로 처음 시작될 때 해당 PF와 연결된 모든 VF 목록을 자동으로 파생합니다.

    그림 16.13. 인터페이스 네트워크 정의를 위한 도메인 XML 샘플

             
    <interface type='network'>
       <source network='passthrough'>
    </interface>
          
    
    
  7. 검증

    네트워크를 사용하는 첫 번째 게스트를 시작한 후 virsh net-dumpxml passthrough 명령을 실행하여 이를 확인할 수 있습니다. 다음과 유사한 출력이 표시됩니다.

    그림 16.14. XML 덤프 파일 패스스루 컨텐츠

          
    <network connections='1'>
       <name>passthrough</name>
       <uuid>a6b49429-d353-d7ad-3185-4451cc786437</uuid>
       <forward mode='hostdev' managed='yes'>
         <pf dev='eth3'/>
         <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x1'/>
         <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x3'/>
         <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x5'/>
         <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x7'/>
         <address type='pci' domain='0x0000' bus='0x02' slot='0x11' function='0x1'/>
         <address type='pci' domain='0x0000' bus='0x02' slot='0x11' function='0x3'/>
         <address type='pci' domain='0x0000' bus='0x02' slot='0x11' function='0x5'/>
       </forward>
    </network>
          
    
    

16.2.5. SR-IOV 제한

SR-IOV는 다음 장치에서만 철저하게 테스트됩니다.
  • Intel® 82576NS 기가비트 이더넷 컨트롤러 (igb 드라이버)
  • Intel® 82576EB 기가비트 이더넷 컨트롤러(igb 드라이버)
  • Intel® 82599ES 10 Gigabit Ethernet Controller (ixgbe 드라이버)
  • Intel® 82599EB 10 기가비트 이더넷 컨트롤러(ixgbe 드라이버)
다른 SR-IOV 장치가 작동할 수 있지만 릴리스 시점에는 테스트되지 않았습니다.

16.3. USB 장치

이 섹션에서는 USB 장치를 처리하는 데 필요한 명령을 제공합니다.

16.3.1. 게스트 가상 머신에 USB 장치 할당

웹 카메라, 카드 리더, 디스크 드라이브, 키보드와 같은 대부분의 장치는 USB 포트 및 케이블을 사용하여 컴퓨터에 연결되어 있습니다. 이러한 장치를 게스트 가상 머신에 전달하는 방법은 다음 두 가지가 있습니다.
  • USB 패스스루 사용 - 게스트 가상 머신을 호스팅하는 호스트 물리적 머신에 장치를 물리적으로 연결해야 합니다. 이 경우에는 SPICE가 필요하지 않습니다. 호스트의 USB 장치를 명령줄 또는 virt-manager 로 게스트로 전달할 수 있습니다. virt 관리자 지침은 19.3.2절. “게스트 가상 머신에 USB 장치 연결” 을 참조하십시오. virt-manager 명령은 핫 플러그 또는 핫플러그 장치에 적합하지 않습니다. USB 장치를 핫 플러그/연결 해제하려면 절차 20.4. “게스트 가상 머신에서 사용할 USB 장치 핫 플러그” 를 참조하십시오.
  • USB 리디렉션 사용 - USB 리디렉션은 데이터 센터에서 실행되는 호스트 물리적 시스템이 있는 경우 가장 적합합니다. 사용자가 로컬 시스템 또는 씬 클라이언트의 게스트 가상 머신에 연결합니다. 로컬 시스템에 SPICE 클라이언트가 있습니다. 사용자는 모든 USB 장치를 씬 클라이언트에 연결할 수 있으며 SPICE 클라이언트는 데이터 센터의 호스트 물리적 시스템으로 장치를 리디렉션하므로 씬 클라이언트에서 실행 중인 게스트 가상 시스템에서 사용할 수 있습니다. virt-manager 를 통한 자세한 내용은 19.3.3절. “USB Redirection” 를 참조하십시오.

16.3.2. USB 장치 재시작 시 제한 설정

리디렉션에서 특정 장치를 필터링하려면 filter 속성을 -device usb-redir 로 전달합니다. filter 속성은 필터 규칙으로 구성된 문자열을 사용하며 규칙 형식은 다음과 같습니다.
<class>:<vendor>:<product>:<version>:<allow>
-1 을 사용하여 특정 필드에 대한 값을 수락하도록 지정합니다. |를 사용하여 동일한 명령줄에서 여러 규칙을 구분 기호로 사용할 수 있습니다. 장치가 통과된 규칙 중 하나와 일치하지 않는 경우 이를 리디렉션할 수 없습니다.

예 16.1. 게스트 가상 머신을 사용하여 리디렉션 제한의 예

  1. 게스트 가상 머신을 준비합니다.
  2. 게스트 가상 머신의 도메인 XML 파일에 다음 코드 발췌를 추가합니다.
        <redirdev bus='usb' type='spicevmc'>
          <alias name='redir0'/>
          <address type='usb' bus='0' port='3'/>
        </redirdev>
        <redirfilter>
          <usbdev class='0x08' vendor='0x1234' product='0xBEEF' version='2.0' allow='yes'/>
          <usbdev class='-1' vendor='-1' product='-1' version='-1' allow='no'/>
        </redirfilter>
    
  3. 게스트 가상 머신을 시작하고 다음을 실행하여 설정 변경 사항을 확인합니다.
    #ps -ef | grep $guest_name
    -device usb-redir,chardev=charredir0,id=redir0,/
    filter=0x08:0x1234:0xBEEF:0x0200:1|-1:-1:-1:-1:0,bus=usb.0,port=3
  4. USB 장치를 호스트 물리적 머신에 연결하고 virt-manager 를 사용하여 게스트 가상 머신에 연결합니다.
  5. 메뉴에서 USB 장치 선택을 클릭하면 다음 메시지가 생성됩니다. "일부 USB 장치는 호스트 정책에 의해 차단됩니다. 확인 을 클릭하여 확인하고 계속합니다.
    필터가 적용됩니다.
  6. 필터가 USB 장치 공급업체와 제품을 올바르게 캡처하는지 확인하려면 USB 리디렉션을 허용하도록 호스트 물리적 시스템의 도메인 XML에서 다음과 같이 변경하십시오.
       <redirfilter>
          <usbdev class='0x08' vendor='0x0951' product='0x1625' version='2.0' allow='yes'/>
          <usbdev allow='no'/>
        </redirfilter>
    
  7. 게스트 가상 머신을 재시작한 다음 virt-viewer 를 사용하여 게스트 가상 시스템에 연결합니다. 이제 USB 장치가 트래픽을 게스트 가상 머신으로 리디렉션합니다.

16.4. 장치 컨트롤러 구성

게스트 가상 머신 아키텍처에 따라 일부 장치 버스는 가상 컨트롤러에 연결된 가상 장치 그룹과 함께 두 번 이상 나타날 수 있습니다. 일반적으로 libvirt는 명시적 XML 태그 없이 이러한 컨트롤러를 자동으로 유추할 수 있지만 경우에 따라 가상 컨트롤러 요소를 명시적으로 설정하는 것이 좋습니다.

그림 16.15. 가상 컨트롤러의 도메인 XML 예


  ...
  <devices>
    <controller type='ide' index='0'/>
    <controller type='virtio-serial' index='0' ports='16' vectors='4'/>
    <controller type='virtio-serial' index='1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
    </controller>
    ...
  </devices>
  ...
각 컨트롤러에는 다음 중 하나여야 하는 필수 특성 <컨트롤러 유형> 이 있습니다.
  • IDE
  • fdc
  • scsi
  • SATA
  • usb
  • CCID
  • virtio-serial
  • pci
<컨트롤러> 요소에는 버스 <컨트롤러가 발생하는 순서대로 설명하는 10진수 정수인 필수 특성 컨트롤러 인덱스> 가 있습니다( <Address> 요소의 컨트롤러 특성에 사용하기 위해). <컨트롤러 유형 ='virtio-serial'인 경우 컨트롤러를> 통해 연결할 수 있는 장치 수를 제어하는 두 가지 추가 선택적 속성( 포트벡터)이 있습니다.
<컨트롤러 유형 ='scsi'> 인 경우 선택적 특성 모델 모델이 있으며 이는 다음 값을 가질 수 있습니다.
  • auto
  • buslogic
  • ibmvscsi
  • lsilogic
  • lsisas1068
  • lsisas1078
  • virtio-scsi
  • vmpvscsi
<컨트롤러 유형 ='usb'> 인 경우 선택적 특성 모델 모델이 있으며 이는 다음 값을 가질 수 있습니다.
  • piix3-uhci
  • piix4-uhci
  • EHCI
  • ich9-ehci1
  • ich9-uhci1
  • ich9-uhci2
  • ich9-uhci3
  • vt82c686b-uhci
  • pci-ohci
  • NEC-xhci
게스트 가상 머신에 USB 버스를 명시적으로 비활성화해야 하는 경우 <model='none'> 을 사용할 수 있습니다.
PCI 또는 USB 버스에 있는 컨트롤러의 경우 선택적 하위 element <주소는> 16.5절. “장치용 주소 설정” 에 표시된 대로 의미 체계와 함께 마스터 버스에 컨트롤러의 정확한 관계를 지정할 수 있습니다.
선택적 하위 요소 <드라이버는 드라이버> 별 옵션을 지정할 수 있습니다. 현재 컨트롤러의 큐 수를 지정하는 특성 대기열만 지원합니다. 최적의 성능을 위해 vCPU 수와 일치하는 값을 지정하는 것이 좋습니다.
USB companion 컨트롤러에는 <마스터> 컨트롤러와의 파트너의 정확한 관계를 지정하는 선택적 하위 요소 마스터가 있습니다. 동반 컨트롤러는 마스터와 동일한 버스에 있으므로 그에 동반되는 인덱스 값이 동일해야 합니다.
사용할 수 있는 XML 예는 다음과 같습니다.

그림 16.16. USB 컨트롤러의 도메인 XML 예

   
     ...
  <devices>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0' bus='0' slot='4' function='7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0' bus='0' slot='4' function='0' multifunction='on'/>
    </controller>
    ...
  </devices>
  ...
   

PCI 컨트롤러에는 다음과 같은 가능한 값이 있는 선택적 모델 속성이 있습니다.
  • pci-root
  • pcie-root
  • pci-bridge
  • dmi-to-pci-bridge
암시적 PCI 버스를 제공하는 머신 유형의 경우 index='0 이 있는 pci-root 컨트롤러가 자동으로 추가되며 PCI 장치를 사용하는 데 필요합니다. pci-root에는 주소가 없습니다. PCI 브리지는 model='pci-root' 에서 제공하는 하나의 버스에 너무 많은 장치가 없거나 0보다 큰 PCI 버스 번호가 지정된 경우 자동으로 추가됩니다. PCI 브리지는 수동으로 지정할 수도 있지만, 해당 주소에는 이미 지정된 PCI 컨트롤러에서 제공하는 PCI 버스만 확인해야 합니다. PCI 컨트롤러 인덱스에서 간격을 남겨 두면 잘못된 구성이 발생할 수 있습니다. 다음 XML 예제를 <devices> 섹션에 추가할 수 있습니다.

그림 16.17. PCI 브릿지의 도메인 XML 예


  ...
  <devices>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='pci' index='1' model='pci-bridge'>
      <address type='pci' domain='0' bus='0' slot='5' function='0' multifunction='off'/>
    </controller>
  </devices>
  ...
암시적 PCI Express(PCIe) 버스(예: Q35 칩셋 기반 시스템 유형)의 경우 index='0의 auto-added는 도메인 구성에 자동으로 추가됩니다. profileie-root에는 주소가 없지만 31개의 슬롯 (numbered 1-31)만 사용할 수 있습니다. PCie-root 컨트롤러가 있는 시스템에서 표준 PCI 장치를 연결하기 위해 model='dmi-to-pci-bridge' 가 있는 pci 컨트롤러가 자동으로 추가됩니다. dmi-to-pci-bridge 컨트롤러는 PCIe 슬롯에 연결되며 (PCie-root에서 제공하는 경우) 31개의 표준 PCI 슬롯(사용할 수 없음)을 제공합니다. 게스트 시스템에 핫 플러그형 PCI 슬롯을 사용하기 위해 pci-bridge 컨트롤러도 자동으로 생성되고 자동 생성된 dmi-to-pci-bridge 컨트롤러의 슬롯 중 하나에 연결됩니다. libvirt 에 의해 자동 결정된 PCI 주소가 있는 모든 게스트 장치는 이 pci-bridge 장치에 배치됩니다.

그림 16.18. PCIe(PCI 표현)의 도메인 XML 예

   
     ...
  <devices>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='dmi-to-pci-bridge'>
      <address type='pci' domain='0' bus='0' slot='0xe' function='0'/>
    </controller>
    <controller type='pci' index='2' model='pci-bridge'>
      <address type='pci' domain='0' bus='1' slot='1' function='0'/>
    </controller>
  </devices>
  ...
   

다음 XML 구성은 USB 3.0 / xHCI 에뮬레이션에 사용됩니다.

그림 16.19. USB3/xHCI 장치의 도메인 XML 예

   
     ...
  <devices>
    <controller type='usb' index='3' model='nec-xhci'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0f' function='0x0'/>
    </controller>
  </devices>
    ...

16.5. 장치용 주소 설정

많은 장치에는 게스트 가상 머신에 표시되는 가상 버스에 장치가 배치되는 위치를 설명하는 데 사용되는 선택적 <주소> 하위 요소가 있습니다. 입력 시 주소(또는 주소 내의 선택적 속성)가 생략된 경우 libvirt 는 적절한 주소를 생성하지만 레이아웃을 추가로 제어해야 하는 경우 명시적 주소가 필요합니다. <address> 요소를 포함하는 도메인 XML 장치 예제는 그림 16.9. “PCI 장치 할당의 XML 예” 을 참조하십시오.
모든 주소에는 장치가 있는 버스를 설명하는 필수 속성 유형이 있습니다. 지정된 장치에 사용할 주소를 선택하는 것은 장치 및 게스트 가상 머신의 아키텍처로 제한됩니다. 예를 들어 <디스크> 장치는 type=' drive' 를 사용하지만 <콘솔> 장치는 i686 또는 x86_64 게스트 가상 머신 아키텍처 에서 type='pci' 를 사용합니다. 각 주소 유형에는 버스가 표에 설명된 대로 배치될 위치를 제어하는 추가 선택적 속성이 있습니다.

표 16.1. 지원되는 장치 주소 유형

주소 유형 설명
type='pci' PCI 주소에는 다음과 같은 추가 속성이 있습니다.
  • domain( qemu에서 현재 사용하지 않는 2바이트 16진수 정수)
  • 버스 (포함 0에서 0xff 사이의 16진수 값 포함)
  • 슬롯 (0x0과 0x1f 사이의 16진수 값 포함)
  • 함수 (0에서 7 포함) 사이의 값
  • Multifunction 컨트롤은 PCI 제어 레지스터의 특정 슬롯/기능에 대해 멀티 함수 비트를 켜는 컨트롤은 기본적으로 'off'로 설정되지만 여러 함수가 사용되는 슬롯의 함수 0에 대해 'on'으로 설정해야 합니다.
type='drive' 드라이브 주소에는 다음과 같은 추가 속성이 있습니다.
  • 컨트롤러 (두 자리 컨트롤러 번호)
  • 버스 (두 자리 버스 번호)
  • 대상(두 자리 버스 번호)
  • 단위 (버스의 2자리 단위 번호)
type='virtio-serial' 각 virtio-serial 주소에는 다음과 같은 추가 속성이 있습니다.
  • 컨트롤러 (두 자리 컨트롤러 번호)
  • 버스 (두 자리 버스 번호)
  • 슬롯 (버스 내 2자리 슬롯)
type='ccid' 스마트 카드용 CCID 주소는 다음과 같은 추가 속성을 갖습니다.
  • 버스 (두 자리 버스 번호)
  • 슬롯 속성 (버스 내 2자리 슬롯)
type='usb' USB 주소에는 다음과 같은 추가 속성이 있습니다.
  • 버스 (포함 0에서 0xfff 사이의 16 진수 값 포함)
  • 포트( 1.2 또는 2.1.3.1과 같은 최대 4개의 8개의 8개의 8개의 8개)의 점선 표기법입니다.
type='isa' RuntimeClass 주소에는 다음과 같은 추가 속성이 있습니다.
  • iobase
  • irq

16.6. 임의 번호 생성기 장치

운영 체제 보안에 난수 생성기가 매우 중요합니다. Red Hat Enterprise Linux 7에는 가상 운영 체제의 보안을 위해 게스트에 요청에 대한 새로운 엔트로피를 제공할 수 있는 가상 하드웨어 난수 생성기 장치인 virtio-rng 가 포함되어 있습니다.
호스트 물리적 시스템에서 하드웨어 RNG 인터페이스는 /dev/hwrng 에 chardev를 생성한 다음, 호스트 물리적 머신에서 엔트로피를 가져오도록 읽을 수 있습니다. rngd 데몬과 함께 작동하면 호스트 물리적 시스템의 엔트로피를 게스트 가상 시스템의 /dev/random 로 라우팅할 수 있습니다.
임의의 숫자 생성기를 사용하는 것은 키보드, 마우스 및 기타 입력과 같은 장치가 게스트 가상 머신에서 충분한 엔트로피를 생성하는 데 충분하지 않은 경우 특히 유용합니다. 가상 난수 생성기 장치를 사용하면 호스트 물리적 머신이 게스트 가상 머신 운영 체제에 엔트로피를 통과할 수 있습니다. 이 절차는 명령줄 또는 virt-manager 인터페이스를 사용하여 수행할 수 있습니다. 자세한 내용은 아래를 참조하십시오. virtio-rng 에 대한 자세한 내용은 Red Hat Enterprise Linux Virtual Machines를 참조하십시오. Random Numbers made easy 에 액세스할 수 있습니다.

절차 16.11. 가상 머신 관리자를 사용하여 virtio-rng 구현

  1. 게스트 가상 머신을 종료합니다.
  2. 게스트 가상 머신을 선택하고 편집 메뉴에서 가상 머신 세부 정보를 선택하여 지정된 게스트 가상 머신의 세부 정보 창을 엽니다.
  3. 하드웨어 추가 버튼을 클릭합니다.
  4. 새 가상 하드웨어 추가 창에서 RNG 를 선택하여 Random Number Generator 창을 엽니다.

    그림 16.20. 난수 생성기 창

    난수 생성기 창
    원하는 매개 변수를 입력하고 완료되면 Finish 를 클릭합니다. 매개변수는 virtio-rng 요소 에 설명되어 있습니다.

절차 16.12. 명령줄 툴을 사용하여 virtio-rng 구현

  1. 게스트 가상 머신을 종료합니다.
  2. virsh edit domain-name 명령을 사용하여 원하는 게스트 가상 시스템의 XML 파일을 엽니다.
  3. 다음을 포함하도록 <devices> 요소를 편집합니다.

    그림 16.21. 난수 생성기 장치

    
      ...
      <devices>
        <rng model='virtio'>
          <rate period='2000' bytes='1234'/>
          <backend model='random'>/dev/random</backend>
          <!-- OR -->
          <backend model='egd' type='udp'>
            <source mode='bind' service='1234'/>
            <source mode='connect' host='1.2.3.4' service='1234'/>
          </backend>
        </rng>
      </devices>
      ...
    난수 생성기 장치는 다음과 같은 XML 속성 및 요소를 허용합니다.

    virtio-rng 요소

    • <모델> - 필수 모델 속성은 RNG 장치의 유형을 지정합니다.
    • <백엔드 모델> - <backend> 요소는 게스트에 사용할 엔트로피의 소스를 지정합니다. 소스 모델은 model 특성을 사용하여 구성됩니다. 지원되는 소스 모델에는 'random''egd' 이 있습니다.
      • <백엔드 model='random'> - 이 <백엔드> 유형은 블록 이외의 문자 장치를 입력으로 예상합니다. 이러한 장치의 예는 /dev/random/dev/urandom 입니다. 파일 이름은 <backend> 요소의 콘텐츠로 지정됩니다. 파일 이름이 지정되지 않은 경우 하이퍼바이저 기본값은 사용됩니다.
      • <백엔드 model='egd'> - 이 백엔드는 EGD 프로토콜을 사용하여 소스에 연결됩니다. 소스는 문자 장치로 지정됩니다. 자세한 내용은 문자 장치 호스트 물리적 시스템 인터페이스를 참조하십시오.

16.7. GPU 장치 할당

게스트에 GPU를 할당하려면 다음 방법 중 하나를 사용합니다.
  • GPU PCI 장치 할당 - 이 방법을 사용하면 호스트에서 GPU 장치를 제거하고 단일 게스트에 할당할 수 있습니다.
  • NVIDIA vGPU Assignment - 이 방법을 사용하면 물리적 GPU에서 여러 개의 중재 장치를 생성하고 이러한 장치를 여러 게스트에 가상 GPU로 할당할 수 있습니다. 이는 선택한 NVIDIA GPU에서만 지원되며, 하나의 중재 장치만 게스트에 할당할 수 있습니다.

16.7.1. GPU PCI 장치 할당

Red Hat Enterprise Linux 7은 비VGA 그래픽 장치로 다음 PCIe 기반 GPU 장치의 PCI 장치 할당을 지원합니다.
  • NVIDIA Quadro K-Series, M-Series, P-Series 및 이후 아키텍처 (모델 2000 시리즈 이상)
  • NVIDIA StatefulSet K-Series, M-Series 및 이후 아키텍처
참고
VM에 연결할 수 있는 GPU 수는 RHEL 7에서 현재 32개인 할당된 PCI 장치의 최대 수로 제한됩니다. 그러나 여러 GPU를 가상 머신에 연결하면 게스트에서 메모리 매핑된 I/O(MMIO)에 문제가 발생할 수 있으므로 VM에서 GPU를 사용할 수 없습니다.
이러한 문제를 해결하려면 더 큰 64비트 MMIO 공간을 설정하고 64비트 MMIO 공간을 확장할 수 있도록 vCPU 물리적 주소 비트를 구성합니다.
게스트 가상 머신에 GPU를 할당하려면 호스트 머신에서 I/O Memory Management Unit(IOMMU)을 활성화하고 lspci 명령을 사용하여 GPU 장치를 식별하고, 호스트에서 장치를 분리하고, 게스트에 연결한 다음, 게스트에서 Xorg를 구성해야 합니다.

절차 16.13. 호스트 머신 커널에서 IOMMU 지원 활성화

  1. 커널 명령행 편집

    Intel VT-d 시스템의 경우 IOMMU는 intel_iommu=oniommu=pt 매개변수를 커널 명령 줄에 추가하여 활성화됩니다. AMD-Vi 시스템의 경우 필요한 옵션은 iommu=pt 입니다. 이 옵션을 활성화하려면 다음과 같이 GRUB_CMDLINX_LINUX 행을 /etc/sysconfig/grub 설정 파일에 편집하거나 추가합니다.
    GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_VolGroup00/LogVol01
    vconsole.font=latarcyrheb-sun16 rd.lvm.lv=vg_VolGroup_1/root
    vconsole.keymap=us $([ -x /usr/sbin/rhcrashkernel-param ]  &&
    /usr/sbin/rhcrashkernel-param || :) rhgb quiet intel_iommu=on iommu=pt"
    
    참고
    IOMMU에 대한 자세한 내용은 부록 E. IOMMU 그룹 작업 을 참조하십시오.
  2. 부트 로더 구성 다시 생성

    적용할 커널 명령줄 변경 사항의 경우 grub2-mkconfig 명령을 사용하여 부트 로더 구성을 다시 생성합니다.
    # grub2-mkconfig -o /etc/grub2.cfg
    UEFI 기반 호스트를 사용하는 경우 대상 파일은 /etc/grub2-efi.cfg 여야 합니다.
  3. 호스트 재부팅

    변경 사항을 적용하려면 호스트 시스템을 재부팅합니다.
    # reboot

절차 16.14. 호스트 물리적 머신 드라이버에 바인딩에서 GPU 장치 제외

GPU 할당의 경우 이러한 드라이버에서 장치의 동적 unbinding을 지원하지 않으므로 장치를 호스트 드라이버에 바인딩하는 것을 제외하는 것이 좋습니다.
  1. PCI 버스 주소 식별

    장치의 PCI 버스 주소와 ID를 식별하려면 다음 lspci 명령을 실행합니다. 이 예에서는 NVIDIA Quadro 또는 GRID 카드와 같은 VGA 컨트롤러가 사용됩니다.
    # lspci -Dnn | grep VGA
    0000:02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK106GL [Quadro K4000] [10de:11fa] (rev a1)
    
    그 결과 검색 결과에서는 이 장치의 PCI 버스 주소가 0000:02:00.0이고 장치의 PCI ID는 10de:11fa입니다.
  2. 네이티브 호스트 머신 드라이버가 GPU 장치를 사용하지 못하도록 방지

    네이티브 호스트 머신 드라이버가 GPU 장치를 사용하지 못하도록 하려면 pci-stub 드라이버와 함께 PCI ID를 사용할 수 있습니다. 이렇게 하려면 PCI ID를 값으로 사용하여 pci-stub.ids 옵션을 /etc/sysconfig/grub 구성 파일에 있는 GRUB_CMDLINX_LINUX 줄에 추가하십시오. 예를 들면 다음과 같습니다.
    GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_VolGroup00/LogVol01
    vconsole.font=latarcyrheb-sun16 rd.lvm.lv=vg_VolGroup_1/root
    vconsole.keymap=us $([ -x /usr/sbin/rhcrashkernel-param ]  &&
    /usr/sbin/rhcrashkernel-param || :) rhgb quiet intel_iommu=on iommu=pt pci-stub.ids=10de:11fa"
    
    pci-stub에 대한 PCI ID를 추가하려면 쉼표로 구분합니다.
  3. 부트 로더 구성 다시 생성

    이 옵션을 포함하도록 grub2-mkconfig 를 사용하여 부트 로더 구성을 다시 생성합니다.
    # grub2-mkconfig -o /etc/grub2.cfg
    UEFI 기반 호스트를 사용하는 경우 대상 파일은 /etc/grub2-efi.cfg 여야 합니다.
  4. 호스트 시스템 재부팅

    변경 사항을 적용하려면 호스트 시스템을 재부팅합니다.
    # reboot

절차 16.15. 선택 사항: GPU IOMMU 구성 편집

GPU 장치를 연결하기 전에 GPU가 게스트에서 제대로 작동하려면 IOMMU 구성을 편집해야 할 수 있습니다.
  1. GPU의 XML 정보 표시

    먼저 GPU를 XML 형식으로 표시하려면 먼저 pci_ 를 추가하고 구분 기호를 밑줄로 변환하여 PCI 버스 주소를 libvirt 호환 형식으로 변환해야 합니다. 이 예에서 0000:02:00.0 버스 주소로 식별된 GPU PCI 장치는 이전 절차에서얻은 대로 pci_0000_02_00_0 이 됩니다. virsh nodedev-dumpxml 과 함께 장치의 libvirt 주소를 사용하여 XML 구성을 표시합니다.
    # virsh nodedev-dumpxml pci_0000_02_00_0
    
    <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>
         <!-- pay attention to the following lines -->
      <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>
    
    XML의 <iommuGroup> 요소를 확인합니다. iommuGroup은 IOMMU 기능 및 PCI 버스 토폴로지로 인해 다른 장치와 분리된 것으로 간주되는 장치 집합을 나타냅니다. 게스트에 할당하려면 iommuGroup 내의 모든 끝점 장치(즉, PCIe 루트 포트, 브리지 또는 스위치 포트가 아닌 장치)는 기본 호스트 드라이버에서 바인딩 해제해야 합니다. 위의 예에서 그룹은 GPU 장치(0000:02:00.0)와 보조 오디오 장치(0000:02:00.1)로 구성됩니다. 자세한 내용은 부록 E. IOMMU 그룹 작업의 내용을 참조하십시오.
  2. IOMMU 설정 조정

    이 예에서는 레거시 인터럽트 지원의 하드웨어 문제로 인해 NVIDIA 오디오 기능의 할당이 지원되지 않습니다. 또한 GPU 오디오 기능은 일반적으로 GPU 자체 없이는 유용하지 않습니다. 따라서 게스트에 GPU를 할당하려면 먼저 기본 호스트 드라이버에서 오디오 기능을 분리해야 합니다. 이 작업은 다음 중 하나를 사용하여 수행할 수 있습니다.

절차 16.16. GPU 연결

다음 방법 중 하나를 사용하여 GPU를 게스트에 연결할 수 있습니다.
  1. 가상 머신 관리자 인터페이스 사용. 자세한 내용은 16.1.2절. “virt-manager로 PCI 장치 할당”의 내용을 참조하십시오.
  2. GPU에 대한 XML 구성 조각을 만들고 virsh attach-device 에 연결합니다.
    1. 다음과 유사한 장치에 대한 XML을 만듭니다.
      
      <hostdev mode='subsystem' type='pci' managed='yes'>
       <driver name='vfio'/>
       <source>
        <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
       </source>
      </hostdev>
      
    2. 이 파일을 파일에 저장하고 virsh attach-device [domain] --persistent 를 실행하여 게스트 구성에 XML을 포함합니다. 할당된 GPU가 게스트 시스템의 기존 에뮬레이션 그래픽 장치 외에 추가됩니다. 할당된 GPU는 가상 머신에서 보조 그래픽 장치로 처리됩니다. 기본 그래픽 장치로 할당이 지원되지 않으며 게스트의 XML에서 에뮬레이션된 그래픽 장치는 제거되지 않아야 합니다.
  3. virsh edit 명령을 사용하여 게스트 XML 구성을 편집하고 적절한 XML 세그먼트를 수동으로 추가합니다.

절차 16.17. 게스트에서 Xorg 설정 확인

게스트의 GPU 버스 주소는 호스트와 다릅니다. 호스트가 GPU를 적절하게 사용할 수 있도록 하려면 할당된 GPU 주소를 사용하도록 게스트의 Xorg 디스플레이 서버를 구성합니다.
  1. 게스트에서 lspci 명령을 사용하여 GPU의 PCI 버스 주소를 확인합니다.
    # lspci | grep VGA
    00:02.0 VGA compatible controller: Device 1234:111
    00:09.0 VGA compatible controller: NVIDIA Corporation GK106GL [Quadro K4000] (rev a1)
    
    이 예에서 버스 주소는 00:09.0입니다.
  2. 게스트의 /etc/X11/xorg.conf 파일에서 탐지된 주소를 사용하여 BusID 옵션을 다음과 같이 추가합니다.
    		Section "Device"
    		    Identifier     "Device0"
    		    Driver         "nvidia"
    		    VendorName     "NVIDIA Corporation"
    		    BusID          "PCI:0:9:0"
    		EndSection
    
    중요
    1단계에서 감지된 버스 주소가 16진수인 경우 구분 기호 간 값을 10진수 시스템으로 변환해야 합니다. 예를 들어 00:0a.0을 PCI:0:10:0으로 변환해야 합니다.
참고
게스트에 할당된 NVIDIA GPU를 사용하는 경우 NVIDIA 드라이버만 지원됩니다. 다른 드라이버가 작동하지 않을 수 있으며 오류를 생성할 수 있습니다. Red Hat Enterprise Linux 7 게스트의 경우 설치 중에 커널 명령행에 modprobe.blacklist=nouveau 옵션을 사용하여 nouveau 드라이버를 블랙리스트로 지정할 수 있습니다. 다른 게스트 가상 머신에 대한 자세한 내용은 운영 체제의 특정 설명서를 참조하십시오.
NVIDIA 드라이버가 로드된 게스트 운영 체제에 따라 게스트는 에뮬레이션된 그래픽과 할당된 그래픽 모두를 동시에 사용하거나 에뮬레이션된 그래픽을 비활성화할 수 있습니다. 할당된 그래픽 프레임버에 대한 액세스는 virt-manager 와 같은 애플리케이션에서 제공되지 않습니다. 할당된 GPU가 물리적 디스플레이에 연결되지 않은 경우 GPU 데스크탑에 액세스하려면 게스트 기반 리모팅 솔루션이 필요할 수 있습니다. 모든 PCI 장치 할당과 마찬가지로 GPU가 할당된 게스트의 마이그레이션이 지원되지 않으며 각 GPU는 단일 게스트에서만 소유됩니다. 게스트 운영 체제에 따라 GPU의 핫 플러그 지원을 사용할 수 있습니다.

16.7.2. NVIDIA vGPU Assignment

NVIDIA vGPU 기능을 사용하면 물리적 GPU 장치를 중재 장치라고 하는 여러 가상 장치로 나눌 수 있습니다. 그런 다음 이러한 중재 장치를 가상 GPU로 여러 게스트에 할당할 수 있습니다. 결과적으로 이러한 게스트는 단일 물리 GPU의 성능을 공유합니다.
중요
이 기능은 제한된 NVIDIA GPU 세트에서만 사용할 수 있습니다. 이러한 장치의 최신 목록은 NVIDIA GPU 소프트웨어 설명서 를 참조하십시오.

16.7.2.1. NVIDIA vGPU 설정

vGPU 기능을 설정하려면 먼저 GPU 장치에 대한 NVIDIA vGPU 드라이버를 가져온 다음 중재 장치를 생성하고 원하는 게스트 머신에 할당해야 합니다.
  1. NVIDIA vGPU 드라이버를 가져와서 시스템에 설치합니다. 자세한 내용은 NVIDIA 문서를 참조하십시오.
  2. NVIDIA 소프트웨어 설치 프로그램이 /etc/modprobe.d/nvidia-installer-disable-nouveau .conf 파일을 생성하지 않은 경우 /etc/modprobe.d/ 디렉터리에 .conf 파일(이름 중)을 생성합니다. 파일에 다음 행을 추가합니다.
    blacklist nouveau
    options nouveau modeset=0
    
    
  3. 현재 커널의 초기 램디스크를 다시 생성한 다음 재부팅합니다.
    # dracut --force
    # reboot
    중재 장치가 있는 이전에 지원되는 커널 버전을 사용해야 하는 경우 설치된 모든 커널 버전에 대해 초기 램디스크를 다시 생성합니다.
    # dracut --regenerate-all --force
    # reboot
  4. nvidia_vgpu_vfio 모듈이 커널에 의해 로드되었으며 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)
     [...]
    
  5. /sys/class/mdev_bus/pci_dev/mdev_supported_types/type-id/create 에 장치 UUID를 작성합니다. 여기서 pci_dev 는 호스트 GPU의 PCI 주소이고 type-id 는 호스트 GPU 유형의 ID입니다.
    다음 예제에서는 NVIDIA InstallPlan P4 카드에 nvidia-63 vGPU 유형의 중재 장치를 생성하는 방법을 보여줍니다.
    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba58692a
    # echo "30820a6f-b1a5-4503-91ca-0c10ba58692a" > /sys/class/mdev_bus/0000:01:00.0/mdev_supported_types/nvidia-63/create
    특정 장치에 대한 type-id 값은 section 1.3.1을 참조하십시오. 가상 GPU 유형 가상 GPU 소프트웨어 설명서. GRID P4-2Q 와 같은 Q-series NVIDIA vGPU만 Linux 게스트에서 중재 장치 GPU 유형으로 지원됩니다.
  6. vGPU 리소스를 공유하려는 게스트의 XML 구성의 <devices/> 섹션에 다음 행을 추가합니다. 이전 단계에서 uuid gen 명령으로 생성된 UUID 값을 사용합니다. 각 UUID는 한 번에 하나의 게스트에만 할당할 수 있습니다.
    
    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
      <source>
        <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
      </source>
    </hostdev>
    
    
    중요
    할당된 게스트에서 vGPU 중재된 장치가 제대로 작동하려면 게스트가 NVIDIA vGPU 게스트 소프트웨어 라이센스를 설정해야 합니다. 자세한 내용은 NVIDIA 가상 GPU 소프트웨어 설명서 를 참조하십시오.

16.7.2.2. NVIDIA vGPU에서 비디오 스트리밍용 VNC 콘솔 설정 및 사용

기술 프리뷰 로 VNC(Virtual Network Computing) 콘솔은 Red Hat Enterprise Linux 7.7 이상에서 NVIDIA vGPU를 포함한 GPU 기반 중재 장치와 함께 사용할 수 있습니다. 결과적으로 VNC를 사용하여 NVIDIA vGPU 장치에서 제공하는 빠른 그래픽 출력을 표시할 수 있습니다.
주의
이 기능은 현재 기술 프리뷰로만 제공되며 Red Hat에서 지원하지 않습니다. 따라서 프로덕션 환경에서 아래 절차를 사용하는 것은 크게 권장되지 않습니다.
가상 머신의 VNC 콘솔에서 vGPU 출력 렌더링을 구성하려면 다음을 수행합니다.
  1. NVIDIA vGPU 드라이버를 설치하고 16.7.2.1절. “NVIDIA vGPU 설정” 에 설명된 대로 시스템에 NVIDIA vGPU를 구성합니다. 중재 장치의 XML 구성에 display='on의 매개 변수가 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.
    			
    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'>
       <source>
          <address uuid='ba26a3e2-8e1e-4f39-9de7-b26bd210268a'/>
       </source>
    </hostdev>
    
    
  2. 선택적으로 VM의 비디오 모델 유형을 none 으로 설정합니다. 예를 들면 다음과 같습니다.
    			
    <video>
       <model type='none'/>
    </video>
    
    
    이를 지정하지 않으면 에뮬레이션한 Cirrus 또는 QXL 카드와 NVIDIA vGPU에서 두 개의 다른 디스플레이 출력을 받습니다. 또한 model type='none 을 사용하면 드라이버가 초기화될 때까지 부팅 그래픽 출력을 볼 수 없습니다. 그 결과 첫 번째 그래픽 출력이 로그인 화면입니다.
  3. VM의 그래픽 유형의 XML 구성이 vnc 인지 확인합니다.
    예를 들면 다음과 같습니다.
    			
    <graphics type='vnc' port='-1' autoport='yes'>
    	 <listen type='address'/>
    </graphics>
    
    
  4. 가상 머신을 시작합니다.
  5. VNC 뷰어 원격 데스크탑 클라이언트를 사용하여 가상 머신에 연결합니다.
    참고
    VM이 에뮬레이션된 VGA를 기본 비디오 장치로 사용하고 vGPU를 보조 장치로 사용하는 경우 ctrl+alt+2 키보드 바로 가기를 사용하여 vGPU 디스플레이로 전환합니다.

16.7.2.3. NVIDIA vGPU 장치 제거

중재된 vGPU 장치를 제거하려면 장치가 비활성화된 경우 다음 명령을 사용하고 uuid 를 장치의 UUID (예: 30820a6f-b1a5-4503-91ca-0c10ba58692a )로 바꿉니다.
# echo 1 > /sys/bus/mdev/devices/uuid/remove
현재 게스트에서 사용 중인 vGPU 장치를 제거하려고 하면 다음 오류가 트리거됩니다.
echo: write error: Device or resource busy

16.7.2.4. NVIDIA vGPU 기능 쿼리

시스템에서 중재된 장치(예: 지정된 유형의 중재 장치 수)에 대한 추가 정보를 얻으려면 virsh nodedev-list --cap mdev_typesvirsh nodedev-dumpxml 명령을 사용합니다. 예를 들어, 다음 표는octets P4 카드에 사용 가능한 vGPU 유형을 표시합니다.

$ virsh nodedev-list --cap mdev_types
pci_0000_01_00_0
$ virsh nodedev-dumpxml pci_0000_01_00_0
<...>
  <capability type='mdev_types'>
    <type id='nvidia-70'>
      <name>GRID P4-8A</name>
      <deviceAPI>vfio-pci</deviceAPI>
      <availableInstances>1</availableInstances>
    </type>
    <type id='nvidia-69'>
      <name>GRID P4-4A</name>
      <deviceAPI>vfio-pci</deviceAPI>
      <availableInstances>2</availableInstances>
    </type>
    <type id='nvidia-67'>
      <name>GRID P4-1A</name>
      <deviceAPI>vfio-pci</deviceAPI>
      <availableInstances>8</availableInstances>
    </type>
    <type id='nvidia-65'>
      <name>GRID P4-4Q</name>
      <deviceAPI>vfio-pci</deviceAPI>
      <availableInstances>2</availableInstances>
    </type>
    <type id='nvidia-63'>
      <name>GRID P4-1Q</name>
      <deviceAPI>vfio-pci</deviceAPI>
      <availableInstances>8</availableInstances>
    </type>
    <type id='nvidia-71'>
      <name>GRID P4-1B</name>
      <deviceAPI>vfio-pci</deviceAPI>
      <availableInstances>8</availableInstances>
    </type>
    <type id='nvidia-68'>
      <name>GRID P4-2A</name>
      <deviceAPI>vfio-pci</deviceAPI>
      <availableInstances>4</availableInstances>
    </type>
    <type id='nvidia-66'>
      <name>GRID P4-8Q</name>
      <deviceAPI>vfio-pci</deviceAPI>
      <availableInstances>1</availableInstances>
    </type>
    <type id='nvidia-64'>
      <name>GRID P4-2Q</name>
      <deviceAPI>vfio-pci</deviceAPI>
      <availableInstances>4</availableInstances>
    </type>
  </capability>
</...>

16.7.2.5. NVIDIA vGPU용 원격 데스크탑 스트리밍 서비스

다음 원격 데스크탑 스트리밍 서비스는 Red Hat Enterprise Linux 7에서 NVIDIA vGPU 기능을 사용하도록 성공적으로 테스트되었습니다.
  • HP-RGS
  • Mechdyne TGX - 현재 Mechdyne TGX를 Windows Server 2016 게스트에서 사용할 수 없습니다.
  • NICE DCV - 이 스트리밍 서비스를 사용할 때 Red Hat은 일부 경우에서 동적 해상도를 사용하므로 고정 해결 설정을 사용하는 것이 좋습니다.

16.7.2.6. NVIDIA vGPU를 사용하여 비디오 스트리밍용 VNC 콘솔 설정

소개

기술 프리뷰 로 VNC(Virtual Network Computing) 콘솔은 Red Hat Enterprise Linux 8의 NVIDIA vGPU를 포함한 GPU 기반 중재 장치와 함께 사용할 수 있습니다. 결과적으로 VNC를 사용하여 NVIDIA vGPU 장치에서 제공하는 빠른 그래픽 출력을 표시할 수 있습니다.
중요
기술 프리뷰로 인해 Red Hat에서는 이 기능을 지원하지 않습니다. 따라서 프로덕션 환경에서 아래 절차를 사용하는 것은 크게 권장되지 않습니다.

설정

가상 머신의 VNC 콘솔에서 vGPU 출력 렌더링을 구성하려면 다음을 수행합니다.
  1. NVIDIA vGPU 드라이버를 설치하고 16.7.2절. “NVIDIA vGPU Assignment” 에 설명된 대로 호스트에 NVIDIA vGPU를 구성합니다. 중재 장치의 XML 구성에 display='on의 매개 변수가 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.
    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'>
     <source>
        <address uuid='ba26a3e2-8e1e-4f39-9de7-b26bd210268a'/>
     </source>
    </hostdev>
    
  2. 선택적으로 VM의 비디오 모델 유형을 none 으로 설정합니다. 예를 들면 다음과 같습니다.
    <video>
     <model type='none'/>
    </video>
    
  3. VM의 그래픽 유형의 XML 구성이 spice 또는 vnc 인지 확인합니다.
    spice 의 예:
    <graphics type='spice' autoport='yes'>
     <listen type='address'/>
     <image compression='off'/>
    </graphics>
    
    vnc 의 예:
    <graphics type='vnc' port='-1' autoport='yes'>
     <listen type='address'/>
    </graphics>
    
  4. 가상 머신을 시작합니다.
  5. 이전 단계에서 구성한 그래픽 프로토콜에 적합한 클라이언트를 사용하여 가상 머신에 연결합니다.
    • VNC의 경우 VNC 뷰어 원격 데스크탑 클라이언트를 사용합니다. VM이 에뮬레이션된 VGA를 기본 비디오 장치로 설정하고 vGPU를 보조로 사용하여 ctrl+alt+2 키보드 바로 가기를 사용하여 vGPU 디스플레이로 전환합니다.
    • SPICE는 virt-viewer 애플리케이션을 사용합니다.

17장. 가상 네트워킹

이 장에서는 libvirt를 사용하여 가상 네트워크를 생성, 시작, 중지, 제거 및 수정하는 데 필요한 개념을 소개합니다.
자세한 내용은 libvirt 참조 장에서 확인할 수 있습니다.

17.1. 가상 네트워크 스위치

libvirt 가상 네트워킹에서는 가상 네트워크 스위치 의 개념을 사용합니다. 가상 네트워크 스위치는 가상 시스템(게스트)이 연결되는 호스트 물리적 시스템 서버에서 작동하는 소프트웨어 구조입니다. 게스트의 네트워크 트래픽은 이 스위치를 통과합니다.

그림 17.1. 게스트 두 개로 가상 네트워크 스위치

게스트 두 개로 가상 네트워크 스위치
Linux 호스트 물리적 시스템 서버는 가상 네트워크 스위치를 네트워크 인터페이스로 나타냅니다. libvirtd 데몬(libvirtd)이 먼저 설치 및 시작되면 가상 네트워크 스위치를 나타내는 기본 네트워크 인터페이스는 virbr0 입니다.
virbr0 인터페이스는 다른 인터페이스와 마찬가지로 ip 명령을 사용하여 볼 수 있습니다.
 $ 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.168.122.1/24 brd 192.168.122.255 scope global virbr0

17.2. 브리지 모드

Bridged 모드를 사용하면 모든 게스트 가상 시스템이 호스트 물리적 시스템과 동일한 서브넷 내에 표시됩니다. 동일한 물리적 네트워크에 있는 기타 모든 물리적 시스템은 가상 머신을 인식하고 가상 머신에 액세스할 수 있습니다. 브리징은 OSI 네트워킹 모델의 계층 2에서 작동합니다.

그림 17.2. 브릿지 모드로 가상 네트워크 스위치

브릿지 모드로 가상 네트워크 스위치
본딩 과 함께 결합하여 하이퍼바이저에서 여러 물리적 인터페이스를 사용할 수 있습니다. 그러면 본딩이 브리지에 추가된 다음 게스트 가상 머신도 브리지에 추가됩니다. 그러나 본딩 드라이버에는 여러 작동 모드가 있으며 이러한 모드 중 일부만 가상 게스트 시스템이 사용 중인 브릿지에서 작동합니다.
주의
브리지 모드를 사용하는 경우 게스트 가상 시스템과 함께 사용해야 하는 유일한 본딩 모드는 모드 1 모드 2 및 모드 4입니다. 모드 0, 3, 5 또는 6을 사용하면 연결이 실패할 가능성이 높습니다. 또한 ARP(Address Resolution Protocol) 모니터링이 작동하지 않기 때문에 MII(Media-Independent Interface) 모니터링을 사용하여 본딩 모드를 모니터링해야 합니다.
본딩 모드에 대한 자세한 내용은 관련 지식베이스 문서 또는 Red Hat Enterprise Linux 7 네트워킹 가이드 를 참조하십시오.
브리지 네트워킹 모드를 구성하는 데 사용되는 bridge_opts 매개 변수에 대한 자세한 설명은 Red Hat Virtualization 관리 가이드 를 참조하십시오.

17.3. 네트워크 주소 변환

기본적으로 가상 네트워크 스위치는 NAT 모드에서 작동합니다. NAT(Source-NAT) 또는 Destination-NAT( Destination-NAT) 대신 IP 마스커레이딩을 사용합니다. IP 마스커레이딩을 사용하면 연결된 게스트가 모든 외부 네트워크와의 통신에 호스트 물리적 머신 IP 주소를 사용할 수 있습니다. 기본적으로 호스트 물리적 시스템에 배치된 컴퓨터는 다음 다이어그램에 표시된 대로 가상 네트워크 스위치가 NAT 모드에서 작동할 때 내부의 게스트와 통신할 수 없습니다.

그림 17.3. 2개의 게스트가 있는 NAT를 사용하는 가상 네트워크 스위치

2개의 게스트가 있는 NAT를 사용하는 가상 네트워크 스위치
주의
가상 네트워크 스위치는 iptables 규칙에 의해 구성된 NAT를 사용합니다. 스위치가 실행되는 동안 이러한 규칙을 편집하는 것은 권장되지 않습니다. 잘못된 규칙으로 인해 스위치가 통신할 수 없게 될 수 있습니다.
스위치가 실행되고 있지 않은 경우 다음을 실행하여 포트 마스커레이딩 범위를 만들기 위해 전달 모드 NAT에 공용 IP 범위를 설정할 수 있습니다.
# iptables -j SNAT --to-source [start]-[end]

17.4. DNS 및 DHCP

IP 정보는 DHCP를 통해 게스트에 할당할 수 있습니다. 이러한 목적으로 가상 네트워크 스위치에 주소 풀을 할당할 수 있습니다. libvirt는 이를 위해 dnsmasq 프로그램을 사용합니다. dnsmasq의 인스턴스는 필요한 각 가상 네트워크 스위치에 대해 libvirt에 의해 자동으로 구성 및 시작됩니다.

그림 17.4. dnsmasq를 실행하는 가상 네트워크 스위치

dnsmasq를 실행하는 가상 네트워크 스위치

17.5. 라우팅 모드

Routed 모드를 사용하면 가상 스위치가 호스트 물리적 시스템에 연결된 물리적 LAN에 연결하여 NAT를 사용하지 않고 트래픽을 다시 전달합니다. 가상 스위치는 모든 트래픽을 검사하고 네트워크 패킷에 포함된 정보를 사용하여 라우팅 결정을 내릴 수 있습니다. 이 모드를 사용하는 경우 모든 가상 머신은 자체 서브넷에 있으며 가상 스위치를 통해 라우팅됩니다. 이러한 상황은 물리적 네트워크의 다른 호스트 물리적 시스템이 수동 물리적 라우터 구성 없이 가상 머신을 인식하지 못하므로 항상 적합하지 않으며 가상 시스템에 액세스할 수 없습니다. 라우팅 모드는 OSI 네트워킹 모델의 계층 3에서 작동합니다.

그림 17.5. 라우팅 모드의 가상 네트워크 스위치

라우팅 모드의 가상 네트워크 스위치

17.6. isolated Mode

격리 모드를 사용하는 경우 가상 스위치에 연결된 게스트가 서로 통신할 수 있으며 호스트 물리적 시스템과 통신할 수 있지만 트래픽은 호스트 물리적 시스템 외부에 전달되지 않으며 호스트 물리적 시스템 외부에서 트래픽을 수신할 수 없습니다. DHCP와 같은 기본 기능을 사용하려면 이 모드에서 dnsmasq를 사용해야 합니다. 그러나 이 네트워크가 물리적 네트워크와 분리되어 있어도 DNS 이름은 계속 확인됩니다. 따라서 DNS 이름을 확인하지만 ICMP 에코 요청(ping) 명령이 실패할 때 상황이 발생할 수 있습니다.

그림 17.6. 분리된 모드로 가상 네트워크 스위치

분리된 모드로 가상 네트워크 스위치

17.7. 기본 구성

libvirtd 데몬(libvirtd)이 처음 설치되면 NAT 모드에서 초기 가상 네트워크 스위치 구성이 포함됩니다. 이 구성은 설치된 게스트가 호스트 물리적 시스템을 통해 외부 네트워크와 통신할 수 있도록 하는 데 사용됩니다. 다음 이미지는 libvirtd 에 대한 이 기본 구성을 보여줍니다.

그림 17.7. 기본 libvirt 네트워크 구성

기본 libvirt 네트워크 구성
참고
가상 네트워크는 특정 물리적 인터페이스로 제한할 수 있습니다. 이는 여러 인터페이스가 있는 물리적 시스템에 유용할 수 있습니다(예: eth0,eth1eth2). 이는 라우팅 및 NAT 모드에서만 유용하며 dev=<interface> 옵션 또는 새 가상 네트워크를 생성할 때 virt-manager 에 정의할 수 있습니다.

17.8. 공통 시나리오의 예

이 섹션에서는 다양한 가상 네트워킹 모드를 보여주고 몇 가지 예제 시나리오를 제공합니다.

17.8.1. 브리지 모드

bridged 모드는 OSI 모델의 계층 2에서 작동합니다. 사용하면 모든 게스트 가상 시스템이 호스트 물리적 시스템과 동일한 서브넷에 나타납니다. bridged 모드의 가장 일반적인 사용 사례는 다음과 같습니다.
  • 호스트 물리적 시스템과 함께 기존 네트워크에 게스트 가상 머신을 배포하면 가상 시스템과 물리적 시스템 간의 차이를 최종 사용자에게 투명하게 할 수 있습니다.
  • 기존 물리적 네트워크 구성을 변경하지 않고 게스트 가상 머신 배포.
  • 기존 물리적 네트워크에 쉽게 액세스할 수 있어야 하는 게스트 가상 머신 배포. 게스트 가상 머신을 실제 네트워크에 배치하여 DHCP와 같은 기존 브로드캐스트 도메인 내에서 서비스에 액세스해야 합니다.