Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
가상화 배포 및 관리 가이드
RHEL 물리적 머신에서 가상 머신 설치, 구성 및 관리
초록
I 부. Deployment
1장. 시스템 요구 사항
1.1. 호스트 시스템 요구 사항
최소 호스트 시스템 요구 사항
- 6GB의 디스크 여유 공간
- 2GB RAM.
권장 시스템 요구 사항
- 각 가상화 CPU에 대해 하나의 코어 또는 스레드와 호스트에 대해 하나씩.
- 2GB의 RAM과 가상 머신용 추가 RAM
- 6GB의 호스트 디스크 공간과 가상 머신에 필요한 디스크 공간.대부분의 게스트 운영 체제에는 최소 6GB의 디스크 공간이 필요합니다. 각 게스트의 추가 스토리지 공간은 워크로드에 따라 다릅니다.
스왑 공간
Linux의 스왑 공간은 실제 메모리(RAM)가 가득 찰 때 사용됩니다. 시스템에 더 많은 메모리 리소스가 필요하고 RAM이 가득 차면 메모리의 비활성 페이지가 스왑 공간으로 이동합니다. 스왑 공간은 RAM이 적은 시스템에 도움이 될 수 있지만 더 많은 RAM을 대체하는 것으로 간주해서는 안 됩니다. 스왑 공간은 실제 메모리보다 느린 액세스 시간이 있는 하드 드라이브에 있습니다. 스왑 파티션의 크기는 호스트의 실제 RAM에서 계산할 수 있습니다. Red Hat 고객 포털에는 스왑 파티션의 크기를 안전하고 효율적으로 결정하는 기사가 포함되어 있습니다. https://access.redhat.com/site/solutions/15244.- 원시 이미지 파일을 사용하는 경우 필요한 총 디스크 공간은 이미지 파일에 필요한 공간 합계, 호스트 운영 체제에 필요한 6GB의 공간, 게스트용 스왑 공간보다 크거나 같습니다.
수식 1.1. 원시 이미지를 사용하여 게스트 가상 머신에 필요한 공간 계산
total for raw format = images + hostspace + swapqcow 이미지의 경우 qcow 및 qcow2 이미지를 필요에 따라 확장할 수 있으므로 게스트의 예상 최대 스토리지 요구 사항( qcow 형식)
도 계산해야 합니다. 이 확장을 허용하기 위해 먼저 게스트의 예상 최대 스토리지 요구 사항(최대 게스트 스토리지 확장)
을 1.01로 곱한 후 호스트(호스트)
에 필요한 공간을 추가하고 필요한 스왑 공간(swap)
에 추가합니다.수식 1.2. qcow 이미지를 사용하여 게스트 가상 머신에 필요한 공간 계산
total for qcow format = (expected maximum guest storage * 1.01) + host + swap
1.2. KVM Hypervisor 요구 사항
- x86 기반 시스템용 Intel VT-x 및 Intel 64 가상화 확장 기능이 있는 Intel 프로세서
- AMD-V 및 AMD64 가상화 확장 기능이 있는 AMD 프로세서.
절차 1.1. 가상화 확장 확인
CPU 가상화 확장 기능을 사용할 수 있는지 확인
다음 명령을 입력하여 CPU 가상화 확장 기능을 사용할 수 있는지 확인합니다.$ grep -E 'svm|vmx' /proc/cpuinfo
출력 분석
- 다음 예제 출력에는 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에서 가상화 확장 활성화” 에서 참조하십시오.KVM 커널 모듈이 로드되었는지 확인
추가 검사로 다음 명령을 사용하여kvm
모듈이 커널에 로드되었는지 확인합니다.# lsmod | grep kvm
출력에kvm_intel
또는kvm_amd
가 포함된 경우kvm
하드웨어 가상화 모듈이 로드됩니다.
# virsh capabilities
1.3. KVM 게스트 가상 머신 호환성
- 호스트 시스템의 경우: https://access.redhat.com/articles/rhel-limits
- KVM 하이퍼바이저의 경우: https://access.redhat.com/articles/rhel-kvm-limits
1.4. 지원되는 게스트 CPU 모델
1.4.1. 게스트 CPU 모델 나열
$ 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
/usr/share/libvirt/
에 있는 cpu_map.xml
파일에 포함되어 있습니다.
# cat /usr/share/libvirt/cpu_map.xml
<cpu>
섹션에서 변경할 수 있습니다. 자세한 내용은 23.12절. “CPU 모델 및 토폴로지”를 참조하십시오.
2장. 가상화 패키지 설치
kvm
커널 모듈과 함께 기본 Red Hat Enterprise Linux 커널을 사용합니다.
2.1. Red Hat Enterprise Linux 설치 중 가상화 패키지 설치
절차 2.1. 가상화 패키지 설치
소프트웨어 선택
설치 요약 화면이 나타날 때까지 설치 절차를 따르십시오.그림 2.1. 설치 요약 화면
설치 요약 화면에서 소프트웨어 선택 을 클릭합니다. Software Selection 화면이 열립니다.서버 유형 및 패키지 그룹 선택
기본 가상화 패키지만 사용하거나 그래픽 사용자 인터페이스를 통해 게스트를 관리할 수 있는 패키지로 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가 선택된 서버
설치 완료
Done 을 클릭하고 설치를 계속합니다.
2.1.1. Kickstart 파일을 사용하여 KVM 패키지 설치
%packages
섹션에 다음 패키지 그룹을 추가합니다.
@virtualization-hypervisor @virtualization-client @virtualization-platform @virtualization-tools
2.2. 기존 Red Hat Enterprise Linux 시스템에 가상화 패키지 설치
2.2.1. 수동으로 가상화 패키지 설치
- 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. 가상화 패키지 그룹 설치
표 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 |
Virtualization Tools
패키지 그룹을 설치하려면 다음을 실행합니다.
# yum group install "Virtualization Tools" --setopt=group_package_types=mandatory,default,optional
3장. 가상 머신 생성
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을 사용하여 게스트 생성
--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=?
3.2.1. 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
옵션을 지정하는 --network
옵션 모두 지정해야 합니다.
# virt-install \ --name guest1-rhel7 \ --memory 2048 \ --vcpus 2 \ --disk size=8 \ --network=bridge:br0 \ --pxe \ --os-variant rhel7
3.2.5. 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-inject
및 extra-args
옵션은 Kickstarter 파일을 사용하여 가상 머신이 설치되도록 지정합니다.
3.2.6. 게스트 생성 중 게스트 가상 머신 네트워크 구성
NAT가 있는 기본 네트워크
libvirtd
의 NAT(네트워크 주소 변환) 가상 네트워크 스위치를 사용합니다. NAT에 대한 자세한 내용은 6.1절. “libvirt를 사용한 NAT(Network Address Translation)” 을 참조하십시오.
--network default
네트워크
옵션이 지정되지 않은 경우 게스트 가상 시스템은 NAT를 사용하는 기본 네트워크로 구성됩니다.
DHCP를 사용한 브리지 네트워크
--network br0
고정 IP 주소가 있는 브리지 네트워크
--network br0 \ --extra-args "ip=192.168.1.2::192.168.1.1:255.255.255.0:test.example.com:eth0:none"
네트워크 없음
--network=none
3.3. virt-manager를 사용하여 게스트 생성
3.3.1. virt-manager 설치 개요
- 하이퍼바이저 및 설치 유형 선택
- 설치 미디어 위치 찾기 및 구성
- 메모리 및 CPU 옵션 구성
- 가상 머신의 스토리지 구성
- 가상 머신 이름, 네트워킹, 아키텍처 및 기타 하드웨어 설정 구성
3.3.2. virt-manager를 사용하여 Red Hat Enterprise Linux 7 게스트 생성
절차 3.1. 로컬 설치 미디어를 사용하여 virt-manager 를 사용하여 Red Hat Enterprise Linux 7 게스트 가상 머신 생성
선택 사항: 준비
가상 머신에 대한 스토리지 환경을 준비합니다. 스토리지 준비에 대한 자세한 내용은 13장. 가상 머신용 스토리지 관리 을 참조하십시오.중요게스트 가상 머신을 저장하는 데 다양한 스토리지 유형을 사용할 수 있습니다. 그러나 가상 머신이 마이그레이션 기능을 사용하려면 네트워크 스토리지에 가상 머신을 생성해야 합니다.Red Hat Enterprise Linux 7에는 최소 1GB의 스토리지 공간이 필요합니다. 그러나 Red Hat은 Red Hat Enterprise Linux 7 설치를 위한 최소 5GB의 스토리지 공간 및 이 가이드의 절차에 대해 권장합니다.virt-manager를 열고 마법사를 시작합니다.
virt-manager 명령을 root로 실행하거나 애플리케이션 → 시스템 도구 → 가상 머신 관리자를 실행하여 virt-manager를 엽니다.그림 3.1. 가상 머신 관리자 창
선택적으로 하이퍼바이저를 선택하고 Connect 버튼을 클릭하여 원격 하이퍼바이저를 엽니다.을 클릭하여 가상화된 게스트 마법사를 시작합니다.New VM 창이 열립니다.설치 유형 지정
설치 유형을 선택합니다.- 로컬 설치 미디어 (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 를 클릭합니다.설치 소스 선택
- 로컬 설치 미디어(ISO 이미지 또는 CDROM) 를 선택한 경우 원하는 로컬 설치 미디어를 지정합니다.
그림 3.3. 로컬 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 사용자 및 관리자 가이드 를 참조하십시오. Network Install
을 선택한 경우 설치 소스의 URL과 필요한 커널 옵션(있는 경우)을 입력합니다. URL은 설치 트리의 루트 디렉터리를 가리키며 HTTP, FTP 또는 NFS를 통해 액세스할 수 있어야 합니다.Kickstart 설치를 수행하려면ks=
부터 커널 옵션에 Kickstart 파일의 URL을 지정합니다.그림 3.4. 네트워크 Kickstart 설치
참고커널 옵션의 전체 목록은 Red Hat Enterprise Linux 7 설치 가이드 를 참조하십시오.
다음으로 OS 유형 및 설치 버전 을 구성합니다. 가상 머신에 적합한 운영 체제 유형을 선택해야 합니다. 이는 수동으로 지정하거나 설치 미디어 확인란을 기반으로 자동 감지 운영 체제를 선택하여 지정할 수 있습니다.계속하려면 Forward 를 클릭합니다.메모리(RAM) 및 가상 CPU 구성
가상 머신에 할당할 CPU 수 및 메모리 크기(RAM)를 지정합니다. 마법사는 할당할 수 있는 CPU 수와 메모리 양을 표시합니다. 이러한 값은 호스트 및 게스트 성능에 영향을 미칩니다.가상 시스템에는 효율적이고 효과적으로 실행하려면 충분한 실제 메모리(RAM)가 필요합니다. Red Hat은 가상 머신에 대해 최소 512MB의 RAM을 지원합니다. Red Hat은 각 논리 코어에 대해 최소 1024MB의 RAM을 권장합니다.가상 머신에 충분한 가상 CPU를 할당합니다. 가상 머신이 다중 스레드 애플리케이션을 실행하는 경우 게스트 가상 시스템을 실행하는 데 필요한 가상 CPU 수를 할당합니다.호스트 시스템에서 사용 가능한 물리적 프로세서(또는 하이퍼스레드)보다 많은 가상 CPU를 할당할 수 없습니다. 사용 가능한 가상 CPU 수는 최대 X 사용 가능한 필드에 표시됩니다.그림 3.5. 메모리 및 CPU 구성
메모리 및 CPU 설정을 구성한 후 앞으로 를 클릭하여 계속합니다.참고메모리 및 가상 CPU를 오버 커밋할 수 있습니다. 오버 커밋에 대한 자세한 내용은 7장. KVM을 사용하여 오버 커밋 을 참조하십시오.스토리지 구성
가상 머신 및 필요한 애플리케이션에 충분한 공간을 활성화하고 할당합니다. 데스크탑 설치의 경우 최소 5GB 이상 또는 최소 설치의 경우 1GB 이상을 할당합니다.그림 3.6. 가상 스토리지 구성
참고실시간 마이그레이션에서는 공유 네트워크 스토리지에 가상 머신을 설치해야 합니다. 가상 머신의 공유 스토리지 설정에 대한 자세한 내용은 15.4절. “공유 스토리지 예: 간단한 마이그레이션을 위한 NFS” 을 참조하십시오.기본 로컬 스토리지
컴퓨터의 하드 드라이브 라디오 버튼에 디스크 이미지 만들기 버튼을 선택하여 기본 스토리지 풀인/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 를 선택한 다음 찾아보기 를 선택하여 관리 스토리지를 구성합니다.스토리지 풀 사용
스토리지 풀을 사용할 관리형 또는 기타 기존 스토리지 선택을 선택하는 경우 찾아보기 를 클릭하여 Locate 또는 create storage 볼륨 창을 엽니다.그림 3.7. 스토리지 볼륨 선택 창
- 스토리지 풀 목록에서 스토리지 풀을 선택합니다.
- 선택 사항: 을 클릭하여 새 스토리지 볼륨을 생성합니다. 스토리지 볼륨 추가 화면이 표시됩니다. 새 스토리지 볼륨의 이름을 입력합니다.형식 드롭다운 메뉴에서 형식 옵션을 선택합니다.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 를 클릭합니다.이름 및 최종 구성
가상 머신의 이름을 지정합니다. 가상 머신 이름에는 문자, 숫자 및 다음 문자가 포함될 수 있습니다.
밑줄(_
), 마침표( . ), 하이픈(-
)입니다. 가상 머신 이름은 마이그레이션에 대해 고유해야 하며 숫자만 구성될 수 없습니다.기본적으로 가상 머신은 '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 설치 가이드 를 참조하십시오.
3.4. virt-install 및 virt-manager 설치 옵션 비교
--name
,--memory
, 게스트 스토리지(--disk
,--filesystem
또는 --disk none
) 및 설치 방법(--location
,--cdrom
,--pxe
,--import
)입니다.
이러한 옵션은 인수와 함께 지정됩니다. 명령 옵션 및 관련 인수의 전체 목록을 보려면 다음 명령을 입력합니다.
# virt-install --help
표 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 키가 있습니다.
- 애플리케이션 수준 정보 및 구성에는 가상 시스템에 설치된 애플리케이션에 의해 구성된 모든 항목이 포함됩니다. 예를 들면 활성화 코드 및 등록 정보가 있습니다.참고정보와 접근 방식은 각 애플리케이션에 고유하기 때문에 애플리케이션 수준 제거에 대한 정보는 포함되지 않습니다.
4.1. 복제를 위한 가상 머신 준비
절차 4.1. 복제를 위한 가상 머신 준비
가상 머신 설정
- 복제 또는 템플릿에 사용할 가상 머신을 빌드합니다.
- 복제본에 필요한 소프트웨어를 설치합니다.
- 운영 체제에 대해 고유하지 않은 설정을 구성합니다.
- 고유하지 않은 애플리케이션 설정을 구성합니다.
네트워크 구성 제거
- 다음 명령을 사용하여 영구 udev 규칙을 제거합니다.
# rm -f /etc/udev/rules.d/70-persistent-net.rules
참고udev 규칙이 제거되지 않으면 첫 번째 NIC의 이름이 eth0 대신 eth1일 수 있습니다. /etc/sysconfig/network-scripts/ifcfg-eth[x]
를 다음과 같이 편집하여 ifcfg 스크립트에서 고유한 네트워크 세부 정보를 제거합니다.- 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.
- HWADDR 또는 고유한 정보가 포함되지 않은 DHCP 구성이 남아 있는지 확인합니다.
DEVICE=eth[x] BOOTPROTO=dhcp ONBOOT=yes
- 파일에 다음 행이 포함되어 있는지 확인합니다.
DEVICE=eth[x] ONBOOT=yes
- 다음 파일이 있는 경우 해당 파일에 동일한 콘텐츠가 포함되어 있는지 확인합니다.
/etc/sysconfig/networking/devices/ifcfg-eth[x]
/etc/sysconfig/networking/profiles/default/ifcfg-eth[x]
참고NetworkManager 또는 특수 설정을 가상 시스템과 함께 사용하는 경우 추가 고유 정보가 ifcfg 스크립트에서 제거되었는지 확인합니다.
등록 세부 정보 삭제
- 다음 중 하나를 사용하여 등록 세부 정보를 삭제합니다.
- 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 등록을 다시 활성화하려면 다음을 수행하십시오.- 고객 ID 코드를 가져옵니다.
# subscription-manager identity subscription-manager identity: 71rd64fx-6216-4409-bf3a-e4b7c7bd8ac9
- 가져온 ID 코드를 사용하여 가상 머신을 등록합니다.
# subscription-manager register --consumerid=71rd64fx-6216-4409-bf3a-e4b7c7bd8ac9
다른 고유한 세부 정보 제거
- 다음 명령을 사용하여 sshd 공개/개인 키 쌍을 제거합니다.
# rm -rf /etc/ssh/ssh_host_*
참고ssh 키를 제거하면 ssh 클라이언트의 문제가 이러한 호스트를 신뢰하지 않습니다. - 여러 시스템에서 실행되는 경우 충돌이 발생할 수 있는 기타 애플리케이션별 식별자 또는 구성을 제거합니다.
다음 부팅 시 구성 마법사를 실행하도록 가상 머신 구성
- 다음에 다음 중 하나를 수행하여 부팅될 때 관련 구성 마법사를 실행하도록 가상 머신을 구성합니다.
- 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. 가상 머신 복제
4.2.1. virt-clone을 사용하여 게스트 복제
--original
만 필요합니다. 전체 옵션 목록을 보려면 다음 명령을 입력합니다.
# virt-clone --help
예 4.1. virt-clone 을 사용하여 게스트 복제
# virt-clone --original demo --auto-clone
예 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를 사용하여 게스트 복제
절차 4.2. virt-manager를 사용하여 가상 머신 복제
virt-manager를 엽니다.
virt-manager 를 시작합니다. Applications (애플리케이션) 메뉴 및 System Tools (시스템 도구) 하위 메뉴에서 Virtual Machine Manager 애플리케이션을 시작합니다. 또는 root로 virt-manager 명령을 실행합니다.가상 머신 관리자 의 게스트 가상 머신 목록에서 복제하려는 게스트 가상 머신을 선택합니다.복제하려는 게스트 가상 머신을 마우스 오른쪽 버튼으로 클릭하고 Clone 을 선택합니다. Clone Virtual Machine(가상 시스템 복제) 창이 열립니다.그림 4.1. 가상 머신 복제 창
복제 구성
- 복제본의 이름을 변경하려면 복제본의 새 이름을 입력합니다.
- 네트워킹 구성을 변경하려면 세부 정보를 클릭합니다.복제본의 새 MAC 주소를 입력합니다.OK를 클릭합니다.
그림 4.2. MAC 주소 창 변경
- 복제된 게스트 가상 머신의 각 디스크에 대해 다음 옵션 중 하나를 선택합니다.
이 디스크 복제
- 복제된 게스트 가상 머신에 대해 디스크가 복제됨게스트 가상 머신 이름으로디스크 공유 - 복제할 게스트 가상 머신과 해당 복제본에서 디스크를 공유합니다
.세부 정보
- 디스크의 새 경로를 선택할 수 있는 스토리지 경로 변경 창을 엽니다.그림 4.3.
스토리지 경로
창 변경
게스트 가상 머신을 복제합니다.
Clone 을 클릭합니다.
5장. KVM Paravirtualized (virtio) 드라이버
virtio
패키지에 포함되어 있습니다. virtio 패키지는 블록(스토리지) 장치 및 네트워크 인터페이스 컨트롤러를 지원합니다.
5.1. 기존 스토리지 장치에 KVM virtio 드라이버 사용
virtio
드라이버를 사용하도록 게스트에 연결된 기존 하드 디스크 장치를 수정할 수 있습니다. 이 섹션에 표시된 예제에서는 libvirt 구성 파일을 편집합니다. 이러한 단계를 수행하기 위해 게스트 가상 머신을 종료할 필요는 없지만 게스트가 완전히 종료되고 재부팅될 때까지 변경 사항이 적용되지 않습니다.
절차 5.1. 기존 장치에 KVM virtio 드라이버 사용
- 이 절차를 계속 진행하기 전에 적절한 드라이버(
viostor
)를 설치했는지 확인하십시오. - virsh edit guestname 명령을 root로 실행하여 장치의 XML 구성 파일을 편집합니다. 예를 들어 virsh는 guest1을 편집합니다. 구성 파일은
/etc/libvirt/qemu/
디렉터리에 있습니다. - 다음은 가상화된 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>
- 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>
- 디스크 태그 내에서 address 태그를 제거합니다. 이 절차가 작동하려면 이 작업을 수행해야 합니다. libvirt는 다음에 가상 머신을 시작할 때 주소 태그를 적절하게 다시 생성합니다.
5.2. 새 스토리지 장치에 KVM virtio 드라이버 사용
절차 5.2. virtio 스토리지 드라이버를 사용하여 스토리지 장치 추가
- virt-manager 에서 게스트 이름을 두 번 클릭하여 게스트 가상 머신을 엽니다.
- 을 클릭하여 가상 하드웨어 세부 정보 표시 탭을 엽니다.
- Show virtual hardware details 탭에서 하드웨어 추가 버튼을 클릭합니다.
하드웨어 유형 선택
Hardware type 으로 Storage 를 선택합니다.그림 5.1. 새 가상 하드웨어 추가 마법사
스토리지 장치 및 드라이버를 선택합니다.
새 디스크 이미지를 생성하거나 스토리지 풀 볼륨을 선택합니다.virtio 드라이버를 사용하려면 장치 유형을 Disk 장치 및 Bus 유형을 VirtIO 로 설정합니다.그림 5.2. 새 가상 하드웨어 추가 마법사
완료 를 클릭하여 절차를 완료합니다.
절차 5.3. virtio 네트워크 드라이버를 사용하여 네트워크 장치 추가
- virt-manager 에서 게스트 이름을 두 번 클릭하여 게스트 가상 머신을 엽니다.
- 을 클릭하여 가상 하드웨어 세부 정보 표시 탭을 엽니다.
- Show virtual hardware details 탭에서 하드웨어 추가 버튼을 클릭합니다.
하드웨어 유형 선택
Hardware type 으로 Network 를 선택합니다.그림 5.3. 새 가상 하드웨어 추가 마법사
네트워크 장치 및 드라이버를 선택합니다.
virtio 드라이버를 사용하려면 장치 모델을 virtio 로 설정합니다. 필요한 호스트 장치를 선택합니다.그림 5.4. 새 가상 하드웨어 추가 마법사
완료 를 클릭하여 절차를 완료합니다.
5.3. 네트워크 인터페이스 장치에 KVM virtio 드라이버 사용
- 또는 virt-manager 인터페이스에서 게스트의 가상 하드웨어 세부 정보 화면으로 이동하여 하드웨어 추가 를 클릭합니다. 새 가상 하드웨어 추가 화면에서 Network 를 선택하고 Device model 을
virtio
로 변경합니다. - 기존 인터페이스의 유형을 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장. 네트워크 설정
- NAT(네트워크 주소 변환)를 사용하는 가상 네트워크
- PCI 장치 할당을 사용하여 직접 할당된 물리적 장치
- PCIe SR-IOV를 사용하여 직접 할당된 가상 기능
- 브리지 네트워크
6.1. libvirt를 사용한 NAT(Network Address Translation)
호스트 설정
모든 표준 libvirt
설치는 기본 가상 네트워크로 가상 머신에 NAT 기반 연결을 제공합니다. virsh net-list --all 명령을 사용하여 사용할 수 있는지 확인합니다.
# virsh net-list --all
Name State Autostart
-----------------------------------------
default active yes
# 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
virbr0
장치에 연결된 게스트 가상 머신의 트래픽을 허용하는 iptables 규칙을 추가합니다. libvirt 는 ip_forward 매개변수를 활성화합니다. 다른 일부 애플리케이션은 ip_forward 를 비활성화할 수 있으므로 가장 좋은 옵션은 /etc/sysctl.conf
에 다음을 추가하는 것입니다.
net.ipv4.ip_forward = 1
게스트 가상 머신 구성
호스트 구성이 완료되면 이름을 기반으로 게스트 가상 머신을 가상 네트워크에 연결할 수 있습니다. 게스트를 '기본' 가상 네트워크에 연결하려면 XML 구성 파일(예: /etc/libvirtd/qemu/myguest.xml
)에서 게스트를 사용할 수 있습니다.
<interface type='network'> <source network='default'/> </interface>
<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이 사용 중일 때 특정 워크로드가 성능이 저하되는 경우 인터페이스 구성에서 기본적으로 활성화될 수 있습니다.
<interface>
하위 요소를 편집하고 다음과 같이 네트워크를 정의합니다.
<interface type="network"> ... <model type="virtio"/> <driver name="qemu"/> ... </interface>
qemu
로 설정하면 패킷 처리를 QEMU 사용자 공간으로 강제 비활성화하여 해당 인터페이스에 대해 vhost-net을 효과적으로 비활성화합니다.
6.3. 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
$ cat /sys/module/vhost_net/parameters/experimental_zcopytx
0
6.4. 브리지 네트워킹
6.4.1. Red Hat Enterprise Linux 7 호스트에서 브리지 네트워킹 구성
6.4.2. 가상 머신 관리자를 사용한 브리지 네트워킹
절차 6.1. virt-manager를 사용하여 브리지 만들기
- virt-manager 메인 메뉴에서 Edit octets Connection Details 를 클릭하여 연결 세부 정보 창을 엽니다.
- 네트워크 인터페이스 탭을 클릭합니다.
- 창 하단에 있는 + 를 클릭하여 새 네트워크 인터페이스를 구성합니다.
- 인터페이스 유형 드롭다운 메뉴에서 브리지 를 선택한 다음 앞으로 를 클릭하여 계속합니다.
그림 6.1. 브리지 추가
- 이름 필드에 브리지의 이름을 입력합니다(예: br0 ).
- 드롭다운 메뉴에서 시작 모드를 선택합니다. 다음 중 하나를 선택합니다.
- none - 브리지를 비활성화합니다.
- ONBOOT - 다음 게스트 가상 머신 재부팅 시 브리지를 활성화합니다.
- 핫플러그 - 게스트 가상 머신이 실행 중인 경우에도 브릿지를 활성화합니다.
- 이제 활성화 확인란을 선택하여 브릿지를 즉시 활성화합니다.
- IP 설정 또는 브리지 설정을 구성하려면 적절한 Configure (구성) 버튼을 클릭합니다. 필요한 설정을 지정하기 위해 별도의 창이 열립니다. 필요한 사항을 변경하고 완료되면 확인 을 클릭합니다.
- 가상 머신에 연결할 실제 인터페이스를 선택합니다. 인터페이스가 현재 다른 게스트 가상 머신에서 사용 중인 경우 경고 메시지가 표시됩니다.
- 완료 를 클릭하고 마법사가 닫히고 연결 메뉴로 돌아갑니다.
그림 6.2. 브리지 추가
6.4.3. libvirt를 사용한 브리지 네트워킹
<bridge>
요소의 macTableManager
속성을 호스트의 XML 구성 파일에서 'libvirt'
로 설정합니다.
<bridge name='br0' macTableManager='libvirt'/>이렇게 하면 모든 브리지 포트에서 학습 모드가 해제되고 libvirt는 필요에 따라 FDB에 항목을 추가하거나 제거합니다. MAC 주소에 대한 적절한 전달 포트를 학습하는 오버헤드를 제거하는 것과 함께 커널은 네트워크에 브리지를 연결하는 물리적 장치에서 무차별 모드를 비활성화하여 오버헤드를 추가로 줄일 수 있습니다.
7장. KVM을 사용하여 오버 커밋
7.1. 소개
7.2. 메모리 과다 할당
7.3. 가상화된 CPU 과다 할당
8장. KVM 게스트 타이밍 관리
- 인터럽트는 항상 동시에 그리고 모든 게스트 가상 머신에 즉시 전달될 수 없습니다. 이는 가상 머신의 인터럽트가 실제 인터럽트가 아니기 때문입니다. 대신 호스트 시스템에 의해 게스트 가상 머신에 삽입됩니다.
- 호스트는 다른 게스트 가상 머신을 실행하거나 다른 프로세스를 실행할 수 있습니다. 따라서 일반적으로 인터럽트에 필요한 정확한 타이밍이 항상 가능한 것은 아닙니다.
ntpd
서비스에 의해 구현됩니다. 자세한 내용은 Red Hat Enterprise 6 배포 가이드 를 참조하십시오.
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
constant_tsc
bit가 있습니다. 출력을 지정하지 않으면 아래 지침을 따릅니다.
Constant TSC를 사용하지 않고 호스트 구성
일정한 TSC 빈도가 없는 시스템은 TSC를 가상 머신의 클럭 소스로 사용할 수 없으며 추가 구성이 필요합니다. 전원 관리 기능은 정확한 시간 유지를 방해하고 게스트 가상 머신이 KVM을 사용하여 시간을 정확하게 유지하려면 비활성화해야 합니다.
constant_tsc
비트가 없는 경우 모든 전원 관리 기능 을 비활성화합니다. 각 시스템에는 시간을 유지하기 위해 사용하는 여러 타이머가 있습니다. TSC는 호스트에서 안정적이지 않으며, cpufreq 변경, 깊이 C 상태 또는 더 빠른 TSC를 사용하는 호스트로의 마이그레이션으로 인해 발생하는 경우가 있습니다. 딥 C 절전 상태는 TSC를 중지할 수 있습니다. 커널이 딥 C 상태를 사용하는 것을 방지하기 위해 커널 부팅에 processor.max_cstate=1 을 추가합니다. 이 변경 사항을 영구적으로 변경하려면 /etc/default/grub
파일에서 GRUB_CMDLINE_LINUX 키 값을 편집합니다. 예를 들어 각 부팅마다 긴급 모드를 활성화하려면 다음과 같이 항목을 편집합니다.
GRUB_CMDLINE_LINUX="emergency"
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. 호스트 전체 시간 동기화
- 재부팅 후 로드하도록
ptp_kvm
모듈을 설정합니다.# echo ptp_kvm > /etc/modules-load.d/ptp_kvm.conf
/dev/ptp0
시계를 chrony 구성에 대한 참조로 추가합니다.# echo "refclock PHC /dev/ptp0 poll 2" >> /etc/chrony.conf
- chrony 데몬을 다시 시작하십시오.
# systemctl restart chronyd
- 호스트 게스트 시간 동기화가 올바르게 구성되었는지 확인하려면 게스트에서 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 게스트에 필요한 시간 관리 매개 변수
/etc/grub2.cfg
파일에서 /kernel
행의 끝에 추가하여 설정할 수 있습니다.
표 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. 느슨한 시간 계산
/proc/stat
의 CPU 시간 필드에 보고됩니다. top 및 vmstat 와 같은 유틸리티에 의해 자동으로 보고됩니다. "%st" 또는 "st" 열에 표시됩니다. 해제할 수 없습니다.
9장. libvirt를 사용하여 네트워크 부팅
9.1. 부팅 서버 준비
- PXE 서버(DHCP 및 TFTP) - libvirt 내부 서버, 수동으로 구성된 dhcpd 및 tftpd, dnsmasq, Co#150r 또는 기타 다른 서버일 수 있습니다.
- 부팅 이미지 - 예를 들어 수동으로 또는 Co1.8.0r에 의해 구성된 PXELINUX입니다.
9.1.1. 프라이빗 libvirt 네트워크에서 PXE 부팅 서버 설정
절차 9.1. PXE 부팅 서버 구성
- PXE 부팅 이미지와 구성을
/var/lib/tftpboot
에 배치합니다. - 다음 명령을 입력합니다.
# virsh net-destroy default # virsh net-edit default
- 적절한 주소, 네트워크 마스크, 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>
- 다음을 실행합니다.
# virsh net-start default
- PXE를 사용하여 게스트를 부팅합니다( 9.2절. “PXE를 사용하여 게스트 부팅”참조).
9.2. PXE를 사용하여 게스트 부팅
9.2.1. 브리지 네트워킹 사용
절차 9.2. PXE 및 브리지 네트워킹을 사용하여 게스트 부팅
- 네트워크에서 PXE 부팅 서버를 사용할 수 있도록 브리징이 활성화되었는지 확인합니다.
- 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 네트워크 사용
- 9.1.1절. “프라이빗 libvirt 네트워크에서 PXE 부팅 서버 설정” 에 표시된 대로 libvirt에서 PXE 부팅을 구성합니다.
- PXE 부팅이 활성화된 libvirt를 사용하여 게스트 가상 머신을 부팅합니다. virt-install 명령을 사용하여 PXE를 사용하여 새 가상 머신을 생성/설치할 수 있습니다.
virt-install --pxe --network network=default --prompt
<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 및 가상 머신 등록
- 가상 시스템과 관련된 서브스크립션은 쉽게 사용할 수 있으며 모든 관련 게스트 VM에 적용할 수 있습니다.
- 하이퍼바이저에서 상속할 수 있는 모든 서브스크립션 이점을 즉시 사용할 수 있으며 모든 게스트 VM에 적용할 수 있습니다.
10.1. 호스트 물리적 시스템에 virt-who 설치
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
virt-who 패키지 설치
호스트 물리적 시스템에서 다음 명령을 실행하여 virt-who 패키지를 설치합니다.# yum install virt-who
virt-who 설정 파일 만들기
각 하이퍼바이저에 대해/etc/virt-who.d/
디렉터리에 구성 파일을 추가합니다. 최소한 파일에 다음 스니펫이 포함되어야 합니다.[libvirt] type=libvirt
virt-who 구성에 대한 자세한 내용은 10.1.1절. “virt-who구성” 을 참조하십시오.virt-who 서비스 시작
호스트 물리적 머신에서 다음 명령을 실행하여 virt-who 서비스를 시작합니다.# systemctl start virt-who.service # systemctl enable virt-who.service
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. 고객 포털에서 서브스크립션 관리
하이퍼바이저 구독
가상 머신에서 하이퍼바이저와 동일한 서브스크립션 이점을 받을 예정이므로 하이퍼바이저에 유효한 서브스크립션이 있고 VM을 사용할 수 있는 서브스크립션이 있어야 합니다.고객 포털에 로그인합니다.
Red Hat 고객 포털에서 Red Hat 계정 자격 증명을 제공하여 로그인합니다.시스템 링크를 클릭합니다.
내 서브스크립션 인터페이스의 시스템 섹션으로 이동합니다.하이퍼바이저 선택
시스템 페이지에는 모든 서브스크립션 시스템의 테이블이 있습니다. 하이퍼바이저 이름(예:localhost.localdomain
)을 클릭합니다. 열리는 세부 정보 페이지에서 서브스크립션 연결을 클릭하고 나열된 모든 서브스크립션을 선택합니다. Attach Selected 를 클릭합니다. 그러면 게스트가 서브스크립션의 이점을 누릴 수 있도록 호스트의 물리적 서브스크립션이 하이퍼바이저에 연결됩니다.
게스트 가상 머신 구독 - 처음 사용
이 단계는 새 서브스크립션이 있고 이전에 게스트 가상 시스템을 서브스크립션하지 않은 사용자를 위한 것입니다. 가상 머신을 추가하는 경우 이 단계를 건너뜁니다. virt-who 서비스를 실행하는 시스템의 하이퍼바이저 프로필에 할당된 서브스크립션을 사용하려면 게스트 가상 머신의 터미널에서 다음 명령을 실행하여 자동으로 등록합니다.[root@virt-who ~]# subscription-manager attach --auto
추가 게스트 가상 머신 구독
가상 시스템을 처음 서브스크립션한 경우 이 단계를 건너뜁니다. 가상 머신을 추가하는 경우 이 명령을 실행하면 동일한 서브스크립션을 게스트 가상 머신에 다시 연결할 필요가 없습니다. 이는 모든 서브스크립션을 제거하면 자동 연결을 통해 지정된 게스트 가상 시스템에 필요한 항목을 확인할 수 있으므로 이전과 다른 서브스크립션이 사용되기 때문입니다. 시스템에 영향을 미치지 않을 수도 있지만 알아야 할 사항입니다. 아래에 설명되지 않은 가상 머신을 연결하는 데 수동 연결 절차를 사용한 경우 자동 연결이 작동하지 않으므로 해당 가상 머신을 수동으로 다시 연결해야 합니다. 다음 명령을 사용하여 이전 게스트의 서브스크립션을 먼저 제거한 다음 자동 연결을 사용하여 모든 게스트에 서브스크립션을 연결합니다. 게스트 가상 머신에서 다음 명령을 실행합니다.[root@virt-who ~]# subscription-manager remove --all [root@virt-who ~]# subscription-manager attach --auto
서브스크립션이 연결되었는지 확인
게스트 가상 머신에서 다음 명령을 실행하여 서브스크립션이 하이퍼바이저에 연결되어 있는지 확인합니다.[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절. “서브스크립션 상태 오류가 발생했습니다. 어떻게 해야 합니까?”.
추가 게스트 등록
하이퍼바이저에 새 게스트 VM을 설치하는 경우 게스트 가상 머신에서 다음 명령을 실행하여 새 VM을 등록하고 하이퍼바이저에 연결된 서브스크립션을 사용해야 합니다.# subscription-manager register # subscription-manager attach --auto # subscription-manager list --consumed
10.1.1. 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
10.2. 새 게스트 가상 머신 등록
[root@virt-server ~]# subscription-manager register --username=admin --password=secret --auto-attach
10.3. 게스트 가상 머신 제거
[root@virt-guest ~]# subscription-manager unregister
서브스크립션 관리자에 로그인
서브스크립션 관리자는 Red Hat 고객 포털에 있습니다. 화면 상단에 있는 로그인 아이콘을 클릭하여 사용자 이름 및 암호를 사용하여 고객 포털에 로그인합니다.서브스크립션 탭을 클릭합니다.
서브스크립션 탭을 클릭합니다.시스템 링크를 클릭합니다.
페이지를 아래로 스크롤하여 Systems 링크를 클릭합니다.시스템 삭제
시스템 프로필을 삭제하려면 테이블에서 지정된 시스템의 프로필을 찾고 이름 옆에 있는 확인란을 선택하고 삭제를 클릭합니다.
10.4. virt-who 수동 설치
절차 10.2. 서브스크립션을 수동으로 연결하는 방법
서브스크립션 정보 나열 및 풀 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를 복사합니다.풀 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. 하이퍼바이저의 상태가 빨간색인 이유는 무엇입니까?
10.5.2. 서브스크립션 상태 오류가 발생했습니다. 어떻게 해야 합니까?
- 시스템이 올바르게 서브스크립션되지 않음
- 상태를 알 수 없음
- virt-who를 통해 게스트를 하이퍼바이저에 늦은 바인딩(호스트/게스트 매핑)
/var/log/rhsm/
디렉터리에 있는 rhsm.log
라는 virt-who 로그 파일을 엽니다.
11장. QEMU 게스트 에이전트 및 SPICE 에이전트를 사용하여 가상화 개선
11.1. QEMU 게스트 에이전트
11.1.1. QEMU 게스트 에이전트와 호스트 간 통신 설정
11.1.1.1. Linux 게스트에서 QEMU 게스트 에이전트 구성
절차 11.1. Linux 게스트 종료 시 virsh 를 사용하여 게스트 에이전트와 호스트 간 통신 설정
가상 머신 종료
QEMU 게스트 에이전트를 구성하기 전에 가상 머신(이 예제의 이름이 rhel7 임)이 종료되었는지 확인합니다.# virsh shutdown rhel7
게스트 XML 구성에 QEMU 게스트 에이전트 채널 추가
게스트의 XML 파일을 편집하여 QEMU 게스트 에이전트 세부 정보를 추가합니다.# virsh edit rhel7
게스트의 XML 파일에 다음을 추가하고 변경 사항을 저장합니다.<channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel>
가상 머신 시작
# virsh start rhel7
게스트에 QEMU 게스트 에이전트 설치
게스트 가상 머신에 아직 설치되지 않은 경우 QEMU 게스트 에이전트를 설치합니다.# yum install qemu-guest-agent
게스트에서 QEMU 게스트 에이전트 시작
게스트에서 QEMU 게스트 에이전트 서비스를 시작합니다.# systemctl start qemu-guest-agent
절차 11.2. 실행 중인 Linux 게스트에서 게스트 에이전트와 호스트 간의 통신 설정
QEMU 게스트 에이전트의 XML 파일 생성
# cat agent.xml <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel>
가상 머신에 QEMU 게스트 에이전트 연결
다음 명령을 사용하여 실행 중인 가상 머신(이 예에서는 rhel7 이라는)에 QEMU 게스트 에이전트를 연결합니다.# virsh attach-device rhel7 agent.xml
게스트에 QEMU 게스트 에이전트 설치
게스트 가상 머신에 아직 설치되지 않은 경우 QEMU 게스트 에이전트를 설치합니다.# yum install qemu-guest-agent
게스트에서 QEMU 게스트 에이전트 시작
게스트에서 QEMU 게스트 에이전트 서비스를 시작합니다.# systemctl start qemu-guest-agent
절차 11.3. virt-manager를 사용하여 QEMU 게스트 에이전트와 호스트 간 통신 설정
가상 머신 종료
QEMU 게스트 에이전트를 구성하기 전에 가상 머신이 종료되었는지 확인합니다.가상 머신을 종료하려면 Virtual Machine Manager 의 가상 머신 목록에서 선택한 다음 메뉴 표시줄에서 가벼운 스위치 아이콘을 클릭합니다.게스트에 QEMU 게스트 에이전트 채널 추가
게스트 창 상단에 있는 Lightbulb 아이콘을 클릭하여 가상 머신의 하드웨어 세부 정보를 엽니다.하드웨어 추가 버튼을 클릭하여 새 가상 하드웨어 추가 창을 열고 채널을 선택합니다.이름 드롭다운 목록에서 QEMU 게스트 에이전트를 선택하고 Finish:를 클릭합니다.그림 11.1. QEMU 게스트 에이전트 채널 장치 선택
가상 머신 시작
가상 머신을 시작하려면 가상 머신 관리자 의 가상 머신 목록에서 선택한 다음 메뉴 표시줄에서 을 클릭합니다.게스트에 QEMU 게스트 에이전트 설치
virt-manager 로 게스트를 열고 게스트 가상 머신에 아직 설치되지 않은 경우 QEMU 게스트 에이전트를 설치합니다.# yum install qemu-guest-agent
게스트에서 QEMU 게스트 에이전트 시작
게스트에서 QEMU 게스트 에이전트 서비스를 시작합니다.# systemctl start qemu-guest-agent
11.2. libvirt를 사용하여 QEMU 게스트 에이전트 사용
- 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 domfsfreeze 및 virsh domfsthaw - 게스트 파일 시스템을 분리합니다.
- virsh domfstrim - 게스트에서 파일 시스템을 트리밍합니다.
- virsh domtime - 게스트의 클럭을 설정하거나 쿼리합니다.
- virsh setvcpus --guest - 게스트에서 CPU를 오프라인으로 전환합니다.
- virsh domifaddr --source 에이전트 - 게스트 에이전트를 통해 게스트 운영 체제의 IP 주소를 조회합니다.
- virsh domfsinfo - 실행 중인 게스트 내에 마운트된 파일 시스템 목록을 표시합니다.
- virsh set-user-password - 게스트에서 사용자 계정의 암호를 설정합니다.
11.2.1. 게스트 디스크 백업 생성
- 파일 시스템 애플리케이션/데이터베이스가 가상 디스크에 작업 버퍼를 플러시하고 클라이언트 연결 수락 중지
- 애플리케이션에서 데이터 파일을 일관된 상태로 가져옵니다.
- 기본 후크 스크립트 반환
- QEMU-guest-agent 는 파일 시스템을 정지하고 관리 스택에서 스냅샷을 만듭니다.
- 스냅샷이 확인됨
- 파일 시스템 기능 재개
/etc/qemu-ga/fsfreeze-hook.d/
에서 레이블이 지정된 표 행에서 표 11.1. “QEMU 게스트 에이전트 패키지 콘텐츠” 에 나열된 restorecon -FvvR 명령을 실행하면 됩니다.
표 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 에이전트
11.3.1. SPICE 에이전트와 호스트 간 통신 설정
절차 11.4. Linux 게스트에서 virsh 를 사용하여 게스트 에이전트와 호스트 간 통신 설정
가상 머신 종료
SPICE 에이전트를 구성하기 전에 가상 시스템(이 예제의 이름이 rhel7 임)이 종료되었는지 확인합니다.# virsh shutdown rhel7
게스트 XML 구성에 SPICE 에이전트 채널 추가
게스트의 XML 파일을 편집하여 SPICE 에이전트 세부 정보를 추가합니다.# virsh edit rhel7
게스트의 XML 파일에 다음을 추가하고 변경 사항을 저장합니다.<channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> </channel>
가상 머신 시작
# virsh start rhel7
게스트에 SPICE 에이전트 설치
게스트 가상 머신에 아직 설치되지 않은 경우 SPICE 에이전트를 설치합니다.# yum install spice-vdagent
게스트에서 SPICE 에이전트 시작
게스트에서 SPICE 에이전트 서비스를 시작합니다.# systemctl start spice-vdagent
절차 11.5. 실행 중인 Linux 게스트에서 SPICE 에이전트와 호스트 간 통신 설정
SPICE 에이전트를 위한 XML 파일 생성
# cat agent.xml <channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> </channel>
가상 머신에 SPICE 에이전트 연결
다음 명령을 사용하여 실행 중인 가상 머신(이 예에서 rhel7 이라는)에 SPICE 에이전트를 연결합니다.# virsh attach-device rhel7 agent.xml
게스트에 SPICE 에이전트 설치
게스트 가상 머신에 아직 설치되지 않은 경우 SPICE 에이전트를 설치합니다.# yum install spice-vdagent
게스트에서 SPICE 에이전트 시작
게스트에서 SPICE 에이전트 서비스를 시작합니다.# systemctl start spice-vdagent
절차 11.6. virt-manager를 사용하여 SPICE 에이전트와 호스트 간 통신 설정
가상 머신 종료
SPICE 에이전트를 구성하기 전에 가상 머신이 종료되었는지 확인합니다.가상 머신을 종료하려면 Virtual Machine Manager 의 가상 머신 목록에서 선택한 다음 메뉴 표시줄에서 가벼운 스위치 아이콘을 클릭합니다.게스트에 SPICE 에이전트 채널 추가
게스트 창 상단에 있는 Lightbulb 아이콘을 클릭하여 가상 머신의 하드웨어 세부 정보를 엽니다.하드웨어 추가 버튼을 클릭하여 새 가상 하드웨어 추가 창을 열고 채널을 선택합니다.이름 드롭다운 목록에서 SPICE 에이전트를 선택하고 채널 주소를 편집한 후 완료 를 클릭합니다.그림 11.2. SPICE 에이전트 채널 장치 선택
가상 머신 시작
가상 머신을 시작하려면 가상 머신 관리자 의 가상 머신 목록에서 선택한 다음 메뉴 표시줄에서 을 클릭합니다.게스트에 SPICE 에이전트 설치
virt-manager 로 게스트를 열고 게스트 가상 머신에 아직 설치되지 않은 경우 SPICE 에이전트를 설치합니다.# yum install spice-vdagent
게스트에서 SPICE 에이전트 시작
게스트에서 SPICE 에이전트 서비스를 시작합니다.# systemctl start spice-vdagent
12장. 중첩된 가상화
12.1. 개요
12.2. 설정
- 활성화: 이 기능은 기본적으로 비활성화되어 있습니다. 이를 활성화하려면 L0 호스트 물리적 시스템에서 다음 절차를 사용하십시오.Intel의 경우:
- 호스트 시스템에서 중첩된 가상화를 사용할 수 있는지 확인합니다.
$ cat /sys/module/kvm_intel/parameters/nested
이 명령에서Y
또는1
을 반환하면 기능이 활성화됩니다.명령이0
또는N
을 반환하는 경우 단계 ii 및 iii 을 사용하십시오. kvm_intel
모듈을 언로드합니다.# modprobe -r kvm_intel
- 중첩 기능을 활성화합니다.
# modprobe kvm_intel nested=1
- 이제 L0 호스트를 다음에 재부팅할 때까지만 중첩 기능이 활성화됩니다. 영구적으로 활성화하려면
/etc/modprobe.d/kvm.conf
파일에 다음 행을 추가합니다.options kvm_intel nested=1
AMD의 경우:- 시스템에서 중첩된 가상화를 사용할 수 있는지 확인합니다.
$ cat /sys/module/kvm_amd/parameters/nested
이 명령에서Y
또는1
을 반환하면 기능이 활성화됩니다.명령이0
또는N
을 반환하는 경우 단계 ii 및 iii 을 사용하십시오. kvm_amd
모듈 언로드# modprobe -r kvm_amd
- 중첩 기능 활성화
# modprobe kvm_amd nested=1
- 이제 L0 호스트를 다음에 재부팅할 때까지만 중첩 기능이 활성화됩니다. 영구적으로 활성화하려면
/etc/modprobe.d/kvm.conf
파일에 다음 행을 추가합니다.options kvm_amd nested=1
- 다음 방법 중 하나를 사용하여 중첩된 가상화의 L1 가상 머신을 구성합니다.
- virt-manager
- 원하는 게스트의 GUI를 열고 가상 하드웨어 세부 정보 표시 아이콘을 클릭합니다.
- Processor 메뉴를 선택하고 Configuration (구성) 섹션에서 Model 필드에
host-passthrough
를 입력하고 (드롭다운 선택을 사용하지 않음)을 클릭합니다.
[D]
- 도메인 XML
- 게스트의 도메인 XML 파일에 다음 행을 추가합니다.
<cpu mode='host-passthrough'/>
게스트의 XML 구성 파일에<cpu>
요소가 이미 포함된 경우 다시 작성합니다.
- 중첩된 가상화 사용을 시작하려면 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 부. 관리
qemu-img
,virt-manager
, virsh
도구를 사용하여 장치 및 게스트 가상 머신 관리에 대한 지침을 제공합니다.
13장. 가상 머신용 스토리지 관리
13.1. 스토리지 개념
절차 13.1. 스토리지 생성 및 할당
스토리지 풀 생성
사용 가능한 스토리지 미디어에서 하나 이상의 스토리지 풀을 생성합니다. 자세한 내용은 13.2절. “스토리지 풀 사용”의 내용을 참조하십시오.스토리지 볼륨 생성
사용 가능한 스토리지 풀에서 하나 이상의 스토리지 볼륨을 생성합니다. 자세한 내용은 13.3절. “스토리지 볼륨 사용”의 내용을 참조하십시오.가상 머신에 스토리지 장치를 할당합니다.
스토리지 볼륨에서 게스트 가상 머신에 추상화된 하나 이상의 스토리지 장치를 할당합니다. 자세한 내용은 13.3.6절. “게스트에 스토리지 장치 추가”의 내용을 참조하십시오.
13.2. 스토리지 풀 사용
13.2.1. 스토리지 풀 개념
- 로컬 스토리지 풀
- 로컬 스토리지 풀은 호스트 서버에 직접 연결됩니다. 여기에는 로컬 디렉터리, 직접 연결된 디스크, 물리 파티션, 로컬 장치의 LVM(Logical Volume Management) 볼륨 그룹이 포함됩니다. 로컬 스토리지 풀은 마이그레이션 또는 다수의 가상 시스템이 필요하지 않은 개발, 테스트 및 소규모 배포에 유용합니다. 로컬 스토리지 풀은 실시간 마이그레이션에 사용할 수 없기 때문에 많은 프로덕션 환경에 적합하지 않을 수 있습니다.
- 네트워크화된(공유) 스토리지 풀
- 네트워크 스토리지 풀에는 표준 프로토콜을 사용하여 네트워크를 통해 공유하는 스토리지 장치가 포함됩니다. virt-manager 를 사용하여 호스트 간에 가상 머신을 마이그레이션할 때는 네트워크 스토리지가 필요하지만 virsh 로 마이그레이션할 때는 선택 사항입니다.가상 머신 마이그레이션에 대한 자세한 내용은 15장. KVM 마이그레이션 을 참조하십시오.
- 디렉터리 기반 스토리지 풀
- 디스크 기반 스토리지 풀
- 파티션 기반 스토리지 풀
- GlusterFS 스토리지 풀
- iSCSI 기반 스토리지 풀
- LVM 기반 스토리지 풀
- NFS 기반 스토리지 풀
- SCSI 장치가 있는 vHBA 기반 스토리지 풀
- 다중 경로 기반 스토리지 풀
- RBD 기반 스토리지 풀
- NovaCronepdog 기반 스토리지 풀
- Vstorage 기반 스토리지 풀
- RuntimeClass 기반 스토리지 풀
13.2.2. 스토리지 풀 생성
13.2.2.1. virsh를 사용하여 스토리지 풀 생성
절차 13.2. virsh를 사용하여 스토리지 풀 생성
권장 사항을 읽고 모든 사전 요구 사항이 충족되는지 확인합니다.
일부 스토리지 풀의 경우 이 가이드에서는 특정 사례를 따르는 것이 좋습니다. 또한 일부 유형의 스토리지 풀에는 사전 요구 사항이 있습니다. 권장 사항 및 사전 요구 사항을 보려면 13.2.3절. “스토리지 풀별” 를 참조하십시오.스토리지 풀 정의
스토리지 풀은 영구 또는 일시적일 수 있습니다. 호스트 시스템을 시스템을 다시 시작해도 영구 스토리지 풀입니다. 임시 스토리지 풀은 호스트가 재부팅될 때까지만 존재합니다.다음 중 하나를 수행합니다.- 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 인터페이스를 사용하는 경우 명령의 옵션 이름은 선택 사항입니다. 옵션 이름을 사용하지 않는 경우 지정할 필요가 없는 필드에 대시를 사용합니다.
풀이 생성되었는지 확인합니다.
virsh pool-list --all 을 사용하여 기존 스토리지 풀을 모두 나열합니다.# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_fs inactive no
스토리지 풀 대상 경로 정의
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
옵션을 지정하지 않는 한 빌드가 실패합니다.스토리지 풀 시작
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 명령은 영구 스토리지 풀에만 필요합니다. 임시 스토리지 풀은 생성될 때 자동으로 시작됩니다.자동 시작 켜기 (선택 사항)
기본적으로 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
가 시작될 때마다 스토리지 풀이 자동으로 시작됩니다.스토리지 풀 확인
스토리지 풀이 올바르게 생성되었으며 보고된 크기가 예상대로, 상태가 실행 중 으로 보고되는지 확인합니다. 장치가 마운트되었음을 나타내는 파일 시스템의 대상 경로에 "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. 가상 머신 관리자를 사용하여 스토리지 풀 생성
스토리지 풀을 생성할 매체를 준비합니다.
이는 스토리지 풀 유형에 따라 다릅니다. 자세한 내용은 13.2.3절. “스토리지 풀별”의 내용을 참조하십시오.이 예제에서는 GUID 파티션 테이블 을 사용하여 디스크의 레이블을 다시 지정해야 할 수 있습니다.스토리지 설정을 엽니다.
- Virtual Machine Manager 에서 구성할 호스트 연결을 선택합니다.편집 메뉴를 열고 연결 세부 정보를 선택합니다.
- 연결 세부 정보 창에서 스토리지 탭을 클릭합니다.
그림 13.1. 스토리지 탭
새 스토리지 풀 생성
참고Virtual Machine Manager 를 사용하면 영구 스토리지 풀만 생성할 수 있습니다. 임시 스토리지 풀은 virsh 를 통해서만 만들 수 있습니다.새 스토리지 풀(파트 1) 추가
창 하단에 있는 버튼을 클릭합니다. 새 스토리지 풀 추가 마법사가 표시됩니다.스토리지 풀의 이름을 입력합니다. 이 예에서는 이름이 guest_images_fs 를 사용합니다.유형 드롭다운 목록에서 생성할 스토리지 풀 유형을 선택합니다. 이 예에서는 fs를 사용합니다. 사전 포맷된 블록 장치.그림 13.2. 스토리지 풀 이름 및 유형
계속하려면 Forward 버튼을 클릭합니다.새 풀 추가 (part 2)
그림 13.3. 스토리지 풀 경로
관련 매개 변수를 사용하여 스토리지 풀을 구성합니다. 각 스토리지 풀 유형의 매개변수에 대한 자세한 내용은 13.2.3절. “스토리지 풀별” 을 참조하십시오.일부 유형의 스토리지 풀의 경우 빌드 풀 확인란이 대화 상자에 나타납니다. 스토리지에서 스토리지 풀을 빌드하려면 Build Pool 확인란을 선택합니다.세부 정보를 확인하고 Finish (완료) 버튼을 클릭하여 스토리지 풀을 생성합니다.
13.2.3. 스토리지 풀별
13.2.3.1. 디렉터리 기반 스토리지 풀
매개 변수
표 13.1. 디렉터리 기반 스토리지 풀 매개변수
설명 | XML | pool-define-as | 가상 머신 관리자 |
---|---|---|---|
스토리지 풀의 유형입니다. | <pool type='dir'> | [type] 디렉토리 | dir: 파일 시스템 디렉터리 |
스토리지 풀의 이름 | <name>name</name> | [name] 이름 | 이름 |
대상을 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로입니다. |
<target> | target path_to_pool | 대상 경로 |
예
/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 그룹을 감지하고 오류가 발생할 수 있습니다.
사전 요구 사항
# 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.
#
매개 변수
표 13.2. 디스크 기반 스토리지 풀 매개변수
설명 | XML | pool-define-as | 가상 머신 관리자 |
---|---|---|---|
스토리지 풀의 유형입니다. | <pool type='disk'> | [type] 디스크 | 디스크: 물리 디스크 장치 |
스토리지 풀의 이름 | <name>name</name> | [name] 이름 | 이름 |
스토리지 장치를 지정하는 경로입니다. 예: /dev/sdb |
<source> | source-dev path_to_disk | 소스 경로 |
대상을 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로입니다. |
<target> | target path_to_pool | 대상 경로 |
예
<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
그림 13.5. 새 디스크 기반 스토리지 풀 예 추가
13.2.3.3. 파일 시스템 기반 스토리지 풀
권장 사항
/dev/sdb
)으로 할당하지 마십시오. 게스트에 전체 디스크 또는 블록 장치에 대한 쓰기 액세스 권한을 부여해서는 안 됩니다. 이 방법은 파티션(예: /dev/sdb1
)을 스토리지 풀에 할당하는 데만 사용해야 합니다.
사전 요구 사항
# mkfs.ext4 /dev/sdc1
매개 변수
표 13.3. 파일 시스템 기반 스토리지 풀 매개변수
설명 | XML | pool-define-as | 가상 머신 관리자 |
---|---|---|---|
스토리지 풀의 유형입니다. | <pool type='fs'> | [type] fs | fs: 사전 포맷된 블록 장치 |
스토리지 풀의 이름 | <name>name</name> | [name] 이름 | 이름 |
파티션을 지정하는 경로입니다. 예: /dev/sdc1 |
<source> | [source] path_to_partition | 소스 경로 |
파일 시스템 유형(예: ext4) |
<format type='fs_type' /> | [source format] FS-format | 해당 없음 |
대상을 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로입니다. |
<target> | [target] path_to_pool | 대상 경로 |
예
<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
그림 13.6. 파일 시스템 기반 스토리지 풀 예 추가
13.2.3.4. GlusterFS 기반 스토리지 풀
권장 사항
사전 요구 사항
절차 13.4. Gluster 서버 준비
- 다음 명령을 사용하여 상태를 나열하여 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
- 설치되지 않은 경우 glusterfs-adapter 패키지를 설치합니다.
- 활성화되지 않은 경우 virt_use_adapterfs 부울을 활성화합니다. 활성화되어 있는지 확인합니다.
# setsebool virt_use_fusefs on # getsebool virt_use_fusefs virt_use_fusefs --> on
매개 변수
표 13.4. GlusterFS 기반 스토리지 풀 매개변수
설명 | XML | pool-define-as | 가상 머신 관리자 |
---|---|---|---|
스토리지 풀의 유형입니다. | <pool type='gluster'> | [type] gluster | Gluster: Gluster Filesystem |
스토리지 풀의 이름 | <name>name</name> | [name] 이름 | 이름 |
Gluster 서버의 호스트 이름 또는 IP 주소 |
<source> | source-host hostname | 호스트 이름 |
Gluster 서버의 이름 | <name='Gluster-name' /> | source-name Gluster-name | 소스 이름 |
스토리지 풀에 사용되는 Gluster 서버의 경로입니다. |
<dir path='Gluster-path' /> | source-path Gluster-path | 소스 경로 |
예
<pool type='gluster'> <name>Gluster_pool</name> <source> <host name='111.222.111.222'/> <dir path='/'/> <name>gluster-vol1</name> </source> </pool>
# pool-define-as --name Gluster_pool --type gluster --source-host 111.222.111.222 --source-name gluster-vol1 --source-path /
Pool Gluster_pool defined
그림 13.7. 새로운 GlusterFS 기반 스토리지 풀 예 추가
13.2.3.5. iSCSI 기반 스토리지 풀
권장 사항
사전 요구 사항
절차 13.5. iSCSI 대상 생성
RuntimeClass 패키지 설치
# yum install targetcli
rootfs 명령 세트를 시작합니다.
# targetcli
스토리지 오브젝트 생성
스토리지 풀을 사용하여 스토리지 오브젝트 3개를 생성합니다.- 블록 스토리지 오브젝트 생성
/backstores/block
디렉터리로 이동합니다.- create 명령을 실행합니다.
# create [block-name][filepath]
예를 들면 다음과 같습니다.# create block1 dev=/dev/sdb1
- fileio 오브젝트 생성
/fileio
디렉토리로 이동합니다.- create 명령을 실행합니다.
# create [fileio-name][image-name] [image-size]
예를 들면 다음과 같습니다.# create fileio1 /foo.img 50M
- ramdisk 오브젝트 생성
/ramdisk
디렉터리로 이동합니다.- create 명령을 실행합니다.
# create [ramdisk-name] [ramdisk-size]
예를 들면 다음과 같습니다.# create ramdisk1 1M
- 이 단계에서 생성된 디스크의 이름을 기록해 둡니다. 나중에 사용하게 될 것입니다.
iSCSI 대상 만들기
/iscsi
디렉터리로 이동합니다.- 다음 두 가지 방법 중 하나로 대상을 생성합니다.
- 매개 변수 없이 create 명령을 실행합니다.iSCSI 정규화된 이름 (IQN)이 자동으로 생성됩니다.
- IQN과 서버를 지정하는 create 명령을 실행합니다. 예를 들면 다음과 같습니다.
# create iqn.2010-05.com.example.server1:iscsirhel7guest
포털 IP 주소 정의
iSCSI를 통해 블록 스토리지를 내보내려면 포털, LUN, 액세스 제어 목록 ACL을 먼저 구성해야 합니다.포털에는 대상이 모니터링하는 IP 주소 및 TCP와 연결할 이니시에이터가 포함됩니다. iSCSI는 포트 3260을 사용합니다. 이 포트는 기본적으로 구성됩니다.포트 3260에 연결하려면 다음을 수행합니다./tpg
디렉토리로 이동합니다.- 다음을 실행합니다.
# portals/ create
이 명령을 수행하면 포트 3260에서 사용 가능한 모든 IP 주소를 수신 대기합니다.포트 3260을 수신할 단일 IP 주소만 사용하려면 명령 끝에 IP 주소를 추가합니다. 예를 들면 다음과 같습니다.# portals/ create 143.22.16.33
LUN을 구성하고 스토리지 오브젝트를 패브릭에 할당
이 단계에서는 스토리지 오브젝트를 생성할 때 생성된 스토리지 오브젝트 를 사용합니다.- 포털 IP 주소 정의 에서 생성된 TPG의
luns
디렉토리로 이동합니다. 예를 들면 다음과 같습니다.# iscsi>iqn.iqn.2010-05.com.example.server1:iscsirhel7guest
- 램디스크에 첫 번째 LUN을 할당합니다. 예를 들면 다음과 같습니다.
# create /backstores/ramdisk/ramdisk1
- 두 번째 LUN을 블록 디스크에 할당합니다. 예를 들면 다음과 같습니다.
# create /backstores/block/block1
- fileio 디스크에 세 번째 LUN을 할당합니다. 예를 들면 다음과 같습니다.
# create /backstores/fileio/fileio1
- 결과 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]
각 이니시에이터에 대한 ACL 생성
이니시에이터가 연결할 때 인증을 활성화합니다. 지정된 LUN을 사용하여 지정된 인티터를 지정할 수도 있습니다. 대상 및 이니시에이터에는 고유한 이름이 있습니다. iSCSI 이니시에이터는 IQN을 사용합니다.- 이니시에이터 이름을 사용하여 iSCSI 이니시에이터의 IQN을 찾습니다. 예를 들면 다음과 같습니다.
# cat /etc/iscsi/initiator2.iscsi InitiatorName=create iqn.2010-05.com.example.server1:iscsirhel7guest
이 IQN은 ACL을 생성하는 데 사용됩니다. acls
디렉터리로 이동합니다.- 다음 중 하나를 수행하여 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
이 절차를 완료한 후 스토리지 풀을 보호하십시오.설정을 저장합니다.
이전 부팅 설정을 덮어 쓰기하여 구성을 영구적으로 설정합니다.# saveconfig
서비스 활성화
다음 부팅 시 저장된 설정을 적용하려면 서비스를 활성화합니다.# systemctl enable target.service
선택적 절차
절차 13.6. RAID 배열의 논리 볼륨 구성
RAID5 어레이 생성
RAID5 어레이 생성에 대한 자세한 내용은 Red Hat Enterprise Linux 7 스토리지 관리 가이드 를 참조하십시오.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. 장치 연결 테스트
새 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.
장치 분리
# 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 보안 사용
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>
보안 정의
# virsh secret-define secret.xml
UUID 확인
# virsh secret-list UUID Usage -------------------------------------------------------------------------------- 2d7891af-20be-4e5e-af83-190e8a922360 iscsi iscsirhel7secret
UID에 시크릿 할당
다음 명령을 사용하여 이전 단계의 출력에서 UUID에 시크릿을 할당합니다. 이렇게 하면 CHAP 사용자 이름과 암호가 libvirt 제어된 시크릿 목록에 있습니다.# MYSECRET=`printf %s "password123" | base64` # virsh secret-set-value 2d7891af-20be-4e5e-af83-190e8a922360 $MYSECRET
스토리지 풀에 인증 항목 추가
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>
변경 사항 활성화
이러한 변경 사항을 활성화하려면 스토리지 풀을 시작해야 합니다.- 스토리지 풀이 아직 시작되지 않은 경우 virsh로 스토리지 풀 생성 단계를 수행하여 스토리지 풀을 정의하고 시작합니다.
- 풀이 이미 시작된 경우 다음 명령을 입력하여 스토리지 풀을 중지하고 다시 시작합니다.
# virsh pool-destroy iscsirhel7pool # virsh pool-start iscsirhel7pool
매개 변수
표 13.5. iSCSI 기반 스토리지 풀 매개변수
설명 | XML | pool-define-as | 가상 머신 관리자 |
---|---|---|---|
스토리지 풀의 유형입니다. | <pool type='iscsi'> | [type] iscsi | iSCSI: iSCSI 대상 |
스토리지 풀의 이름 | <name>name</name> | [name] 이름 | 이름 |
호스트의 이름입니다. |
<source> | source-host hostname | 호스트 이름 |
iSCSI IQN. |
device path="iSCSI_IQN" /> | source-dev iSCSI_IQN | 소스 IQN |
대상을 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로입니다. |
<target> | target path_to_pool | 대상 경로 |
(선택 사항) iSCSI 이니시에이터의 IQN입니다. ACL이 특정 이니시에이터로 LUN을 제한하는 경우에만 필요합니다. |
<initiator> | 아래 노트를 참조하십시오. | 이니시에이터 IQN |
예
<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>
# 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
그림 13.8. 새 iSCSI 기반 스토리지 풀 예 추가
13.2.3.6. 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 명령을 실행하지 않아야 합니다.
매개 변수
표 13.6. LVM 기반 스토리지 풀 매개변수
설명 | XML | pool-define-as | 가상 머신 관리자 |
---|---|---|---|
스토리지 풀의 유형입니다. | <pool type='logical'> | [type] 논리 | logical: LVM 볼륨 그룹 |
스토리지 풀의 이름 | <name>name</name> | [name] 이름 | 이름 |
스토리지 풀의 장치 경로입니다. |
<source> | source-dev device_path | 소스 경로 |
볼륨 그룹의 이름 | <name='VG-name' /> | source-name VG-name | 소스 경로 |
가상 그룹 형식 |
<format type='lvm2' /> | source-format lvm2 | 해당 없음 |
대상 경로입니다. |
<target> | 대상 target-path | 대상 경로 |
<source> <device path='/dev/sda1'/> <device path='/dev/sdb3'/> <device path='/dev/sdc2'/> ... </source>
예
<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>
# 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
그림 13.9. 새 LVM 기반 스토리지 풀 예 추가
13.2.3.7. NFS 기반 스토리지 풀
사전 요구 사항
매개 변수
표 13.7. NFS 기반 스토리지 풀 매개변수
설명 | XML | pool-define-as | 가상 머신 관리자 |
---|---|---|---|
스토리지 풀의 유형입니다. | <pool type='netfs'> | [type] netfs | netfs: 네트워크 내보내기 디렉터리 |
스토리지 풀의 이름 | <name>name</name> | [name] 이름 | 이름 |
마운트 지점이 있는 NFS 서버의 호스트 이름입니다. 호스트 이름 또는 IP 주소일 수 있습니다. |
<source> | source-host host_name | 호스트 이름 |
NFS 서버에서 사용되는 디렉터리 |
<dir path='source_path' /> | source-path source_path | 소스 경로 |
대상을 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로입니다. |
<target> | target target_path | 대상 경로 |
예
<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>
# virsh pool-define-as nfspool netfs --source-host localhost --source-path /home/net_mount --target /var/lib/libvirt/images/nfspool
Pool nfspool defined
그림 13.10. 새 NFS 기반 스토리지 풀 예 추가
13.2.3.8. SCSI 장치를 사용하는 vHBA 기반 스토리지 풀
권장 사항
scsi_host#
또는 WWNN/WWPN 쌍으로 정의할 수 있습니다.
scsi_host#
으로 정의되고 하드웨어가 호스트 시스템에 추가되면 scsi_host#
할당이 변경될 수 있습니다. 따라서 WWNN/WWPN 쌍을 사용하여 상위 HBA를 정의하는 것이 좋습니다.
- libvirt 코드는 virsh 명령 출력을 사용하여 LUN의 경로를 쉽게 찾을 수 있습니다.
- 가상 머신 마이그레이션은 대상 머신에서 동일한 vHBA 이름으로 스토리지 풀을 정의하고 시작해야 합니다. 이렇게 하려면 가상 머신의 XML 구성에 vHBA LUN, libvirt 스토리지 풀 및 볼륨 이름을 지정해야 합니다. 예를 들어 13.2.3.8절. “SCSI 장치를 사용하는 vHBA 기반 스토리지 풀” 을 참조하십시오.
'scsi'
스토리지 풀 XML 파일을 만듭니다. 동일한 물리적 HBA에서 스토리지 풀을 사용하는 단일 vHBA를 생성할 때는 시스템의 /dev/disk/by-{path|id|uuid}
위치 중 하나와 같은 <path>
값에 안정적인 위치를 사용하는 것이 좋습니다.
<path>
필드의 값은 /dev/
여야 합니다. 그렇지 않으면 스토리지 풀 볼륨은 vHBA 중 하나에만 표시되고 호스트의 장치는 NPIV 구성을 사용하여 여러 게스트에 노출할 수 없습니다.
사전 요구 사항
절차 13.10. vHBA 생성
호스트 시스템에서 HBA 검색
호스트 시스템에서 HBA를 찾으려면 virsh nodedev-list --cap vports 명령을 사용합니다.다음 예제에서는 vHBA를 지원하는 두 개의 HBA가 있는 호스트를 보여줍니다.# virsh nodedev-list --cap vports scsi_host3 scsi_host4
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를 생성한 후 업데이트됩니다.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 업스트림 페이지를 참조하십시오.vHBA 호스트 장치에서 새 vHBA 생성
vhba_host3 을 기반으로 vHBA를 생성하려면 virsh nodedev-create 명령을 사용합니다.# virsh nodedev-create vhba_host3.xml Node device scsi_host5 created from vhba_host3.xml
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>
매개 변수
표 13.8. vHBA 기반 스토리지 풀 매개변수
설명 | XML | pool-define-as |
---|---|---|
스토리지 풀의 유형입니다. | <pool type='scsi'> | scsi |
스토리지 풀의 이름 | <name>name</name> | --adapter-name name |
vHBA의 식별자입니다. 상위 속성은 선택 사항입니다. |
<source> |
[--adapter-parent parent] |
대상을 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로입니다. |
<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_hostN
는 vports
및 max_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를 재부팅한 후 선택합니다.
예
상위
속성을 사용하여 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>
# 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
parent_wwnn
, parent_wwpn
또는 parent_fabric_wwn
속성을 정의하는 방법을 제공하지 않습니다.
vHBA LUN을 사용하도록 가상 머신 구성
- 가상 머신의 XML에 있는 가상 머신에 디스크 볼륨을 생성합니다.
<source>
매개변수에storage pool
및storage 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>
fast_io_fail_tmo
및 dev_loss_tmo
옵션을 편집하는 것이 좋습니다. 자세한 내용은 하드웨어 오류 발생 후 노출된 LUN에 대한 연결을 참조하십시오.
13.2.4. 스토리지 풀 삭제
13.2.4.1. 스토리지 풀 삭제 사전 요구 사항
13.2.4.2. virsh를 사용하여 스토리지 풀 삭제
- 정의된 스토리지 풀을 나열합니다.
# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_pool active yes
- 삭제할 스토리지 풀을 중지합니다.
# virsh pool-destroy guest_images_disk
- (선택 사항) 일부 유형의 스토리지 풀의 경우 스토리지 풀이 상주하는 디렉터리를 선택적으로 제거할 수 있습니다.
# virsh pool-delete guest_images_disk
- 스토리지 풀의 정의를 제거합니다.
# virsh pool-undefine guest_images_disk
- 풀이 정의되지 않음을 확인합니다.
# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes
13.2.4.3. 가상 머신 관리자를 사용하여 스토리지 풀 삭제
- 연결 세부 정보 창의 스토리지 탭에서 스토리지 풀 목록에서 삭제할 스토리지 풀을 선택합니다.
- 스토리지 창 하단에 있는 를 클릭합니다. 이렇게 하면 스토리지 풀이 중지되고 사용 중인 모든 리소스가 해제됩니다.
- 을 클릭합니다.참고아이콘은 스토리지 풀이 중지된 경우에만 활성화됩니다.스토리지 풀이 삭제됩니다.
13.3. 스토리지 볼륨 사용
13.3.1. 스토리지 볼륨 개념
--pool
storage_pool volume_name.
# virsh vol-info --pool guest_images firstimage
Name: firstimage
Type: block
Capacity: 20.00 GB
Allocation: 20.00 GB
13.3.2. 스토리지 볼륨 생성
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. 가상 머신 관리자를 사용하여 스토리지 볼륨 생성
스토리지 설정을 엽니다.
- 가상 머신 관리자에서 편집 메뉴를 열고 연결 세부 정보를 선택합니다.
- 연결 세부 정보 창에서 스토리지 탭을 클릭합니다.
그림 13.11. 스토리지 탭
연결 세부 정보 창 왼쪽에 있는 창에는 스토리지 풀 목록이 표시됩니다.
스토리지 볼륨을 생성할 스토리지 풀을 선택합니다.
스토리지 풀 목록에서 스토리지 볼륨을 생성할 스토리지 풀을 클릭합니다.선택한 스토리지 풀에 구성된 스토리지 볼륨이 창 하단에 있는 Volumes (볼륨) 창에 표시됩니다.새 스토리지 볼륨 추가
Volumes (볼륨) 목록 위에 있는 버튼을 클릭합니다. 스토리지 볼륨 추가 대화 상자가 나타납니다.그림 13.12. 스토리지 볼륨 생성
스토리지 볼륨 구성
다음 매개 변수를 사용하여 스토리지 볼륨을 구성합니다.- 이름 필드에 스토리지 풀의 이름을 입력합니다.
- 형식 목록에서 스토리지 볼륨의 형식 을 선택합니다.
- Max Capacity (최대 용량) 필드에 스토리지 볼륨의 최대 크기를 입력합니다.
생성 완료
완료를 클릭합니다. 스토리지 볼륨 추가 대화 상자가 닫히고 볼륨 목록에 스토리지 볼륨이 표시됩니다.
13.3.3. 스토리지 볼륨 보기
# 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 new-vol vdisk
13.3.4.2. 스토리지 볼륨에 데이터 업로드
# virsh vol-upload --pool pool-or-uuid --offset bytes --length bytes
vol-name-or-key-or-path local-file
--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
sde1
은 disk-pool
스토리지 풀의 볼륨입니다. /tmp/data500m.empty
의 데이터는 sde1
로 복사됩니다.
13.3.4.3. 스토리지 볼륨으로 데이터 다운로드
# vol-download --pool pool-or-uuid --offset bytes --length bytes
vol-name-or-key-or-path local-file
--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
sde1
은 disk-pool
스토리지 풀의 볼륨입니다. sde1
의 데이터는 /tmp/data-sde1.tmp
로 다운로드됩니다.
13.3.4.4. 스토리지 볼륨 크기 조정
# virsh vol-resize --pool pool-or-uuid
vol-name-or-path pool-or-uuid capacity --allocate
--delta
--shrink
--pool pool-or-uuid
가 필요합니다. 또한 이 명령에는 크기를 조정할 볼륨의 이름, 키 또는 경로 , vol-name-or-key-or-path 가 필요합니다.
--allocate
을 지정하지 않으면 새 용량이 스파스일 수 있습니다. 일반적으로 용량은 새 크기이지만 --delta
가 있는 경우 기존 크기에 추가됩니다. --shrink
가 없으면 볼륨을 축소하려고 하면 실패합니다.
--shrink
가 제공되지 않고 음수가 필요하지 않습니다. 용량 은 접미사가 없는 경우 바이트로 기본 설정된 스케일링된 정수입니다. 또한 이 명령은 활성 게스트에서 사용하지 않는 스토리지 볼륨에 대해서만 안전합니다. 실시간 크기 조정은 20.13.3절. “게스트 가상 머신의 블록 장치의 크기 변경” 을 참조하십시오.
예 13.3. 스토리지 볼륨 크기 조정
# virsh vol-resize --pool disk-pool sde1 100M
13.3.5. 스토리지 볼륨 삭제
13.3.5.1. virsh를 사용하여 스토리지 볼륨 삭제
# virsh vol-delete volume_name --pool guest_images_dir
vol volume_name deleted
13.3.5.2. 가상 머신 관리자를 사용하여 스토리지 볼륨 삭제
절차 13.12. 가상 머신 관리자를 사용하여 스토리지 볼륨 삭제
스토리지 설정을 엽니다.
- 가상 머신 관리자에서 편집 메뉴를 열고 연결 세부 정보를 선택합니다.
- 연결 세부 정보 창에서 스토리지 탭을 클릭합니다.
그림 13.13. 스토리지 탭
연결 세부 정보 창 왼쪽에 있는 창에는 스토리지 풀 목록이 표시됩니다.
삭제할 스토리지 볼륨을 선택합니다.
- 스토리지 풀 목록에서 스토리지 볼륨이 요약되는 스토리지 풀을 클릭합니다.선택한 스토리지 풀에 구성된 스토리지 볼륨 목록이 창 하단에 Volumes (볼륨) 창에 표시됩니다.
- 삭제할 스토리지 볼륨을 선택합니다.
스토리지 볼륨 삭제
- 버튼을 클릭합니다( 볼륨 목록 검토). 확인 대화 상자가 나타납니다.
- Yes 를 클릭합니다. 선택한 스토리지 볼륨이 삭제됩니다.
13.3.6. 게스트에 스토리지 장치 추가
13.3.6.1. virsh를 사용하여 게스트에 스토리지 장치 추가
<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
# virsh attach-disk --config Guest1 --source /var/lib/libvirt/images/FileName.img --target vdb
13.3.6.2. 가상 머신 관리자를 사용하여 게스트에 스토리지 장치 추가
13.3.6.2.1. 게스트에 스토리지 볼륨 추가
가상 머신 하드웨어 세부 정보 창에 가상 머신 관리자를 엽니다.
virt-manager 명령을 root로 실행하거나 애플리케이션 → 시스템 도구 → 가상 머신 관리자를 실행하여 virt-manager를 엽니다.그림 13.14. 가상 머신 관리자 창
스토리지 볼륨을 추가할 게스트 가상 머신을 선택합니다.열기를 클릭합니다. 가상 머신 창이 열립니다.을 클릭합니다. 하드웨어 세부 정보 창이 표시됩니다.그림 13.15. 하드웨어 세부 정보 창
새 가상 하드웨어 추가 창을 엽니다.
하드웨어 추가를 클릭합니다. Add New Virtual Hardware 창이 표시됩니다.하드웨어 유형 창에서 Storage 가 선택되었는지 확인합니다.그림 13.16. 새 가상 하드웨어 추가 창
스토리지 볼륨 목록 보기
Select or create custom storage 옵션 버튼을 선택합니다.관리를 클릭합니다. 스토리지 볼륨 선택 대화 상자가 나타납니다.그림 13.17. 스토리지 볼륨 선택 창
스토리지 볼륨 선택
Select Storage Volume(스토리지 볼륨 선택) 창 왼쪽에 있는 목록에서 스토리지 풀을 선택합니다. 선택한 스토리지 풀의 스토리지 볼륨 목록이 Volumes 목록에 표시됩니다.참고스토리지 볼륨 선택 창에서 스토리지 풀을 생성할 수 있습니다. 자세한 내용은 13.2.2.2절. “가상 머신 관리자를 사용하여 스토리지 풀 생성”의 내용을 참조하십시오.Volumes (볼륨) 목록에서 스토리지 볼륨을 선택합니다.참고스토리지 볼륨 선택 창에서 스토리지 볼륨을 생성할 수 있습니다. 자세한 내용은 13.3.2.2절. “가상 머신 관리자를 사용하여 스토리지 볼륨 생성”의 내용을 참조하십시오.볼륨 선택을 클릭합니다. 스토리지 볼륨 선택 창은 닫힙니다.스토리지 볼륨 구성
장치 유형 목록에서 장치 유형을 선택합니다. 사용 가능한 유형은 다음과 같습니다. 디스크 장치, Floppy 장치 및 LUN 통과.버스 유형 목록에서 버스 유형을 선택합니다. 사용 가능한 버스 유형은 선택한 장치 유형에 따라 다릅니다.캐시 모드 목록에서 캐시 모드를 선택합니다. 사용 가능한 캐시 모드는 다음과 같습니다. 하이퍼바이저 기본, none, writethrough, writeback, directsync, unsafe완료를 클릭합니다. 새 가상 하드웨어 추가 창이 닫힙니다.
13.3.6.2.2. 게스트에 기본 스토리지 추가
/var/lib/libvirt/images/
디렉터리의 파일 기반 이미지입니다.
가상 머신 하드웨어 세부 정보 창에 가상 머신 관리자를 엽니다.
virt-manager 명령을 root로 실행하거나 애플리케이션 → 시스템 도구 → 가상 머신 관리자를 실행하여 virt-manager를 엽니다.그림 13.18. 가상 머신 관리자 창
스토리지 볼륨을 추가할 게스트 가상 머신을 선택합니다.열기를 클릭합니다. 가상 머신 창이 열립니다.을 클릭합니다. 하드웨어 세부 정보 창이 표시됩니다.그림 13.19. 하드웨어 세부 정보 창
새 가상 하드웨어 추가 창을 엽니다.
하드웨어 추가를 클릭합니다. Add New Virtual Hardware 창이 표시됩니다.하드웨어 유형 창에서 Storage 가 선택되었는지 확인합니다.그림 13.20. 새 가상 하드웨어 추가 창
게스트용 디스크 만들기
가상 머신의 디스크 이미지 생성 옵션을 확인합니다.가상 머신의 디스크 이미지 만들기 버튼 아래에 텍스트 상자에 생성할 디스크 크기를 입력합니다.완료를 클릭합니다. 새 가상 하드웨어 추가 창이 닫힙니다.
13.3.6.3. 게스트에 SCSI LUN 기반 스토리지 추가
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 기반 스토리지 풀” 을 참조하십시오.
<disk device='lun'>
게스트 디스크 구성 중 하나를 이 방법으로 연결할 수 있습니다. 환경에 따라 구성을 대체합니다.
절차 13.13. 게스트에 SCSI LUN 기반 스토리지 연결
- 새 파일에 <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>
- sda.xml 에서 생성된 장치를 게스트 가상 시스템과 연결합니다(예:Guest1 ).
# virsh attach-device --config Guest1 ~/sda.xml
참고--config
옵션을 사용하여 virsh attach-device 명령을 실행하려면 게스트를 다시 부팅하여 게스트에 영구적으로 장치를 추가해야 합니다. 또는 게스트에 장치를 핫플러그하는 데 사용할 수도 있는--config
대신--persistent
옵션을 사용할 수 있습니다.
그림 13.21. virt-manager를 사용하여 SCSI LUN 스토리지 구성
하드웨어 장애 후 노출된 LUN에 다시 연결
dev_loss_tmo
및 fast_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_tmo
및 fast_io_fail
값을 수정하려면 다음 중 하나를 수행합니다.
/etc/multipath.conf
파일을 편집하고defaults
섹션에 값을 설정합니다.defaults { ... fast_io_fail_tmo 20 dev_loss_tmo infinity }
- 다음과 같이 FC 호스트 또는 원격 포트 수준에서
dev_loss_tmo
및fast_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_tmo
및 fast_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. 게스트 가상 머신에서 스토리지 컨트롤러 관리
절차 13.14. 가상 SCSI 컨트롤러 생성
- 게스트 가상 머신(
Guest
1)의 구성을 표시하고 기존 SCSI 컨트롤러를 찾습니다.# virsh dumpxml Guest1 | grep controller.*scsi
장치 컨트롤러가 있는 경우 명령은 다음과 유사한 하나 이상의 행을 출력합니다.<controller type='scsi' model='virtio-scsi' index='0'/>
- 이전 단계에서 장치 컨트롤러가 표시되지 않은 경우 다음 단계를 사용하여 새 파일에 하나에 대한 설명을 생성하여 가상 머신에 추가합니다.
- 새 파일에
<controller>
요소를 작성하여 장치 컨트롤러를 생성하고 XML 확장자를 사용하여 이 파일을 저장합니다. 예를 들어virtio-scsi-controller.xml
.<controller type='scsi' model='virtio-scsi'/>
virtio-scsi-controller.xml
에서 생성한 장치 컨트롤러를 게스트 가상 머신(예: Guest1,)과 연결합니다.# virsh attach-device --config Guest1 ~/virtio-scsi-controller.xml
이 예에서--config
옵션은 디스크에 대해 수행하는 것과 동일하게 작동합니다. 자세한 내용은 13.3.6절. “게스트에 스토리지 장치 추가”를 참조하십시오.
- 새 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. 게스트에서 스토리지 장치 제거
13.3.7.1. virsh를 사용하여 가상 머신에서 스토리지 제거
# virsh detach-disk Guest1 vdb
13.3.7.2. 가상 머신 관리자를 사용하여 가상 머신에서 스토리지 제거
절차 13.15. 가상 머신 관리자를 사용하여 가상 머신에서 스토리지 제거
가상 머신 하드웨어 세부 정보 창에 가상 머신 관리자를 엽니다.
virt-manager 명령을 root로 실행하거나 애플리케이션 → 시스템 도구 → 가상 머신 관리자를 실행하여 virt-manager를 엽니다.스토리지 장치를 제거할 게스트 가상 머신을 선택합니다.열기를 클릭합니다. 가상 머신 창이 열립니다.을 클릭합니다. 하드웨어 세부 정보 창이 표시됩니다.게스트 가상 머신에서 스토리지 제거
하드웨어 세부 정보 창 왼쪽에 있는 하드웨어 목록에서 스토리지 장치를 선택합니다.제거를 클릭합니다. 확인 대화 상자가 나타납니다.Yes 를 클릭합니다. 게스트 가상 머신에서 스토리지가 제거되었습니다.
14장. qemu-img 사용
14.1. 디스크 이미지 확인
# qemu-img check [-f format
] imgname
14.2. 이미지에 변경 사항 커밋
# qemu-img commit [-f fmt] [-t cache] imgname
14.3. 이미지 비교
-s
옵션을 지정하면 이미지 크기가 다르거나 한 이미지에 섹터가 할당되어 두 번째 이미지에 할당되지 않은 경우 이미지가 동일하게 간주되지 않습니다.
# qemu-img compare [-f fmt] [-F fmt] [-p] [-s] [-q] imgname1 imgname2
0
- 이미지가 동일1
- 이미지가 다릅니다.2
- 이미지 중 하나를 여는 동안 오류가 발생했습니다.3
- 섹터 할당을 확인하는 동안 오류가 발생했습니다.4
- 데이터를 읽는 동안 오류가 발생했습니다.
14.4. 이미지 매핑
# 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
0x20000
(131072) 바이트가 오프셋 0x50000
(327680)에서 시작되는 tmp /overlay.qcow2(
raw format)에서 사용 가능함을 의미합니다. 원시 형식에서 압축, 암호화 또는 사용할 수 없는 데이터는 사람이
지정되는 경우 오류가 발생합니다.
사람이
형식으로 출력을 구문 분석하는 것은 안전하지 않습니다.
14.4.2. json
형식
json
옵션이 지정되면 출력은 JSON 형식으로 사전 배열을 반환합니다. human
옵션에 제공된 정보 외에도 출력에는 다음 정보가 포함됩니다.
Data - 섹터에 데이터를
포함할지 여부를 표시하는 부울 필드입니다.0
- 데이터가 0으로 읽히도록 알려진지 여부를 표시하는 부울 필드입니다.depth
- 파일 이름의 백업 파일의깊이
json
옵션을 지정하면 offset
필드가 선택 사항입니다.
14.5. 이미지 수정
# qemu-img amend [-p] [-f fmt] [-t cache] -o options filename
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
-S
플래그를 사용하면 디스크 이미지에 포함된 스파스 파일을 만들 수 있습니다.
스파스 파일은 0만 포함된 물리 블록(즉, 아무것도 없음)을 제외하고 모든 용도의 표준 파일처럼 작동합니다. 운영 체제가 이 파일을 볼 때 실제로는 아무 것도 사용하지 않는 경우에도 존재하는 것으로 취급하고 실제 디스크 공간을 차지합니다. 게스트 가상 머신에 대한 디스크를 생성할 때 특히 유용합니다. 이렇게 하면 디스크가 훨씬 많은 디스크 공간을 차지할 수 있습니다. 예를 들어 10Gb의 디스크 이미지에서 -S를 50Gb로 설정하면 10Gb 만 사용되더라도 10Gb의 디스크 공간 크기는 60Gb로 표시됩니다.
output_format
형식 을
사용하여 디스크 이미지 파일 이름을 디스크 이미지 output_filename
으로 변환합니다. 디스크 이미지는 선택적으로 -c
옵션으로 압축하거나 -o
옵션으로 암호화할 수 있습니다. -o encryption
-o
매개 변수와 함께 사용할 수 있는 옵션은 선택한 형식과 다릅니다.
qcow2
및 qcow2 형식만 암호화 또는 압축을 지원합니다. qcow2
암호화는 보안 128비트 키가 있는 AES 형식을 사용합니다. qcow2
압축은 qcow2
형식에서 변환되는 경우 압축되지 않은 데이터로 새 형식으로 작성됩니다.
14.7. 새 이미지 또는 장치 생성 및 포맷
크기
및 형식 형식
의 새 디스크 이미지 파일 이름을 만듭니다.
# qemu-img create [-f format
] [-o options] filename [size
]
-o backing_file=filename
로 지정되면 이미지는 자체와 기본 이미지 간의 차이점만 기록합니다. commit 명령을 사용하지 않는 한 백업 파일은 수정되지 않습니다. 이 경우 크기를 지정할 필요가 없습니다.
14.8. 이미지 정보 표시
# qemu-img info [-f format] filename
# 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 rebase [-f fmt] [-t cache] [-p] [-u] -b backing_file [-F backing_fmt] filename
안전
및 안전하지 않은
.
안전
모드는 기본적으로 사용되며 실제 업데이트 작업을 수행합니다. 새로운 백업 파일은 이전 버전과 다를 수 있으며 qemu-img rebase 명령은 게스트 가상 머신으로 표시되는 파일 이름의 콘텐츠를 변경되지 않은 상태로 유지합니다. 이를 위해 백업 파일을 변경하기 전에 backing_file 과 이전 파일 이름의 이전 백업 파일이 파일 이름으로 병합됩니다.
안전
모드는 비용이 많이 드는 작업이며 이미지를 변환하는 것과 유사합니다. 성공적으로 완료하려면 이전 백업 파일이 필요합니다.
unsafe
모드가 사용됩니다. 이 모드에서는 파일 콘텐츠에 대한 검사를 수행하지 않고 백업 파일 이름 및 파일 이름의 형식만 변경됩니다. 새 백업 파일이 올바르게 지정되었거나 이미지의 게스트 표시 콘텐츠가 손상되는지 확인합니다.
14.10. 디스크 이미지 다시 크기 조정
# qemu-img resize filename size
+
로 접두사로 지정하거나 디스크 이미지의 크기를 해당 바이트 수로 줄입니다.
단위 접미사를 추가하면 이미지 크기를 킬로바이트(K), 메가바이트(M), 기가바이트(G) 또는 테라바이트(T)로 설정할 수 있습니다.
# qemu-img resize filename [+|-]size[K|M|G|T]
14.11. 스냅샷 나열, 생성, 적용 및 삭제
# qemu-img snapshot [ -l | -a snapshot | -c snapshot | -d snapshot ] filename
- - L은 지정된 디스크 이미지와 연결된 모든 스냅샷을 나열합니다.
- apply 옵션 -a, 디스크 이미지(파일 이름)를 이전에 저장된 스냅샷 의 상태로 되돌립니다.
- - C는 이미지의스냅샷(스냅샷)을 생성합니다(파일 이름).
- - D는 지정된 스냅샷을 삭제합니다.
14.12. 지원되는 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 마이그레이션
15.1. 마이그레이션 정의 및 이점
- 로드 밸런싱
- 호스트 시스템이 과부하되는 경우 또는 다른 호스트 시스템이 활용도가 낮은 경우 게스트 가상 머신을 호스트 물리적 시스템으로 이동할 수 있습니다.
- 하드웨어 독립성
- 호스트 물리적 시스템에서 하드웨어 장치를 업그레이드, 추가 또는 제거해야 하는 경우 게스트 가상 시스템을 다른 호스트 물리적 시스템에 안전하게 재배치할 수 있습니다. 즉, 게스트 가상 머신에서 하드웨어 개선 시 다운타임이 발생하지 않습니다.
- 더 많은 비용 절감
- 가상 머신은 다른 호스트 물리적 머신에 재배포할 수 있으며 로드되지 않은 호스트 시스템의 전원을 꺼 비용을 절감할 수 있습니다.
- 지리적 마이그레이션
- 대기 시간이 낮거나 다른 이유로 필요한 경우 가상 머신을 다른 위치로 이동할 수 있습니다.
15.2. 마이그레이션 요구 사항 및 제한 사항
마이그레이션 요구사항
- 다음 프로토콜 중 하나를 사용하여 공유 스토리지에 설치된 게스트 가상 머신:
- 파이버 채널 기반 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 구성
libvirtd.conf
를 실행하려면 root로 명령을 실행해야 합니다.# vim /etc/libvirt/libvirtd.conf
- 필요에 따라 매개변수를 변경하고 파일을 저장합니다.
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™ 에서 사용할 수 있습니다. 자세한 내용은 서비스 담당자에게 문의하십시오.
15.3. 실시간 마이그레이션 및 Red Hat Enterprise Linux 버전 호환성
표 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
synch
매개 변수가 활성화되어 있어야 합니다. 이는 NFS 스토리지를 올바르게 내보내는 데 필요합니다.
libvirt 이미지 디렉토리를 내보냅니다.
마이그레이션을 수행하려면 마이그레이션 대상 시스템으로 별도의 시스템에 스토리지가 있어야 합니다. 이 별도의 시스템에서 기본 이미지 디렉터리를/etc/exports
파일에 추가하여 스토리지를 내보냅니다./var/lib/libvirt/images
*.example.com
(rw,no_root_squash,sync)환경에 필요한hostname
매개변수를 변경합니다.NFS 시작
- 아직 설치되지 않은 경우 NFS 패키지를 설치합니다.
# yum install nfs-utils
- iptables 의 NFS 포트(예: 2049)가 열려 있는지 확인하고
/etc/hosts.allow
파일에 NFS를 추가합니다. - NFS 서비스를 시작합니다.
# systemctl start nfs-server
소스 및 대상에 공유 스토리지 마운트
마이그레이션 소스 및 대상 시스템에서/var/lib/libvirt/images
디렉터리를 마운트합니다.# mount
storage_host
:/var/lib/libvirt/images /var/lib/libvirt/images주의소스 호스트 물리적 시스템에 대해 선택한 디렉터리는 대상 호스트 물리적 시스템에서 정확히 동일해야 합니다. 이는 모든 유형의 공유 스토리지에 적용됩니다. 디렉터리가 동일해야 합니다. 그렇지 않으면 virt-manager를 사용한 마이그레이션이 실패합니다.
15.5. virsh를 사용한 실시간 KVM 마이그레이션
# virsh migrate --live GuestName DestinationURL
GuestName
매개변수는 마이그레이션하려는 게스트 가상 머신의 이름을 나타냅니다.
DestinationURL
매개변수는 대상 호스트 물리적 시스템의 연결 URL입니다. 대상 시스템은 동일한 하이퍼바이저를 사용하고 libvirt 를 실행해야 합니다.
DestinationURL
매개 변수는 다음과 같은 의미 체계가 다릅니다.
- 일반 마이그레이션:
DestinationURL
은 소스 게스트 가상 머신에 표시된 대로 대상 호스트 물리적 시스템의 URL입니다. - peer2peer 마이그레이션:
DestinationURL
은 소스 호스트 물리적 시스템에 표시되는 것처럼 대상 호스트 물리적 시스템의 URL입니다.
예: virsh를 사용한 실시간 마이그레이션
이 예제에서는 host1.example.com
에서 host2.example.com
으로 마이그레이션합니다. 해당 환경의 호스트 물리적 시스템 이름을 변경합니다. 이 예에서는 guest1-rhel6-64
라는 가상 머신을 마이그레이션합니다.
게스트 가상 머신이 실행 중인지 확인
소스 시스템에서host1.example.com
에서guest1-rhel6-64
가 실행 중인지 확인합니다.[root@host1 ~]# virsh list Id Name State ---------------------------------- 10 guest1-rhel6-64 running
게스트 가상 머신 마이그레이션
다음 명령을 실행하여 게스트 가상 머신을 대상host2.example.com
으로 실시간 마이그레이션합니다. 대상 URL 끝에/system
을 추가하여 libvirt에 전체 액세스 권한이 필요하다는 것을 알립니다.# virsh migrate --live
guest1-rhel7-64 qemu+ssh://host2.example.com/system
명령이 입력되면 대상 시스템의 루트 암호를 입력하라는 메시지가 표시됩니다.wait
마이그레이션은 게스트 가상 시스템의 부하 및 크기에 따라 다소 시간이 걸릴 수 있습니다. virsh 는 오류만 보고합니다. 게스트 가상 시스템은 완전히 마이그레이션될 때까지 소스 호스트 물리적 시스템에서 계속 실행됩니다.게스트 가상 머신이 대상 호스트에 도착했는지 확인합니다.
대상 시스템에서host2.example.com
에서guest1-rhel7-64
가 실행 중인지 확인합니다.[root@host2 ~]# virsh list Id Name State ---------------------------------- 10 guest1-rhel7-64 running
# virsh migrate --offline --persistent
15.5.1. virsh를 사용하여 마이그레이션을 위한 추가 팁
- 절차 15.1. “libvirtd.conf 구성” 에 설명된 대로 libvirtd.conf 파일을 엽니다.
- 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 #################################################################
max_clients
및max_workers
매개변수 설정을 변경합니다. 두 매개변수 모두에서 번호가 동일해야 하는 것이 좋습니다.max_clients
는 마이그레이션당 2개의 클라이언트를 사용하며max_workers
는 완료 단계에서 대상에서 1개의 작업자와 대상에서 1개의 작업자를 사용합니다.중요max_clients
및max_workers
매개변수 설정은 libvirtd 서비스에 대한 모든 게스트 가상 시스템 연결의 영향을 받습니다. 즉, 동일한 게스트 가상 머신을 사용하고 동시에 마이그레이션을 수행하는 모든 사용자는max_clients
및max_workers
매개변수 설정에 설정된 제한도 따릅니다. 따라서 동시 실시간 마이그레이션을 수행하기 전에 최대값을 신중하게 고려해야 합니다.중요max_clients
매개변수는 libvirt에 연결할 수 있는 클라이언트 수를 제어합니다. 다수의 컨테이너가 한 번에 시작되면 이 제한에 쉽게 도달하고 초과할 수 있습니다. 이를 방지하기 위해max_clients
매개변수의 값이 증가할 수 있지만 이렇게 하면 인스턴스에 대한 DoS(서비스 거부) 공격에 시스템이 더 취약해질 수 있습니다. 이 문제를 완화하기 위해 Red Hat Enterprise Linux 7.0에 새로운max_anonymous_clients
설정이 도입되어 있지만 아직 인증되지 않은 연결 수를 지정합니다.max_clients
와max_anonymous_clients
조합을 구현하여 워크로드에 맞게 구성할 수 있습니다.- 파일을 저장하고 서비스를 다시 시작합니다.참고시작된 ssh 세션이 많지만 아직 인증되지 않았기 때문에 마이그레이션 연결이 중단된 경우가 있을 수 있습니다. 기본적으로
sshd
에서는 언제든지 10개의 세션만 "사전 인증 상태"에 있을 수 있습니다. 이 설정은 sshd 구성 파일의MaxStartups
매개변수에 의해 제어됩니다(여기서는/etc/ssh/sshd_config
) 일부 조정이 필요할 수 있습니다. DoS 공격(및 일반적으로 리소스 초과 사용)을 방지하기 위해 제한 사항이 적용되므로 이 매개 변수를 조정해야 합니다. 이 값을 너무 높게 설정하면 그 용도가 무효화됩니다. 이 매개변수를 변경하려면/etc/ssh/sshd_config
파일을 편집하고, MaxStartups 행의 시작 부분에서 # 을 제거하고10
(기본값)을 더 높은 숫자로 변경합니다. 파일을 저장하고sshd
서비스를 다시 시작하십시오. 자세한 내용은sshd_config
매뉴얼 페이지를 참조하십시오.
15.5.2. virsh migrate 명령의 추가 옵션
- --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에서 사용 가능한 최대 마이그레이션 대역폭을 가져옵니다.
15.6. virt-manager로 마이그레이션
대상 호스트 물리적 시스템에 연결
연결 추가
연결 추가 창이 나타납니다.그림 15.1. 대상 호스트 물리적 시스템에 연결 추가
다음 세부 정보를 입력합니다.- 하이퍼바이저: QEMU/KVM 을 선택합니다.
- 방법: 연결 방법을 선택합니다.
- 사용자 이름: 원격 호스트 물리적 시스템의 사용자 이름을 입력합니다.
- 호스트 이름: 원격 호스트 물리적 시스템의 호스트 이름을 입력합니다.
참고연결 옵션에 대한 자세한 내용은 19.5절. “원격 연결 추가” 을 참조하십시오.연결을 클릭합니다. 이 예에서는 SSH 연결이 사용되므로 다음 단계에 지정된 사용자의 암호를 입력해야 합니다.그림 15.2. 암호 입력
공유 스토리지 구성
소스 및 대상 호스트 모두 스토리지(예: NFS 사용 )를 공유하는지 확인합니다.게스트 가상 머신 마이그레이션
마이그레이션할 게스트를 마우스 오른쪽 버튼으로 클릭하고 마이그레이션을 클릭합니다.New Host (새 호스트) 필드에서 드롭다운 목록을 사용하여 게스트 가상 시스템을 마이그레이션할 호스트 물리적 시스템을 선택한 후 마이그레이션을 클릭합니다.그림 15.3. 대상 호스트 물리적 시스템 선택 및 마이그레이션 프로세스 시작
진행률 창이 나타납니다.그림 15.4. 진행률 창
문제가 없이 마이그레이션이 완료되면 virt-manager 에 대상 호스트에서 실행 중인 새로 마이그레이션된 게스트 가상 시스템이 표시됩니다.그림 15.5. 대상 호스트 물리적 시스템에서 실행 중인 게스트 가상 머신 마이그레이션
16장. 게스트 가상 머신 장치 구성
- 에뮬레이션된 장치는 실제 하드웨어를 모방하는 순수하게 가상 장치이므로 수정되지 않은 게스트 운영 체제가 표준 인 박스 드라이버를 사용하여 작업할 수 있습니다.
- 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 장치는 할당된 장치로 지원될 수 있지만 보안 및 시스템 구성 충돌로 인해 심각한 제한 사항이 있습니다.
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 장치
절차 16.1. PCI 장치 할당을 위한 Intel 시스템 준비
Intel VT-d 사양 활성화
Intel VT-d 사양은 가상 머신에 물리적 장치를 직접 할당하는 하드웨어 지원을 제공합니다. Red Hat Enterprise Linux에서 PCI 장치 할당을 사용하려면 이러한 사양이 필요합니다.BIOS에서 Intel VT-d 사양을 활성화해야 합니다. 일부 시스템 제조업체에서는 기본적으로 이러한 사양을 비활성화합니다. 이러한 사양을 확인하는 데 사용되는 용어는 제조업체마다 다를 수 있습니다. 시스템 제조업체의 설명서를 참조하십시오.커널에서 Intel VT-d 활성화
/etc/sysconfig/grub
파일에 있는 따옴표 내에서intel_iommu=on
및iommu=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"
구성 파일 재생성
다음을 실행하여 /etc/grub2.cfg를 다시 생성합니다.grub2-mkconfig -o /etc/grub2.cfg
UEFI 기반 호스트를 사용하는 경우 대상 파일은/etc/grub2-efi.cfg
여야 합니다.사용 준비
시스템을 재부팅하여 변경 사항을 활성화합니다. 이제 PCI 장치 할당이 가능합니다.
절차 16.2. PCI 장치 할당을 위한 AMD 시스템 준비
AMD IOMMU 사양 활성화
Red Hat Enterprise Linux에서 PCI 장치 할당을 사용하려면 AMD IOMMU 사양이 필요합니다. 이 사양은 BIOS에서 활성화해야합니다. 일부 시스템 제조업체에서는 기본적으로 이러한 사양을 비활성화합니다.IOMMU 커널 지원 활성화
/etc/sysconfig/grub
의 따옴표 내에 GRUB_CMDLINX_LINUX 행의 끝에iommu=pt
를 추가하여 AMD IOMMU 사양이 부팅 시 활성화되도록 합니다.구성 파일 재생성
다음을 실행하여 /etc/grub2.cfg를 다시 생성합니다.grub2-mkconfig -o /etc/grub2.cfg
UEFI 기반 호스트를 사용하는 경우 대상 파일은/etc/grub2-efi.cfg
여야 합니다.사용 준비
시스템을 재부팅하여 변경 사항을 활성화합니다. 이제 PCI 장치 할당이 가능합니다.
16.1.1. virsh를 사용하여 PCI 장치 할당
pci_0000 644300_0
및 guest1-rhel7-64 라는 완전히 가상화된 게스트 시스템과 함께 PCIe 네트워크 컨트롤러를 사용합니다.
절차 16.3. virsh를 사용하여 게스트 가상 머신에 PCI 장치 할당
장치 식별
먼저 가상 머신에 대한 장치 할당용으로 지정된 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 장치 번호를 기록합니다. 다른 단계에서 필요합니다.장치 정보 검토
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
필요한 구성 세부 정보 확인
구성 파일에 필요한 값은 virsh nodedev-dumpxml pci_0000_00_19_0 명령의 출력을 참조하십시오.예제 장치에는 bus = 0, 슬롯 = 25 및 function = 0의 값이 있습니다. 10진수 구성은 다음 세 가지 값을 사용합니다.bus='0' slot='25' function='0'
설정 세부 정보 추가
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을 마스킹하는 것을 권장합니다. 이렇게 하려면 다음을 수행합니다.- 호스트에서 할당할 장치에 확장 Makefile 베이스 주소 레지스터(BAR)가 있는지 확인합니다. 이렇게 하려면 장치에 lspci -v 명령을 사용하고 다음이 포함된 행의 출력을 확인합니다.
Expansion ROM at
- <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>
가상 머신 시작
# virsh start guest1-rhel7-64
16.1.2. virt-manager로 PCI 장치 할당
절차 16.4. virt-manager를 사용하여 게스트 가상 머신에 PCI 장치 할당
하드웨어 설정 열기
게스트 가상 머신을 열고 하드웨어 추가 버튼 을 클릭하여 가상 시스템에 새 장치를 추가합니다.그림 16.3. 가상 머신 하드웨어 정보 창
PCI 장치 선택
왼쪽의 하드웨어 목록에서 PCI 호스트 장치를 선택합니다.사용되지 않는 PCI 장치를 선택합니다. 현재 다른 게스트에서 사용 중인 PCI 장치를 선택하면 오류가 발생합니다. 이 예제에서는 예비 오디오 컨트롤러가 사용됩니다. 완료 를 클릭하여 설정을 완료합니다.그림 16.4. 새 가상 하드웨어 추가 마법사
새 장치 추가
설정이 완료되고 게스트 가상 머신에서 PCI 장치에 직접 액세스할 수 있습니다.그림 16.5. 가상 머신 하드웨어 정보 창
16.1.3. virt-install을 사용한 PCI 장치 할당
--host-device
매개 변수를 사용합니다.
절차 16.5. virt-install을 사용하여 가상 머신에 PCI 장치 할당
장치 식별
게스트 가상 머신에 대한 장치 할당용으로 지정된 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 장치 할당” 의 참고 를 참조하십시오.장치 추가
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
설치 완료
게스트 설치를 완료합니다. PCI 장치를 게스트에 연결해야 합니다.
16.1.4. 할당된 PCI 장치 분리
managed
='yes'
매개 변수를 사용하여 구성된 경우 게스트 시스템에 연결하고 게스트 시스템에서 분리한 후 필요에 따라 호스트 시스템에 다시 연결합니다. PCI 장치가 관리
모드가 아닌 경우 게스트 시스템에서 PCI 장치를 분리하고 virsh 또는 virt-manager 를 사용하여 다시 연결할 수 있습니다.
절차 16.6. virsh를 사용하여 게스트에서 PCI 장치 분리
장치 분리
다음 명령을 사용하여 게스트의 XML 파일에서 해당 장치를 제거하여 게스트에서 PCI 장치를 분리합니다.# virsh detach-device name_of_guest file.xml
장치를 호스트에 다시 연결(선택 사항)
장치가관리
모드에 있는 경우 이 단계를 건너뜁니다. 장치가 호스트에 자동으로 반환됩니다.장치가관리
모드를 사용하지 않는 경우 다음 명령을 사용하여 PCI 장치를 호스트 머신에 다시 연결합니다.# virsh nodedev-reattach device
예를 들어pci_0000 644300_0
장치를 호스트에 다시 연결하려면 다음을 수행합니다.# virsh nodedev-reattach pci_0000_01_00_0
이제 호스트를 사용할 수 있는 장치를 사용할 수 있습니다.
절차 16.7. virt-manager를 사용하여 게스트에서 PCI 장치 분리
가상 하드웨어 세부 정보 화면 열기
virt-manager 에서 장치가 포함된 가상 머신을 두 번 클릭합니다. 가상 하드웨어 세부 정보 표시 버튼을 선택하여 가상 하드웨어 목록을 표시합니다.그림 16.7. 가상 하드웨어 세부 정보 버튼
장치 선택 및 제거
왼쪽 패널에 있는 가상 장치 목록에서 분리할 PCI 장치를 선택합니다.그림 16.8. 분리할 PCI 장치 선택
Remove (제거) 버튼을 클릭하여 확인합니다. 이제 호스트를 사용할 수 있는 장치를 사용할 수 있습니다.
16.1.5. PCI 브리지
16.1.6. 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 장치 할당
<소스>
요소에 의해 도메인 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>
그림 16.10. SR-IOV 작동 방식
- 물리적 기능(PF)은 SR-IOV 기능을 포함하는 전체 PCIe 장치입니다. 물리 기능은 일반 PCI 장치로 검색, 관리 및 구성됩니다. 물리 기능은 가상 함수를 할당하여 SR-IOV 기능을 구성하고 관리합니다.
- VF(가상 기능)는 I/O만 처리하는 간단한 PCIe 기능입니다. 각 가상 기능은 물리 함수에서 파생됩니다. 장치에서 가질 수 있는 Virtual Functions의 수는 장치 하드웨어에 의해 제한됩니다. 물리 장치인 단일 이더넷 포트는 가상 머신에 공유할 수 있는 많은 가상 기능에 매핑될 수 있습니다.
16.2.1. SR-IOV의 이점
16.2.2. SR-IOV 사용
<hostdev>
에 장치 항목을 추가하여 가상 머신에 할당할 수 있습니다. 그러나 일반 네트워크 장치와 달리 SR-IOV VF 네트워크 장치에는 고유한 영구 MAC 주소가 없으므로 호스트가 재부팅될 때마다 새 MAC 주소가 할당되기 때문에 문제가 발생할 수 있습니다. 이로 인해 호스트를 재부팅한 후 게스트에 동일한 VF가 할당되더라도 게스트가 새 MAC 주소를 갖는 네트워크 어댑터를 결정합니다. 결과적으로 게스트는 매번 새로운 하드웨어가 연결되었다고 생각하며 일반적으로 게스트의 네트워크 설정을 재구성해야 합니다.
<interface type='hostdev'>
인터페이스 장치가 포함되어 있습니다. 이 인터페이스 장치를 사용하여 libvirt 는 먼저 표시된 네트워크별 하드웨어/switch 초기화를 수행합니다(예: MAC 주소, VLAN 태그 또는 802.1Qbh 가상 포트 매개 변수 설정 등) 게스트에 PCI 장치 할당을 수행합니다.
<interface type='hostdev'>
인터페이스 장치를 사용하려면 다음을 수행해야 합니다.
- SR-IOV 가능 네트워크 카드
- Intel VT-d 또는 AMD IOMMU 확장 기능을 지원하는 호스트 하드웨어
- 할당할 VF의 PCI 주소입니다.
절차 16.8. Intel 또는 AMD 시스템에 SR-IOV 네트워크 장치 연결
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 시스템 준비” 을 참조하십시오.지원 확인
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)
다른 모든 장치를 제거하도록 출력이 수정되었습니다.가상 함수 활성화
다음 명령을 실행합니다.# echo ${num_vfs} > /sys/class/net/enp14s0f0/device/sriov_numvfs
가상 함수를 영구적으로 설정
재부팅할 때 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"
이렇게 하면 부팅 시 기능이 활성화됩니다.새 가상 함수 검사
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.0
및0b:00.1
에 해당합니다. 모든 가상 함수에는 설명에가상 기능이
있습니다.virsh를 사용하여 장치 확인
libvirt
서비스는 가상 머신에 장치를 추가하기 전에 장치를 인식해야 합니다.libvirt
는 lspci 출력과 유사한 표기법을 사용합니다. 모든 구두점 문자 : 및 .. 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 주소는 목록에 있어야 합니다.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 Functionpci_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
에 투명하게 배치합니다.가상 머신에 가상 기능 추가
이전 단계에서 만든 임시 파일과 함께 다음 명령을 사용하여 가상 머신에 가상 기능을 추가합니다. 이는 새 장치를 즉시 연결하고 후속 게스트를 다시 시작하기 위해 저장합니다.virsh attach-device MyGuest
/tmp/new-interface.xml
--live --configvirsh attach-device 로--live
옵션을 지정하면 새 장치가 실행 중인 게스트에 연결됩니다.--config
옵션을 사용하면 향후 게스트가 다시 시작된 후 새 장치를 사용할 수 있습니다.참고--live
옵션은 게스트가 실행 중인 경우에만 허용됩니다. virsh 는 실행 중인 게스트에서--live
옵션이 사용되는 경우 오류를 반환합니다.
16.2.3. SR-IOV 장치를 사용하여 PCI 할당 구성
<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 태그 설정” 을 참조하십시오.
정보 수집
<인터페이스 type='hostdev'>
를 사용하려면 SR-IOV 가능 네트워크 카드, Intel VT-d 또는 AMD IOMMU 확장 기능을 지원하는 실제 머신 하드웨어가 있고 할당하려는 VF의 PCI 주소를 알아야 합니다.게스트 가상 머신 종료
virsh shutdown 명령을 사용하여 guest 가상 머신을 종료 합니다(여기서는 guestVM).# virsh shutdown guestVM
편집할 XML 파일을 엽니다.
# virsh edit guestVM.xml
선택 사항: virsh save 명령으로 생성된 XML 구성 파일의 경우 다음을 실행합니다.# virsh save-image-edit guestVM.xml
--running
설정 파일(이 예에서는 guestVM.xml )이 기본 편집기에서 열립니다. 자세한 내용은 참조하십시오. 20.7.5절. “게스트 가상 머신 구성 편집”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") 스위치는 현재 지원되지 않습니다.게스트 가상 머신 재시작
virsh start 명령을 실행하여 2단계에서 종료한 게스트 가상 머신을 재시작합니다. 자세한 내용은 20.6절. “가상 머신 시작, 다시 시작 및 복원”를 참조하십시오.# virsh start guestVM
게스트 가상 머신이 시작되면 MAC 주소가 구성된 물리적 호스트 시스템의 어댑터에서 제공하는 네트워크 장치가 표시됩니다. 이 MAC 주소는 게스트 가상 머신과 호스트 물리적 시스템 재부팅 간에 변경되지 않고 유지됩니다.
16.2.4. SR-IOV 가상 함수 풀에서 PCI 장치 할당 설정
- 게스트 가상 머신이 시작될 때마다 지정된 VF를 사용할 수 있어야 합니다. 따라서 관리자는 각 VF를 단일 게스트 가상 머신에 영구적으로 할당해야 합니다(또는 게스트 가상 머신이 시작될 때마다 현재 사용되지 않는 VF의 PCI 주소를 지정하도록 모든 게스트 가상 머신의 구성 파일을 수정해야 합니다.
- 게스트 가상 머신을 다른 호스트 물리적 시스템으로 이동하는 경우 해당 호스트 물리적 시스템의 하드웨어는 PCI 버스의 동일한 위치에 있어야 합니다(또는 시작하기 전에 게스트 가상 머신 구성을 수정해야 합니다).
절차 16.10. 장치 풀 생성
게스트 가상 머신 종료
virsh shutdown 명령을 사용하여 guest 가상 머신을 종료 합니다. 여기서 guestVM.# virsh shutdown guestVM
구성 파일 생성
선택한 편집기를 사용하여/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>
새 XML 파일을 로드합니다.
다음 명령을 입력하고 /tmp/passthrough.xml 을 이전 단계에서 생성한 XML 파일의 이름 및 위치로 바꿉니다.# virsh net-define /tmp/passthrough.xml
게스트 다시 시작
passthrough.xml 을 이전 단계에서 생성한 XML 파일 이름으로 교체하여 다음을 실행합니다.# virsh net-autostart passthrough # virsh net-start passthrough
게스트 가상 머신 다시 시작
virsh start 명령을 실행하여 첫 번째 단계에서 종료한 게스트 가상 시스템을 다시 시작합니다(예: guestVM을 게스트 가상 시스템의 도메인 이름으로 사용). 자세한 내용은 20.6절. “가상 머신 시작, 다시 시작 및 복원”를 참조하십시오.# virsh start guestVM
장치에 대한 패스스루 시작
단일 장치만 표시되더라도 libvirt는 게스트 가상 머신이 다음과 같은 도메인 XML의 인터페이스 정의로 처음 시작될 때 해당 PF와 연결된 모든 VF 목록을 자동으로 파생합니다.그림 16.13. 인터페이스 네트워크 정의를 위한 도메인 XML 샘플
<interface type='network'> <source network='passthrough'> </interface>
검증
네트워크를 사용하는 첫 번째 게스트를 시작한 후 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 제한
- Intel® 82576NS 기가비트 이더넷 컨트롤러 (igb 드라이버)
- Intel® 82576EB 기가비트 이더넷 컨트롤러(igb 드라이버)
- Intel® 82599ES 10 Gigabit Ethernet Controller (ixgbe 드라이버)
- Intel® 82599EB 10 기가비트 이더넷 컨트롤러(ixgbe 드라이버)
16.3. USB 장치
16.3.1. 게스트 가상 머신에 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 장치 재시작 시 제한 설정
-device usb-redir
로 전달합니다. filter 속성은 필터 규칙으로 구성된 문자열을 사용하며 규칙 형식은 다음과 같습니다.
<class>:<vendor>:<product>:<version>:<allow>
-1
을 사용하여 특정 필드에 대한 값을 수락하도록 지정합니다. |를 사용하여 동일한 명령줄에서 여러 규칙을 구분 기호로 사용할 수 있습니다. 장치가 통과된 규칙 중 하나와 일치하지 않는 경우 이를 리디렉션할 수 없습니다.
예 16.1. 게스트 가상 머신을 사용하여 리디렉션 제한의 예
- 게스트 가상 머신을 준비합니다.
- 게스트 가상 머신의 도메인 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>
- 게스트 가상 머신을 시작하고 다음을 실행하여 설정 변경 사항을 확인합니다.
#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
- USB 장치를 호스트 물리적 머신에 연결하고 virt-manager 를 사용하여 게스트 가상 머신에 연결합니다.
- 메뉴에서 USB 장치 선택을 클릭하면 다음 메시지가 생성됩니다. "일부 USB 장치는 호스트 정책에 의해 차단됩니다. 확인 을 클릭하여 확인하고 계속합니다.필터가 적용됩니다.
- 필터가 USB 장치 공급업체와 제품을 올바르게 캡처하는지 확인하려면 USB 리디렉션을 허용하도록 호스트 물리적 시스템의 도메인 XML에서 다음과 같이 변경하십시오.
<redirfilter> <usbdev class='0x08' vendor='0x0951' product='0x1625' version='2.0' allow='yes'/> <usbdev allow='no'/> </redirfilter>
- 게스트 가상 머신을 재시작한 다음 virt-viewer 를 사용하여 게스트 가상 시스템에 연결합니다. 이제 USB 장치가 트래픽을 게스트 가상 머신으로 리디렉션합니다.
16.4. 장치 컨트롤러 구성
그림 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
<model='none'>
을 사용할 수 있습니다.
<주소는>
16.5절. “장치용 주소 설정” 에 표시된 대로 의미 체계와 함께 마스터 버스에 컨트롤러의 정확한 관계를 지정할 수 있습니다.
<드라이버는 드라이버>
별 옵션을 지정할 수 있습니다. 현재 컨트롤러의 큐 수를 지정하는 특성 대기열만 지원합니다. 최적의 성능을 위해 vCPU 수와 일치하는 값을 지정하는 것이 좋습니다.
<마스터>
컨트롤러와의 파트너의 정확한 관계를 지정하는 선택적 하위 요소 마스터가 있습니다. 동반 컨트롤러는 마스터와 동일한 버스에 있으므로 그에 동반되는 인덱스
값이 동일해야 합니다.
그림 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-root
- pcie-root
- pci-bridge
- dmi-to-pci-bridge
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> ...
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> ...
그림 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 주소에는 다음과 같은 추가 속성이 있습니다.
|
type='drive' | 드라이브 주소에는 다음과 같은 추가 속성이 있습니다.
|
type='virtio-serial' | 각 virtio-serial 주소에는 다음과 같은 추가 속성이 있습니다.
|
type='ccid' | 스마트 카드용 CCID 주소는 다음과 같은 추가 속성을 갖습니다.
|
type='usb' | USB 주소에는 다음과 같은 추가 속성이 있습니다.
|
type='isa' | RuntimeClass 주소에는 다음과 같은 추가 속성이 있습니다.
|
16.6. 임의 번호 생성기 장치
virtio-rng
가 포함되어 있습니다.
/dev/hwrng
에 chardev를 생성한 다음, 호스트 물리적 머신에서 엔트로피를 가져오도록 읽을 수 있습니다. rngd
데몬과 함께 작동하면 호스트 물리적 시스템의 엔트로피를 게스트 가상 시스템의 /dev/random
로 라우팅할 수 있습니다.
virtio-rng
에 대한 자세한 내용은 Red Hat Enterprise Linux Virtual Machines를 참조하십시오. Random Numbers made easy 에 액세스할 수 있습니다.
절차 16.11. 가상 머신 관리자를 사용하여 virtio-rng 구현
- 게스트 가상 머신을 종료합니다.
- 게스트 가상 머신을 선택하고 편집 메뉴에서 가상 머신 세부 정보를 선택하여 지정된 게스트 가상 머신의 세부 정보 창을 엽니다.
- 하드웨어 추가 버튼을 클릭합니다.
- 새 가상 하드웨어 추가 창에서 RNG 를 선택하여 Random Number Generator 창을 엽니다.
그림 16.20. 난수 생성기 창
원하는 매개 변수를 입력하고 완료되면 Finish 를 클릭합니다. 매개변수는 virtio-rng 요소 에 설명되어 있습니다.
절차 16.12. 명령줄 툴을 사용하여 virtio-rng 구현
- 게스트 가상 머신을 종료합니다.
- virsh edit domain-name 명령을 사용하여 원하는 게스트 가상 시스템의 XML 파일을 엽니다.
- 다음을 포함하도록
<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 PCI 장치 할당 - 이 방법을 사용하면 호스트에서 GPU 장치를 제거하고 단일 게스트에 할당할 수 있습니다.
- NVIDIA vGPU Assignment - 이 방법을 사용하면 물리적 GPU에서 여러 개의 중재 장치를 생성하고 이러한 장치를 여러 게스트에 가상 GPU로 할당할 수 있습니다. 이는 선택한 NVIDIA GPU에서만 지원되며, 하나의 중재 장치만 게스트에 할당할 수 있습니다.
16.7.1. GPU PCI 장치 할당
- NVIDIA Quadro K-Series, M-Series, P-Series 및 이후 아키텍처 (모델 2000 시리즈 이상)
- NVIDIA StatefulSet K-Series, M-Series 및 이후 아키텍처
절차 16.13. 호스트 머신 커널에서 IOMMU 지원 활성화
커널 명령행 편집
Intel VT-d 시스템의 경우 IOMMU는intel_iommu=on
및iommu=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 그룹 작업 을 참조하십시오.부트 로더 구성 다시 생성
적용할 커널 명령줄 변경 사항의 경우grub2-mkconfig
명령을 사용하여 부트 로더 구성을 다시 생성합니다.# grub2-mkconfig -o /etc/grub2.cfg
UEFI 기반 호스트를 사용하는 경우 대상 파일은/etc/grub2-efi.cfg
여야 합니다.호스트 재부팅
변경 사항을 적용하려면 호스트 시스템을 재부팅합니다.# reboot
절차 16.14. 호스트 물리적 머신 드라이버에 바인딩에서 GPU 장치 제외
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입니다.네이티브 호스트 머신 드라이버가 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를 추가하려면 쉼표로 구분합니다.부트 로더 구성 다시 생성
이 옵션을 포함하도록grub2-mkconfig
를 사용하여 부트 로더 구성을 다시 생성합니다.# grub2-mkconfig -o /etc/grub2.cfg
UEFI 기반 호스트를 사용하는 경우 대상 파일은/etc/grub2-efi.cfg
여야 합니다.호스트 시스템 재부팅
변경 사항을 적용하려면 호스트 시스템을 재부팅합니다.# reboot
절차 16.15. 선택 사항: GPU IOMMU 구성 편집
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 그룹 작업의 내용을 참조하십시오.IOMMU 설정 조정
이 예에서는 레거시 인터럽트 지원의 하드웨어 문제로 인해 NVIDIA 오디오 기능의 할당이 지원되지 않습니다. 또한 GPU 오디오 기능은 일반적으로 GPU 자체 없이는 유용하지 않습니다. 따라서 게스트에 GPU를 할당하려면 먼저 기본 호스트 드라이버에서 오디오 기능을 분리해야 합니다. 이 작업은 다음 중 하나를 사용하여 수행할 수 있습니다.- 장치에 대한 PCI ID를 탐지하고
/etc/sysconfig/grub
파일의pci-stub.ids
옵션에 추가합니다. 절차 16.14. “호스트 물리적 머신 드라이버에 바인딩에서 GPU 장치 제외” - 다음과 같이 virsh nodedev-detach 명령을 사용합니다.
# virsh nodedev-detach pci_0000_02_00_1 Device pci_0000_02_00_1 detached
절차 16.16. GPU 연결
- 가상 머신 관리자 인터페이스 사용. 자세한 내용은 16.1.2절. “virt-manager로 PCI 장치 할당”의 내용을 참조하십시오.
- GPU에 대한 XML 구성 조각을 만들고 virsh attach-device 에 연결합니다.
- 다음과 유사한 장치에 대한 XML을 만듭니다.
<hostdev mode='subsystem' type='pci' managed='yes'> <driver name='vfio'/> <source> <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </source> </hostdev>
- 이 파일을 파일에 저장하고 virsh attach-device [domain] --persistent 를 실행하여 게스트 구성에 XML을 포함합니다. 할당된 GPU가 게스트 시스템의 기존 에뮬레이션 그래픽 장치 외에 추가됩니다. 할당된 GPU는 가상 머신에서 보조 그래픽 장치로 처리됩니다. 기본 그래픽 장치로 할당이 지원되지 않으며 게스트의 XML에서 에뮬레이션된 그래픽 장치는 제거되지 않아야 합니다.
- virsh edit 명령을 사용하여 게스트 XML 구성을 편집하고 적절한 XML 세그먼트를 수동으로 추가합니다.
절차 16.17. 게스트에서 Xorg 설정 확인
- 게스트에서 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입니다. - 게스트의
/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으로 변환해야 합니다.
16.7.2. NVIDIA vGPU Assignment
16.7.2.1. NVIDIA vGPU 설정
- NVIDIA vGPU 드라이버를 가져와서 시스템에 설치합니다. 자세한 내용은 NVIDIA 문서를 참조하십시오.
- NVIDIA 소프트웨어 설치 프로그램이
/etc/modprobe.d/nvidia-installer-disable-nouveau
파일을 생성하지 않은 경우.conf
/etc/modprobe.d/
디렉터리에 .conf 파일(이름 중)을 생성합니다. 파일에 다음 행을 추가합니다.blacklist nouveau options nouveau modeset=0
- 현재 커널의 초기 램디스크를 다시 생성한 다음 재부팅합니다.
# dracut --force # reboot
중재 장치가 있는 이전에 지원되는 커널 버전을 사용해야 하는 경우 설치된 모든 커널 버전에 대해 초기 램디스크를 다시 생성합니다.# dracut --regenerate-all --force # reboot
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) [...]
/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 유형으로 지원됩니다.- 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 콘솔 설정 및 사용
- 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>
- 선택적으로 VM의 비디오 모델 유형을 none 으로 설정합니다. 예를 들면 다음과 같습니다.
<video> <model type='none'/> </video>
이를 지정하지 않으면 에뮬레이션한 Cirrus 또는 QXL 카드와 NVIDIA vGPU에서 두 개의 다른 디스플레이 출력을 받습니다. 또한 model type='none 을 사용하면 드라이버가 초기화될 때까지 부팅 그래픽 출력을 볼 수 없습니다. 그 결과 첫 번째 그래픽 출력이 로그인 화면입니다. - VM의 그래픽 유형의 XML 구성이 vnc 인지 확인합니다.예를 들면 다음과 같습니다.
<graphics type='vnc' port='-1' autoport='yes'> <listen type='address'/> </graphics>
- 가상 머신을 시작합니다.
- VNC 뷰어 원격 데스크탑 클라이언트를 사용하여 가상 머신에 연결합니다.참고VM이 에뮬레이션된 VGA를 기본 비디오 장치로 사용하고 vGPU를 보조 장치로 사용하는 경우 ctrl+alt+2 키보드 바로 가기를 사용하여 vGPU 디스플레이로 전환합니다.
16.7.2.3. NVIDIA vGPU 장치 제거
30820a6f-b1a5-4503-91ca-0c10ba58692a
)로 바꿉니다.
# echo 1 > /sys/bus/mdev/devices/uuid/remove
echo: write error: Device or resource busy
16.7.2.4. NVIDIA 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용 원격 데스크탑 스트리밍 서비스
- HP-RGS
- Mechdyne TGX - 현재 Mechdyne TGX를 Windows Server 2016 게스트에서 사용할 수 없습니다.
- NICE DCV - 이 스트리밍 서비스를 사용할 때 Red Hat은 일부 경우에서 동적 해상도를 사용하므로 고정 해결 설정을 사용하는 것이 좋습니다.
16.7.2.6. NVIDIA vGPU를 사용하여 비디오 스트리밍용 VNC 콘솔 설정
소개
설정
- 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>
- 선택적으로 VM의 비디오 모델 유형을 none 으로 설정합니다. 예를 들면 다음과 같습니다.
<video> <model type='none'/> </video>
- 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>
- 가상 머신을 시작합니다.
- 이전 단계에서 구성한 그래픽 프로토콜에 적합한 클라이언트를 사용하여 가상 머신에 연결합니다.
- VNC의 경우 VNC 뷰어 원격 데스크탑 클라이언트를 사용합니다. VM이 에뮬레이션된 VGA를 기본 비디오 장치로 설정하고 vGPU를 보조로 사용하여 ctrl+alt+2 키보드 바로 가기를 사용하여 vGPU 디스플레이로 전환합니다.
- SPICE는 virt-viewer 애플리케이션을 사용합니다.
17장. 가상 네트워킹
17.1. 가상 네트워크 스위치
그림 17.1. 게스트 두 개로 가상 네트워크 스위치
$ 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. 브리지 모드
그림 17.2. 브릿지 모드로 가상 네트워크 스위치
17.3. 네트워크 주소 변환
그림 17.3. 2개의 게스트가 있는 NAT를 사용하는 가상 네트워크 스위치
# iptables -j SNAT --to-source [start]-[end]
17.4. DNS 및 DHCP
그림 17.4. dnsmasq를 실행하는 가상 네트워크 스위치
17.5. 라우팅 모드
그림 17.5. 라우팅 모드의 가상 네트워크 스위치
17.6. isolated Mode
그림 17.6. 분리된 모드로 가상 네트워크 스위치
17.7. 기본 구성
libvirtd
에 대한 이 기본 구성을 보여줍니다.
그림 17.7. 기본 libvirt 네트워크 구성
eth0
,eth1
및 eth2)
. 이는 라우팅 및 NAT 모드에서만 유용하며 dev=<interface> 옵션 또는 새 가상 네트워크를 생성할 때 virt-manager 에 정의할 수 있습니다.
17.8. 공통 시나리오의 예
17.8.1. 브리지 모드
- 호스트 물리적 시스템과 함께 기존 네트워크에 게스트 가상 머신을 배포하면 가상 시스템과 물리적 시스템 간의 차이를 최종 사용자에게 투명하게 할 수 있습니다.
- 기존 물리적 네트워크 구성을 변경하지 않고 게스트 가상 머신 배포.
- 기존 물리적 네트워크에 쉽게 액세스할 수 있어야 하는 게스트 가상 머신 배포. 게스트 가상 머신을 실제 네트워크에 배치하여 DHCP와 같은 기존 브로드캐스트 도메인 내에서 서비스에 액세스해야 합니다.
- VLAN이 사용되는 가상 머신을 시작하는 네트워크에 게스트 가상 머신을 연결합니다.
17.8.2. 라우팅 모드
DMZ
보안상의 이유로 하나 이상의 노드가 제어되는 하위 네트워크에 배치되는 네트워크를 고려하십시오. 이와 같은 특수 하위 네트워크를 배포하는 것은 일반적인 관행이며, 하위 네트워크를 RuntimeClass라고 합니다. 이 레이아웃에 대한 자세한 내용은 다음 다이어그램을 참조하십시오.
그림 17.8. 샘플 RuntimeClass 구성
가상 서버 호스팅
각각 두 개의 물리적 네트워크 연결이 있는 여러 호스트 물리적 시스템이 있는 가상 서버 호스팅 회사. 한 인터페이스는 관리 및 회계를 위해 사용되며 다른 인터페이스는 가상 시스템이 을 통해 연결하는 것입니다. 각 게스트에는 자체 공용 IP 주소가 있지만 호스트 물리적 시스템은 개인 IP 주소를 게스트 관리로만 내부 관리자가 수행할 수 있습니다. 이 시나리오를 이해하려면 다음 다이어그램을 참조하십시오.
그림 17.9. 가상 서버 호스팅 샘플 구성
17.8.3. NAT 모드
17.8.4. isolated Mode
17.9. 가상 네트워크 관리
- 편집 메뉴에서 연결 세부 정보를 선택합니다.
- 그러면 연결 세부 정보 메뉴가 열립니다. 가상 네트워크 탭을 클릭합니다.
그림 17.10. 가상 네트워크 구성
- 사용 가능한 모든 가상 네트워크가 메뉴 왼쪽에 나열됩니다. 이 상자에서 가상 네트워크를 선택하고 적합한 것으로 편집하여 가상 네트워크의 구성을 편집할 수 있습니다.
17.10. 가상 네트워크 생성
- 연결 세부 정보 메뉴에서 가상 네트워크 탭을 엽니다. 더하기 기호(+) 아이콘으로 식별되는 네트워크 추가 버튼을 클릭합니다. 자세한 내용은 17.9절. “가상 네트워크 관리”의 내용을 참조하십시오.
그림 17.11. 가상 네트워크 구성
그러면 Create a new virtual network (새 가상 네트워크 생성) 창이 열립니다. 계속하려면 Forward 를 클릭합니다.그림 17.12. 새 가상 네트워크 이름 지정
- 가상 네트워크에 적절한 이름을 입력하고 Forward 를 클릭합니다.
그림 17.13. IPv4 주소 공간 선택
- Enable IPv4 network address space definition 확인란을 선택합니다.Network (네트워크) 필드에 가상 네트워크의 IPv4 주소 공간을 입력합니다.Enable DHCPv4 확인란을 선택합니다.Start 및 End range of IP 주소를 지정하여 가상 네트워크의 DHCP 범위를 정의합니다.
그림 17.14. IPv4 주소 공간 선택
계속하려면 Forward 를 클릭합니다. - IPv6를 활성화하려면 Enable IPv6 네트워크 주소 공간 정의를 확인하십시오.
그림 17.15. IPv6 활성화
새 가상 네트워크 생성 창에 추가 필드가 표시됩니다.그림 17.16. IPv6 구성
Network (네트워크) 필드에 IPv6 주소를 입력합니다. - DHCPv6을 활성화하려면 Enable DHCPv6 확인란을 선택합니다.새 가상 네트워크 생성 창에 추가 필드가 표시됩니다.
그림 17.17. DHCPv6 구성
(선택 사항) DHCPv6 범위의 시작 및 종료를 편집합니다. - 정적 경로 정의를 활성화하려면 Enable Static Route Definition 확인란을 선택합니다.새 가상 네트워크 생성 창에 추가 필드가 표시됩니다.
그림 17.18. 정적 경로 정의
네트워크 주소 및 적절한 필드에서 네트워크로 이동하는 데 사용할 게이트웨이를 입력합니다.Forward 를 클릭합니다. - 가상 네트워크가 실제 네트워크에 연결하는 방법을 선택합니다.
그림 17.19. 물리적 네트워크에 연결
가상 네트워크를 분리하려면 격리된 가상 네트워크 라디오 버튼이 선택되어 있는지 확인합니다.가상 네트워크가 물리적 네트워크에 연결되도록 하려면 물리적 네트워크로 전달을 선택하고 대상이 모든 물리적 장치인지 특정 물리적 장치인지 특정 물리적 장치 여야 하는지를 선택합니다. 또한 모드가 NAT 여야 하는지 아니면 Routed 여야 하는지를 선택합니다.가상 네트워크 내에서 IPv6 라우팅을 활성화하려면 Enable IPv6 internal routing/networking 확인란을 선택합니다.가상 네트워크의 DNS 도메인 이름을 입력합니다.Finish 를 클릭하여 가상 네트워크를 만듭니다. - 이제 새 가상 네트워크를 연결 세부 정보 창의 Virtual Networks (가상 네트워크) 탭에서 사용할 수 있습니다.
17.11. 게스트에 가상 네트워크 연결
- Virtual Machine Manager 창에서 네트워크를 할당할 게스트를 강조 표시합니다.
그림 17.20. 표시할 가상 머신 선택
- 가상 머신 관리자 편집 메뉴에서 가상 머신 세부 정보를 선택합니다.
- 가상 머신 세부 정보 창에서 하드웨어 추가 버튼을 클릭합니다.
- 새 가상 하드웨어 추가 창의 왼쪽 창에서 네트워크를 선택하고 네트워크 소스 메뉴에서 네트워크 이름(이 예제의network 1)을 선택합니다. 필요한 경우 MAC 주소를 수정하고 장치 모델을 선택합니다. 완료를 클릭합니다.
그림 17.21. 새 가상 하드웨어 추가 창에서 네트워크를 선택합니다.
- 이제 새 네트워크가 시작 시 게스트에 표시되는 가상 네트워크 인터페이스로 표시됩니다.
그림 17.22. 게스트 하드웨어 목록에 표시된 새 네트워크
17.12. 물리적 인터페이스에 가상 NIC 직접 연결
물리적 인터페이스 전달 모드
- VEPA
- VEPA(가상 이더넷 포트 집계기) 모드에서는 게스트의 모든 패킷이 외부 스위치로 전송됩니다. 이를 통해 사용자는 스위치를 통해 게스트 트래픽을 강제 수행할 수 있습니다. VEPA 모드가 올바르게 작동하려면 외부 스위치가 hairpin 모드를 지원하므로 소스 게스트와 동일한 호스트 시스템의 게스트인 패킷이 외부 스위치를 통해 호스트로 다시 전송되도록 해야 합니다.
그림 17.23. VEPA 모드
- Bridge
- 소스 게스트와 동일한 호스트 시스템에 대상이 있는 패킷은 대상 macvtap 장치로 직접 전달됩니다. 직접 전송이 성공하려면 소스 장치와 대상 장치 모두 브리지 모드에 있어야 합니다. 장치 중 하나가 VEPA 모드에 있는 경우 헤어핀 가능 외부 스위치가 필요합니다.
그림 17.24. 브리지 모드
- private
- 모든 패킷은 외부 스위치로 전송되며 외부 라우터 또는 게이트웨이를 통해 전송되고 호스트에 다시 전송되는 경우에만 동일한 호스트 시스템의 대상 게스트로 전달됩니다. 개인 모드를 사용하면 단일 호스트의 개별 게스트가 서로 통신하지 못하도록 할 수 있습니다. 다음 절차는 소스 또는 대상 장치가 개인 모드인 경우 수행됩니다.
그림 17.25. 프라이빗 모드
- passthrough
- 이 기능은 마이그레이션 기능을 손실하지 않고 물리적 인터페이스 장치 또는 SR-IOV VF(가상 기능)를 게스트에 직접 연결합니다. 모든 패킷은 지정된 네트워크 장치로 직접 전송됩니다. 네트워크 장치는 패스스루 모드의 게스트 간에 공유할 수 없으므로 단일 네트워크 장치는 단일 게스트로 전달될 수 있습니다.
그림 17.26. Passthrough 모드
17.12.1. 도메인 XML을 사용하여 macvtap 구성
<devices>
요소를 다음과 같이 수정합니다.
<devices> ... <interface type='direct'> <source dev='eth0' mode='vepa'/> </interface> </devices>
가상 역 인터페이스 유형
- managerid
- VSI 관리자 ID는 VSI 유형 및 인스턴스 정의가 포함된 데이터베이스를 식별합니다. 이는 정수 값이며 값 0이 예약되어 있습니다.
- typeid
- VSI 유형 ID는 네트워크 액세스를 문자 지정하는 VSI 유형을 식별합니다. VSI 유형은 일반적으로 네트워크 관리자가 관리합니다. 정수 값입니다.
- typeidversion
- VSI 유형 버전에서는 VSI 유형의 여러 버전을 사용할 수 있습니다. 정수 값입니다.
- instanceID
- VSI 인스턴스(가상 머신의 가상 인터페이스)가 생성되면 VSI 인스턴스 ID가 생성됩니다. 이는 전역적으로 고유 식별자입니다.
- profileid
- 프로필 ID에는 이 인터페이스에 적용할 포트 프로필 이름이 포함되어 있습니다. 이 이름은 port 프로필 데이터베이스에서 포트 프로필의 네트워크 매개 변수로 확인되고 해당 네트워크 매개 변수가 이 인터페이스에 적용됩니다.
<devices> ... <interface type='direct'> <source dev='eth0.2' mode='vepa'/> <virtualport type="802.1Qbg"> <parameters managerid="11" typeid="1193047" typeidversion="2" instanceid="09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f"/> </virtualport> </interface> </devices>
<devices> ... <interface type='direct'> <source dev='eth0' mode='private'/> <virtualport type='802.1Qbh'> <parameters profileid='finance'/> </virtualport> </interface> </devices> ...
17.12.2. virt-manager를 사용하여 macvtap 구성
그림 17.27. virt-manager에서 macvtap 구성
17.13. 가상 NIC에 연결된 호스트 물리적 머신 또는 네트워크 브리지를 동적으로 변경
- 다음과 유사한 구성으로 게스트 가상 머신을 준비합니다.
<interface type='bridge'> <mac address='52:54:00:4a:c9:5e'/> <source bridge='virbr0'/> <model type='virtio'/> </interface>
- 인터페이스 업데이트를 위해 XML 파일을 준비합니다.
# cat br1.xml
<interface type='bridge'> <mac address='52:54:00:4a:c9:5e'/> <source bridge='virbr1'/> <model type='virtio'/> </interface>
- 게스트 가상 머신을 시작하고 게스트 가상 머신의 네트워크 기능을 확인하고 표시된 브릿지에 게스트 가상 머신의 vnetX가 연결되어 있는지 확인합니다.
# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.5254007da9f2 yes virbr0-nic vnet0 virbr1 8000.525400682996 yes virbr1-nic
- 다음 명령을 사용하여 게스트 가상 머신의 네트워크를 새 인터페이스 매개 변수로 업데이트합니다.
# virsh update-device test1 br1.xml Device updated successfully
- 게스트 가상 머신에서 서비스 네트워크를 다시 시작합니다. 게스트 가상 머신은 virbr1의 새 IP 주소를 가져옵니다. guest 가상 시스템의 vnet0이 새 브리지(virbr1)에 연결되어 있는지 확인합니다.
# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.5254007da9f2 yes virbr0-nic virbr1 8000.525400682996 yes virbr1-nic vnet0
17.14. 네트워크 필터링 적용
17.14.1. 소개
- network
- 이더넷 -- 브리징 모드에서 사용해야 합니다.
- Bridge
예 17.1. 네트워크 필터링의 예
<devices> <interface type='bridge'> <mac address='00:16:3e:5d:c7:9e'/> <filterref filter='clean-traffic'/> </interface> </devices>
예 17.2. 설명 확장된
<devices> <interface type='bridge'> <mac address='00:16:3e:5d:c7:9e'/> <filterref filter='clean-traffic'> <parameter name='IP' value='10.0.0.1'/> </filterref> </interface> </devices>
17.14.2. 체인 필터링
- 루트
- mac
- STP (spanning tree protocol)
- VLAN
- ARP 및 rarp
- ipv4
- ipv6
예 17.3. ARP 트래픽 필터링
<filter name='no-arp-spoofing' chain='arp' priority='-500'> <uuid>f88f1932-debf-4aa1-9fbe-f10d3aa4bc95</uuid> <rule action='drop' direction='out' priority='300'> <mac match='no' srcmacaddr='$MAC'/> </rule> <rule action='drop' direction='out' priority='350'> <arp match='no' arpsrcmacaddr='$MAC'/> </rule> <rule action='drop' direction='out' priority='400'> <arp match='no' arpsrcipaddr='$IP'/> </rule> <rule action='drop' direction='in' priority='450'> <arp opcode='Reply'/> <arp match='no' arpdstmacaddr='$MAC'/> </rule> <rule action='drop' direction='in' priority='500'> <arp match='no' arpdstipaddr='$IP'/> </rule> <rule action='accept' direction='inout' priority='600'> <arp opcode='Request'/> </rule> <rule action='accept' direction='inout' priority='650'> <arp opcode='Reply'/> </rule> <rule action='drop' direction='inout' priority='1000'/> </filter>
17.14.3. 체인 우선순위 필터링
표 17.1. 체인 기본 우선순위 값 필터링
체인 (prefix) | 기본 우선순위 |
---|---|
stp | -810 |
mac | -800 |
VLAN | -750 |
ipv4 | -700 |
ipv6 | -600 |
arp | -500 |
rarp | -400 |
17.14.4. 필터에서 변수 사용
MAC
은 네트워크 인터페이스의 MAC 주소로 지정됩니다. 이 변수를 참조하는 필터링 규칙은 인터페이스의 MAC 주소로 자동으로 교체됩니다. 이 작업은 사용자가 MAC 매개 변수를 명시적으로 제공할 필요 없이 작동합니다. 위의 IP 매개변수와 유사한 MAC 매개 변수를 지정할 수 있지만 libvirt는 인터페이스에서 사용할 MAC 주소를 알고 있기 때문에 권장되지 않습니다.
IP
는 가상 머신 내부의 운영 체제가 지정된 인터페이스에서 사용할 것으로 예상되는 IP 주소를 나타냅니다. IP 매개변수는 libvirt 데몬에서 매개 변수가 명시적으로 제공되지 않고 참조되지 않는 경우 인터페이스에서 사용되는 IP 주소(및 IP 매개변수의 값)를 확인하려고 할 때까지 특별합니다. IP 주소 검색에 대한 현재 제한 사항은 이 기능을 사용하는 방법과 사용 시 예상되는 방법에 대한 제한 17.14.12절. “제한 사항” 에 대한 섹션을 참조하십시오. 17.14.2절. “체인 필터링” 에 표시된 XML 파일에는 네트워크 필터 XML을 사용하여 MAC 및 IP 변수를 참조하는 예제인 필터 no-arp-spoofing
이 포함되어 있습니다.
$
가 붙습니다. 변수 값의 형식은 XML에서 식별된 필터 특성에 의해 예상되는 유형이어야 합니다. 위의 예에서 IP
매개 변수는 법적 IP 주소를 표준 형식으로 보관해야 합니다. 올바른 구조를 제공하지 않으면 필터 변수가 값으로 교체되지 않으며 핫 플러그를 사용할 때 가상 머신이 시작되지 않거나 인터페이스가 연결되지 않습니다. 각 XML 특성에 대해 예상되는 일부 유형은 예제 예 17.4. “샘플 변수 유형” 에 표시됩니다.
예 17.4. 샘플 변수 유형
<devices> <interface type='bridge'> <mac address='00:16:3e:5d:c7:9e'/> <filterref filter='clean-traffic'> <parameter name='IP' value='10.0.0.1'/> <parameter name='IP' value='10.0.0.2'/> <parameter name='IP' value='10.0.0.3'/> </filterref> </interface> </devices>
<rule action='accept' direction='in' priority='500'> <tcp srpipaddr='$IP'/> </rule>
<rule action='accept' direction='in' priority='500'> <udp dstportstart='$DSTPORTS[1]'/> </rule>
예 17.5. 다양한 변수 사용
<rule action='accept' direction='in' priority='500'> <ip srcipaddr='$SRCIPADDRESSES[@1]' dstportstart='$DSTPORTS[@2]'/> </rule>
SRCIPADDRESSES = [ 10.0.0.1, 11.1.2.3 ] DSTPORTS = [ 80, 8080 ]
- 10.0.0.1, 80
- 10.0.0.1, 8080
- 11.1.2.3, 80
- 11.1.2.3, 8080
- 10.0.0.1, 80
- 11.1.2.3, 8080
17.14.5. 자동 IP 주소 탐지 및 DHCP 실패
17.14.5.1. 소개
CTRL_IP_LEARNING
변수를 사용하여 사용할 IP 주소 학습 방법을 지정할 수 있습니다. 유효한 값은 ,dhcp 또는 none 입니다.
CTRL_IP_LEARNING
변수가 설정되지 않은 경우 기본 설정입니다. 이 방법은 인터페이스당 하나의 IP 주소만 감지합니다. 게스트 가상 머신의 IP 주소가 감지되면 예를 들어 IP 주소 스푸핑이 필터 중 하나로 인해 IP 주소 스푸핑이 방지됩니다. 이 경우 VM의 사용자는 게스트 가상 시스템 내부의 인터페이스의 IP 주소를 변경할 수 없으므로 IP 주소 스푸핑으로 간주됩니다. 게스트 가상 시스템을 다른 호스트 물리적 시스템으로 마이그레이션하거나 일시 중지한 후 다시 시작하면 게스트 가상 시스템에서 전송된 첫 번째 패킷은 게스트 가상 시스템에서 특정 인터페이스에서 사용할 수 있는 IP 주소를 다시 결정합니다.
17.14.5.2. DHCP Snooping
DHCPSERVER
를 유효한 DHCP 서버의 IP 주소로 설정하고 이 변수를 사용하여 들어오는 DHCP 응답을 필터링하는 필터를 제공합니다.
예 17.6. DHCP 스누핑의 IP 활성화
<interface type='bridge'> <source bridge='virbr0'/> <filterref filter='clean-traffic'> <parameter name='CTRL_IP_LEARNING' value='dhcp'/> </filterref> </interface>
17.14.6. 예약된 변수
표 17.2. 예약된 변수
변수 이름 | 정의 |
---|---|
MAC | 인터페이스의 MAC 주소 |
IP | 인터페이스에서 사용 중인 IP 주소 목록 |
IPV6 | 현재 구현되지 않음: 인터페이스에서 사용 중인 IPV6 주소 목록 |
DHCPSERVER | 신뢰할 수 있는 DHCP 서버의 IP 주소 목록 |
DHCPSERVERV6 | 현재 구현되지 않음: 신뢰할 수 있는 DHCP 서버의 IPv6 주소 목록 |
CTRL_IP_LEARNING | IP 주소 감지 모드 선택 |
17.14.7. 요소 및 속성 개요
<필터>
의 이름을 지정합니다. name
속성은 지정된 필터의 고유 이름을 제공합니다. chain
속성은 선택 사항이지만 기본 호스트 물리적 시스템의 방화벽 하위 시스템에서 보다 효율적으로 처리할 수 있도록 특정 필터를 더 효율적으로 구성할 수 있습니다. 현재 시스템은 루트
,ipv4
,ipv6
,arp
및 rarp
체인 만 지원합니다.
17.14.8. 다른 필터에 대한 참조
예 17.7. 깨끗한 트래픽 필터의 예
<filter name='clean-traffic'> <uuid>6ef53069-ba34-94a0-d33d-17751b9b8cb1</uuid> <filterref filter='no-mac-spoofing'/> <filterref filter='no-ip-spoofing'/> <filterref filter='allow-incoming-ipv4'/> <filterref filter='no-arp-spoofing'/> <filterref filter='no-other-l2-traffic'/> <filterref filter='qemu-announce-self'/> </filter>
<filterref>
를 필터 노드 내부에 제공해야 합니다. 이 노드에는 참조할 필터 이름이 포함된 속성 필터가 있어야 합니다.
17.14.9. 필터 규칙
예 17.8. 네트워크 트래픽 필터링의 예
<filter name='no-ip-spoofing' chain='ipv4'> <uuid>fce8ae33-e69e-83bf-262e-30786c1f8072</uuid> <rule action='drop' direction='out' priority='500'> <ip match='no' srcipaddr='$IP'/> </rule> </filter>
- action은 필수적으로 다음 값을 가질 수 있습니다.
- drop (더 이상 분석 없이 규칙이 자동으로 패킷을 삭제)
- 거부(더 이상 분석 없이 ICMP reject 메시지를 생성)
- 수락 (단일 규칙이 추가 분석 없이 패킷을 수락)
- 반환(이 필터를 통과하지만 추가 분석을 위해 호출 필터로 제어를 반환)
- 계속(더 많은 분석을 위해 다음 규칙과 일치)
- 방향은 필수적으로 다음 값을 가질 수 있습니다.
- 들어오는 트래픽의 경우
- 나가는 트래픽의 경우
- 수신 및 발신 트래픽에 대한 아웃
- 우선순위는 선택 사항입니다. 규칙의 우선 순위는 다른 규칙에 대해 규칙을 인스턴스화하는 순서를 제어합니다. 값이 낮은 규칙은 값이 더 높은 규칙보다 먼저 인스턴스화됩니다. 유효한 값은 -1000~1000의 범위에 있습니다. 이 속성을 제공하지 않으면 우선 순위 500이 기본적으로 할당됩니다. 루트 체인의 필터링 규칙은 우선 순위에 따라 루트 체인에 연결된 필터를 사용하여 정렬됩니다. 이를 통해 필터 체인에 대한 액세스 권한이 있는 필터링 규칙을 인터리빙할 수 있습니다. 자세한 내용은 17.14.3절. “체인 우선순위 필터링”를 참조하십시오.
- statematch는 선택 사항입니다. 가능한 값은 '0' 또는 'false'이며 기본 연결 상태 일치를 끄는 것입니다. 기본 설정은 'true' 또는 1입니다.
17.14.10. 지원되는 프로토콜
ipaddr
을 보여줍니다. 다음 섹션에서는 유효한 속성과 예상되는 데이터 유형을 보여줍니다. 사용할 수 있는 데이터 형식은 다음과 같습니다.The following datatypes are available:
- UINT8 : 8 비트 정수; 범위 0-255
- UINT16: 16 비트 정수; 범위 0-65535
- MAC_ADDR: 점으로 된 10진수 형식의 MAC 주소 (예: 00:11:22:33:44:55)
- MAC_MASK: MAC 주소 형식의 MAC 주소 마스크(예: FF:FF:FC:00:00)
- IP_ADDR: 점으로 된 10진수 형식의 IP 주소(예: 10.1.2.3)
- IP_MASK: 점선 10진수 형식(255.255.248.0) 또는 CIDR 마스크(0-32)의 IP 주소 마스크
- IPV6_ADDR: 숫자 형식의 IPv6 주소(예: FFFF::1)
- IPV6_MASK: IPv6 mask in numbers format (FFFF:FFFF:FC00::) 또는 CIDR 마스크 (0-128)
- 문자열: 문자열
- BOLEAN: 'true', 'yes', '1' 또는 'false', 'no', '0'
- IPSETFLAGS: 패킷 헤더의 소스 또는 대상 부분에서 기능을 선택하는 최대 6개의 'src' 또는 'dst' 요소에 의해 설명된 ipset의 소스 및 대상 플래그입니다. 여기에서 제공할 'selectors' 수는 참조되는 ipset 유형에 따라 다릅니다.
IP_MASK
또는 IPV6_MASK
유형을 제외한 모든 속성은 값이 없음 인 match 속성을 사용하여 부정할 수 있습니다. 여러 개의 부정된 속성을 함께 그룹화할 수 있습니다. 다음 XML 조각은 추상 특성을 사용하는 예를 보여줍니다.
[...] <rule action='drop' direction='in'> <protocol match='no' attribute1='value1' attribute2='value2'/> <protocol attribute3='value3'/> </rule> [...]
attribute1
이 value1
과 일치하지 않고 protocol 속성 attribute2
가 value2
와 일치하지 않고 protocol 속성 특성3이 value 3
과 일치하는 경우에만 삭제됩니다.
17.14.10.1. MAC(Ethernet)
표 17.3. MAC 프로토콜 유형
특성 이름 | datatype | 정의 |
---|---|---|
OSSMmacaddr | MAC_ADDR | 보낸 사람의 MAC 주소 |
OSSMmacmask | MAC_MASK | 보낸 사람의 MAC 주소에 적용되는 마스크 |
dstmacaddr | MAC_ADDR | 대상의 MAC 주소 |
dstmacmask | MAC_MASK | 대상의 MAC 주소에 적용되는 마스크 |
protocolid | UINT16 (0x600-0xffff), STRING | 계층 3 프로토콜 ID입니다. 유효한 문자열에는 [arp, rarp, ipv4, ipv6]가 포함됩니다. |
설명 | 문자열 | 최대 256자까지의 텍스트 문자열 |
[...] <mac match='no' srcmacaddr='$MAC'/> [...]
17.14.10.2. VLAN (802.1Q)
표 17.4. VLAN 프로토콜 유형
특성 이름 | datatype | 정의 |
---|---|---|
OSSMmacaddr | MAC_ADDR | 보낸 사람의 MAC 주소 |
OSSMmacmask | MAC_MASK | 보낸 사람의 MAC 주소에 적용되는 마스크 |
dstmacaddr | MAC_ADDR | 대상의 MAC 주소 |
dstmacmask | MAC_MASK | 대상의 MAC 주소에 적용되는 마스크 |
vlan-id | UINT16 (0x0-0xfff, 0 - 4095) | VLAN ID |
Encap-protocol | UINT16 (0x03c-0xfff), 문자열 | 캡슐화된 계층 3 프로토콜 ID, 유효한 문자열은 arp, ipv4, ipv6입니다. |
설명 | 문자열 | 최대 256자까지의 텍스트 문자열 |
17.14.10.3. STP(Spanning Tree Protocol)
표 17.5. STP 프로토콜 유형
특성 이름 | datatype | 정의 |
---|---|---|
OSSMmacaddr | MAC_ADDR | 보낸 사람의 MAC 주소 |
OSSMmacmask | MAC_MASK | 보낸 사람의 MAC 주소에 적용되는 마스크 |
type | UINT8 | BPDU( Bridge Protocol Data Unit) 유형 |
플래그 | UINT8 | BPDU 플래그dstmacmask |
root-priority | UINT16 | 루트 우선 순위 범위 시작 |
root-priority-hi | UINT16 (0x0-0xfff, 0 - 4095) | 루트 우선 순위 범위 종료 |
root-address | MAC _ADDRESS | 루트 MAC 주소 |
root-address-mask | MAC _MASK | 루트 MAC 주소 마스크 |
roor-cost | UINT32 | 루트 경로 비용 (범위 시작) |
root-cost-hi | UINT32 | 루트 경로 비용 범위 종료 |
sender-priority-hi | UINT16 | 발신자 우선 순위 범위 종료 |
sender-address | MAC_ADDRESS | BPDU 발신자 MAC 주소 |
sender-address-mask | MAC_MASK | BPDU 발신자 MAC 주소 마스크 |
port | UINT16 | 포트 식별자(범위 시작) |
port_hi | UINT16 | 포트 ID 범위 종료 |
msg-age | UINT16 | 메시지 수명 타이머 (시작 시간) |
msg-age-hi | UINT16 | 메시지 수명 타이머 범위 종료 |
max-age-hi | UINT16 | 최대 사용 기간 범위 종료 |
hello-time | UINT16 | hello 시간 타이머 (시작 시간) |
hello-time-hi | UINT16 | hello 시간 타이머 범위 종료 |
forward-delay | UINT16 | forward delay (range start) |
forward-delay-hi | UINT16 | 전달 지연 범위 종료 |
설명 | 문자열 | 최대 256자까지의 텍스트 문자열 |
17.14.10.4. ARP/RARP
표 17.6. ARP 및 RARP 프로토콜 유형
특성 이름 | datatype | 정의 |
---|---|---|
OSSMmacaddr | MAC_ADDR | 보낸 사람의 MAC 주소 |
OSSMmacmask | MAC_MASK | 보낸 사람의 MAC 주소에 적용되는 마스크 |
dstmacaddr | MAC_ADDR | 대상의 MAC 주소 |
dstmacmask | MAC_MASK | 대상의 MAC 주소에 적용되는 마스크 |
hwtype | UINT16 | 하드웨어 유형 |
protocoltype | UINT16 | 프로토콜 유형 |
opcode | UINT16, STRING | opcode 유효한 문자열은 다음과 같습니다. request, Reply, Request_Reverse, Reply_Reverse, DRARP_Request, DRARP_Reply, DRARP_Error, InARP_Request, ARP_NAK |
arpsrcmacaddr | MAC_ADDR | ARP/RARP 패킷의 소스 MAC 주소 |
arpdstmacaddr | MAC _ADDR | ARP/RARP 패킷의 대상 MAC 주소 |
arpsrcipaddr | IP_ADDR | ARP/RARP 패킷의 소스 IP 주소 |
arpdstipaddr | IP_ADDR | ARP/RARP 패킷의 대상 IP 주소 |
기타 | 부울 | 불필요한 ARP 패킷을 확인할지 여부를 나타내는 부울 값입니다. |
설명 | 문자열 | 최대 256자까지의 텍스트 문자열 |
17.14.10.5. IPv4
표 17.7. IPv4 프로토콜 유형
특성 이름 | datatype | 정의 |
---|---|---|
OSSMmacaddr | MAC_ADDR | 보낸 사람의 MAC 주소 |
OSSMmacmask | MAC_MASK | 보낸 사람의 MAC 주소에 적용되는 마스크 |
dstmacaddr | MAC_ADDR | 대상의 MAC 주소 |
dstmacmask | MAC_MASK | 대상의 MAC 주소에 적용되는 마스크 |
OSSMipaddr | IP_ADDR | 소스 IP 주소 |
Golangipmask | IP_MASK | 소스 IP 주소에 적용되는 마스크 |
dstipaddr | IP_ADDR | 대상 IP 주소 |
dstipmask | IP_MASK | 대상 IP 주소에 적용되는 마스크 |
프로토콜 | UINT8, 문자열 | 계층 4 프로토콜 식별자 프로토콜에 유효한 문자열: tcp, udp, udp, udp, udp, esp, ah, icmp, igmp, sctp |
srcportstart | UINT16 | 유효한 소스 포트 범위 시작, 프로토콜 필요 |
OSSMportend | UINT16 | 유효한 소스 포트 범위 종료, 프로토콜 필요 |
dstportstart | UNIT16 | 유효한 대상 포트 범위 시작, 프로토콜 필요 |
dstportend | UNIT16 | 유효한 대상 포트 범위 종료, 프로토콜 필요 |
설명 | 문자열 | 최대 256자까지의 텍스트 문자열 |
17.14.10.6. IPv6
표 17.8. IPv6 프로토콜 유형
특성 이름 | datatype | 정의 |
---|---|---|
OSSMmacaddr | MAC_ADDR | 보낸 사람의 MAC 주소 |
OSSMmacmask | MAC_MASK | 보낸 사람의 MAC 주소에 적용되는 마스크 |
dstmacaddr | MAC_ADDR | 대상의 MAC 주소 |
dstmacmask | MAC_MASK | 대상의 MAC 주소에 적용되는 마스크 |
OSSMipaddr | IP_ADDR | 소스 IP 주소 |
Golangipmask | IP_MASK | 소스 IP 주소에 적용되는 마스크 |
dstipaddr | IP_ADDR | 대상 IP 주소 |
dstipmask | IP_MASK | 대상 IP 주소에 적용되는 마스크 |
프로토콜 | UINT8, 문자열 | 계층 4 프로토콜 식별자 프로토콜에 유효한 문자열은 tcp, udp, udp, udp, esp, ah, icmpv6, sctp입니다. |
scrportstart | UNIT16 | 유효한 소스 포트 범위 시작, 프로토콜 필요 |
OSSMportend | UINT16 | 유효한 소스 포트 범위 종료, 프로토콜 필요 |
dstportstart | UNIT16 | 유효한 대상 포트 범위 시작, 프로토콜 필요 |
dstportend | UNIT16 | 유효한 대상 포트 범위 종료, 프로토콜 필요 |
설명 | 문자열 | 최대 256자까지의 텍스트 문자열 |
17.14.10.7. TCP/UDP/SCTP
표 17.9. TCP/UDP/SCTP 프로토콜 유형
특성 이름 | datatype | 정의 |
---|---|---|
OSSMmacaddr | MAC_ADDR | 보낸 사람의 MAC 주소 |
OSSMipaddr | IP_ADDR | 소스 IP 주소 |
Golangipmask | IP_MASK | 소스 IP 주소에 적용되는 마스크 |
dstipaddr | IP_ADDR | 대상 IP 주소 |
dstipmask | IP_MASK | 대상 IP 주소에 적용되는 마스크 |
scripto | IP_ADDR | 소스 IP 주소 범위 시작 |
OSSMipfrom | IP_ADDR | 소스 IP 주소 범위 종료일 |
dstipfrom | IP_ADDR | 대상 IP 주소 범위 시작 |
dstipto | IP_ADDR | 대상 IP 주소 범위 종료일 |
scrportstart | UNIT16 | 유효한 소스 포트 범위 시작, 프로토콜 필요 |
OSSMportend | UINT16 | 유효한 소스 포트 범위 종료, 프로토콜 필요 |
dstportstart | UNIT16 | 유효한 대상 포트 범위 시작, 프로토콜 필요 |
dstportend | UNIT16 | 유효한 대상 포트 범위 종료, 프로토콜 필요 |
설명 | 문자열 | 최대 256자까지의 텍스트 문자열 |
상태 | 문자열 | 콤마로 구분된 NEW,ESTABLISHED,RELATED,INVALID 또는 NONE |
플래그 | 문자열 | TCP 전용: 마스크 및 플래그를 사용하는 마스크 및 플래그 형식은 각각 SYN,ACK,URG,PSH,FIN,RST 또는 NONE 또는 ALL의 쉼표로 구분된 목록입니다. |
ipset | 문자열 | libvirt 외부에서 관리되는 IPSet의 이름입니다. |
ipsetflags | IPSETFLAGS | IPSet의 플래그: ipset 속성 필요 |
17.14.10.8. ICMP
표 17.10. ICMP 프로토콜 유형
특성 이름 | datatype | 정의 |
---|---|---|
OSSMmacaddr | MAC_ADDR | 보낸 사람의 MAC 주소 |
OSSMmacmask | MAC_MASK | 보낸 사람의 MAC 주소에 적용되는 마스크 |
dstmacaddr | MAD_ADDR | 대상의 MAC 주소 |
dstmacmask | MAC_MASK | 대상의 MAC 주소에 적용되는 마스크 |
OSSMipaddr | IP_ADDR | 소스 IP 주소 |
Golangipmask | IP_MASK | 소스 IP 주소에 적용되는 마스크 |
dstipaddr | IP_ADDR | 대상 IP 주소 |
dstipmask | IP_MASK | 대상 IP 주소에 적용되는 마스크 |
OSSMipfrom | IP_ADDR | 소스 IP 주소 범위 시작 |
scripto | IP_ADDR | 소스 IP 주소 범위 종료일 |
dstipfrom | IP_ADDR | 대상 IP 주소 범위 시작 |
dstipto | IP_ADDR | 대상 IP 주소 범위 종료일 |
type | UNIT16 | ICMP 유형 |
코드 | UNIT16 | ICMP 코드 |
설명 | 문자열 | 최대 256자까지의 텍스트 문자열 |
상태 | 문자열 | 콤마로 구분된 NEW,ESTABLISHED,RELATED,INVALID 또는 NONE |
ipset | 문자열 | libvirt 외부에서 관리되는 IPSet의 이름입니다. |
ipsetflags | IPSETFLAGS | IPSet의 플래그: ipset 속성 필요 |
17.14.10.9. IGMP, ESP, AH, UDPLITE, 'ALL'
표 17.11. IGMP, ESP, AH, UDPLITE, 'ALL'
특성 이름 | datatype | 정의 |
---|---|---|
OSSMmacaddr | MAC_ADDR | 보낸 사람의 MAC 주소 |
OSSMmacmask | MAC_MASK | 보낸 사람의 MAC 주소에 적용되는 마스크 |
dstmacaddr | MAD_ADDR | 대상의 MAC 주소 |
dstmacmask | MAC_MASK | 대상의 MAC 주소에 적용되는 마스크 |
OSSMipaddr | IP_ADDR | 소스 IP 주소 |
Golangipmask | IP_MASK | 소스 IP 주소에 적용되는 마스크 |
dstipaddr | IP_ADDR | 대상 IP 주소 |
dstipmask | IP_MASK | 대상 IP 주소에 적용되는 마스크 |
OSSMipfrom | IP_ADDR | 소스 IP 주소 범위 시작 |
scripto | IP_ADDR | 소스 IP 주소 범위 종료일 |
dstipfrom | IP_ADDR | 대상 IP 주소 범위 시작 |
dstipto | IP_ADDR | 대상 IP 주소 범위 종료일 |
설명 | 문자열 | 최대 256자까지의 텍스트 문자열 |
상태 | 문자열 | 콤마로 구분된 NEW,ESTABLISHED,RELATED,INVALID 또는 NONE |
ipset | 문자열 | libvirt 외부에서 관리되는 IPSet의 이름입니다. |
ipsetflags | IPSETFLAGS | IPSet의 플래그: ipset 속성 필요 |
17.14.10.10. IPV6을 통한 TCP/UDP/SCTP
표 17.12. IPv6 프로토콜 유형 TCP, UDP, SCTP over IPv6 프로토콜 유형
특성 이름 | datatype | 정의 |
---|---|---|
OSSMmacaddr | MAC_ADDR | 보낸 사람의 MAC 주소 |
OSSMipaddr | IP_ADDR | 소스 IP 주소 |
Golangipmask | IP_MASK | 소스 IP 주소에 적용되는 마스크 |
dstipaddr | IP_ADDR | 대상 IP 주소 |
dstipmask | IP_MASK | 대상 IP 주소에 적용되는 마스크 |
OSSMipfrom | IP_ADDR | 소스 IP 주소 범위 시작 |
scripto | IP_ADDR | 소스 IP 주소 범위 종료일 |
dstipfrom | IP_ADDR | 대상 IP 주소 범위 시작 |
dstipto | IP_ADDR | 대상 IP 주소 범위 종료일 |
srcportstart | UINT16 | 유효한 소스 포트 범위 시작 |
OSSMportend | UINT16 | 유효한 소스 포트 범위 종료일 |
dstportstart | UINT16 | 유효한 대상 포트 범위 시작 |
dstportend | UINT16 | 유효한 대상 포트 범위 종료일 |
설명 | 문자열 | 최대 256자까지의 텍스트 문자열 |
상태 | 문자열 | 콤마로 구분된 NEW,ESTABLISHED,RELATED,INVALID 또는 NONE |
ipset | 문자열 | libvirt 외부에서 관리되는 IPSet의 이름입니다. |
ipsetflags | IPSETFLAGS | IPSet의 플래그: ipset 속성 필요 |
17.14.10.11. ICMPv6
표 17.13. ICMPv6 프로토콜 유형
특성 이름 | datatype | 정의 |
---|---|---|
OSSMmacaddr | MAC_ADDR | 보낸 사람의 MAC 주소 |
OSSMipaddr | IP_ADDR | 소스 IP 주소 |
Golangipmask | IP_MASK | 소스 IP 주소에 적용되는 마스크 |
dstipaddr | IP_ADDR | 대상 IP 주소 |
dstipmask | IP_MASK | 대상 IP 주소에 적용되는 마스크 |
OSSMipfrom | IP_ADDR | 소스 IP 주소 범위 시작 |
scripto | IP_ADDR | 소스 IP 주소 범위 종료일 |
dstipfrom | IP_ADDR | 대상 IP 주소 범위 시작 |
dstipto | IP_ADDR | 대상 IP 주소 범위 종료일 |
type | UINT16 | ICMPv6 유형 |
코드 | UINT16 | ICMPv6 코드 |
설명 | 문자열 | 최대 256자까지의 텍스트 문자열 |
상태 | 문자열 | 콤마로 구분된 NEW,ESTABLISHED,RELATED,INVALID 또는 NONE |
ipset | 문자열 | libvirt 외부에서 관리되는 IPSet의 이름입니다. |
ipsetflags | IPSETFLAGS | IPSet의 플래그: ipset 속성 필요 |
17.14.10.12. IGMP, ESP, AH, UDPLITE, 'ALL' over IPv6
표 17.14. IGMP, ESP, AH, UDPLITE, 'ALL' over IPv6 프로토콜 유형
특성 이름 | datatype | 정의 |
---|---|---|
OSSMmacaddr | MAC_ADDR | 보낸 사람의 MAC 주소 |
OSSMipaddr | IP_ADDR | 소스 IP 주소 |
Golangipmask | IP_MASK | 소스 IP 주소에 적용되는 마스크 |
dstipaddr | IP_ADDR | 대상 IP 주소 |
dstipmask | IP_MASK | 대상 IP 주소에 적용되는 마스크 |
OSSMipfrom | IP_ADDR | 소스 IP 주소 범위 시작 |
scripto | IP_ADDR | 소스 IP 주소 범위 종료일 |
dstipfrom | IP_ADDR | 대상 IP 주소 범위 시작 |
dstipto | IP_ADDR | 대상 IP 주소 범위 종료일 |
설명 | 문자열 | 최대 256자까지의 텍스트 문자열 |
상태 | 문자열 | 콤마로 구분된 NEW,ESTABLISHED,RELATED,INVALID 또는 NONE |
ipset | 문자열 | libvirt 외부에서 관리되는 IPSet의 이름입니다. |
ipsetflags | IPSETFLAGS | IPSet의 플래그: ipset 속성 필요 |
17.14.11. 고급 필터 구성 주제
17.14.11.1. 연결 추적
예 17.9. TCP 포트에 대한 연결을 끄는 XML 예
[...] <rule direction='in' action='accept' statematch='false'> <cp dstportstart='12345'/> </rule> [...]
17.14.11.2. 연결 수 제한
예 17.10. 연결 제한을 설정하는 XML 샘플 파일
[...] <rule action='drop' direction='in' priority='400'> <tcp connlimit-above='1'/> </rule> <rule action='accept' direction='in' priority='500'> <tcp dstportstart='22'/> </rule> <rule action='drop' direction='out' priority='400'> <icmp connlimit-above='1'/> </rule> <rule action='accept' direction='out' priority='500'> <icmp/> </rule> <rule action='accept' direction='out' priority='500'> <udp dstportstart='53'/> </rule> <rule action='drop' direction='inout' priority='1000'> <all/> </rule> [...]
sysfs
에서 시간 초과를 조정하는 것입니다. # echo 3 > /proc/sys/net/netfilter/nf_conntrack_icmp_timeout. 이 명령은 ICMP 연결 추적 타임아웃을 3초로 설정합니다. 이 문제는 한 ping이 종료되면 3초 후에 또 다른 ping을 시작할 수 있다는 것입니다.
17.14.11.3. 명령줄 툴
nwfilter
로 시작합니다. 다음 명령을 사용할 수 있습니다.
- nwfilter-list : 모든 네트워크 필터의 UUID 및 이름을 나열
- nwfilter-define : 새 네트워크 필터를 정의하거나 기존 네트워크 필터를 업데이트 (이름을 제공해야 함)
- nwfilter-undefine : 지정된 네트워크 필터를 삭제합니다(이름을 제공해야 함). 현재 사용 중인 네트워크 필터를 삭제하지 마십시오.
- nwfilter-dumpxml : 지정된 네트워크 필터를 표시합니다 (이름을 제공해야 함)
- nwfilter-edit : 지정된 네트워크 필터를 편집 (이름을 제공해야 함)
17.14.11.4. 기존 네트워크 필터
표 17.15. ICMPv6 프로토콜 유형
프로토콜 이름 | 설명 |
---|---|
allow-arp | 게스트 가상 머신에 들어오고 나가는 Address Resolution Protocol(ARP) 트래픽을 모두 허용합니다. |
no-arp-spoofing , no-arp-mac-spoofing , and no-arp-ip-spoofing | 이러한 필터를 사용하면 게스트 가상 머신이 ARP 트래픽을 스푸핑하지 않습니다. 또한 ARP 요청 및 응답 메시지만 허용하고 해당 패킷에 다음이 포함됩니다.
|
low-dhcp | 게스트 가상 머신에서 DHCP를 통해 (DHCP 서버)를 통해 IP 주소를 요청할 수 있습니다. |
low-dhcp-server | 게스트 가상 시스템에서 지정된 DHCP 서버의 IP 주소를 요청할 수 있습니다. DHCP 서버의 점으로 구성된 10진수 IP 주소는 이 필터에 대한 참조로 제공되어야 합니다. 변수 이름은 DHCPSERVER 여야 합니다. |
low-ipv4 | 가상 머신에 들어오고 나가는 모든 IPv4 트래픽을 허용합니다. |
low-incoming-ipv4 | 가상 머신에 들어오는 IPv4 트래픽만 허용합니다. 이 필터는 클린 트래픽 필터의 일부입니다. |
no-ip-spoofing | 게스트 가상 머신이 패킷 내부와 다른 소스 IP 주소로 IP 패킷을 전송하지 못하도록 합니다. 이 필터는 클린 트래픽 필터의 일부입니다. |
no-ip-multicast | 게스트 가상 머신이 IP 멀티 캐스트 패킷을 전송하지 못하도록 합니다. |
no-mac-broadcast | 지정된 MAC 주소로 발신 IPv4 트래픽을 방지합니다. 이 필터는 클린 트래픽 필터의 일부입니다. |
no-other-l2-traffic | 네트워크에서 사용하는 다른 필터에서 지정한 트래픽을 제외한 모든 계층 2 네트워킹 트래픽을 차단합니다. 이 필터는 클린 트래픽 필터의 일부입니다. |
no-other-rarp-traffic , qemu-announce-self , qemu-announce-self-rarp | 이러한 필터를 사용하면 QEMU의 RRP(self-announce Reverse Address Resolution Protocol) 패킷을 허용하지만 다른 모든 RARP 트래픽을 방지할 수 있습니다. 모두 깔끔한 트래픽 필터에 포함되어 있습니다. |
clean-traffic | MAC, IP 및 ARP 스푸핑을 방지합니다. 이 필터는 다른 여러 필터를 빌딩 블록으로 참조합니다. |
17.14.11.5. 자체 필터 작성
- mac
- STP (spanning tree protocol)
- VLAN(802.1Q)
- arp, rarp
- ipv4
- ipv6
예 17.11. 사용자 정의 필터 생성
- VM의 인터페이스가 MAC, IP 및 ARP 스푸핑에서 방지
- VM 인터페이스의 TCP 포트 22 및 80만 엽니 다
- VM이 인터페이스에서 ping 트래픽을 보낼 수 있지만 VM이 인터페이스에서 ping을 ping하도록 허용하지 않음
- VM에서 DNS 조회를 수행할 수 있음(포트 53으로 UDP)
clean-traffic
네트워크 필터에 의해 충족되므로 이를 수행하는 방법은 사용자 정의 필터에서 참조하는 것입니다.
test
라고 하고 필터를 eth0
과 연결하는 인터페이스를 가정하면 필터 이름이 test-eth0
라고 합니다.
<filter name='test-eth0'> <!- - This rule references the clean traffic filter to prevent MAC, IP and ARP spoofing. By not providing an IP address parameter, libvirt will detect the IP address the guest virtual machine is using. - -> <filterref filter='clean-traffic'/> <!- - This rule enables TCP ports 22 (ssh) and 80 (http) to be reachable - -> <rule action='accept' direction='in'> <tcp dstportstart='22'/> </rule> <rule action='accept' direction='in'> <tcp dstportstart='80'/> </rule> <!- - This rule enables general ICMP traffic to be initiated by the guest virtual machine including ping traffic - -> <rule action='accept' direction='out'> <icmp/> </rule>> <!- - This rule enables outgoing DNS lookups using UDP - -> <rule action='accept' direction='out'> <udp dstportstart='53'/> </rule> <!- - This rule drops all other traffic - -> <rule action='drop' direction='inout'> <all/> </rule> </filter>
17.14.11.6. 샘플 사용자 정의 필터
예 17.12. 네트워크 인터페이스 설명을 위한 XML 샘플
[...] <interface type='bridge'> <source bridge='mybridge'/> <filterref filter='test-eth0'/> </interface> [...]
<!- - enable outgoing ICMP echo requests- -> <rule action='accept' direction='out'> <icmp type='8'/> </rule>
<!- - enable incoming ICMP echo replies- -> <rule action='accept' direction='in'> <icmp type='0'/> </rule>
예 17.13. 두 번째 예제 사용자 정의 필터
- 게스트 가상 머신의 인터페이스가 MAC, IP, ARP 스푸핑에서 방지
- 게스트 가상 머신의 인터페이스에서 TCP 포트 22 및 80만 엽니 다
- 게스트 가상 시스템이 인터페이스에서 ping 트래픽을 보낼 수 있지만 인터페이스에서 게스트 가상 시스템을 ping하는 것을 허용하지 않습니다.
- 게스트 가상 머신이 DNS 조회를 수행할 수 있도록 허용 (UDP 포트 53으로)
- 게스트 가상 머신 내에서 실행할 수 있도록 ftp 서버(활성 모드)를 활성화합니다.
<filter name='test-eth0'>
<!- - This filter (eth0) references the clean traffic
filter to prevent MAC, IP, and ARP spoofing. By not providing an IP address parameter, libvirt will detect the IP address the guest virtual machine is using. - ->
<filterref filter='clean-traffic'/>
<!- - This rule enables TCP port 21 (FTP-control) to be reachable - ->
<rule action='accept' direction='in'>
<tcp dstportstart='21'/>
</rule>
<!- - This rule enables TCP port 20 for guest virtual machine-initiated FTP data connection related to an existing FTP control connection - ->
<rule action='accept' direction='out'>
<tcp srcportstart='20' state='RELATED,ESTABLISHED'/>
</rule>
<!- - This rule accepts all packets from a client on the FTP data connection - ->
<rule action='accept' direction='in'>
<tcp dstportstart='20' state='ESTABLISHED'/>
</rule>
<!- - This rule enables TCP port 22 (SSH) to be reachable - ->
<rule action='accept' direction='in'>
<tcp dstportstart='22'/>
</rule>
<!- -This rule enables TCP port 80 (HTTP) to be reachable - ->
<rule action='accept' direction='in'>
<tcp dstportstart='80'/>
</rule>
<!- - This rule enables general ICMP traffic to be initiated by the guest virtual machine, including ping traffic - ->
<rule action='accept' direction='out'>
<icmp/>
</rule>
<!- - This rule enables outgoing DNS lookups using UDP - ->
<rule action='accept' direction='out'>
<udp dstportstart='53'/>
</rule>
<!- - This rule drops all other traffic - ->
<rule action='drop' direction='inout'>
<all/>
</rule>
</filter>
- modprobe nf_conntrack_ftp - 사용 가능한 경우
- 위의 모듈을 사용할 수 없는 경우 modprobe ip_conntrack_ftp
<filter name='test-eth0'>
<!- - This filter references the clean traffic
filter to prevent MAC, IP and ARP spoofing. By not providing and IP address parameter, libvirt will detect the IP address the VM is using. - ->
<filterref filter='clean-traffic'/>
<!- - This rule allows the packets of all previously accepted connections to reach the guest virtual machine - ->
<rule action='accept' direction='in'>
<all state='ESTABLISHED'/>
</rule>
<!- - This rule allows the packets of all previously accepted and related connections be sent from the guest virtual machine - ->
<rule action='accept' direction='out'>
<all state='ESTABLISHED,RELATED'/>
</rule>
<!- - This rule enables traffic towards port 21 (FTP) and port 22 (SSH)- ->
<rule action='accept' direction='in'>
<tcp dstportstart='21' dstportend='22' state='NEW'/>
</rule>
<!- - This rule enables traffic towards port 80 (HTTP) - ->
<rule action='accept' direction='in'>
<tcp dstportstart='80' state='NEW'/>
</rule>
<!- - This rule enables general ICMP traffic to be initiated by the guest virtual machine, including ping traffic - ->
<rule action='accept' direction='out'>
<icmp state='NEW'/>
</rule>
<!- - This rule enables outgoing DNS lookups using UDP - ->
<rule action='accept' direction='out'>
<udp dstportstart='53' state='NEW'/>
</rule>
<!- - This rule drops all other traffic - ->
<rule action='drop' direction='inout'>
<all/>
</rule>
</filter>
17.14.12. 제한 사항
- VM 마이그레이션은 게스트 가상 시스템의 최상위 필터에서 참조하는 전체 필터 트리를 대상 호스트 물리적 시스템에서 사용할 수 있는 경우에만 지원됩니다. 예를 들어 네트워크 필터
정리 트래픽
은 모든 libvirt 설치에서 사용할 수 있어야 하므로 이 필터를 참조하는 게스트 가상 머신을 마이그레이션할 수 있어야 합니다. 버전 호환성을 보장하기 위해서는 패키지를 정기적으로 업데이트하여 가장 최신 버전의 libvirt를 사용하고 있는지 확인하는 데 문제가 없습니다. - 인터페이스와 연결된 네트워크 트래픽 필터를 손실하지 않으려면 버전 0.8.1 이상의 libvirt insallation 간에 마이그레이션이 수행되어야 합니다.
- 게스트 가상 머신에서 전송되는 VLAN(802.1Q) 패킷은 프로토콜 ID arp, rarp, ipv4 및 ipv6 규칙에 따라 필터링할 수 없습니다. 프로토콜 ID, MAC 및 VLAN만 필터링할 수 있습니다. 따라서 filter clean-traffic 예 17.1. “네트워크 필터링의 예” 예제가 예상대로 작동하지 않습니다.
17.15. 터널 생성
17.15.1. 멀티 캐스트 터널 생성
<devices>
요소에 배치합니다.
그림 17.28. 멀티 캐스트 터널 도메인 XMl 예
... <devices> <interface type='mcast'> <mac address='52:54:00:6d:90:01'> <source address='230.0.0.1' port='5558'/> </interface> </devices> ...
17.15.2. TCP 터널 생성
<devices>
요소에 배치합니다.
그림 17.29. TCP 터널 도메인 XMl 예
... <devices> <interface type='server'> <mac address='52:54:00:22:c9:42'> <source address='192.168.0.1' port='5558'/> </interface> ... <interface type='client'> <mac address='52:54:00:8b:c9:51'> <source address='192.168.0.1' port='5558'/> </interface> </devices> ...
17.16. vLAN 태그 설정
그림 17.30. v setting VLAN 태그(네트워크 유형만 지원됨)
<network> <name>ovs-net</name> <forward mode='bridge'/> <bridge name='ovsbr0'/> <virtualport type='openvswitch'> <parameters interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/> </virtualport> <vlan trunk='yes'> <tag id='42' nativeMode='untagged'/> <tag id='47'/> </vlan> <portgroup name='dontpanic'> <vlan> <tag id='42'/> </vlan> </portgroup> </network>
<vlan>
요소는 이 네트워크를 사용하여 모든 게스트의 트래픽에 적용할 one or more vlan 태그를 지정할 수 있습니다. (openvswitch 및 type='hostdev의 SR-IOV 네트워크는 게스트 트래픽의 투명한 vlan 태그 지정을 지원합니다. 표준 linux 브리지 및 libvirt의 자체 가상 네트워크를 포함한 모든 항목을 지원합니다. 802.1QBH(vn-link) 및 802.1Qbg(VEPA) 스위치는 게스트 트래픽을 특정 vlan에 태그하는 고유한 방법( libvirt 제외)을 제공합니다. 예상대로 tag 속성은 사용할 vlan 태그를 지정합니다. 네트워크에 둘 이상의 <vlan>
요소가 정의되어 있는 경우 사용자가 지정된 모든 태그를 사용하여 VLAN 트렁크를 수행하려는 것으로 가정합니다. 단일 태그로 vlan 트렁킹이 필요한 경우 선택 사항인 trunk='yes'를 vlan 요소에 추가할 수 있습니다.
<태그>
요소에서 선택적 nativeMode 특성을 사용합니다. nativeMode는 'tagged' 또는 'untagged'로 설정할 수 있습니다. 요소의 id 속성은 네이티브 vlan을 설정합니다.
<VLAN>
요소는 도메인의 <인터페이스>
요소에서 직접 및 <portgroup>
요소에서 지정할 수도 있습니다. vlan 태그가 여러 위치에 지정되면 <인터페이스>
구성에 의해 선택된 <portgroup>
의 설정이 우선합니다. <network>
의 <vlan>
은 <portgroup>
또는 <interface>
에 없는 경우에만 선택됩니다.
17.17. 가상 네트워크에 QoS 적용
18장. 게스트의 원격 관리
18.1. 전송 모드
TLS(Transport Layer Security)
SSL 3.1(Transport Layer Security TLS 1.0) 인증 및 암호화된 TCP/IP 소켓은 일반적으로 공용 포트 번호에서 수신 대기합니다. 이를 사용하려면 클라이언트 및 서버 인증서를 생성해야 합니다. 표준 포트는 16514입니다. 자세한 내용은 18.3절. “TLS 및 SSL을 통한 원격 관리” 에서 참조하십시오.
SSH
SSH(Secure Shell Protocol) 연결을 통해 전송되었습니다. libvirt 데몬(libvirtd)이 원격 시스템에서 실행 중이어야 합니다. SSH 액세스를 위해서는 포트 22가 열려 있어야 합니다. SSH 키 관리 (예: ssh-agent 유틸리티)를 사용하거나 암호를 입력하라는 메시지가 표시됩니다. 자세한 내용은 18.2절. “SSH를 사용한 원격 관리” 에서 참조하십시오.
UNIX 소켓
UNIX 도메인 소켓은 로컬 시스템에서만 액세스할 수 있습니다. 소켓은 암호화되지 않으며 인증에 UNIX 권한 또는 SELinux를 사용합니다. 표준 소켓 이름은 /var/run/libvirt/libvirt-sock
및 /var/run/libvirt/libvirt-sock-ro
입니다( 읽기 전용 연결의 경우).
ext
ext
매개 변수는 libvirt 범위를 벗어나는 원격 머신에 연결할 수 있는 모든 외부 프로그램에 사용됩니다. 이 매개변수는 지원되지 않습니다.
TCP
암호화되지 않은 TCP/IP 소켓입니다. 프로덕션 용도에는 권장되지 않지만 일반적으로 비활성화되어 있지만 관리자는 신뢰할 수 있는 네트워크를 통해 테스트하거나 사용할 수 있도록 설정할 수 있습니다. 기본 포트는 16509입니다.
원격 URI
URI(Uniform Resource Identifier)는 virsh 및 libvirt 가 원격 호스트에 연결하는 데 사용됩니다. 또한 virsh 명령의 --connect 매개 변수와 함께 URI를 사용하여 원격 호스트에서 단일 명령 또는 마이그레이션을 실행할 수 있습니다. 원격 URI는 일반 로컬 URI를 사용하고 호스트 이름 또는 전송 이름 또는 둘 다를 추가하여 구성됩니다. 특별한 경우 'remote'의 URI 스키마를 사용하면 원격 libvirtd 서버에서 최적의 하이퍼바이저 드라이버를 검색하도록 지시합니다. 로컬 연결에 대한 null URI를 전달하는 것과 같습니다.
driver[+transport]://[username@][hostname][:port]/path[?extraparameters]
- QEMU://hostname/
원격 관리 매개변수의 예
- SSH 전송 및 SSH 사용자 이름
virtuser
를 사용하여host2
라는 원격 KVM 호스트에 연결합니다. 각각에 대한 connect 명령은 connect [URI] [-readonly] 입니다. virsh connect 명령에 대한 자세한 내용은 다음을 참조하십시오. 20.4절. “virsh Connect를 사용하여 하이퍼바이저에 연결”qemu+ssh://virtuser@host2/
- TLS를 사용하여
host2
라는 호스트의 원격 KVM 하이퍼바이저에 연결합니다.qemu://host2/
예제 테스트
- 비표준 UNIX 소켓을 사용하여 로컬 KVM 하이퍼바이저에 연결합니다. 이 경우 UNIX 소켓의 전체 경로가 명시적으로 제공됩니다.
qemu+unix:///system?socket=/opt/libvirt/run/libvirt/libvirt-sock
- 포트 5000에서 IP 주소 10.1.1.10이 있는 서버에 연결되지 않은 TCP/IP 연결을 사용하여 libvirt 데몬에 연결합니다. 이 명령은 기본 설정으로 테스트 드라이버를 사용합니다.
test+tcp://10.1.1.10:5000/default
추가 URI 매개변수
추가 매개 변수를 원격 URI에 추가할 수 있습니다. 아래 표에서 인식되는 매개 변수를 설명합니다. 다른 모든 매개변수는 무시됩니다. 매개변수 값은 매개 변수 및 특수 문자가 URI 형식으로 변환되기 전에 URI-escaped(즉, 물음표(?)가 추가되어야 합니다.
표 18.1. 추가 URI 매개변수
이름 | 전송 모드 | 설명 | 사용 예 |
---|---|---|---|
name | 모든 모드 | 원격 virConnectOpen 함수에 전달된 이름입니다. 이름은 일반적으로 전송 ,호스트 이름 ,포트 번호 ,사용자 이름 , 사용자 이름 및 원격 URI에서 추가 매개 변수를 제거 하 여 형성되지만, 경우에 따라 이름을 명시적으로 제공하는 것이 좋습니다. | name=qemu:///system |
명령 | SSH 및 ext | 외부 명령. ext 전송의 경우 이 작업이 필요합니다. ssh의 경우 기본값은 ssh입니다. PATH가 명령을 검색합니다. | command=/opt/openssh/bin/ssh |
socket | UNIX 및 ssh | UNIX 도메인 소켓의 경로를 통해 기본값을 덮어씁니다. ssh 전송의 경우 이 값은 원격 netcat 명령에 전달됩니다( netcat 참조). | socket=/opt/libvirt/run/libvirt/libvirt-sock |
no_verify | tls | 0이 아닌 값으로 설정하면 서버 인증서의 클라이언트 검사가 비활성화됩니다. 클라이언트 인증서 또는 IP 주소의 서버 확인을 비활성화하려면 libvirtd 구성을 변경해야 합니다. | no_verify=1 |
no_tty | ssh | 0이 아닌 값으로 설정하면 ssh가 암호를 요청하지 않고 원격 시스템에 자동으로 로그인할 수 없는 경우 가 자동으로 중지됩니다. 터미널에 액세스할 수 없는 경우 을 사용합니다. | no_tty=1 |
18.2. SSH를 사용한 원격 관리
ssh
패키지는 원격 가상화 서버에 관리 기능을 안전하게 보낼 수 있는 암호화된 네트워크 프로토콜을 제공합니다. 아래에 설명된 방법은 SSH 연결을 통해 안전하게 터널링된 libvirt 관리 연결을 사용하여 원격 시스템을 관리합니다. 모든 인증은 로컬 SSH 에이전트에서 수집한 SSH 공개 키 암호화 및 암호 또는 암호를 사용하여 수행됩니다. 또한 각 게스트의 VNC 콘솔은 SSH 를 통해 터널링됩니다.
- 가상 머신을 관리하려면 원격 머신에 대한 루트 로그인 권한이 필요합니다.
- 초기 연결 설정 프로세스가 느려질 수 있습니다.
- 모든 호스트 또는 게스트에서 사용자 키를 취소하는 표준 또는 간단한 방법은 없습니다.
- SSH 는 많은 수의 원격 시스템에서 제대로 확장되지 않습니다.
- openssh
- openssh-askpass
- openssh-clients
- openssh-server
virt-manager에 대한 암호 없는 또는 암호 관리 SSH 액세스 구성
다음 명령은 처음부터 시작하고 SSH 키가 설정되어 있지 않다고 가정합니다. SSH 키를 다른 시스템에 설정 및 복사한 경우 이 절차를 건너뛸 수 있습니다.
선택 사항: 사용자 변경
필요한 경우 사용자를 변경합니다. 이 예에서는 로컬 root 사용자를 사용하여 다른 호스트 및 로컬 호스트를 원격으로 관리합니다.$ su -
SSH 키 쌍 생성
virt-manager 가 사용되는 시스템에서 공개 키 쌍을 생성합니다. 이 예에서는~/.ssh/
디렉터리의 기본 키 위치를 사용합니다.# ssh-keygen -t rsa
원격 호스트에 키 복사
암호 없이 원격 로그인하거나 암호를 사용하여 SSH 키를 관리 중인 시스템에 배포해야 합니다. ssh-copy-id 명령을 사용하여 제공된 시스템 주소의 root 사용자에게 키를 복사합니다(예:root@host2.example.com)
.# ssh-copy-id -i ~/.ssh/id_rsa.pub root@host2.example.com root@host2.example.com's password:
그런 다음 머신에 로그인하고.ssh/authorized_keys
파일을 확인하여 예기치 않은 키가 추가되지 않았는지 확인합니다.ssh root@host2.example.com
필요에 따라 다른 시스템에 대해 반복합니다.선택 사항: ssh-agent에 암호를 추가합니다.
필요한 경우 SSH 키의 pass-phrase를 ssh-agent 에 추가합니다. 로컬 호스트에서 다음 명령을 사용하여 암호가 없는 로그인을 활성화하려면 pass-phrase(한 번 있는 경우)를 추가합니다.# ssh-add ~/.ssh/id_rsa
ssh-agent가 실행되지 않으면 이 명령이 실행되지 않습니다. 오류 또는 충돌을 방지하려면 SSH 매개변수가 올바르게 설정되어 있는지 확인합니다. 자세한 내용은 Red Hat Enterprise System Administration Guide 를 참조하십시오.
libvirt 데몬 (libvirtd
)
libvirt
데몬은 가상 머신을 관리하기 위한 인터페이스를 제공합니다. 이러한 방식으로 관리하려는 모든 원격 호스트에 libvirtd
데몬을 설치하고 실행해야 합니다.
$ ssh root@somehost # systemctl enable libvirtd.service # systemctl start libvirtd.service
libvirtd
및 SSH 를 구성한 후에는 가상 시스템에 원격으로 액세스하고 관리할 수 있습니다. 이 시점에서 VNC
를 사용하여 게스트에 액세스할 수도 있습니다.
virt-manager를 사용하여 원격 호스트에 액세스
원격 호스트는 virt-manager GUI 도구를 사용하여 관리할 수 있습니다. 암호 없이 로그인하려면 SSH 키가 virt-manager 를 실행하는 사용자에 속해야 합니다.
- virt-manager 를 시작합니다.
- 파일 추가 연결 메뉴를 엽니다.
그림 18.1. 연결 메뉴 추가
- 드롭다운 메뉴를 사용하여 하이퍼바이저 유형을 선택하고 원격 호스트에 연결 확인란을 클릭하여 연결 방법 (이 경우 SSH를 통한 원격 터널)을 열고 사용자 이름과 호스트 이름을 입력한 다음 연결을 클릭합니다.
18.3. TLS 및 SSL을 통한 원격 관리
절차 18.1. TLS 관리를 위한 CA(인증 기관) 키 생성
- 시작하기 전에 gnutls-utils 가 설치되었는지 확인합니다. 그렇지 않은 경우 설치합니다.
# yum install gnutls-utils
- 다음 명령을 사용하여 개인 키를 생성합니다.
# certtool --generate-privkey > cakey.pem
- 키가 생성된 후 자체 서명할 수 있도록 서명 파일을 만듭니다. 이렇게 하려면 서명 세부 정보를 사용하여 파일을 생성하고 이름을
ca.info
로 지정합니다. 이 파일에는 다음이 포함되어야 합니다.cn = Name of your organization ca cert_signing_key
- 다음 명령을 사용하여 자체 서명된 키를 생성합니다.
# certtool --generate-self-signed --load-privkey cakey.pem --template ca.info --outfile cacert.pem
파일이 생성되면 rm 명령을 사용하여ca.info
파일을 삭제할 수 있습니다. 생성 과정에서 발생하는 파일의 이름은cacert.pem
입니다. 이 파일은 공개 키(certificate)입니다. 로드된 파일cakey.pem
은 개인 키입니다. 보안상의 이유로 이 파일은 비공개로 유지해야 하며 공유 공간에 상주해서는 안 됩니다. /etc/pki/CA/
CA 인증서 파일을 설치하여 CA에서 발급한 인증서를 신뢰할 수 있음을 알립니다. 이 파일의 내용을 보려면 다음을 실행합니다.cacert.pem
디렉터리의 모든 클라이언트 및 서버에 cacert.pem# certtool -i --infile cacert.pem
이는 CA를 설정하는 데 필요한 모든 것입니다. 클라이언트와 서버의 인증서를 발급하기 위해 필요한 경우 CA의 개인 키를 안전하게 유지합니다.
절차 18.2. 서버 인증서 발급
qemu://mycommonname/system
를 사용하여 서버에 연결되므로 CN 필드는 "mycommoname" 예제에 대해 동일해야 합니다.
- 서버의 개인 키를 만듭니다.
# certtool --generate-privkey > serverkey.pem
- 먼저
server.info
라는 템플릿 파일을 생성하여 CA의 개인 키에 대한 서명을 생성합니다. CN이 서버의 호스트 이름과 동일하게 설정되어 있는지 확인합니다.organization = Name of your organization cn = mycommonname tls_www_server encryption_key signing_key
- 인증서를 생성합니다.
# certtool --generate-certificate --load-privkey serverkey.pem --load-ca-certificate cacert.pem --load-ca-privkey cakey.pem \ --template server.info --outfile servercert.pem
이렇게 하면 두 개의 파일이 생성됩니다.- serverkey.pem - 서버의 개인 키
- servercert.pem - 서버의 공개 키
- 개인 키의 위치를 secret로 유지합니다. 파일 내용을 보려면 다음 명령을 사용하십시오.
# certtool -i --infile servercert.pem
이 파일을 열 때CN=
매개 변수는 이전에 설정한 CN과 동일해야 합니다. 예:mycommonname
. - 다음 위치에 두 파일을 설치합니다.
serverkey.pem
- 서버의 개인 키 이 파일을/etc/pki/libvirt/private/serverkey.pem
에 배치합니다.servercert.pem
- 서버의 인증서 서버의 다음 위치에 설치합니다./etc/pki/libvirt/servercert.pem
절차 18.3. 클라이언트 인증서 발급
- 모든 클라이언트(즉, virt-manager와 같이 libvirt와 연결된 모든 프로그램)에 대해 X.509 Distinguished Name(DN) 필드가 적절한 이름으로 설정된 인증서를 발급해야 합니다. 이는 기업 차원에서 결정되어야 합니다.예를 들어 다음과 같은 정보가 사용됩니다.
C=USA,ST=North Carolina,L=Raleigh,O=Red Hat,CN=name_of_client
- 개인 키를 생성합니다.
# certtool --generate-privkey > clientkey.pem
- 먼저
client.info
라는 템플릿 파일을 생성하여 CA의 개인 키에 대한 서명을 생성합니다. 파일에는 다음 내용이 포함되어야 합니다 (필요한 지역/위치를 반영하도록 필드를 사용자 지정해야 함):country = USA state = North Carolina locality = Raleigh organization = Red Hat cn = client1 tls_www_client encryption_key signing_key
- 다음 명령을 사용하여 인증서에 서명합니다.
# certtool --generate-certificate --load-privkey clientkey.pem --load-ca-certificate cacert.pem \ --load-ca-privkey cakey.pem --template client.info --outfile clientcert.pem
- 클라이언트 시스템에 인증서를 설치합니다.
# cp clientkey.pem /etc/pki/libvirt/private/clientkey.pem # cp clientcert.pem /etc/pki/libvirt/clientcert.pem
18.4. VNC 서버 구성
장치
요소에서 VNC를 그래픽 유형으로 지정해야 합니다. 자세한 내용은 23.17.11절. “그래픽 프레임 버퍼” 에서 참조하십시오.
18.5. NSS를 사용하여 가상 머신의 원격 관리 향상
# yum install libvirt-nss
선택적
리포지토리가 활성화되어 있는지 확인합니다. 자세한 내용은 시스템 관리자 가이드를 참조하십시오.
/etc/nsswitch.conf
파일의 hosts
행에 libvirt_guest
를 추가하여 모듈을 활성화합니다.
passwd: compat shadow: compat group: compat hosts: files libvirt_guest dns ...
hosts
행에 모듈이 나열된 순서에 따라 이러한 모듈이 지정된 원격 게스트를 찾는 순서를 결정합니다. 결과적으로 libvirt의 NSS 모듈이 호스트 도메인 이름을 IP 주소로 변환하는 모듈에 추가됩니다. 예를 들어, 정적 IP 주소를 설정하고 게스트의 이름만 사용하지 않고 NAT 모드에서 원격 게스트에 연결할 수 있습니다.
# ssh root@guestname
root@guestname's password:
Last login: Thu Aug 10 09:12:31 2017 from 192.168.122.1
[root@guestname ~]#
19장. Virtual Machine Manager를 사용하여 게스트 관리 (virt-manager)
- 게스트 정의 및 생성
- 메모리를 할당,
- 가상 CPU 할당
- 운영 성능 모니터링
- 게스트의 저장 및 복원, 일시 중지 및 다시 시작
- text 및 그래픽 콘솔에 대한 링크 및
- 실시간 및 오프라인 마이그레이션.
19.1. virt-manager 시작
그림 19.1. virt-manager시작
# ssh -X host's address [remotehost]# virt-manager
19.2. 가상 머신 관리자 메인 창
그림 19.2. 가상 머신 관리자 주요 창
19.3. 가상 하드웨어 세부 정보 창
그림 19.3. 가상 하드웨어 세부 정보 아이콘
그림 19.4. 가상 하드웨어 세부 정보 창
19.3.1. 게스트 가상 머신에 부팅 옵션 적용
절차 19.1. 부팅 옵션 구성
- 가상 머신 관리자 편집 메뉴에서 가상 머신 세부 정보를 선택합니다.
- 측면 패널에서 Boot Options 를 선택한 다음 다음 선택적 단계를 완료하십시오.
- 호스트 물리적 시스템이 부팅될 때마다 이 게스트 가상 시스템이 시작되어야 함을 나타내기 위해 Autostart (자동 시작) 확인란을 선택합니다.
- 게스트 가상 머신을 부팅해야 하는 순서를 지정하려면 부팅 활성화 메뉴 확인란을 클릭합니다. 이 값을 확인한 후 화살표 키를 사용하여 부팅하려는 장치를 확인하고 화살표 키를 사용하면 부팅 시 게스트 가상 머신이 사용되는 순서가 변경됩니다.
- Linux 커널에서 직접 부팅하려면 Direct 커널 부팅 메뉴를 확장합니다. 커널 경로, Initrd 경로 및 사용하려는 커널 인수를 입력합니다.
- Apply(적용)를 클릭합니다.
그림 19.5. 부팅 옵션 구성
19.3.2. 게스트 가상 머신에 USB 장치 연결
절차 19.2. Virt-Manager를 사용하여 USB 장치 연결
- 게스트 가상 머신의 가상 머신 세부 정보 화면을 엽니다.
- 하드웨어 추가를클릭합니다.
- Add New Virtual Hardware (새 가상 하드웨어 추가) 팝업에서 USB Host Device 를 선택하고, 목록에서 연결할 장치를 선택하고 Finish 를 클릭합니다.
그림 19.6. USB 장치 추가
- 게스트 가상 머신에서 USB 장치를 사용하려면 게스트 가상 머신을 시작합니다.
19.3.3. USB Redirection
절차 19.3. USB 장치 리디렉션
- 게스트 가상 머신의 가상 머신 세부 정보 화면을 엽니다.
- 하드웨어 추가를클릭합니다.
- Add New Virtual Hardware (새 가상 하드웨어 추가) 팝업에서 USB 리디렉션 을 선택합니다. 유형 드롭다운 메뉴에서 Spice 채널을 선택하고 Finish 를 클릭합니다.
그림 19.7. 새 가상 하드웨어 추가 창
- 가상 머신 메뉴를 열고 Redirect USB 장치를 선택합니다. USB 장치 목록이 포함된 팝업 창이 열립니다.
그림 19.8. USB 장치 선택
- 확인란을 선택하여 리디렉션을 위한 USB 장치를 선택하고 확인을 클릭합니다.
19.4. 가상 머신 그래프 콘솔
그림 19.9. 그래픽 콘솔 창
127.0.0.1
)만 수신 대기합니다. 이렇게 하면 호스트에서 쉘 권한이 있는 사용자만 VNC를 통해 virt-manager 및 가상 머신에 액세스할 수 있습니다. virt-manager는 다른 공용 네트워크 인터페이스 및 대체 방법을 구성할 수 있도록 구성되어 있지만 구성하는 것은 권장되지 않습니다.
19.5. 원격 연결 추가
- 새 연결을 만들려면 파일 메뉴를 열고 연결 추가 메뉴 항목을 선택합니다.
- 연결 추가 마법사가 나타납니다. 하이퍼바이저를 선택합니다. Red Hat Enterprise Linux 7 시스템의 경우 QEMU/KVM 을 선택합니다. 로컬 시스템 또는 원격 연결 옵션 중 하나에 대해 Local 을 선택하고 연결을 클릭합니다. 이 예에서는 기본 설치에서 작동하는 SSH를 통한 원격 터널을 사용합니다. 원격 연결 구성에 대한 자세한 내용은 다음을 참조하십시오. 18장. 게스트의 원격 관리
그림 19.10. 연결 추가
- 메시지가 표시되면 선택한 호스트의 root 암호를 입력합니다.
그림 19.11. 주요 virt-manager 창에서 원격 호스트
19.6. 게스트 세부 정보 표시
- Virtual Machine Manager 메인 창에서 보려는 가상 머신을 강조 표시합니다.
그림 19.12. 표시할 가상 머신 선택
- 가상 머신 관리자 편집 메뉴에서 가상 머신 세부 정보를 선택합니다.가상 머신 세부 정보 창이 열리면 콘솔이 표시될 수 있습니다. 이 경우 보기를 클릭한 다음 세부 정보를 선택합니다. 개요 창이 기본적으로 열립니다. 왼쪽 창에 있는 탐색 창에서 개요를 선택합니다.Select Overview from the navigation pane on the left-hand side.개요 보기에 게스트에 대한 구성 세부 정보가 요약되어 있습니다.
그림 19.13. 게스트 세부 정보 개요 표시
- 왼쪽의 탐색 창에서 CPU 를 선택합니다. CPU 보기를 사용하면 현재 프로세서 할당을 보거나 변경할 수 있습니다.가상 머신이 실행되는 동안 가상 CPU(vCPU) 수를 늘릴 수도 있습니다. 이 수는 핫 플러그 라고 합니다.중요Red Hat Enterprise Linux 7에서는 vCPU의 핫 플러그 해제 가 지원되지 않습니다.
그림 19.14. 프로세서 할당 패널
- 왼쪽의 탐색 창에서 Memory 를 선택합니다. 메모리 보기를 사용하면 현재 메모리 할당을 보거나 변경할 수 있습니다.
그림 19.15. 메모리 할당 표시
- 왼쪽의 탐색 창에서 Boot Options 를 선택합니다. Boot Options 보기를 사용하면 호스트가 부팅될 때 가상 머신이 시작되는지 여부와 가상 머신의 부팅 장치 순서에 따라 부팅 옵션을 보거나 변경할 수 있습니다.
그림 19.16. 부팅 옵션 표시
- 가상 머신에 연결된 각 가상 디스크가 탐색 창에 표시됩니다. 가상 디스크를 클릭하여 수정하거나 제거합니다.
그림 19.17. 디스크 구성 표시
- 가상 머신에 연결된 각 가상 네트워크 인터페이스가 탐색 창에 표시됩니다. 가상 네트워크 인터페이스를 클릭하여 수정하거나 제거합니다.
그림 19.18. 네트워크 구성 표시
19.7. 스냅샷 관리
--diskspec vda,snapshot=external
옵션과 함께 virsh snapshot-create-as 명령을 사용합니다. 자세한 내용은 A.13절. “libvirt를 사용하여 외부 스냅샷 생성을 위한 해결방법”의 내용을 참조하십시오.
- virt-manager에서 스냅샷을 관리하려면 게스트 콘솔에서 을 클릭하여 스냅샷 관리 인터페이스를 엽니다.
- 새 스냅샷을 생성하려면 스냅샷 목록에서 를 클릭합니다. 스냅샷 생성 인터페이스에서 스냅샷 이름을 입력하고 선택적으로 설명을 입력한 후 완료 를 클릭합니다.
- 게스트를 스냅샷 구성으로 되돌리려면 스냅샷을 선택하고 클릭합니다.
- 선택한 스냅샷을 제거하려면 클릭합니다.
20장. virsh를 사용하여 게스트 가상 머신 관리
20.1. 게스트 가상 머신 상태 및 유형
- 일시적인 게스트 - 재부팅 후에도 일시 중지되지 않습니다.
- 영구 - 영구 게스트 가상 머신이 재부팅되고 삭제될 때까지 유지됩니다.
- 정의되지 않음 - 정의되거나 생성되지 않은 게스트 가상 머신입니다. 따라서 libvirt 는 이 상태의 게스트를 인식하지 못하며 이 상태의 게스트 가상 머신에 대해 보고하지 않습니다.
- shut off - 정의된 게스트 가상 머신이지만 실행되지 않습니다. 영구 게스트만 종료된 것으로 간주할 수 있습니다. 따라서 일시적인 게스트 가상 머신이 이 상태에 배치되면 더 이상 존재하지 않습니다.
- Running - 이 상태의 게스트 가상 머신이 정의되어 있고 현재 작동 중입니다. 이 상태는 영구 및 임시 게스트 가상 머신과 함께 사용할 수 있습니다.
- paused - 하이퍼바이저에서 게스트 가상 머신 실행이 일시 중지되었거나 다시 시작될 때까지 해당 상태가 일시적으로 저장되었습니다. 이 상태의 게스트 가상 머신은 일시 중단되었음을 인식하지 못하며 다시 시작될 때 시간이 경과했음을 알 수 없습니다.
- saved - 이 상태는 paused 상태와 유사하지만 게스트 가상 머신의 구성은 영구 스토리지에 저장됩니다. 이 상태의 게스트 가상 머신은 일시 중지되었음을 인식하지 못하며 복원되면 시간이 경과되었음을 알 수 없습니다.
20.2. virsh 버전 표시
$ virsh version
Compiled against library: libvirt 1.2.8
Using library: libvirt 1.2.8
Using API: QEMU 1.2.8
Running hypervisor: QEMU 1.5.3
--daemon
은 호스트에서 실행 중인 libvirt 데몬에 대한 정보를 포함하여 libvirtd
버전 및 패키지 정보에 대한 정보를 가져오는 데 유용합니다.
$ virsh version --daemon
Compiled against library: libvirt 1.2.8
Using library: libvirt 1.2.8
Using API: QEMU 1.2.8
Running hypervisor: QEMU 1.5.3
Running against daemon: 1.2.8
20.3. echo를 사용하여 명령 전송
[--shell][--xml] arguments
명령은 지정된 형식으로 지정된 인수를 표시합니다. 사용할 수 있는 형식은 --shell
및 --xml
입니다. 쿼리된 각 인수는 공백으로 구분됩니다. --shell
옵션은 필요한 경우 작은따옴표로 포맷된 출력을 생성하여 명령으로 bash 모드로 복사하고 붙여넣는 데 적합합니다. --xml
인수가 사용되는 경우 출력은 XML 파일에 사용하도록 포맷되어 게스트 구성에 저장되거나 사용할 수 있습니다.
20.4. virsh Connect를 사용하여 하이퍼바이저에 연결
[hostname-or-URI] [--readonly]
명령은 virsh를 사용하여 로컬 하이퍼바이저 세션을 시작합니다. 이 명령을 처음 실행하면 virsh 쉘이 실행될 때마다 자동으로 실행됩니다. 하이퍼바이저 연결 URI는 하이퍼바이저에 연결하는 방법을 지정합니다. 가장 일반적으로 사용되는 URI는 다음과 같습니다.
- QEMU:///system - KVM 하이퍼바이저의 게스트 가상 머신을 감독하는 데몬에 root 사용자로 로컬로 연결합니다.
- QEMU:///session - KVM 하이퍼바이저를 사용하여 사용자의 게스트 로컬 머신 세트에 로컬로 연결합니다.
- LXC:/// - 로컬 Linux 컨테이너에 연결합니다.
$ virsh uri
qemu:///session
$ virsh connect qemu:///session
--readonly
를 사용하여 위의 명령을 추가합니다. URI에 대한 자세한 내용은 원격 URI 을 참조하십시오. URI가 확실하지 않은 경우 virshSPACE 명령은 다음을 표시합니다.
20.5. 게스트 가상 머신 및 Hypervisor에 대한 정보 표시
예 20.1. 로컬로 연결된 모든 가상 머신을 나열하는 방법
# virsh list --all
Id Name State
------------------------------------------------
8 guest1 running
22 guest2 paused
35 guest3 shut off
38 guest4 shut off
예 20.2. 비활성 게스트 가상 머신을 나열하는 방법
# virsh list --inactive
Id Name State
------------------------------------------------
35 guest3 shut off
38 guest4 shut off
- # virsh hostname - 하이퍼바이저의 호스트 이름을 표시합니다. 예를 들면 다음과 같습니다.
# virsh hostname dhcp-2-157.eus.myhost.com
- # virsh sysinfo - 예를 들면 다음과 같이 하이퍼바이저의 시스템 정보의 XML 표현이 표시됩니다.
# virsh sysinfo <sysinfo type='smbios'> <bios> <entry name='vendor'>LENOVO</entry> <entry name='version'>GJET71WW (2.21 )</entry> [...]
20.6. 가상 머신 시작, 다시 시작 및 복원
20.6.1. 게스트 가상 머신 시작
--console
- virsh 를 실행하는 터미널을 도메인의 콘솔 장치에 연결합니다. 실행 수준 3입니다.--paused
- 드라이버에서 이를 지원하는 경우 일시 정지 상태에서 게스트 가상 머신을 시작합니다.--autodestroy
- virsh 연결이 끊어지면 게스트 가상 머신이 자동으로 삭제됩니다.--bypass-cache
- guest 가상 머신이managedsave
에 있는 경우 사용됩니다.--force-boot
- 모든관리 저장
옵션을 삭제하고 새로 부팅됩니다.
예 20.3. 가상 머신 시작 방법
# virsh start guest1 --console
Domain guest1 started
Connected to domain guest1
Escape character is ^]
20.6.2. 부팅 시 자동으로 시작하도록 가상 머신 구성
-disable]
domain 명령은 호스트 시스템이 부팅될 때 게스트 가상 시스템을 자동으로 시작합니다. 이 명령에 --disable
인수를 추가하면 autostart가 비활성화됩니다. 이 경우 게스트는 호스트 물리적 시스템이 부팅될 때 자동으로 시작되지 않습니다.
예 20.4. 호스트 물리적 시스템이 시작될 때 가상 시스템을 자동으로 시작하는 방법
# virsh autostart guest1
20.6.3. 게스트 가상 머신 재부팅
--mode
인수는 acpi
및 agent
가 포함된 쉼표로 구분된 목록을 지정할 수 있습니다. 각 모드를 시도하는 순서는 정의되지 않으며 virsh에 지정된 순서와 관련이 없습니다. 순서를 엄격하게 제어하려면 한 번에 단일 모드를 사용하고 명령을 반복합니다.
예 20.5. 게스트 가상 머신을 재부팅하는 방법
initctl
메서드를 사용하지만 필요에 맞는 모드를 선택할 수 있습니다.
# virsh reboot guest1 --mode initctl
20.6.4. 게스트 가상 머신 복원
--bypass-cache
- 복원을 수행하면 파일 시스템 캐시가 발생하지 않지만 이 플래그를 사용하면 복원 작업이 느려질 수 있습니다.--XML
- 이 인수는 XML 파일 이름과 함께 사용해야 합니다. 이 인수는 일반적으로 생략되지만 도메인 XML의 호스트 특정 부분에만 변경 사항이 있는 복원된 게스트 가상 시스템에서 사용할 대체 XML 파일을 제공하는 데 사용할 수 있습니다. 예를 들어 게스트가 저장된 후 가져온 디스크 스냅샷으로 인해 기본 스토리지의 파일 이름 차이를 설명하는 데 사용할 수 있습니다.--running
- 저장 이미지에 기록된 상태를 재정의하여 게스트 가상 머신을 실행 중으로 시작합니다.--paused
- 저장 이미지에 기록된 상태를 재정의하여 게스트 가상 머신을 일시 중지됨으로 시작합니다.
예 20.6. 게스트 가상 머신을 복원하는 방법
# virsh restore guest1-config.xml --running
20.6.5. 게스트 가상 머신 재시작
예 20.7. 일시 중단된 게스트 가상 머신을 복원하는 방법
# virsh resume guest1
20.7. 가상 머신 구성 관리
20.7.1. 게스트 가상 머신의 구성 저장
qemu
프로세스는 실행 중이고 호스트 시스템에 상주하는 메모리 이미지를 남겨 두는 것입니다. 호스트 시스템이 재부팅되면 이 메모리 이미지가 손실됩니다.
qemu
프로세스를 종료합니다. 이렇게 하면 저장된 상태에서 도메인을 다시 시작할 수 있습니다.
--bypass-cache
- 복원을 수행하면 파일 시스템 캐시가 발생하지 않지만 이 플래그를 사용하면 복원 작업이 느려질 수 있습니다.--XML
- 이 인수는 XML 파일 이름과 함께 사용해야 합니다. 이 인수는 일반적으로 생략되지만 도메인 XML의 호스트 특정 부분에만 변경 사항이 있는 복원된 게스트 가상 시스템에서 사용할 대체 XML 파일을 제공하는 데 사용할 수 있습니다. 예를 들어 게스트가 저장된 후 가져온 디스크 스냅샷으로 인해 기본 스토리지의 파일 이름 차이를 설명하는 데 사용할 수 있습니다.--running
- 저장 이미지에 기록된 상태를 재정의하여 게스트 가상 머신을 실행 중으로 시작합니다.--paused
- 저장 이미지에 기록된 상태를 재정의하여 게스트 가상 머신을 일시 중지됨으로 시작합니다.--verbose
- 저장 진행 상황을 표시합니다.
예 20.8. How to save a guest virtual machine running configuration
guest1-config.xml
파일에 저장합니다.
# virsh save guest1 guest1-config.xml --running
20.7.2. XML 파일을 사용하여 게스트 가상 머신 정의
예 20.9. XML 파일에서 게스트 가상 머신을 만드는 방법
# virsh define guest1-config.xml
20.7.3. 게스트 가상 머신 복원에 사용할 XML 파일 업데이트
--running
또는 --paused
인수를 사용하면 사용할 상태가 지정됩니다.
예 20.10. 게스트 가상 머신의 실행 중인 구성을 저장하는 방법
# virsh save-image-define guest1-config.xml --running
20.7.4. 게스트 가상 머신 XML 파일 추출
--security-info
명령은 저장된 상태 파일( virsh save 명령에서 사용)이 참조되었을 때 적용되는 게스트 가상 머신 XML 파일을 추출합니다. security -info
인수를 사용하면 파일에 중요한 보안 정보가 포함됩니다.
예 20.11. 마지막 저장소에서 XML 구성을 가져오는 방법
# virsh save-image-dumpxml guest1-config.xml
20.7.5. 게스트 가상 머신 구성 편집
[--running ]
[-paused]
명령은 virsh save 명령으로 생성된 XML 구성 파일을 편집합니다. virsh save 명령에 대한 자세한 내용은 20.7.1절. “게스트 가상 머신의 구성 저장” 을 참조하십시오.
--running
또는 --paused
상태로 복원해야 하는지를 나타냅니다. save-image-edit 명령에서 이러한 인수를 사용하지 않으면 이미지 파일 자체에 의해 상태가 결정됩니다. --running
(실행 중 상태 선택) 또는 --paused
(중지됨 상태 선택)를 선택하여 virsh restore 가 사용해야 하는 상태를 덮어쓸 수 있습니다.
예 20.12. 게스트 가상 머신 구성을 편집하고 머신을 실행 상태로 복원하는 방법
# virsh save-image-edit guest1-config.xml --running
20.8. 게스트 가상 머신 종료, 종료, 재부팅 및 종료
20.8.1. 게스트 가상 머신 종료
on_shutdown
매개변수를 수정하여 게스트 가상 머신이 재부팅되는 방식을 제어할 수 있습니다. on_shutdown
매개 변수를 변경하면 도메인이 종료되고 다시 시작된 후에만 적용됩니다.
--mode
는 종료 모드를 선택합니다.acpi
,agent
,initctl
,signal
또는Paravirt
일 수 있습니다.
예 20.13. 게스트 가상 머신을 종료하는 방법
acpi
모드를 사용하여 guest1 가상 머신을 종료합니다.
# virsh shutdown guest1 --mode acpi
Domain guest1 is being shutdown
20.8.2. 게스트 가상 머신 일시 중지
예 20.14. 게스트 가상 머신 일시 중단 방법
# virsh suspend guest1
20.8.3. 가상 머신 재설정
예 20.15. 게스트 가상 머신을 재설정하는 방법
# virsh reset guest1
20.8.4. 실행 중인 게스트 가상 머신을 순서대로 중지하여 다시 시작
--bypass-cache
--running | --paused | --verbose
명령은 나중에 동일한 상태에서 다시 시작할 수 있도록 실행 중인 게스트 가상 시스템을 저장하고 제거(중지)합니다. virsh start 명령과 함께 사용하면 이 저장 지점에서 자동으로 시작됩니다. 이 인수를 --bypass-cache
인수와 함께 사용하는 경우 저장은 파일 시스템 캐시를 사용하지 않습니다. 이 옵션은 저장 프로세스 속도가 느려질 수 있으며 --verbose
옵션을 사용하면 덤프 프로세스의 진행 상황을 표시할 수 있습니다. 정상적인 조건에서 관리 저장은 저장이 완료되면 게스트 가상 머신의 상태에 따라 실행 중이거나 일시 정지됨 상태를 결정할 수 있습니다. 그러나 --running
옵션을 사용하여 실행 중 상태에 남아 있거나 일시 정지됨을 나타내는 --paused
옵션을 사용하여 재정의할 수 있습니다. 관리형 저장 상태를 제거하려면 virsh managedsave-remove 명령을 사용하여 게스트 가상 시스템에서 다음에 시작할 때 전체 부팅을 수행하도록 합니다. 전체 관리 저장 프로세스는 domjobinfo 명령을 사용하여 모니터링할 수 있으며 domjobabort 명령을 사용하여 취소할 수도 있습니다.
예 20.16. 실행 중인 게스트를 중지하고 구성을 저장하는 방법
# virsh managedsave guest1 --running
20.9. 가상 머신 제거 및 삭제
20.9.1. 가상 머신 분리
--managed-save
- 이 인수를 사용하면 관리형 저장 이미지도 정리됩니다. 이 인수를 사용하지 않으면 Save를 사용하여 게스트 가상 머신을 정의 해제하려고 하면 실패합니다.--snapshots-metadata
- 이 인수를 사용하면 비활성 게스트 가상 머신을 정의할 때 스냅샷과 같이 스냅샷(스냅샷 목록 )도 정리됩니다. 스냅샷 메타데이터가 있는 비활성 게스트 가상 머신을 정의 해제하려고 하면 실패합니다. 이 인수가 사용되고 게스트 가상 머신이 활성화된 경우 무시됩니다.--storage
- 이 인수를 사용하려면 정의되지 않은 도메인과 함께 제거할 볼륨 대상 이름 또는 스토리지 볼륨의 소스 경로 목록이 필요합니다. 이 작업은 스토리지 볼륨이 제거되기 전에 해제됩니다. 이 작업은 비활성 게스트 가상 시스템에서만 수행할 수 있으며, 이 작업은 libvirt 에서 관리하는 스토리지 볼륨에서만 작동합니다.--remove-all-storage
- 게스트 가상 머신의 연결을 해제하는 것 외에도 연결된 모든 스토리지 볼륨이 삭제됩니다. 가상 머신을 삭제하려면 동일한 연결된 스토리지를 사용하는 다른 가상 머신이 없는 경우에만 이 옵션을 선택합니다. 또 다른 방법은 virsh vol-delete 를 사용하는 것입니다. 자세한 내용은 20.31절. “스토리지 볼륨 삭제”를 참조하십시오.--wipe-storage
- 스토리지 볼륨을 삭제하는 것 외에도 콘텐츠가 지워집니다.
예 20.17. 게스트 가상 머신을 삭제하고 스토리지 볼륨을 삭제하는 방법
# virsh undefine guest1 --remove-all-storage
20.9.2. 게스트 가상 머신 강제 중지
실행하면
가상 머신의 전원을 끄기 전에 디스크 이미지 파일의 캐시를 플러시하려고 합니다.
예 20.18. 하드 종료로 게스트 가상 머신을 즉시 종료하는 방법
# virsh destroy guest1
20.10. 게스트 가상 머신의 직렬 콘솔 연결
devname devicename]
[--force]
[- safe]
명령은 게스트 가상 시스템의 가상 직렬 콘솔을 연결합니다. 이는 VNC 또는 SPICE 프로토콜을 제공하지 않는 게스트에 매우 유용하며(그래서 GUI 툴을위한 비디오 디스플레이를 제공하지 않음) 네트워크 연결이 없습니다(따라서 SSH를 사용하여 상호 작용할 수 없음).
--devname
매개 변수는 게스트 가상 머신에 구성된 대체 콘솔, 직렬 또는 병렬 장치의 장치 별칭을 나타냅니다. 이 매개 변수를 생략하면 기본 콘솔이 열립니다. --safe
옵션을 지정하면 드라이버가 안전한 콘솔 처리를 지원하는 경우에만 연결이 시도됩니다. 이 옵션은 서버가 콘솔 장치에 대한 배타적 액세스를 보장해야 함을 지정합니다. 선택적으로 force
옵션을 지정하면 손상된 연결 경우와 같이 기존 세션의 연결을 끊도록 요청할 수 있습니다.
예 20.19. 콘솔 모드에서 게스트 가상 머신을 시작하는 방법
# virsh console guest1 --safe
20.11. 마스크 불가능 상호 작용
예 20.20. 게스트 가상 머신에 NMI를 삽입하는 방법
# virsh inject-nmi guest1
20.12. 가상 머신에 대한 정보 검색
20.12.1. 장치 블록 통계 표시
--human
인수를 사용합니다.
예 20.21. 게스트 가상 머신에 대한 블록 통계를 표시하는 방법
# virsh domblklist guest1 Target Source ------------------------------------------------ vda /VirtualMachines/guest1.img hdc - # virsh domblkstat guest1 vda --human Device: vda number of read operations: 174670 number of bytes read: 3219440128 number of write operations: 23897 number of bytes written: 164849664 number of flush operations: 11577 total duration of reads (ns): 1005410244506 total duration of writes (ns): 1085306686457 total duration of flushes (ns): 340645193294
20.12.2. 네트워크 인터페이스 통계 검색
예 20.22. 게스트 가상 머신에 대한 네트워킹 통계를 표시하는 방법
# virsh domiflist guest1 Interface Type Source Model MAC ------------------------------------------------------- macvtap0 direct em1 rtl8139 12:34:00:0f:8a:4a # virsh domifstat guest1 macvtap0 macvtap0 rx_bytes 51120 macvtap0 rx_packets 440 macvtap0 rx_errs 0 macvtap0 rx_drop 0 macvtap0 tx_bytes 231666 macvtap0 tx_packets 520 macvtap0 tx_errs 0 macvtap0 tx_drop 0
20.12.3. 게스트 가상 머신의 가상 인터페이스 링크 상태 수정
up
또는 down
으로 구성합니다. 도메인에 정의된 인터페이스 장치를 확인하려면 virsh domiflist 명령을 사용하여 Interface
또는 MAC
열을 인터페이스 장치 옵션으로 사용합니다. 기본적으로 virsh domif-setlink 는 실행 중인 도메인의 링크 상태를 변경합니다. 도메인의 영구 구성을 수정하려면 --config
인수를 사용합니다.
예 20.23. 게스트 가상 머신 인터페이스 활성화 방법
# virsh domiflist rhel7 Interface Type Source Model MAC ------------------------------------------------------- vnet0 network default virtio 52:54:00:01:1d:d0 # virsh domif-setlink rhel7 vnet0 down Device updated successfully # virsh domif-setlink rhel7 52:54:00:01:1d:d0 up Device updated successfully
20.12.4. 게스트 가상 머신의 가상 인터페이스 링크 나열
Interface
또는 MAC
열을 인터페이스 장치 옵션으로 사용합니다. 기본적으로 virsh domif-getlink 는 실행 중인 도메인에 대한 링크 상태를 검색합니다. 도메인의 영구 구성을 검색하려면 --config 옵션을
사용합니다.
예 20.24. 게스트 가상 머신 인터페이스의 링크 상태를 표시하는 방법
# virsh domiflist rhel7 Interface Type Source Model MAC ------------------------------------------------------- vnet0 network default virtio 52:54:00:01:1d:d0 # virsh domif-getlink rhel7 52:54:00:01:1d:d0 52:54:00:01:1d:d0 up # virsh domif-setlink rhel7 vnet0 down Device updated successfully # virsh domif-getlink rhel7 vnet0 vnet0 down
20.12.5. 네트워크 인터페이스 Bandwidth 매개변수 설정
Interface
또는 MAC
열을 인터페이스 장치 옵션으로 사용합니다. 다음 형식을 사용해야 합니다.
# virsh domiftune domain interface [--inbound] [--outbound] [--config] [--live] [--current]
--config
,--live
및 --current
옵션은 20.43절. “스케줄 매개변수 설정” 에 설명되어 있습니다. --inbound
또는 --outbound
옵션이 지정되지 않은 경우 virsh domiftune 은 지정된 네트워크 인터페이스를 쿼리하고 대역폭 설정을 표시합니다. --inbound
또는 --outbound
또는 둘 다를 지정하고 average, peak, burst 값을 지정하면 virsh domiftune 이 대역폭 설정을 설정합니다. 최소한 평균값이 필요합니다. 대역폭 설정을 지우려면 0(0)을 지정합니다. 평균, 최대 값 및 버스트 값에 대한 설명은 20.27.6.2절. “인터페이스 장치 연결” 을 참조하십시오.
예 20.25. 게스트 가상 머신 네트워크 인터페이스 매개 변수를 설정하는 방법
# virsh domiftune guest1 eth0
outbound
--live
20.12.6. 메모리 통계 검색
마침표
스위치를 사용하려면 시간(초)이 필요합니다. 이 옵션을 0보다 큰 값으로 설정하면 balloon 드라이버가 후속 dommemstat 명령을 실행하여 표시되는 추가 통계를 반환할 수 있습니다. period
옵션을 0으로 설정하면 balloon 드라이버 수집이 중지되지만 balloon 드라이버에서 이미 있는 통계는 지우지 않습니다. period
옵션도 설정하지 않고 --live
,--config
또는 --current
옵션을 사용할 수 없습니다. --live
옵션이 지정된 경우 게스트의 실행 중인 통계만 수집됩니다. --config
옵션을 사용하면 영구 게스트에 대한 통계가 수집되지만 다음 부팅 후에만 사용됩니다. --current
옵션을 사용하면 현재 통계를 수집합니다.
--live
및 --config
옵션을 모두 사용할 수 있지만 --current
는 배타적입니다. 플래그를 지정하지 않으면 게스트 상태가 통계 컬렉션의 동작을 지시합니다(실행 중 또는 아님).
예 20.26. 실행 중인 게스트 가상 머신에 대한 메모리 통계를 수집하는 방법
# virsh dommemstat rhel7
actual 1048576
swap_in 0
swap_out 0
major_fault 2974
minor_fault 1272454
unused 246020
available 1011248
rss 865172
20.12.7. 블록 장치에 오류 표시
예 20.27. 가상 머신의 블록 장치 오류를 표시하는 방법
# virsh domblkerror guest1
20.12.8. 블록 장치 크기 표시
예 20.28. 블록 장치 크기를 표시하는 방법
# virsh domblklist rhel7 Target Source ------------------------------------------------ vda /home/vm-images/rhel7-os vdb /home/vm-images/rhel7-data # virsh domblkinfo rhel7 vda Capacity: 10737418240 Allocation: 8211980288 Physical: 10737418240 # virsh domblkinfo rhel7 /home/vm-images/rhel7-data Capacity: 104857600 Allocation: 104857600 Physical: 104857600
20.12.9. 게스트 가상 머신과 연결된 블록 장치 표시
inactive ]
[-details]
명령은 지정된 게스트 가상 시스템과 연결된 모든 블록 장치의 테이블을 표시합니다.
--inactive
가 지정된 경우 다음 부팅 시 사용할 장치가 표시되고 실행 중인 게스트 가상 머신에서 현재 실행 중인 장치가 표시되지 않습니다. --details
가 지정되면 디스크 유형 및 장치 값이 표에 포함됩니다. 이 표에 표시된 정보는 virsh domblkinfo 및 virsh snapshot-create 와 같이 블록 장치를 제공해야 하는 다른 명령과 함께 사용할 수 있습니다. virsh snapshot-create 명령에 xmlfile 컨텍스트 정보를 생성할 때 디스크 대상 또는 소스 컨텍스트를 사용할 수도 있습니다.
예 20.29. 가상 머신과 연결된 블록 장치를 표시하는 방법
# virsh domblklist rhel7 --details
Type Device Target Source
------------------------------------------------
file disk vda /home/vm-images/rhel7-os
file disk vdb /home/vm-images/rhel7-data
20.12.10. 게스트 가상 머신과 연결된 가상 인터페이스 표시
--inactive
인수를 사용할 수 있습니다. 후자는 실행 중인 구성이 아닌 비활성 상태를 검색하며, 이 구성은 기본 설정으로 검색합니다. --inactive
가 지정된 경우 결과는 다음 부팅 시 사용할 장치를 표시하고 실행 중인 게스트에서 현재 사용 중인 장치를 표시하지 않습니다. 가상 인터페이스의 MAC 주소가 필요한 virsh 명령(예: detach-interface,domif-setlink, domif-getlink, domifstat, domiftune) 이 명령에서 표시하는 출력을 허용합니다.
예 20.30. 게스트 가상 머신과 연결된 가상 인터페이스를 표시하는 방법
# virsh domiflist rhel7 Interface Type Source Model MAC ------------------------------------------------------- vnet0 network default virtio 52:54:00:01:1d:d0 # virsh domifstat rhel7 vnet0 vnet0 rx_bytes 55308 vnet0 rx_packets 969 vnet0 rx_errs 0 vnet0 rx_drop 0 vnet0 tx_bytes 14341 vnet0 tx_packets 148 vnet0 tx_errs 0 vnet0 tx_drop 0
20.13. 스냅샷 작업
20.13.1. 데이터 복사를 통해 백업 체인 단축
base ← snap1 ← snap2 ← active.
절차 20.1. 백업 체인을 단축하는 방법
- 다음 명령을 입력하고 guest1 을 게스트 가상 시스템의 이름으로 바꾸고 disk1 을 디스크 이름으로 바꿉니다.
# virsh blockcommit guest1 disk1 --base snap1 --top snap2
--wait
--verbose
snap2의 내용은 snap1로 이동하여 그 결과는 다음과 같습니다.기본 스냅샷 스냅샷1 활성. snap2는 더 이상 유효하지 않으며 삭제할 수 있습니다.주의virsh blockcommit 는--base
인수에 종속된 파일(-top
인수에 종속된 파일 제외)에 따라 파일이 손상됩니다. 이 문제를 방지하려면 두 개 이상의 게스트가 공유하는 파일에 변경 사항을 커밋하지 마십시오.--verbose
옵션을 사용하면 화면에 진행률을 인쇄할 수 있습니다.
20.13.2. 이미지를 저장하여 백업 체인 단축
- 백업 이미지 체인의 데이터로 채워 이미지를 병합합니다. 이렇게 하면 이미지 파일 자체가 더 이상 백업 이미지에 의존하지 않고 다음과 같이 표시됩니다.
- 이전: base.img 활성화
- after: guest가 base.img를 더 이상 사용하지 않고 Active에는 모든 데이터가 포함됩니다.
- 백업 이미지 체인의 일부를 병합합니다. 이는 스냅샷을 최상위 이미지로 병합하는 데 사용할 수 있으며 다음과 같습니다.
- 이전: 기본 sn1 octetssn2 활성
- 뒤: base.img가 활성화됨. 이제 active 에는 sn1 및 sn2 의 모든 데이터가 포함되어 있으며 게스트에서 sn1 또는 sn2를 사용하지 않습니다.
- 디스크 이미지를 호스트의 새 파일 시스템으로 이동합니다. 게스트가 실행되는 동안 이미지 파일을 이동할 수 있으며 다음과 같이 표시됩니다.
- 이전 (원본 이미지 파일):
/fs1/base.vm.img
- 이후:
/fs2/active.vm.qcow2
는 이제 새 파일 시스템이며/fs1/base.vm.img
가 더 이상 사용되지 않습니다.
- 복사 후 스토리지 마이그레이션을 통해 실시간 마이그레이션에 유용합니다. 디스크 이미지는 실시간 마이그레이션이 완료된 후 소스 호스트에서 대상 호스트로 복사됩니다.이 문제는 다음과 같이 발생합니다.This is what happens: 이전:
/destination-host/base.vm.img
뒤:/destination-host/active.vm.qcow2
./source-host/base.vm.img
가 더 이상 사용되지 않습니다.
절차 20.2. 데이터를 병합하여 백업 체인을 줄이는 방법
- virsh blockpull 를 실행하기 전에 스냅샷을 만드는 것이 유용할 수 있습니다. 이렇게 하려면 virsh snapshot-create-as 명령을 사용합니다. 다음 예에서 guest1 을 게스트 가상 머신의 이름으로 바꾸고 snap1 을 스냅샷 이름으로 바꿉니다.
# virsh snapshot-create-as guest1 snap1
--disk-only
- 체인이 다음과 같은 경우: base snap1 octets snap2 active, 다음 명령을 입력하여 guest1 을 게스트 가상 머신의 이름으로, path1 을 디스크의 소스 경로로 바꿉니다(예:
/home/username/VirtualMachines/*
).# virsh blockpull guest1 path1
이 명령은 snap1 의 백업 파일을 snap2 에서 활성 상태로 가져옵니다. 기본 snap1은 활성 상태로 만듭니다. - virsh blockpull 가 완료되면 체인에서 추가 이미지를 만든 스냅샷의 libvirt 추적은 더 이상 유용하지 않습니다. 이 명령으로 오래된 스냅샷에서 추적을 삭제하고 guest1을 게스트 가상 머신 이름으로 교체하고 snap1을 스냅샷 이름으로 바꿉니다.
# virsh snapshot-delete guest1 snap1 --metadata
예 20.31. 단일 이미지를 병합하고 백업 이미지 체인의 데이터로 채우는 방법
# virsh blockpull guest1 vda --wait
예 20.32. 백업 이미지 체인의 일부를 병합하는 방법
# virsh blockpull guest1 vda /path/to/base.img --base
--wait
예 20.33. 디스크 이미지를 호스트의 새 파일 시스템으로 이동하는 방법
# virsh snapshot-create guest1 --xmlfile /path/to/snap1.xml --disk-only
# virsh blockpull guest1 disk1 --wait
예 20.34. 복사 후 스토리지 마이그레이션에서 실시간 마이그레이션을 사용하는 방법
# qemu-img create -f qcow2
-o
backing_file=/source-host/vm.img
/destination-host/vm.qcow2
# virsh migrate guest1
# virsh blockpull guest1 disk1 --wait
20.13.3. 게스트 가상 머신의 블록 장치의 크기 변경
예 20.35. 게스트 가상 머신 블록 장치의 크기를 조정하는 방법
# virsh blockresize guest1 90 B
20.14. 그래프 디스플레이에 연결하기위한 URI 표시
--type
은 그래픽 표시 유형을 지정하는 데 사용할 수 있습니다. --include-password
인수를 사용하면 SPICE 채널 암호가 URI에 포함됩니다.
예 20.36. SPICE의 URI 표시 방법
# virsh domdisplay --type spice guest1
spice://192.0.2.1:5900
20.15. VNC 디스플레이의 IP 주소 및 포트 번호 표시
1
이 표시됩니다.
devices
요소에서 그래픽 유형으로 지정해야 합니다. 자세한 내용은 23.17.11절. “그래픽 프레임 버퍼” 에서 참조하십시오.
예 20.37. VNC의 IP 주소 및 포트 번호를 표시하는 방법
# virsh vncdisplay guest1
127.0.0.1:0
20.16. 사용하지 않는 블록 삭제
최소 바이트]
[--mountpoint mountPoint]
명령은 실행 중인 지정된 게스트 가상 머신 내의 모든 마운트된 파일 시스템에서 fstrim
유틸리티를 호출합니다. 이는 파일 시스템에서 사용하지 않는 블록을 삭제합니다. --minimum
인수를 사용하는 경우 바이트 단위의 크기를 지정해야 합니다. 이 값은 연속된 사용 범위의 길이로 게스트 커널에 전송됩니다. 이 양보다 작은 값은 무시할 수 있습니다. 이 값을 늘리면 파일 시스템이 잘못 분할된 여유 공간이 있는 경쟁이 생성됩니다. 이 경우 모든 블록이 삭제되는 것은 아닙니다. 기본 최소값은 0이며 모든 free 블록이 삭제됩니다. 이 값을 0보다 크게 늘리면 fstrim 작업은 일부 블록이 삭제되지는 않지만 파일 시스템에 대해 더 빨리 완료됩니다. 사용자가 특정 마운트 지점을 트리밍하려는 경우 --mountpoint
인수를 사용해야 하며 마운트 지점을 지정해야 합니다.
예 20.38. 사용하지 않는 블록을 삭제하는 방법
# virsh domfstrim guest1 --minimum 0
20.17. 게스트 가상 머신 검색 명령
20.17.1. 호스트 물리적 시스템 이름 표시
예 20.39. 호스트 물리적 시스템 이름을 표시하는 방법
# virsh domhostname guest1
20.17.2. 가상 머신에 대한 일반 정보 표시
domain] 게스트이름 옵션과
함께 사용할 수도 있습니다.
예 20.40. 게스트 가상 머신에 대한 일반 정보를 표시하는 방법
# virsh dominfo guest1
Id: 8
Name: guest1
UUID: 90e0d63e-d5c1-4735-91f6-20a32ca22c40
OS Type: hvm
State: running
CPU(s): 1
CPU time: 271.9s
Max memory: 1048576 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: selinux
Security DOI: 0
Security label: system_u:system_r:svirt_t:s0:c422,c469 (enforcing)
20.17.3. 가상 머신의 ID 번호 표시
domain guestname]
옵션과 함께 사용할 수도 있습니다.
예 20.41. 가상 머신의 ID 번호를 표시하는 방법
# virsh domid guest1
8
20.17.4. 게스트 가상 머신에서 실행 중인 작업 중지
domain guestname]
옵션과 함께 사용할 수도 있습니다.
예 20.42. 게스트 가상 머신에서 실행 중인 작업을 중단하는 방법
# virsh domjobabort guest1
20.17.5. 게스트 가상 머신에서 실행 중인 작업에 대한 정보 표시
domain guestname]
옵션과 함께 사용하거나 --completed
옵션과 함께 사용하여 최근 완료된 작업의 통계에 대한 정보를 반환할 수도 있습니다.
예 20.43. 통계적 피드백을 표시하는 방법
# virsh domjobinfo guest1
Job type: Unbounded
Time elapsed: 1603 ms
Data processed: 47.004 MiB
Data remaining: 658.633 MiB
Data total: 1.125 GiB
Memory processed: 47.004 MiB
Memory remaining: 658.633 MiB
Memory total: 1.125 GiB
Constant pages: 114382
Normal pages: 12005
Normal data: 46.895 MiB
Expected downtime: 0 ms
Compression cache: 64.000 MiB
Compressed data: 0.000 B
Compressed pages: 0
Compression cache misses: 12005
Compression overflows: 0
20.17.6. 게스트 가상 머신의 이름 표시
예 20.44. 게스트 가상 머신의 이름을 표시하는 방법
# virsh domname 8
guest1
20.17.7. 가상 머신 상태 표시
--reason
인수를 사용하면 표시된 상태의 이유도 표시됩니다. 이 명령은 상태 이유를 표시하는 --reason
옵션과 함께 [- domain guestname]
옵션과 함께 사용할 수도 있습니다. 명령이 오류를 표시하는 경우 virsh domblkerror 명령을 실행해야 합니다. 자세한 내용은 20.12.7절. “블록 장치에 오류 표시”를 참조하십시오.
예 20.45. 게스트 가상 머신의 현재 상태를 표시하는 방법
# virsh domstate guest1
running
20.17.8. 가상 머신에 연결 상태 표시
예 20.46. 게스트 가상 머신의 인터페이스 상태를 표시하는 방법
# virsh domcontrol guest1
ok
20.18. QEMU 인수와 도메인 XML로 변환
절차 20.3. QEMU 게스트를 libvirt로 변환하는 방법
- 다음 예제에서 demo.args 라는 인수 파일(파일 유형
*.args
)을 사용하여 QEMU 게스트로 시작합니다.$ cat demo.args LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb
- 이 파일을 libvirt에서 게스트를 관리할 수 있도록 도메인 XML 파일로 변환하려면 다음 명령을 입력합니다. qemu-guest1 을 게스트 가상 머신의 이름으로 바꾸고 demo.args 를 QEMU 인수 파일의 파일 이름으로 교체합니다.
# virsh domxml-from-native qemu-guest1
demo.args
이 명령은 demo.args 파일을 다음 도메인 XML 파일로 변경합니다.그림 20.1. 게스트 가상 머신 새 구성 파일
<domain type='qemu'> <uuid>00000000-0000-0000-0000-000000000000</uuid> <memory>219136</memory> <currentMemory>219136</currentMemory> <vcpu>1</vcpu> <os> <type arch='i686' machine='pc'>hvm</type> <boot dev='hd'/> </os> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu</emulator> <disk type='block' device='disk'> <source dev='/dev/HostVG/QEMUGuest1'/> <target dev='hda' bus='ide'/> </disk> </devices> </domain>
20.19. virsh dump를 사용하여 게스트 가상 머신 코어의 덤프 파일 생성
--bypass-cache
] {--live | --reset } [--
verbose
] [--memory-only
]--format
=format] 명령을 사용하는 것입니다. 그러면 크래시 유틸리티 의 예를 들어 분석할 수 있도록 게스트 가상 시스템의 코어가 포함된 덤프 파일이 생성됩니다.
--bypass-cache
- 저장된 파일은 호스트의 파일 시스템 캐시를 우회하지 않습니다. 파일의 내용에는 영향을 미치지 않습니다. 이 옵션을 선택하면 덤프 작업 속도가 느려질 수 있습니다.--live
는 게스트 가상 머신이 계속 실행될 때 파일을 저장하고 게스트 가상 머신을 일시 중지하거나 중지하지 않습니다.--crash
는 덤프 파일을 저장하는 동안 게스트 가상 머신을 일시 정지 상태로 두는 대신 충돌한 상태로 둡니다. 게스트 가상 머신은 "중지"인 이유와 함께 "Shut off"로 나열됩니다.--reset
- 덤프 파일이 성공적으로 저장되면 게스트 가상 시스템이 재설정됩니다.--verbose
에서 덤프 프로세스의 진행 상황을 표시--memory-only
- 이 옵션을 사용하여 덤프를 실행하면 덤프 파일의 콘텐츠에 게스트 가상 시스템의 메모리 및 CPU 공통 레지스터 파일만 포함하는 덤프 파일이 생성됩니다. 이 옵션은 전체 덤프가 실행되지 않는 경우 사용해야 합니다. 게스트 가상 머신을 실시간으로 마이그레이션할 수 없는 경우(passthrough PCI 장치로 인해)이 발생할 수 있습니다.--format=형식
옵션을 사용하여 메모리 전용 덤프를 저장할 수 있습니다. 다음 형식을 사용할 수 있습니다.Elf
- 기본 압축하지 않은 형식kdump-zlib
- kdump 압축으로 압축된 형식kdump-lzo
- LZO 압축으로 kdump 압축 형식kdump-snappy
- kdump 압축을 사용한 kdump 압축 형식
중요크래시 유틸리티는 virsh dump 명령의 기본 코어 덤프 파일 형식을 더 이상 지원하지 않습니다. crash 를 사용하여 virsh dump 에서 생성한 코어 덤프 파일을 분석하는 경우 --memory-only 옵션을 사용해야 합니다.또한 코어 덤프 파일을 생성할 때 --memory-only 옵션을 사용하여 Red Hat Suport 케이스에 연결해야 합니다.
예 20.47. virsh를 사용하여 덤프 파일을 만드는 방법
core/file/path.file
파일에 저장한 다음 게스트를 재설정합니다. 이 명령을 사용하는 가장 일반적인 시나리오는 게스트 가상 머신이 제대로 작동하지 않는 경우입니다.
# virsh dump guest1 core/file/path.file
--memory-only
--reset
20.20. 가상 머신 XML 덤프(구성 파일) 생성
guest.xml
)을 사용하여 게스트 가상 머신을 다시 생성합니다( 20.22절. “게스트 가상 머신의 XML 설정 편집” 참조). 이 XML 구성 파일을 편집하여 추가 장치를 구성하거나 추가 게스트 가상 머신을 배포할 수 있습니다.
예 20.48. 게스트 가상 머신의 XML 파일을 검색하는 방법
# virsh dumpxml guest1 > guest1.xml # cat guest1.xml <domain type='kvm'> <name>guest1-rhel6-64</name> <uuid>b8d7388a-bbf2-db3a-e962-b97ca6e514bd</uuid> <memory>2097152</memory> <currentMemory>2097152</currentMemory> <vcpu>2</vcpu> <os> <type arch='x86_64' machine='rhel6.2.0'>hvm</type> <boot dev='hd'/> </os> [...]
20.21. 구성 파일에서 게스트 가상 머신 생성
예 20.49. XML 파일에서 게스트 가상 머신을 만드는 방법
# virsh create guest1.xml
20.22. 게스트 가상 머신의 XML 설정 편집
예 20.50. 게스트 가상 머신의 XML 구성 설정을 편집하는 방법
# virsh edit guest1
20.23. KVM 게스트 가상 머신에 멀티 기능 PCI 장치 추가
- virsh edit guestname 명령을 실행하여 게스트 가상 시스템의 XML 구성 파일을 편집합니다.
<address>
요소에서multifunction='on'
속성을 추가합니다. 이를 통해 특정 다중 함수 PCI 장치에 다른 기능을 사용할 수 있습니다.<disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/rhel62-1.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/> </disk>
두 함수가 있는 PCI 장치의 경우 XML 구성 파일을 수정하여 첫 번째 장치와 동일한 슬롯 번호와 동일한 두 번째 장치 및 function='0x1 과 다른 함수 번호를 포함합니다. 예를 들면 다음과 같습니다.<disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/rhel62-1.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/> </disk> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/rhel62-2.img'/> <target dev='vdb' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/> </disk>
- lspci 명령을 실행합니다. KVM 게스트 가상 시스템의 출력에는 virtio 블록 장치가 표시됩니다.
$ lspci 00:05.0 SCSI storage controller: Red Hat, Inc Virtio block device 00:05.1 SCSI storage controller: Red Hat, Inc Virtio block device
참고serialBIOS 애플리케이션은 BIOS 인터페이스와의 호환성을 위해 실제 모드에서 실행됩니다. 이렇게 하면 사용 가능한 메모리 양이 제한됩니다. 결과적으로 foBIOS는 제한된 수의 디스크 만 처리 할 수 있습니다. 현재 지원되는 디스크 수는 다음과 같습니다.- virtio-scsi — 64
- virtio-blk - 4
- AHCI/sata - 24 (4개의 포트가 모두 연결된 컨트롤러)
- usb-storage — 4
이 문제에 대한 해결 방법으로 많은 수의 디스크를 가상 머신에 연결할 때 시스템 디스크에 작은 pci 슬롯 번호가 있는지 확인하십시오. 따라서 screenBIOS는 pci 버스를 스캔할 때 먼저 확인합니다. 디스크당 메모리 오버헤드가 작기 때문에 virtio-blk 대신 virtio-scsi 장치를 사용하는 것도 좋습니다.
20.24. 지정된 게스트 가상 머신에 대한 CPU 통계 표시
--total
start
count
명령은 지정된 게스트 가상 머신에 대한 CPU 통계 정보를 제공합니다. 기본적으로 모든 CPU 및 총 통계가 표시됩니다. --total
옵션은 총 통계만 표시합니다. --count
옵션은 개수 CPU에 대한 통계만 표시합니다.
예 20.51. 게스트 가상 머신에 대한 CPU 통계를 생성하는 방법
# virsh cpu-stats guest1
CPU0:
cpu_time 242.054322158 seconds
vcpu_time 110.969228362 seconds
CPU1:
cpu_time 170.450478364 seconds
vcpu_time 106.889510980 seconds
CPU2:
cpu_time 332.899774780 seconds
vcpu_time 192.059921774 seconds
CPU3:
cpu_time 163.451025019 seconds
vcpu_time 88.008556137 seconds
Total:
cpu_time 908.855600321 seconds
user_time 22.110000000 seconds
system_time 35.830000000 seconds
20.25. 게스트 콘솔의 스크린샷 가져오기
imagefilepath
] 명령은 현재 게스트 가상 머신 콘솔의 스크린샷을 가져와서 파일에 저장합니다. 파일 경로가 제공되지 않으면 스크린샷이 현재 디렉터리에 저장됩니다. 하이퍼바이저가 게스트 가상 머신에 여러 디스플레이를 지원하는 경우 --screen ID
옵션을 사용하여 캡처할 화면을 지정합니다.
예 20.52. 게스트 머신 콘솔의 스크린샷을 가져오는 방법
/home/username/pics/guest1-screen.png
로 저장합니다.
# virsh screenshot guest1 /home/username/pics/guest1-screen.ppm
Screenshot saved to /home/username/pics/guest1-screen.ppm, with type of image/x-portable-pixmap
20.26. 지정된 게스트 가상 머신에 Keystroke Combination 전송
--codeset
--holdtime
keycode 명령을 사용하면 특정 게스트 가상 머신에 키 코드로 시퀀스를 보낼 수 있습니다. 각 키 코드는 숫자 값이거나 아래의 해당 코드 세트에서의 심볼릭 이름일 수 있습니다.
--holdtime
을 지정하면 지정된 양(밀리초)에 대해 각 키 입력이 유지됩니다. --codeset
을 사용하면 코드 세트를 지정할 수 있으며 기본값은 Linux
이지만 다음 옵션이 허용됩니다.
Linux
- 이 옵션을 선택하면 심볼릭 이름이 해당 Linux 키 상수 매크로 이름과 일치하도록 하고 숫자 값은 Linux 일반 입력 이벤트 하위 시스템에서 제공하는 것입니다.XT
- 이것은 XT 키보드 컨트롤러에서 정의한 값을 보냅니다. 기호 이름은 제공되지 않습니다.atset1
- 숫자 값은 AT 키보드 컨트롤러, set1(XT 호환 가능 세트)에 의해 정의된 값입니다. atset1의 확장된 키 코드는 XT 코드 세트의 확장 키 코드와 다를 수 있습니다. 심볼릭 이름은 제공되지 않습니다.atset2
- 숫자 값은 AT 키보드 컨트롤러에서 정의한 값이며 2를 설정합니다. 심볼릭 이름은 제공되지 않습니다.atset3
- 숫자 값은 AT 키보드 컨트롤러에서 정의하는 값이며 3(PS/2 호환 가능)을 설정합니다. 심볼릭 이름은 제공되지 않습니다.os_x
- 숫자 값은 OS-X 키보드 입력 하위 시스템에서 정의한 값입니다. 심볼릭 이름은 해당 OS-X 키 상수 매크로 이름과 일치합니다.Xt_kbd
- 숫자 값은 Linux KBD 장치에서 정의한 값입니다. 이는 원래 XT 코드 세트에서의 변형이지만 종종 확장 키 코드에 대해 다른 인코딩이 있는 경우가 많습니다. 심볼릭 이름은 제공되지 않습니다.win32
- 숫자 값은 Win32 키보드 입력 하위 시스템에서 정의한 값입니다. 심볼릭 이름은 해당 Win32 키 상수 매크로 이름과 일치합니다.USB
- 숫자 값은 키보드 입력을 위해 USB HID 사양으로 정의된 값입니다. 심볼릭 이름은 제공되지 않습니다.IngesterB
- 숫자 값은 원시 키 코드를 전송하기 위해 IngesterB 확장에 의해 정의된 값입니다. 이는 XT 코드 세트에서의 변형이지만 확장된 키 코드는 첫 번째 바이트의 높은 비트 대신 두 번째 비트 세트의 낮은 비트를 갖습니다. 심볼릭 이름은 제공되지 않습니다.
예 20.53. 게스트 가상 머신에 키 입력 조합을 보내는 방법
# virsh send-key guest1 --codeset Linux
--holdtime 1000
KEY_LEFTCTRL KEY_LEFTALT KEY_DELETE
20.27. 호스트 머신 관리
20.27.1. 호스트 정보 표시
예 20.54. 호스트 시스템에 대한 정보를 표시하는 방법
$ virsh nodeinfo
CPU model: x86_64
CPU(s): 4
CPU frequency: 1199 MHz
CPU socket(s): 1
Core(s) per socket: 2
Thread(s) per core: 2
NUMA cell(s): 1
Memory size: 3715908 KiB
20.27.2. NUMA 매개변수 설정
<numatune>
요소에 중첩되어 있습니다. 플래그를 사용하지 않으면 현재 설정만 표시됩니다. numatune domain 명령에는 지정된 게스트 가상 머신 이름이 필요하며 다음 인수를 사용할 수 있습니다.
--mode
- 모드를strict
,interleave
또는preferred
로 설정할 수 있습니다. 게스트 가상 머신이엄격한
모드 내에서 시작된 경우를 제외하고 도메인 실행은 라이브 동안에는 모드가 변경될 수 없습니다.--nodeset
에는 게스트 가상 머신을 실행하는 데 호스트 물리적 시스템에서 사용하는 NUMA 노드 목록이 포함되어 있습니다. 목록에는 각각 노드 범위에 사용되는 대시와 노드를 제외하는 데 사용되는 캐럿이 각각 쉼표로 구분된 노드가 포함됩니다.- 인스턴스당 다음 세 가지 플래그 중 하나만 사용할 수 있습니다.
--config
는 영구 게스트 가상 머신의 다음 부팅에 적용됩니다.--live
는 실행 중인 게스트 가상 머신의 스케줄러 정보를 설정합니다.--current
은 게스트 가상 머신의 현재 상태에 영향을 미칩니다.
예 20.55. 게스트 가상 머신에 대한 NUMA 매개변수를 설정하는 방법
strict
로 설정합니다.
# virsh numatune guest1 --mode strict
--nodeset 0,2-3
--live
<numatune> <memory mode='strict' nodeset='0,2-3'/> </numatune>
20.27.3. NUMA 셀에 Free Memory의 Amount 표시
예 20.56. 가상 머신 및 NUMA 셀의 메모리 속성을 표시하는 방법
# virsh freecell
Total: 684096 KiB
--all
옵션을 사용합니다.
# virsh freecell --all
0: 804676 KiB
--------------------
Total: 804676 KiB
--cellno
옵션을 사용합니다.
# virsh freecell --cellno 0
0: 772496 KiB
20.27.4. CPU 목록 표시
예 20.57. 호스트에서 사용 가능한 CPU 수를 표시하는 방법
# virsh nodecpumap
CPUs present: 4
CPUs online: 1
CPU map: y
20.27.5. CPU 통계 표시
[cpu_number] [-percent]
명령은 호스트의 CPU 로드 상태에 대한 통계 정보를 표시합니다. CPU를 지정하면 통계가 지정된 CPU에만 적용됩니다. 백분율
옵션을 지정하면 명령은 1 (1)초 간격으로 기록된 각 CPU 통계 유형의 백분율을 표시합니다.
예 20.58. CPU 사용량에 대한 통계 정보를 표시하는 방법
# virsh nodecpustats
user: 1056442260000000
system: 401675280000000
idle: 7549613380000000
iowait: 94593570000000
# virsh nodecpustats 2 --percent
usage: 2.0%
user: 1.0%
system: 1.0%
idle: 98.0%
iowait: 0.0%
20.27.6. 장치 관리
20.27.6.1. virsh를 사용하여 장치 연결 및 업데이트
절차 20.4. 게스트 가상 머신에서 사용할 USB 장치 핫 플러그
- 다음 명령을 실행하여 연결할 USB 장치를 찾습니다.
# lsusb -v idVendor 0x17ef Lenovo idProduct 0x480f Integrated Webcam [R5U877]
- XML 파일을 만들고 논리 이름(예:
usb_device.xml
)을 지정합니다. 검색에 표시된 대로 공급 업체 및 제품 ID 번호( hexidecimal 번호)를 복사합니다. 그림 20.2. “USB 장치 XML 스니펫” 에 표시된 대로 이 정보를 XML 파일에 추가합니다. 이 파일의 이름은 다음 단계에서 필요하므로 기록해 둡니다.그림 20.2. USB 장치 XML 스니펫
<hostdev mode='subsystem' type='usb' managed='yes'> <source> <vendor id='0x17ef'/> <product id='0x480f'/> </source> </hostdev>
- 다음 명령을 실행하여 장치를 연결합니다. 명령을 실행하면 guest1 을 가상 머신의 이름으로 바꾸고, usb_device.xml 을 이전 단계에서 생성한 공급 업체 및 제품 ID가 포함된 XML 파일의 이름으로 바꿉니다. 다음 재부팅 시 변경 사항이 적용되면
--config
인수를 사용합니다. 현재 게스트 가상 머신에 변경 사항이 적용되려면--current
인수를 사용합니다. 추가 인수는 virsh 도움말 페이지를 참조하십시오.# virsh attach-device guest1
--file usb_device.xml
--config
예 20.59. 게스트 가상 머신에서 장치 연결 해제 방법
# virsh detach-device guest1 --file usb_device.xml
20.27.6.2. 인터페이스 장치 연결
[<target>]
[<mac>]
[<script>]
[<model>]
[<inbound> ] [<outbound>]
[- config]
[- live]
[- current]
명령은 다음 인수를 사용할 수 있습니다.
--type
- 인터페이스 유형을 설정할 수 있습니다.--source
- 네트워크 인터페이스의 소스를 설정할 수 있습니다.--live
- 실행 중인 게스트 가상 머신 구성 설정에서 해당 값을 가져옵니다.--config
- 다음 부팅시 적용--current
- 현재 구성 설정에 따라 해당 값을 가져옵니다.--target
- 게스트 가상 시스템의 대상 장치를 나타냅니다.-- macOS
- 이 옵션을 사용하여 네트워크 인터페이스의 MAC 주소를 지정합니다.--script
- 이 옵션을 사용하여 기본 브리지 대신 브리지를 처리하는 스크립트 파일 경로를 지정합니다.--model
- 이 옵션을 사용하여 모델 유형을 지정합니다.--inbound
- 인터페이스의 인바운드 대역폭을 제어합니다. 허용 가능한 값은평균
,최대
및버스트
입니다.--outbound
- 인터페이스의 아웃바운드 대역폭을 제어합니다. 허용 가능한 값은평균
,최대
및버스트
입니다.참고평균 및 최대 값은 초당 킬로바이트로 표현되고, burst는 네트워크 XML 업스트림 설명서에 설명된 대로 최대 속도의 단일 버스트로 표현됩니다.
네트워크
장치를 나타내는 네트워크 또는 장치에 대한 브리지
를 나타내는 브리지일 수 있습니다. source 는 장치의 소스입니다. 연결된 장치를 제거하려면 virsh detach-device 명령을 사용합니다.
예 20.60. 게스트 가상 머신에 장치를 연결하는 방법
virtio
:로 게스트에 표시됩니다.
# virsh attach-interface guest1 networkw --model virtio
20.27.6.3. CDROM 미디어 변경
--path
- 디스크 장치의 정규화된 경로 또는 대상을 포함하는 문자열입니다.--source
- 미디어의 소스를 포함하는 문자열--eject
- 미디어를 제거--insert
- 미디어를 삽입--update
- 미디어를 업데이트--current
- 하이퍼바이저 드라이버 구현에 따라--live
및--config
중 하나 또는 둘 다일 수 있습니다.--live
- 실행 중인 게스트 가상 머신의 실시간 구성을 대체--config
- 영구 구성을 대체하여 다음 부팅 시 관찰되었습니다.--force
- 미디어를 강제로 변경
20.27.7. 노드 메모리 매개변수 설정 및 표시
[shm-pages-to-scan] [shm-sleep-milisecs] [shm-merge-across-nodes]
명령이 표시되고 노드 메모리 매개변수를 설정할 수 있습니다. 이 명령을 사용하여 다음 매개변수를 설정할 수 있습니다.
--shm-pages-to-scan
- 커널 동일 페이지 병합(KSM) 서비스가 절전 상태로 전환되기 전에 검사할 페이지 수를 설정합니다.--shm-sleep-milisecs
- KSM이 다음 검사 전에 자는 miliseconds 수를 설정합니다.--shm-merge-across-nodes
- 다른 NUMA 노드의 페이지를 병합할 수 있는지 여부를 지정합니다.
예 20.61. NUMA 노드에서 메모리 페이지를 병합하는 방법
# virsh node-memory-tune --shm-merge-across-nodes 1
20.27.8. 호스트의 장치 나열
--tree
명령은 libvirt 서비스에 알려진 호스트에서 사용 가능한 모든 장치를 나열합니다. --cap 은 각각 쉼표로 구분된 기능 유형별로 목록을 필터링하는 데 사용되며 --tree
와 함께 사용할 수 없습니다. --tree
인수를 사용하여 출력을 트리 구조에 배치합니다.
예 20.62. 호스트에서 사용 가능한 장치를 표시하는 방법
# virsh nodedev-list --tree
computer
|
+- net_lo_00_00_00_00_00_00
+- net_macvtap0_52_54_00_12_fe_50
+- net_tun0
+- net_virbr0_nic_52_54_00_03_7d_cb
+- pci_0000_00_00_0
+- pci_0000_00_02_0
+- pci_0000_00_16_0
+- pci_0000_00_19_0
| |
| +- net_eth0_f0_de_f1_3a_35_4f
[...]
# virsh nodedev-list --cap scsi
scsi_0_0_0_0
20.27.9. 호스트 시스템에 장치 생성
<장치의 최상위 장치>
설명에 대한 XML 설명이 포함되어야 합니다. 이러한 파일의 예는 예 20.65. “장치의 XML 파일을 검색하는 방법” 을 참조하십시오.
예 20.63. XML 파일에서 장치를 만드는 방법
scsi_host2.xml
으로 저장했습니다. 다음 명령을 사용하면 이 장치를 게스트에 연결할 수 있습니다.
# virsh nodedev-create scsi_host2.xml
20.27.10. 장치 제거
--driver
인수를 사용하면 의도한 백엔드 드라이버를 지정할 수 있습니다.
예 20.64. 호스트 물리적 시스템에서 장치를 제거하는 방법
# virsh nodedev-destroy scsi_host2
20.27.11. 장치 설정 수집
예 20.65. 장치의 XML 파일을 검색하는 방법
# virsh nodedev-dumpxml scsi_host2 <device> <name>scsi_host2</name> <parent>scsi_host1</parent> <capability type='scsi_host'> <capability type='fc_host'> <wwnn>2001001b32a9da5b</wwnn> <wwpn>2101001b32a9da5b</wwpn> </capability> </capability> </device>
20.27.12. 장치에 대한 초기화 트리거
예 20.66. 게스트 가상 머신에서 장치를 재설정하는 방법
# virsh nodedev-reset scsi_host2
20.28. 게스트 가상 머신 정보 검색
20.28.1. 게스트 가상 머신의 도메인 ID 가져오기
예 20.67. 게스트 가상 머신의 도메인 ID 검색 방법
# virsh domid guest1
8
-
를 반환합니다. 가상 머신이 종료되었는지 확인하려면 virsh list --all
명령을 실행할 수 있습니다.
20.28.2. 게스트 가상 머신의 도메인 이름 가져오기
예 20.68. 가상 머신의 ID 검색 방법
# virsh domname 8
guest1
20.28.3. 게스트 가상 머신의 UUID 가져오기
예 20.69. 게스트 가상 머신의 UUID를 표시하는 방법
# virsh domuuid guest1
r5b2-mySQL01 4a4c59a7-ee3f-c781-96e4-288f2862f011
20.28.4. 게스트 가상 머신 정보 표시
예 20.70. 게스트 가상 머신 일반 세부 정보를 표시하는 방법
# virsh dominfo guest1
Id: 8
Name: guest1
UUID: 90e0d63e-d5c1-4735-91f6-20a32ca22c48
OS Type: hvm
State: running
CPU(s): 1
CPU time: 32.6s
Max memory: 1048576 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: selinux
Security DOI: 0
Security label: system_u:system_r:svirt_t:s0:c552,c818 (enforcing)
20.29. 스토리지 풀 명령
20.29.1. 스토리지 풀 XML 검색
예 20.71. 사용 가능한 스토리지 풀의 XML 설정을 나열하는 방법
# virsh find-storage-pool-sources logical
<sources>
<source>
<device path='/dev/mapper/luks-7a6bfc59-e7ed-4666-a2ed-6dcbff287149'/>
<name>RHEL_dhcp-2-157</name>
<format type='lvm2'/>
</source>
</sources>
20.29.2. 스토리지 풀 검색
예 20.72. 잠재적인 스토리지 풀 소스를 찾는 방법
# virsh find-storage-pool-sources-as disk
--host myhost.example.com
20.29.3. 스토리지 풀 정보 나열
예 20.73. 스토리지 풀에 대한 정보를 검색하는 방법
# virsh pool-info vdisk
Name: vdisk
UUID:
State: running
Persistent: yes
Autostart: no
Capacity: 125 GB
Allocation: 0.00
Available: 125 GB
20.29.4. 사용 가능한 스토리지 풀 나열
--inactive
인수를 사용하면 비활성 풀만 나열하고 --all
인수를 사용하면 모든 스토리지 풀이 나열됩니다. 이 명령은 검색 결과를 필터링하는 다음과 같은 선택적 인수를 사용합니다.
--inactive
- 비활성 스토리지 풀 나열--all
- 활성 스토리지 풀과 비활성 스토리지 풀 모두 나열--persistent
- 영구 스토리지 풀 나열--transient
- 임시 스토리지 풀 나열--autostart
- autostart가 활성화된 스토리지 풀을 나열합니다.--no-autostart
- autostart가 비활성화된 스토리지 풀을 나열합니다.--type 유형
- 지정된 유형만 있는 풀을 나열합니다.--details
- 스토리지 풀의 확장된 세부 정보를 나열
--persistent
는 목록을 임시 풀로 제한하고 --transient
는 목록을 임시 풀로 제한하고, --autostart
는 목록을 임시 풀로 제한하고, 마지막으로 --no-autostart
를 자동으로 시작한 스토리지 풀로 목록을 제한합니다.
dir
,fs
,netfs
,logical
,disk
,iscsi
,scsi
,mpath
,rbd
, Hepdog
, gluster
가 있습니다.
--details
옵션은 virsh 에 사용 가능한 풀 지속성 및 용량 관련 정보를 추가로 표시하도록 지시합니다.
예 20.74. 모든 스토리지 풀을 나열하는 방법
# virsh pool-list --all
Name State Autostart
-----------------------------------------
default active yes
vdisk active no
20.29.5. 스토리지 풀 목록 새로 고침
예 20.75. 스토리지 풀에서 스토리지 볼륨 목록을 새로 고치는 방법
# virsh pool-refresh vdisk
Pool vdisk refreshed
20.29.6. 스토리지 풀 생성, 삭제 및 시작
20.29.6.1. 스토리지 풀 빌드
--overwrite
및 --no-overwrite
는 FS 스토리지 풀 또는 디스크 또는 논리 유형 기반 스토리지 풀에만 사용할 수 있습니다. [-overwrite] 또는 [-no-overwrite] 또는 [-no-overwrite]가 제공되지 않고 사용된 풀이 FS인 경우 유형이 실제로 디렉토리 기반인 것으로 가정합니다. 풀 이름 외에도 스토리지 풀 UUID도 사용할 수 있습니다.
--no-overwrite
가 지정된 경우 대상 장치에 파일 시스템이 이미 있는지 확인하거나, 오류가 있는지 반환하거나 mkfs 를 사용하여 대상 장치를 포맷하지 않는 경우 해당 장치를 포맷합니다. --overwrite
가 지정된 경우 mkfs 명령이 실행되고 대상 장치의 기존 데이터를 덮어씁니다.
예 20.76. 스토리지 풀을 구축하는 방법
# virsh pool-build vdisk
Pool vdisk built
20.29.6.2. XML 파일에서 스토리지 풀 정의
예 20.77. XML 파일에서 스토리지 풀을 정의하는 방법
<pool type="dir"> <name>vdisk</name> <target> <path>/var/lib/libvirt/images</path> </target> </pool>
# virsh pool-define vdisk.xml
Pool vdisk defined
20.29.6.3. 스토리지 풀 생성
예 20.78. XML 파일에서 스토리지 풀을 생성하는 방법
<pool type="dir"> <name>vdisk</name> <target> <path>/var/lib/libvirt/images</path> </target> </pool>
# virsh pool-create vdisk.xml
Pool vdisk created
20.29.6.4. 스토리지 풀 생성
--print-xml
- XML 파일의 내용을 표시하지만 스토리지 풀을 정의하거나 생성하지는 않음--type
유형은 스토리지 풀 유형을 정의합니다. 사용할 수 있는 형식은 20.29.4절. “사용 가능한 스토리지 풀 나열” 을 참조하십시오.--source-host
호스트 이름 - 기본 스토리지의 소스 호스트 물리적 시스템--source-path
경로 - 기본 스토리지의 위치--source-dev
path - 기본 스토리지의 장치--source-name
name - 소스 기본 스토리지의 이름--source-format
형식 - 소스 기본 스토리지의 형식--target
경로 - 기본 스토리지의 대상
예 20.79. 스토리지 풀을 생성하고 시작하는 방법
/mnt
디렉터리에 vdisk 라는 스토리지 풀을 생성하고 시작합니다.
# virsh pool-create-as --name vdisk --type dir
--target /mnt
Pool vdisk created
20.29.6.5. 스토리지 풀 정의
--print-xml
- XML 파일의 내용을 표시하지만 스토리지 풀을 정의하거나 생성하지는 않음--type
유형은 스토리지 풀 유형을 정의합니다. 사용할 수 있는 형식은 20.29.4절. “사용 가능한 스토리지 풀 나열” 을 참조하십시오.--source-host
호스트 이름 - 기본 스토리지를 위한 소스 호스트 물리적 머신--source-path
경로 - 기본 스토리지의 위치--source-dev
devicename - 기본 스토리지를 위한 장치--source-name
sourcename - 소스 기본 스토리지의 이름--source-format
형식 - 소스 기본 스토리지의 형식--target
targetname - 기본 스토리지의 대상
--print-xml
이 지정된 경우 풀을 생성하거나 정의하지 않고 풀 오브젝트의 XML을 출력합니다. 그러지 않으면 풀을 빌드할 지정된 형식이 필요합니다. 유형이 필요한 모든 스토리지 풀 명령의 경우 풀 유형을 쉼표로 구분해야 합니다. 유효한 풀 유형에는 dir
,fs
,netfs
,logical
,disk
,iscsi
,scsi
,mpath
,rbd
, Hepdog
, gluster
가 있습니다.
예 20.80. 스토리지 풀 정의 방법
# virsh pool-define-as --name vdisk --type dir
--target /mnt
Pool vdisk defined
20.29.6.6. 스토리지 풀 시작
예 20.81. 스토리지 풀을 시작하는 방법
# virsh pool-start vdisk
Pool vdisk started
20.29.6.7. 스토리지 풀 자동 시작
--disable
인수를 사용합니다.
예 20.82. 스토리지 풀 자동 시작 방법
# virsh pool-autostart vdisk
Pool vdisk autostarted
20.29.7. 스토리지 풀 중지 및 삭제
예 20.83. 스토리지 풀을 중지하는 방법
# virsh pool-destroy vdisk
Pool vdisk destroyed
예 20.84. 스토리지 풀 삭제 방법
# virsh pool-delete vdisk
Pool vdisk deleted
예 20.85. 스토리지 풀을 해제하는 방법
# virsh pool-undefine vdisk
Pool vdisk undefined
20.29.8. 풀에 대한 XML 덤프 파일 생성
-inactive
dumps 옵션을 사용하면 현재 풀 구성이 아닌 다음 풀 시작 시 사용할 구성을 사용합니다.
예 20.86. 스토리지 풀의 구성 설정을 검색하는 방법
# virsh pool-dumpxml vdisk
<pool type="dir">
<name>vdisk</name>
<target>
<path>/var/lib/libvirt/images</path>
</target>
</pool>
20.29.9. 스토리지 풀의 구성 파일 편집
예 20.87. 스토리지 풀의 구성 설정을 편집하는 방법
# virsh pool-edit vdisk
<pool type="dir">
<name>vdisk</name>
<target>
<path>/var/lib/libvirt/images</path>
</target>
</pool>
20.30. 스토리지 볼륨 명령
20.30.1. 스토리지 볼륨 생성
--pool 문자열
- 필수 - 스토리지 풀의 이름 또는 스토리지 볼륨에 연결할 스토리지 풀의 UUID를 포함합니다. 이 스토리지 풀은 이 새 스토리지 볼륨을 기반으로 하는 데 사용 중인 스토리지 볼륨과 동일한 스토리지 풀일 필요는 없습니다.--file string
- required - 스토리지 볼륨의 매개 변수가 포함된 XML 파일의 이름을 포함합니다.--Vol string
- required - 이 새 스토리지 볼륨을 기반으로 하는 데 사용 중인 스토리지 볼륨의 이름을 포함합니다.--inputpool 문자열
- 선택 사항 - 새 스토리지 볼륨의 입력으로 사용하는 스토리지 볼륨과 연결된 스토리지 풀의 이름을 지정할 수 있습니다.--prealloc-metadata
- 선택 사항 - 새 스토리지 볼륨에 대한 전체 할당 대신 metadata ( qcow2의 경우)를 사전 할당합니다.
20.30.2. 매개 변수에서 스토리지 볼륨 생성
[-pool] string
- required - 연결된 스토리지 풀의 이름을 포함합니다.[--name] 문자열
- required - 새 스토리지 볼륨의 이름을 포함합니다.[-capacity] 문자열
- required - 정수로 표시된 스토리지 볼륨의 크기를 포함합니다. 지정하지 않는 경우 기본값은 바이트입니다. 각각 B, k, M, G, T 접미사를 바이트, 킬로바이트, 메가바이트, 기가바이트, 테라바이트에 사용합니다.--allocation 문자열
- 선택 사항 - 초기 할당 크기를 포함하는 정수입니다. 지정하지 않는 경우 기본값은 바이트입니다.--format 문자열
- 선택 사항 - 파일 형식 유형이 포함됩니다. 허용 가능한 유형에는 raw, bochs, qcow2, qed, host_device, vmdk 등이 있습니다. 그러나 이는 파일 기반 스토리지 풀에만 사용됩니다. 기본적으로 qcow 버전은 버전 3입니다. 버전을 변경하려면 23.19.2절. “대상 요소 설정” 를 참조하십시오.--backing-vol 문자열
- 선택 사항 - 백업 볼륨이 포함되어 있습니다. 스냅샷을 생성하는 경우 사용됩니다.--backing-vol-format 문자열
- 선택 사항 - 백업 볼륨의 형식이 포함됩니다. 스냅샷을 생성하는 경우 사용됩니다.--prealloc-metadata
- 선택 사항 - 메타데이터를 사전 할당할 수 있습니다(전체 할당 대신 qcow2의 경우).
예 20.88. 매개변수 세트에서 스토리지 볼륨을 생성하는 방법
# virsh vol-create-as vdisk vol-new 100M
vol vol-new created
20.30.3. XML 파일에서 스토리지 볼륨 생성
예 20.89. 기존 XML 파일에서 스토리지 볼륨을 생성하는 방법
<volume> <name>vol-new</name> <allocation>0</allocation> <capacity unit="M">100</capacity> <target> <path>/var/lib/libvirt/images/vol-new</path> <permissions> <owner>107</owner> <group>107</group> <mode>0744</mode> <label>virt_image_t</label> </permissions> </target> </volume>
/var/lib/libvirt/images/vol-new
입니다.
# virsh vol-create vdisk vol-new.xml
vol vol-new created
20.30.4. 스토리지 볼륨 복제
--pool 문자열
옵션을 사용할 수 있습니다. vol 인수는 소스 스토리지 볼륨의 이름 또는 키 또는 경로이며 name 인수는 새 스토리지 볼륨의 이름을 나타냅니다. 자세한 내용은 13.3.2.1절. “virsh를 사용하여 스토리지 볼륨 생성” 에서 참조하십시오.
예 20.90. 스토리지 볼륨을 복제하는 방법
# virsh vol-clone vol-new vol-clone
vol vol-clone cloned from vol-new
20.31. 스토리지 볼륨 삭제
pool
명령은 지정된 볼륨을 삭제합니다. 명령에는 볼륨이 있는 스토리지 풀의 이름 또는 UUID와 스토리지 볼륨 이름이 필요합니다. 볼륨 이름 대신 삭제할 볼륨의 키 또는 경로를 사용할 수도 있습니다.
예 20.91. 스토리지 볼륨 삭제 방법
# virsh vol-delete new-vol vdisk
vol new-vol deleted
20.32. 스토리지 볼륨의 콘텐츠 삭제
풀의 이름 또는 UUID인 --pool
풀 과 초기화할 볼륨의 이름 또는 키 또는 경로인 풀이 필요합니다. --algorithm
인수와 다음과 같은 지원되는 알고리즘 유형 중 하나를 사용하여 0으로 볼륨을 다시 작성하는 대신 다른니핑 알고리즘을 선택할 수 있습니다.
Zero
- 1-pass all zeros- NNSA - 4-pass NNSA Policy Letter NAP-14.1-C (XVI-8) for sanitizing removable and non-movable hard disks: random x2, 0x00, verify.
- DoD - 4-pass DoD 5220.22-M 섹션 8-306: 이동식 및 비-재개 디스크: random, 0x00, 0xff, verify.
DomainMapping
- 정보기술 ( 독일어 센터 of Security Center of Security in Information technologies에서 권장하는 9-pass 방법: 0xff, 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f.Gutmann -
Gutmann의 문서에 설명된 표준 35-pass 시퀀스입니다.Schneier - "
Applied Cryptography" (1996)의 Bruce Schneier에서 설명하는 7-pass 방법: 0x00, 0xff, 임의의 x5.Pfitzner7
- Roy Pfitzner의 7-random-pass 방법: random x7Pfitzner33
- Roy Pfitzner's 33-random-pass 방법: random x33.random
- 1-pass 패턴: random.
예 20.92. 스토리지 볼륨의 콘텐츠를 삭제하는 방법(스토리지 볼륨을 삭제하는 방법)
# virsh vol-wipe new-vol vdisk
vol new-vol wiped
20.33. XML 파일에 스토리지 볼륨 정보 덤프
--pool
옵션을 사용하여 연결된 스토리지 풀의 이름을 제공할 수 있습니다.
예 20.93. 스토리지 볼륨의 내용을 덤프하는 방법
# virsh vol-dumpxml vol-new
20.34. 볼륨 정보 나열
--pool
옵션을 허용합니다. 풀 이름 또는 UUID를 제공할 수 있습니다.
예 20.94. 스토리지 볼륨에 대한 정보를 확인하는 방법
# virsh vol-info vol-new
--details
옵션은 virsh 에 사용 가능한 볼륨 유형 및 용량 관련 정보를 추가로 표시하도록 지시합니다.
예 20.95. 스토리지 볼륨과 연결된 스토리지 풀을 표시하는 방법
# virsh vol-list vdisk
20.35. 스토리지 볼륨 정보 검색
uuid
옵션을 사용하면 풀 UUID가 대신 반환됩니다. 명령에는 요청된 정보를 반환하는 스토리지 볼륨의 키 또는 경로가 필요합니다.
예 20.96. 스토리지 볼륨의 이름 또는 UUID를 표시하는 방법
/var/lib/libvirt/images/vol-new
경로에 있는 스토리지 볼륨의 이름을 검색합니다.
# virsh vol-pool /var/lib/libvirt/images/vol-new
vol-new
--pool pool-or-uuid
vol-name-or-key 명령은 지정된 볼륨의 경로를 반환합니다. 명령에는 볼륨이 있는 스토리지 풀의 이름 또는 UUID인 --pool pool-or-uuid
가 필요합니다. 또한 경로가 요청된 볼륨의 이름 또는 키인 vol-name-or-key 가 필요합니다.
--pool pool-or-uuid
vol-name-or-path 명령은 지정된 볼륨의 볼륨 키를 반환합니다. --pool pool-or-uuid
는 볼륨이 있는 스토리지 풀의 이름 또는 UUID이며 vol-name-or-path 는 볼륨 키를 반환할 볼륨의 이름 또는 경로입니다.
20.36. 게스트 가상 머신 정보 표시
20.36.1. 게스트 가상 머신 표시
# virsh list
--all
- 모든 게스트 가상 머신을 나열합니다. 예를 들면 다음과 같습니다.# virsh list --all Id Name State ---------------------------------- 0 Domain-0 running 1 Domain202 paused 2 Domain010 shut off 3 Domain9600 crashed
참고virsh list --all 을 실행할 때 결과가 표시되지 않으면 root 사용자로 가상 머신을 생성하지 못할 수 있습니다.virsh list --all 명령은 다음 상태를 인식합니다.- Running -
running
상태는 현재 CPU에서 활성 상태인 게스트 가상 머신을 나타냅니다. - idle -
유휴
상태는 게스트 가상 머신이 유휴 상태이며 실행 중이거나 실행되지 않을 수 있음을 나타냅니다. 이는 게스트 가상 시스템이 I/O(기존 대기 상태)에서 대기 중인 경우 또는 다른 작업을 수행할 수 없으므로 유휴 상태가 되지 않은 경우 발생할 수 있습니다. - 일시 정지 - 게스트 가상 머신이 일시 중지되면 메모리와 기타 리소스를 소비하지만 하이퍼바이저에서 CPU 리소스를 예약할 수 없습니다.
일시 정지
상태는 virt-manager 또는 virsh suspend 명령에서 일시 정지 버튼을 사용한 후에 발생합니다. - 종료
중
- 종료 중 상태는 게스트 가상 시스템 종료 프로세스에 사용됩니다. 게스트 가상 시스템은 종료 신호를 전송하며 작업을 정상적으로 중지하는 프로세스에 있어야 합니다. 이는 모든 게스트 가상 머신 운영 체제에서는 작동하지 않을 수 있습니다. 일부 운영 체제는 이러한 신호에 응답하지 않습니다. shut off
- guest 가상 머신이 실행되지 않음을 나타냅니다. 이는 게스트 가상 머신이 완전히 종료되거나 시작되지 않은 경우 발생할 수 있습니다.- 충돌 -
충돌
상태는 게스트 가상 머신이 충돌했으며 게스트 가상 시스템이 충돌하도록 구성되지 않은 경우에만 발생할 수 있음을 나타냅니다. - pmsuspended - 게스트 전원 관리에 의해 일시 중단되었습니다.
--inactive
- 정의된 게스트 가상 머신을 나열하지만 현재 활성화되어 있지 않습니다. 여기에는 및크래시
된 시스템이 포함됩니다.--managed-save
- Save state가 활성화된 게스트가저장된
것으로 나열됩니다. 이 옵션을 사용하여 게스트를 필터링하려면--all
또는--inactive
옵션도 사용해야 합니다.--name
- 명령은 기본 테이블 형식 대신 게스트의 이름을 나열합니다. 이 옵션은 게스트 UUID 목록만 인쇄하고 테이블 스타일 출력을 사용해야 함을 결정하는--table
옵션을 사용하여--uuid
옵션과 함께 사용할 수 없습니다.--title
- 일반적으로 게스트에 대한 간단한 설명이 포함된 게스트제목
필드도 나열됩니다. 이 옵션은 기본값(-table
) 출력 형식과 함께 사용해야 합니다. 예를 들면 다음과 같습니다.$ virsh list --title Id Name State Title ---------------------------------------------------------------------------- 0 Domain-0 running Mailserver1 2 rhelvm paused
--persistent
- 영구 게스트만 목록에 포함됩니다.--transient
인수를 사용하여 일시적인 게스트를 나열합니다.--with-managed-save
- 관리형 저장소로 구성된 게스트를 나열합니다. 키가 없는 게스트를 나열하려면-- without-managed-save
옵션을 사용합니다.--state-running
- 실행 중인 게스트만 나열합니다. 마찬가지로 일시 중지된 게스트에--state-paused
를 사용하고, 꺼진 게스트의 경우--state-shutoff
를 사용하고--state-other
는 모든 상태를 폴백으로 나열합니다.--autostart
- 자동 시작 게스트만 나열됩니다. 이 기능이 비활성화된 게스트를 나열하려면--no-autostart
인수를 사용합니다.--with-snapshot
- 스냅샷 이미지를 나열할 수 있는 게스트를 나열합니다. 스냅샷이 없는 게스트를 필터링하려면--without-snapshot
옵션을 사용합니다.
20.36.2. 가상 CPU 정보 표시
# virsh vcpuinfo {domain-id, domain-name or domain-uuid}
# virsh vcpuinfo guest1
VCPU: 0
CPU: 2
State: running
CPU time: 7152.4s
CPU Affinity: yyyy
VCPU: 1
CPU: 2
State: running
CPU time: 10889.1s
CPU Affinity: yyyy
20.36.3. 호스트 물리적 머신의 CPU에 vCPU 고정
# virsh vcpupin guest1
VCPU: CPU Affinity
----------------------------------
0: 0-3
1: 0-3
--vCPU
에는 vcpu 번호가 필요합니다.[--cpulist] 문자열
은 설정할 호스트 물리적 머신의 CPU 수를 나열하거나 쿼리할 옵션을 생략합니다.--config
는 다음 부팅에 영향을 미칩니다.--live
는 실행 중인 게스트 가상 머신에 영향을 미칩니다.--current
은 현재 게스트 가상 머신 상태에 영향을 미칩니다.
20.36.4. Given 도메인의 가상 CPU 수에 대한 정보 표시
# virsh vcpucount guest1
maximum config 2
maximum live 2
current config 2
current live 2
--maximum
get maximum on vcpus--active
get number of currently active vcpus--live
get value from running guest virtual machine--config
get value to be used on next boot- 현재 게스트 가상 머신 상태에 따라
--current
get value - 반환된
--guest
수는 게스트 관점에서입니다.
20.36.5. 가상 CPU 유사성 구성
# virsh vcpupin domain-id vcpu cpulist
--config
와 같은 추가 매개변수는 다음 부팅에 미치는 반면 --live
는 실행 중인 게스트 가상 머신 및 --current
은 현재 게스트 가상 머신 상태에 영향을 미칩니다.
20.36.6. 가상 CPU 수 구성
--config
플래그를 사용하십시오. virsh 를 사용하여 게스트 가상 머신에 할당된 CPU 수를 수정하려면 다음을 수행합니다.
# virsh setvcpus {domain-name, domain-id or domain-uuid} count [[--config] [--live] | [--current]] [--maximum] [--guest]
# virsh setvcpus guestVM1 2 --live
--config
플래그가 지정되면 게스트 가상 시스템에 저장된 XML 구성이 변경되고 게스트가 시작될 때만 적용됩니다.
--live
가 지정되면 게스트 가상 머신이 활성화되어야 하며 변경 사항이 즉시 수행됩니다. 이 옵션을 사용하면 vCPU를 핫 플러그로 연결할 수 있습니다. 하이퍼바이저에서 지원하는 경우 --config
및 --live
플래그를 모두 함께 지정할 수 있습니다.
--current
이 지정된 경우 플래그는 현재 게스트 가상 머신 상태에 영향을 미칩니다.
--live
플래그를 가정합니다. 게스트 가상 머신이 활성 상태가 아닌 경우 명령이 실패합니다. 또한 지정된 플래그가 없는 경우 --config
플래그도 가정했는지 하이퍼바이저에 따라 달라집니다. 이렇게 하면 XML 구성이 변경되도록 조정되는지가 결정됩니다.
--maximum
플래그는 다음에 게스트 가상 머신을 부팅할 때 핫플러그할 수 있는 최대 가상 CPU 수를 제어합니다. 따라서 --live
플래그를 사용하는 것이 아니라 --config
플래그에서만 사용할 수 있습니다.
개수
는 게스트 가상 머신에 할당된 CPU 수를 초과할 수 없습니다.
--guest
가 지정된 경우 플래그는 현재 게스트 가상 시스템의 CPU 상태를 수정합니다.
20.36.7. 메모리 할당 구성
# virsh setmem {domain-id or domain-name} count
# virsh setmem vr-rhel6u1-x86_64-kvm --kilobytes 1025000
수
를 킬로바이트로 지정해야 합니다. 새 개수 값은 게스트 가상 머신에 지정한 양을 초과할 수 없습니다. 64MB 미만의 값은 대부분의 게스트 가상 머신 운영 체제에서는 작동하지 않을 수 있습니다. 최대 메모리 값이 클수록 활성 게스트 가상 머신에는 영향을 미치지 않습니다. 새 값이 사용 가능한 메모리보다 작으면 게스트 가상 머신이 충돌할 수 있습니다.
- domain - 도메인 이름, id 또는 uuid로 지정
- size - 스케일링된 정수로 새 메모리 크기를 결정합니다. 기본 단위는 KiB이지만 다른 단위를 지정할 수 있습니다.유효한 메모리 단위는 다음과 같습니다.
- 바이트의 경우
B
또는바이트
KB
(KB: 킬로바이트)(10~1000바이트 블록)k
ibibytes의 경우 K 또는KiB
(210 또는 1024바이트 블록)- 메가바이트(
MB
)의 경우 1TiB바이트의6 개 또는 블록입니다. - 메비 바이트의 경우 m 또는
MiB
(20 또는 블록 1,048,576 바이트) GB
(GB for gigabytes)(9 또는 1,000만 바이트 블록)G
orGiB
for gibibytes (230 또는 블록 1,073,741,824 바이트)- 테라바이트의 경우
TB
(10만바이트)11,000 만바이트의 블록(12개 또는 블록) t
또는TiB
for tebibytes(240 또는 블록 1,099,511,627,776 바이트)
모든 값은 libvirt에 의해 가장 가까운 kibibyte로 반올림되며 하이퍼바이저에서 지원하는 단위로 추가로 반올림될 수 있습니다. 또한 일부 하이퍼바이저는 4000KiB(또는 4000 x 210 또는 4,096,000바이트)와 같은 최소값을 적용합니다. 이 값의 단위는 선택적 특성메모리 단위에
따라 결정되며, 기본값은 kibibytes (KiB) 단위로 지정되며, 여기서 지정된 값이 210 또는 1024 바이트 블록으로 곱한 측정 단위로 설정됩니다. --config
- 명령은 다음 부팅에 적용됩니다.--live
- 명령은 실행 중인 게스트 가상 머신의 메모리를 제어합니다.--current
- 명령은 현재 게스트 가상 머신의 메모리를 제어합니다.
20.36.8. 도메인의 메모리 할당 변경
--config
--live
--current
명령을 사용하면 다음과 같이 게스트 가상 시스템에 대한 최대 메모리 할당을 설정할 수 있습니다.
# virsh setmaxmem guest1 1024 --current
--config
- 다음 부팅에 영향을 미칩니다.--live
- 실행 중인 게스트 가상 머신의 메모리를 제어하여 하이퍼바이저를 통해 최대 메모리 제한을 실시간으로 변경할 수 있는 것은 아니므로 하이퍼바이저가 이 작업을 지원합니다.--current
- 현재 게스트 가상 머신의 메모리 제어
20.36.9. 게스트 가상 머신 블록 장치 정보 표시
--human
을 사용하여 더 친숙한 방식으로 통계를 표시합니다.
# virsh domblkstat GuestName block-device
20.36.10. 게스트 가상 머신 네트워크 장치 정보 표시
# virsh domifstat GuestName interface-device
20.37. 가상 네트워크 관리
# virsh net-list
# virsh net-list
Name State Autostart
-----------------------------------------
default active yes
vnet1 active yes
vnet2 active yes
# virsh net-dumpxml NetworkName
# virsh net-dumpxml vnet1
<network>
<name>vnet1</name>
<uuid>98361b46-1581-acb7-1643-85a412626e70</uuid>
<forward dev='eth0'/>
<bridge name='vnet0' stp='on' forwardDelay='0' />
<ip address='192.168.100.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.100.128' end='192.168.100.254' />
</dhcp>
</ip>
</network>
- virsh net-autostart network-name : libvirt 데몬이 시작될 때 network-name 을 자동으로 시작합니다.
--disable
옵션은 network-name 을 표시합니다. - virsh net-create XMLfile : 기존 파일의 XML 정의를 사용하여 새(전송) 네트워크를 시작합니다.
- virsh net-define XMLfile : 시작하지 않고 기존 파일의 XML 정의를 사용하여 새 네트워크를 정의합니다.
- virsh net-destroy network-name : 네트워크 이름으로 지정된 네트워크를 삭제합니다.
- virsh net-name networkUUID : 지정된 네트워크 UUID 를 네트워크 이름으로 변환합니다.
- virsh net-uuid network-name : 지정된 네트워크 이름을 네트워크 UUID로 변환합니다.
- virsh net-start nameOfInactiveNetwork : 비활성 네트워크를 시작합니다.
- virsh net-undefine nameOfInactiveNetwork : 네트워크의 비활성 XML 정의를 제거합니다. 이는 네트워크 상태에 영향을 미치지 않습니다. 이 명령이 실행될 때 도메인이 실행 중인 경우 네트워크가 계속 실행됩니다. 그러나 네트워크는 영구적이지 않습니다.
20.37.1. 가상 네트워크 자동 시작
# virsh net-autostart network [--disable
]
--disable
옵션을 허용합니다.
20.37.2. XML 파일에서 가상 네트워크 생성
# virsh net-create file
20.37.3. XML 파일에서 가상 네트워크 정의
# virsh net-define file
20.37.4. 가상 네트워크 중지
# virsh net-destroy network
20.37.5. 덤프 파일 생성
--inactive
가 지정된 경우 물리적 함수가 연결된 가상 기능으로 확장되지 않습니다.
# virsh net-dumpxml network [--inactive
]
20.37.6. 가상 네트워크의 XML 구성 파일 편집
# virsh net-edit network
20.37.7. 가상 네트워크에 대한 정보 가져오기Getting information about a Virtual Network
# virsh net-info network
20.37.8. 가상 네트워크에 대한 정보 나열
--all
을 지정하면 정의되었지만 비활성 네트워크가 포함됩니다. --inactive
가 지정된 경우 비활성 항목만 나열됩니다. 또한 반환된 네트워크를 --persistent
로 필터링하여 영구 네트워크를 나열합니다. --transient
는 일시적인 네트워크를 나열하고 --autostart
를 사용하여 autostart가 활성화된 것을 나열하고 --no-autostart
를 사용하여 autostart가 비활성화된 항목을 나열할 수도 있습니다.
# virsh net-list [--inactive
| --all
] [--persistent
] [<--transient
>] [--autostart] [<--no-autostart
>]
20.37.9. 네트워크 UUID를 네트워크 이름으로 변환
# virsh net-name network-UUID
20.37.10. 네트워크 이름을 네트워크 UUID로 변환
# virsh net-uuid network-name
20.37.11. 이전 정의된 Inactive 네트워크 시작
# virsh net-start network
20.37.12. Inactive Network 설정 해제
# virsh net-undefine network
20.37.13. 기존 네트워크 정의 파일 업데이트
# virsh net-update network directive section XML [--parent-index index]
[[--live]
[--config]
| [--current]]
add-first
add-last
또는add
(이는 동의어)delete
수정
bridge
domain
ip
ip-dhcp-host
ip-dhcp-range
forward
forward interface
forward-pf
portgroup
dns-host
dns-txt
dns-srv
ip-dhcp-host
는 네트워크의 <ip>
요소 내의 <dhcp>
요소에 포함된 <호스트>
요소를 변경합니다.
<host mac="00:11:22:33:44:55' ip='1.2.3.4'/>
) 또는 완전한 XML 요소가 포함된 파일의 이름입니다. 디ambiguation은 제공된 텍스트의 첫 번째 문자를 보고 수행되며 첫 번째 문자가 <
이면 XML 텍스트입니다. 첫 번째 문자가 아닌 경우 사용할 xml 텍스트가 포함된 파일의 이름입니다.
--parent-index
옵션은 요청된 요소가 있는 여러 개의 상위 요소(0 기반)를 지정하는 데 사용됩니다.
<호스트>
요소는 네트워크의 여러 < <ip>
>
요소 중 하나에 있을 수 있습니다. parent-index가 제공되지 않으면(일반적으로 이미 <dhcp>
요소가 있는 유일한 <IP>
요소)가 선택되지만 --parent-index
가 지정된 경우 해당 특정 인스턴스가 수정됩니다. --live
를 지정하면 실행 중인 네트워크에 영향을 미칩니다. --config
를 지정하면 영구 네트워크의 다음 시작에 영향을 미칩니다. --current
이 지정된 경우 현재 네트워크 상태에 영향을 미칩니다. --live
및 --config
플래그를 모두 제공할 수 있지만 --current
는 배타적입니다. 플래그를 지정하지 않는 것은 --current
을 지정하는 것과 동일합니다.
20.37.14. virsh를 사용하여 게스트 가상 머신 마이그레이션
20.37.15. 게스트 가상 머신의 고정 IP 주소 설정
"nat"
, "route"
또는 전달 모드가 없는 libvirt 가상 네트워크에 연결된 게스트 인터페이스에서만 작동합니다. 이 절차는 네트워크가 forward mode="bridge"
또는 "hostdev"
로 구성된 경우 작동하지 않습니다. 이러한 경우 DCHP 서버는 네트워크의 다른 위치에 위치하므로 libvirt를 관리하지 않습니다. 이 경우 원격 DHCP 서버에서 고정 IP 항목을 만들어야 합니다. 이러한 작업을 수행하려면 서버에 제공된 설명서를 참조하십시오.
절차 20.5. 고정 IP 주소 설정
게스트 XML 구성 파일 확인
virsh domiflist guest1명령을 실행하여 게스트 의 네트워크 구성 설정을 표시합니다. guest1 대신 가상 머신의 이름을 대체합니다. 테이블이 표시됩니다. Source 열을 확인합니다. 네트워크의 이름입니다. 이 예제에서는 네트워크를 default라고 합니다. 이 이름은 절차의 나머지 부분과 MAC 주소로 사용됩니다.# virsh
domiflist guest1
Interface Type Source Model MAC ------------------------------------------------------- vnet4 network default virtio 52:54:00:48:27:1DDHCP 범위 확인
설정한 IP 주소는 네트워크에 지정된 dhcp 범위 내에 있어야 합니다. 또한 네트워크의 다른 기존 고정 IP 주소와 충돌하지 않아야 합니다. 사용 가능한 주소 범위와 사용되는 주소를 확인하려면 호스트 머신에서 다음 명령을 사용하십시오.# virsh
net-dumpxml default | egrep 'range|host\ mac'
<range start='198.51.100.2' end='198.51.100.254'/> <host mac='52:54:00:48:27:1C:1D' ip='198.51.100.2'/>표시되는 출력은 예제와 다르며 더 많은 행과 여러 개의 호스트 mac 행이 표시될 수 있습니다. 각 게스트 고정 IP 주소에는 하나의 행이 있습니다.고정 IP 주소 설정
호스트 시스템에서 다음 명령을 사용하고 default 를 네트워크 이름으로 바꿉니다.# virsh net-update default add ip-dhcp-host '<host mac="52:54:00:48:27:1D" ip="198.51.100.3"/>' --live --config
--live
옵션을 사용하면 이 변경 사항을 즉시 적용할 수 있으며--config
옵션을 사용하면 영구적으로 변경됩니다. 이 명령은 유효한 IP 및 MAC 주소를 사용하는 한 아직 생성되지 않은 게스트 가상 머신에서도 작동합니다. MAC 주소는 유효한 유니캐스트 MAC 주소(:
로 구분된 6 16진수 쌍)이어야 합니다. libvirt 에서 새 임의의 MAC 주소를 생성하는 경우 처음 세 자리 쌍에52:54:00
을 사용하므로 이 규칙을 따르는 것이 좋습니다.인터페이스 다시 시작 (선택 사항)
게스트 가상 머신이 현재 실행 중인 경우 게스트 가상 머신에서 DHCP 주소를 다시 요청하도록 강제해야 합니다. 게스트가 실행되고 있지 않으면 다음에 시작할 때 새 IP 주소가 구현됩니다. 인터페이스를 다시 시작하려면 호스트 시스템에 다음 명령을 입력합니다.# virsh domif-setlink guest1 52:54:00:48:27:1D down # sleep 10 # virsh domif-setlink guest1 52:54:00:48:27:1D up
이 명령을 실행하면 게스트 가상 머신의 운영 체제가 이더넷 케이블이 연결되지 않은 것으로 간주하고 10초 후에 다시 연결될 수 있습니다. sleep 명령은 많은 DHCP 클라이언트가 IP 주소를 다시 요청하지 않고 케이블의 연결을 끊을 수 있기 때문에 중요합니다. 10초 정도 길어서 DHCP 클라이언트가 이전 IP 주소를 잊어 버리고, up 명령이 실행되면 새 IP 주소를 요청합니다. 어떤 이유로든 이 명령이 실패하는 경우 게스트 운영 체제의 관리 인터페이스에서 게스트 인터페이스를 재설정해야 합니다.
20.38. 인터페이스 명령
네트워크
서비스를 대신 사용합니다.
<인터페이스>
요소(예: 시스템 생성 브리지 인터페이스) 내의 이름으로 사용할 수 있지만 호스트 인터페이스를 특정 게스트 구성 XML에 연결할 필요는 없습니다. 호스트 인터페이스의 많은 명령은 게스트 가상 머신에 사용되는 명령과 유사하며 인터페이스 이름을 지정하는 방법은 이름 또는 MAC 주소에 따라 다릅니다. 그러나 iface
인수에 MAC 주소를 사용하는 것은 해당 주소가 고유할 때만 작동합니다(인터페이스와 브리지가 동일한 MAC 주소를 공유하는 경우, 종종 해당 MAC 주소를 사용하면 모호함으로 인해 오류가 발생하고 대신 이름에 의존해야 합니다).
20.38.1. XML 파일을 통해 호스트 물리적 머신 인터페이스 정의 및 시작
# virsh iface-define iface.xml
20.38.2. 호스트 인터페이스의 XML 구성 파일 편집
20.38.3. 호스트 인터페이스 나열
--all
이 지정된 경우 이 목록에는 정의되어 있지만 비활성 상태인 인터페이스도 포함됩니다. --inactive
가 지정된 경우 비활성 인터페이스만 나열됩니다.
20.38.4. MAC 주소를 인터페이스 이름으로 변환
20.38.5. 특정 호스트 물리적 머신 인터페이스 중지 및 해제
20.38.6. 호스트 구성 파일 표시
--inactive
명령은 호스트 인터페이스 정보를 stdout에 대한 XML 덤프로 표시합니다. --inactive
인수가 지정된 경우 출력은 다음에 시작할 인터페이스의 영구 상태를 반영합니다.
20.38.7. 브리지 장치 생성
# virsh iface-bridge interface bridge
--no-stp
옵션, --no-start
옵션 및 지연 시간(초)을 사용하여 변경할 수 있습니다. 인터페이스의 IP 주소 구성은 새 브리지 장치로 이동합니다. 브리지 분리에 대한 자세한 내용은 다음을 참조하십시오. 20.38.8절. “브리지 장치 분리”
20.38.8. 브리지 장치 분리
--no-start
명령은 지정된 브리지 장치인 bridge 를 종료하고 기본 인터페이스를 다시 일반 사용량으로 해제한 후 브리지 장치에서 기본 IP 주소 구성을 기본 장치로 이동합니다. 기본 인터페이스는 --no-start
인수를 사용하지 않는 한 재시작되지만 일반적으로 다시 시작하지 않는 것은 권장되지 않습니다. 브리지를 만들려면 20.38.7절. “브리지 장치 생성” 를 참조하십시오.
20.38.9. 인터페이스 스냅샷 조작
예 20.97. 스냅샷 작업 예
# virsh iface-begin # virsh iface-define eth4-if.xml # virsh if-start eth4
# virsh iface-rollback
# virsh iface-commit
20.39. 스냅샷 관리
20.39.1. 스냅샷 생성
<name>
및 <description>
요소, <disks>
). 스냅샷을 실행하려면 다음을 수행합니다.
# virsh snapshot-create domain XML file [--redefine [--current] [--no-metadata] [--halt] [--disk-only] [--reuse-external] [--quiesce] [--atomic]
--disk-only
- 게스트 가상 머신의 메모리 상태가 스냅샷에 포함되지 않습니다.- XML 파일 문자열이 완전히 생략된 경우 libvirt는 모든 필드의 값을 선택합니다. 새 스냅샷은 snapshot-current에 나열된 대로 최신 상태가 됩니다. 또한 스냅샷에는 게스트 가상 머신 상태가 있는 일반 시스템 검사점이 아닌 디스크 상태만 포함됩니다. 디스크 스냅샷은 전체 시스템 체크포인트보다 빠르지만 디스크 스냅샷으로 되돌리려면 power cord가 예기치 않게 가져온 시점의 디스크 상태와 같기 때문에 fsck 또는 저널 리플레이가 필요할 수 있습니다.
--halt
및--disk-only
를 혼합하면 그 때 디스크에 플러시되지 않은 데이터가 손실됩니다. --halt
- 스냅샷을 생성한 후 게스트 가상 머신이 비활성 상태가 됩니다.--halt
및--disk-only
를 혼합하면 메모리 상태 외에도 디스크로 플러시되지 않은 데이터가 손실됩니다.--redefine
은 virsh snapshot-dumpxml 에 의해 생성된 모든 XML 요소가 유효한 경우, 스냅샷 계층 구조를 다른 머신으로 마이그레이션하고, 임시 게스트 가상 머신의 경우 계층 구조를 다시 만드는 데 사용할 수 있고 나중에 동일한 이름과 UUID로 다시 생성되거나 스냅샷 메타데이터(예: 호스트별 가상 머신의 게스트 XML)에서 가상 머신의 특정 측면을 추측하는 데 사용할 수 있습니다. 이 플래그를 제공하면xmlfile
인수가 필수이며--current
플래그를 지정하지 않는 한 게스트 가상 머신의 현재 스냅샷이 변경되지 않습니다.--no-metadata
는 스냅샷을 생성하지만(즉, libvirt는 스냅샷을 현재 상태로 처리하지 않으며,--redefine
이 나중에 메타데이터에 대해 libvirt 를 교육하는 데 사용되지 않는 한) 스냅샷으로 되돌릴 수 없습니다.--reuse-external
. used 및 스냅샷 XML에서 기존 파일 대상이 있는 외부 스냅샷을 요청하는 경우 대상이 존재하고 재사용되어야 합니다. 그렇지 않으면 기존 파일의 내용이 손실되지 않도록 스냅샷이 거부됩니다.--quiesce
libvirt는 게스트 가상 시스템의 마운트된 파일 시스템을 정지하고 해제하려고 합니다. 그러나 게스트 가상 머신에 게스트 에이전트가 없는 경우 스냅샷 생성에 실패합니다. 스냅샷에는 가상 게스트 머신의 메모리 상태가 포함될 수 있습니다. 스냅샷은 외부이어야 합니다.--Atomic
을 사용하면 libvirt에서 스냅샷이 성공하거나 변경없이 실패하도록 합니다. 모든 하이퍼바이저가 이를 지원하는 것은 아닙니다. 이 플래그를 지정하지 않으면 작업을 부분적으로 수행한 후 일부 하이퍼바이저가 실패할 수 있으며, partial changes가 발생하는지 확인하려면 virsh dumpxml 을 사용해야 합니다.
20.39.2. 현재 게스트 가상 머신의 스냅샷 생성
이름
및 설명
요소)에 지정된 속성을 사용하여 게스트 가상 머신의 스냅샷을 생성합니다. 이러한 값이 XML 문자열에 포함되어 있지 않으면 libvirt 에서 값을 선택합니다. 스냅샷을 실행하려면 다음을 수행합니다.
# snapshot-create-as domain {[--print-xml] | [--no-metadata] [--halt] [--reuse-external]} [name] [description] [--disk-only [--quiesce]] [--atomic] [[--memspec memspec]] [--diskspec] diskspec]
--print-xml
은 스냅샷을 실제로 생성하는 대신 snapshot-create 에 적절한 XML을 출력으로 생성합니다.--halt
는 스냅샷을 생성한 후 게스트 가상 머신을 비활성 상태로 유지합니다.--disk-only
는 게스트 가상 머신 상태가 포함되지 않은 스냅샷을 생성합니다.--memspec
을 사용하여 checkpoint가 내부인지 외부인지 제어할 수 있습니다. 플래그는 필수이며 [file=]name[,snapshot=type]. 여기서 type은 none, internal 또는 external 형식이어야 합니다. file=name에 리터럴 쉼표를 포함하려면 두 번째 쉼표로 이스케이프합니다.--diskspec
옵션을 사용하여--disk-only
및 외부 검사점이 외부 파일을 생성하는 방법을 제어할 수 있습니다. 이 옵션은 도메인 XML의<disk>
요소 수에 따라 여러 번 발생할 수 있습니다. 각<diskspec>
은 디스크[,snapshot=type][,driver=type][,file=name] 형식으로 되어 있습니다. 특정 디스크에--diskspec
을 생략하면 가상 머신 구성의 기본 동작이 사용됩니다. 리터럴 쉼표를 디스크 또는 file=name 에 포함하려면 두 번째 쉼표로 이스케이프합니다. 리터럴--diskspec
은 세 가지 도메인,이름 및 설명이 모두 존재하지 않는 한 각 디스크spec 앞에 와야 합니다. 예를 들어 vda,snapshot=external,file=/path/to의 diskspec은 다음 XML이 생성됩니다.<disk name=’vda’ snapshot=’external’> <source file=’/path/to,new’/> </disk>
중요Red Hat은 다른 가상화 툴에서 처리할 때 보다 유연하고 신뢰할 수 있으므로 외부 스냅샷을 사용하는 것이 좋습니다. 외부 스냅샷을 만들려면--diskspec vda,snapshot=external
옵션과 함께 virsh-create-as 명령을 사용하십시오.이 옵션을 사용하지 않는 경우 virsh 는 안정성 및 최적화 부족으로 인해 사용할 수 없는 내부 스냅샷을 생성합니다. 자세한 내용은 A.13절. “libvirt를 사용하여 외부 스냅샷 생성을 위한 해결방법”의 내용을 참조하십시오.--reuse-external
이 지정되고 도메인 XML 또는 diskspec 옵션은 기존 파일 대상이 있는 외부 스냅샷을 요청한 다음 대상이 있어야 하며 재사용해야 합니다. 그렇지 않으면 기존 파일의 내용이 손실되지 않도록 스냅샷이 거부됩니다.--quiesce
를 지정하면 libvirt에서 게스트 에이전트를 사용하여 게스트 가상 시스템의 마운트된 파일 시스템을 정지 및 해제하려고 합니다. 그러나 도메인에 게스트 에이전트가 없는 경우 스냅샷 생성에 실패합니다. 현재 이 작업을 수행하려면--disk-only
를 전달해야 합니다.--no-metadata
는 스냅샷 데이터를 생성하지만, 메타데이터는 즉시 삭제(즉,libvirt 가 스냅샷을 현재 상태로 처리하지 않으며, 스냅샷 생성은 나중에 메타데이터에 대해 libvirt를 교육하는 데 사용되지 않는 한 스냅샷으로 되돌릴 수 없습니다). 이 플래그는--print-xml
과 호환되지 않습니다.--Atomic
을 사용하면 libvirt에서 스냅샷이 성공하거나 변경없이 실패하도록 합니다. 모든 하이퍼바이저가 이를 지원하는 것은 아닙니다. 이 플래그를 지정하지 않으면 작업을 부분적으로 수행한 후 일부 하이퍼바이저가 실패할 수 있으며, partial changes가 발생하는지 확인하려면 virsh dumpxml 을 사용해야 합니다.
20.39.3. 사용 중인 스냅샷 표시
# virsh snapshot-current domain {[--name] | [--security-info] | [snapshotname]}
snapshotname
을 사용하지 않으면 게스트 가상 머신의 현재 스냅샷(있는 경우)에 대한 스냅샷 XML이 출력으로 표시됩니다. --name
이 지정된 경우 전체 XML 대신 현재 스냅샷 이름만 출력으로 전송됩니다. security-info
를 제공하면 중요한 정보가 XML에 포함됩니다. snapshotname
을 사용하여 게스트 가상 머신으로 되돌아가지 않고도 기존 명명된 스냅샷을 현재 스냅샷이 되도록 만들기 위한 요청을 생성합니다.
20.39.4. snapshot-edit
# virsh snapshot-edit domain [snapshotname] [--current] {[--rename] [--clone]}
snapshotname
및 --current
둘 다 지정된 경우 편집한 스냅샷이 현재 스냅샷이 되도록 강제 적용됩니다. snapshotname
이 생략된 경우 현재 스냅샷을 편집하려면 --current
를 제공해야 합니다.
# virsh snapshot-dumpxml dom name > snapshot.xml # vi snapshot.xml [note - this can be any editor] # virsh snapshot-create dom snapshot.xml --redefine [--current]
--rename
이 지정되면 스냅샷의 이름이 변경됩니다. --clone
이 지정된 경우 스냅샷 이름을 변경하면 스냅샷 메타데이터의 복제본이 생성됩니다. 둘 다 지정하지 않으면 편집에서 스냅샷 이름은 변경되지 않습니다. 스냅샷 이름은 단일 qcow2 파일 내의 내부 스냅샷과 같은 일부 스냅샷의 내용은 원래 스냅샷 이름에서만 액세스할 수 있으므로 신중하게 변경해야 합니다.
20.39.5. snapshot-info
# snapshot-info domain {snapshot | --current}
스냅샷
또는 --current
을 사용하여 현재 스냅샷에 대한 기본 정보를 출력합니다.
20.39.6. snapshot-list
# virsh snapshot-list domain [{--parent | --roots | --tree}] [{[--from] snapshot | --current} [--descendants]] [--metadata] [--no-metadata] [--leaves] [--no-leaves] [--inactive] [--active] [--disk-only] [--internal] [--external]
--parent
는 각 스냅샷의 부모 이름을 나타내는 출력 테이블에 열을 추가합니다. 이 옵션은--roots
또는--tree
와 함께 사용할 수 없습니다.--roots
는 부모가 없는 스냅샷만 표시하도록 목록을 필터링합니다. 이 옵션은--parent
또는--tree
와 함께 사용할 수 없습니다.--tree
는 스냅샷 이름만 나열한 트리 형식으로 출력을 표시합니다. 이 옵션은--roots
또는--parent
와 함께 사용할 수 없습니다.--from
은 지정된 스냅샷의 하위 항목이거나--current
이 제공된 경우 목록이 현재 스냅샷에서 시작되는 스냅샷에 목록을 필터링합니다. 분리 또는--parent
와 함께 사용하면--descendants
도 없으면 목록이 직접 자식으로 제한됩니다.--tree
와 함께 사용하면--descendants
를 사용할 수 없습니다. 이 옵션은--roots
와 호환되지 않습니다.--tree
옵션도 없는 경우--from
또는--current
의 시작 지점이 목록에 포함되지 않습니다.--leaves
를 지정하면 목록이 하위 항목이 없는 스냅샷으로만 필터링됩니다. 마찬가지로--no-leaves
가 지정된 경우 하위 항목이 있는 스냅샷에만 목록이 필터링됩니다. (두 옵션을 모두 생략해도 필터링이 발생하지 않지만 두 옵션을 제공하면 해당 서버가 플래그를 인식하는지 여부에 따라 동일한 목록 또는 오류가 발생합니다.) Filtering options are not compatible with--tree
.--metadata
가 지정된 경우 libvirt 메타데이터와 관련된 스냅샷으로 목록이 필터링되므로 영구 게스트 가상 머신을 분리하지 않거나 일시적인 게스트 가상 머신 제거 시 손실됩니다. 마찬가지로--no-metadata
가 지정된 경우 libvirt 메타데이터 없이 존재하는 스냅샷으로 목록이 필터링됩니다.--inactive
가 지정되어 게스트 가상 머신이 종료될 때 가져온 스냅샷에 목록이 필터링됩니다.--active
가 지정된 경우 게스트 가상 시스템이 실행 중일 때 수행한 스냅샷에 목록이 필터링되고 스냅샷에 해당 실행 상태로 되돌릴 메모리 상태가 포함됩니다.--disk-only
가 지정된 경우 게스트 가상 시스템이 실행 중일 때 만든 스냅샷에 목록이 필터링되지만 스냅샷에는 디스크 상태만 포함됩니다.--internal
이 지정되면 목록이 기존 디스크 이미지의 내부 스토리지를 사용하는 스냅샷으로 필터링됩니다. external을 지정하면 디스크 이미지 또는 메모리 상태에 외부 파일을 사용하는 스냅샷으로 목록이 필터링됩니다.
20.39.7. snapshot-dumpxml
# virsh snapshot-dumpxml domain snapshot [--security-info]
-info
옵션에는 보안에 민감한 정보도 포함됩니다. virsh snapshot-current
를 사용하여 현재 스냅샷의 XML에 쉽게 액세스할 수 있습니다.
20.39.8. snapshot-parent
--current
을 사용하여 현재 스냅샷의 경우 상위 스냅샷의 이름을 출력합니다. 사용하려면 다음을 실행합니다.
# virsh snapshot-parent domain {snapshot | --current}
20.39.9. snapshot-revert
스냅샷
또는 --current
을 사용하여 현재 스냅샷으로 되돌립니다.
snapshot-revert
가 완료된 후 도메인의 상태는 원래 스냅샷을 만들 때 도메인의 상태가 됩니다.
# virsh snapshot-revert domain {snapshot | --current} [{--running | --paused}] [--force]
--running
또는 --paused
옵션을 전달하면 추가 상태 변경(예: 비활성 도메인 부팅 또는 실행 중인 도메인 일시 중지)이 수행됩니다. 임시 도메인을 비활성화할 수 없으므로 임시 도메인의 디스크 스냅샷으로 되돌릴 때 이러한 플래그 중 하나를 사용해야 합니다.
--force
를 사용해야 합니다. 하나는 설정을 되돌리기 위한 전체 도메인 정보가 없는 스냅샷의 경우입니다. libvirt는 현재 구성이 스냅샷 시점에서 사용 중인 구성과 일치한다는 것을 증명할 수 없으므로 --force
s libvirt 를 현재 구성과 호환할 수 있다는 것을 증명할 수 없습니다(및 그렇지 않은 경우 도메인은 실행되지 않을 수 있음). 다른 하나는 실행 중인 도메인에서 기존 하이퍼바이저를 재사용하는 대신 새 하이퍼바이저를 생성해야 하는 활성 상태로 되돌리는 경우입니다. 이는 기존 VNC 또는 Spice 연결을 중단하는 등 단점을 의미합니다. 이 조건은 호환되지 않는 구성을 사용하는 활성 스냅샷과 --start
또는 --pause
플래그와 결합된 비활성 스냅샷과 함께 발생합니다.
20.39.10. snapshot-delete
# virsh snapshot-delete domain {snapshot | --current} [--metadata] [{--children | --children-only}]
snapshot
라는 도메인의 스냅샷을 삭제하거나 현재 스냅샷은 --current
. 이 스냅샷에 하위 스냅샷이 있는 경우 이 스냅샷의 변경 사항이 하위 항목으로 병합됩니다. --children
옵션을 사용하면 이 스냅샷과 이 스냅샷의 하위 항목이 삭제됩니다. --children-only
를 사용하면 이 스냅샷의 하위 항목이 삭제되지만 이 스냅샷은 그대로 둡니다. 이 두 플래그는 함께 사용할 수 없습니다.
--metadata
를 사용하면 libvirt 에서 유지 관리하는 스냅샷 메타데이터가 삭제되며, 스냅샷 내용을 외부 툴에서 그대로 유지하면서도 그대로 둡니다. 그렇지 않으면 스냅샷을 삭제하면 해당 시점에서 해당 데이터 콘텐츠도 제거됩니다.
20.40. 게스트 가상 머신 CPU 모델 구성
20.40.1. 소개
qemu32
또는 qemu64
라는 일반 모델을 제공합니다. 이러한 하이퍼바이저는 고급 필터링을 수행하여 모든 물리적 CPU를 여러 그룹으로 분류하고 게스트 가상 머신에 제공되는 각 그룹에 대해 하나의 기본 CPU 모델을 갖습니다. 이러한 동작은 호스트 물리적 시스템 간에 게스트 가상 시스템을 안전하게 마이그레이션할 수 있습니다. libvirt에는 일반적으로 동일한 그룹으로 분류된 물리적 CPU가 있습니다. libvirt는 일반적으로 더 높은 계층이 자체 필수 정책을 정의하는 메커니즘을 제공합니다. CPU 모델 정보를 얻고 적절한 게스트 가상 머신 CPU 모델을 정의하는 방법을 이해하는 것은 호스트 물리적 시스템 간에 게스트 가상 머신 마이그레이션이 성공할 수 있도록 하는 것이 중요합니다. 하이퍼바이저는 하이퍼바이저가 릴리스된 후 생성된 기능과 해당 기능을 에뮬레이션할 수 없습니다.
20.40.2. 호스트 물리적 시스템 CPU 모델에 대해 알아보기
20.40.3. VFIO IOMMU 장치에 대한 지원 확인
그림 20.3. VFIO 지원 확인
# virsh domcapabilities [...output truncated...] <enum name='pciBackend'> <value>default</value> <value>vfio</value> [...output truncated...]
20.40.4. 호스트 물리적 머신 풀을 연장하기 위한 호환 CPU 모델 확인
그림 20.4. 호스트 물리적 시스템의 CPU 모델 정보 가져오기
<capabilities> <host> <cpu> <arch>i686</arch> <model>pentium3</model> <topology sockets='1' cores='2' threads='1'/> <feature name='lahf_lm'/> <feature name='lm'/> <feature name='xtpr'/> <feature name='cx16'/> <feature name='ssse3'/> <feature name='tm2'/> <feature name='est'/> <feature name='vmx'/> <feature name='ds_cpl'/> <feature name='monitor'/> <feature name='pni'/> <feature name='pbe'/> <feature name='tm'/> <feature name='ht'/> <feature name='ss'/> <feature name='sse2'/> <feature name='acpi'/> <feature name='ds'/> <feature name='clflush'/> <feature name='apic'/> </cpu> </host> </capabilities>
그림 20.5. 임의의 서버에서 CPU 설명 생성
<capabilities> <host> <cpu> <arch>x86_64</arch> <model>phenom</model> <topology sockets='2' cores='4' threads='1'/> <feature name='osvw'/> <feature name='3dnowprefetch'/> <feature name='misalignsse'/> <feature name='sse4a'/> <feature name='abm'/> <feature name='cr8legacy'/> <feature name='extapic'/> <feature name='cmp_legacy'/> <feature name='lahf_lm'/> <feature name='rdtscp'/> <feature name='pdpe1gb'/> <feature name='popcnt'/> <feature name='cx16'/> <feature name='ht'/> <feature name='vme'/> </cpu> ...snip...
virsh-caps-hiera-cpu-only.xml
파일에 저장되고 virsh cpu-compare 명령을 이 파일에서 실행할 수 있습니다.
# virsh cpu-compare virsh-caps-workstation-cpu-only.xml
Host physical machine CPU is a superset of CPU described in virsh-caps-workstation-cpu-only.xml
both-cpus.xml
에서 virsh cpu-baseline 명령을 실행합니다. # virsh cpu-baseline both-cpus.xml 을 실행하면 다음과 같은 결과가 나타납니다.
그림 20.6. 복합 CPU 기준
<cpu match='exact'> <model>pentium3</model> <feature policy='require' name='lahf_lm'/> <feature policy='require' name='lm'/> <feature policy='require' name='cx16'/> <feature policy='require' name='monitor'/> <feature policy='require' name='pni'/> <feature policy='require' name='ht'/> <feature policy='require' name='sse2'/> <feature policy='require' name='clflush'/> <feature policy='require' name='apic'/> </cpu>
20.41. 게스트 가상 머신 CPU 모델 구성
<cpu>
요소에는 다음과 같은 가능한 값이 있는 이름이 일치하는
속성이 있습니다.
- match='minimum' - 호스트 물리적 머신 CPU에는 게스트 가상 머신 XML에 설명된 CPU 기능이 있어야 합니다. 호스트 물리적 시스템에 게스트 가상 머신 구성 이외의 추가 기능이 있는 경우 게스트 가상 머신에도 노출됩니다.
- match='exact' - 호스트 물리적 머신 CPU에는 게스트 가상 머신 XML에 설명된 CPU 기능이 있어야 합니다. 호스트 물리적 시스템에 게스트 가상 시스템 구성 이외의 추가 기능이 있는 경우 게스트 가상 시스템에서 마스킹됩니다.
- match='strict' - 호스트 물리적 시스템 CPU에는 게스트 가상 머신 XML에 설명된 동일한 CPU 기능이 있어야 합니다.
- policy='force' - 호스트 물리적 머신에 없는 경우에도 해당 기능을 게스트 가상 머신에 노출합니다. 이는 일반적으로 소프트웨어 에뮬레이션의 경우에만 유용합니다.참고
강제
정책을 사용하면 하이퍼바이저가 특정 기능을 에뮬레이션하지 못할 수 있습니다. - policy='require' - 기능을 게스트 가상 머신에 노출하고 호스트 물리적 시스템에 없는 경우 실패합니다. 이는 합리적인 기본값입니다.
- policy='선택 사항' - 게스트 가상 머신을 지원하는 경우 해당 기능을 게스트 가상 머신에 노출합니다.
- policy='disable' - 호스트 물리적 시스템에 이 기능이 있는 경우 게스트 가상 시스템에서 해당 기능을 숨깁니다.
- policy='forbid' - 호스트 물리적 시스템에 이 기능이 있는 경우 실패하여 게스트 가상 시스템 시작을 거부합니다.
20.42. 게스트 가상 머신의 리소스 관리
libvirt
서비스는 가상 시스템 튜닝 및 모니터링에 다음 cgroups를 사용합니다.
- memory - 메모리 컨트롤러를 사용하면 RAM 및 스왑 사용량에 대한 제한을 설정하고 그룹에 있는 모든 프로세스의 누적 사용량을 쿼리할 수 있습니다.
- cpuset - CPU 세트 컨트롤러는 그룹 내의 프로세스를 CPU 세트에 바인딩하고 CPU 간 마이그레이션을 제어합니다.
- cpuacct - CPU 계정 컨트롤러는 프로세스 그룹의 CPU 사용량에 대한 정보를 제공합니다.
- CPU -CPU 스케줄러 컨트롤러는 그룹의 프로세스 우선 순위를 제어합니다. 이는 nice 수준 권한을 부여하는 것과 유사합니다.
- devices - 장치 컨트롤러는 문자 및 블록 장치에 액세스 제어 목록을 부여합니다.
- freezer - freezer 컨트롤러는 일시 중지되고 그룹의 프로세스 실행을 재개합니다. 이는 전체 그룹의 SIGSTOP 와 유사합니다.
- net_cls - 네트워크 클래스 컨트롤러는 프로세스를 tc 네트워크 클래스와 연결하여 네트워크 사용률을 관리합니다.
systemd
에 의해 설정됩니다. 다음 virsh 튜닝 명령은 cgroups가 구성된 방식에 영향을 미칩니다.
- schedinfo -에 설명 20.43절. “스케줄 매개변수 설정”
- blkdeviotune -에 설명 20.44절. “디스크 I/O 3rottling”
- blkiotune -에 설명되어 있습니다. 20.45절. “블록 I/O 매개 변수 표시 또는 설정”
- domiftune -에 설명 20.12.5절. “네트워크 인터페이스 Bandwidth 매개변수 설정”
- memtune -에서 설명 20.46절. “메모리 튜닝 구성”
20.43. 스케줄 매개변수 설정
# virsh schedinfo domain --set
--current
--config
--live
- domain - guest 가상 머신 도메인
--set
- 여기에 배치된 문자열은 호출해야 하는 컨트롤러 또는 작업입니다. 문자열은 매개변수 =값 형식을 사용합니다. 필요한 경우 추가 매개변수 또는 값을 추가해야 합니다.--current
---set
와 함께 사용하면 지정된 set 문자열을 현재 스케줄러 정보로 사용합니다. 없이 사용하면 현재 스케줄러 정보가 표시됩니다.--config
- - -set
와 함께 사용하면 다음 재부팅 시 지정된 set 문자열이 사용됩니다. 없이 사용하면 구성 파일에 저장된 스케줄러 정보가 표시됩니다.--live
---set
와 함께 사용하면 현재 실행 중인 게스트 가상 머신에서 지정된 세트 문자열을 사용합니다. 없이 사용하면 실행 중인 가상 머신에서 현재 사용되는 구성 설정이 표시됩니다.
cpu_shares
,vcpu_period
및 vcpu_quota
매개변수 중 하나를 사용하여 설정할 수 있습니다. 이러한 매개변수는 vCPU 스레드에 적용됩니다.
cpu_shares
:cpu.sharesvcpu_period
:cpu.cfs_period_usvcpu_quota
:cpu.cfs_quota_us
예 20.98. schedinfo show
# virsh schedinfo shell
Scheduler : posix
cpu_shares : 1024
vcpu_period : 100000
vcpu_quota : -1
예 20.99. schedinfo set
# virsh schedinfo --set cpu_shares=2046 shell
Scheduler : posix
cpu_shares : 2046
vcpu_period : 100000
vcpu_quota : -1
emulator_period
및 emulator_quota
매개변수도 지원합니다.
20.44. 디스크 I/O 3rottling
#virsh blkdeviotune domain <device> [[--config] [--live] | [--current]] [[total-bytes-sec] | [read-bytes-sec] [write-bytes-sec]] [[total-iops-sec] [read-iops-sec] [write-iops-sec]]
--config
,--live
및 --current
인수는 20.43절. “스케줄 매개변수 설정” 에서와 동일하게 작동합니다. 제한을 지정하지 않으면 현재 I/O 제한 설정을 쿼리합니다. 그렇지 않으면 다음 플래그를 사용하여 제한을 변경합니다.
--total-bytes-sec
- 초당 총 처리량 제한을 지정합니다.--read-bytes-sec
- 초당 읽기 처리량 제한을 지정합니다.--write-bytes-sec
- 초당 쓰기 처리량 제한을 지정합니다.--total-iops-sec
은 초당 총 I/O 작업 제한을 지정합니다.--read-iops-sec
- 초당 읽기 I/O 작업 제한을 지정합니다.--write-iops-sec
- 초당 쓰기 I/O 작업 제한을 지정합니다.
20.45. 블록 I/O 매개 변수 표시 또는 설정
# virsh blkiotune domain [--weight weight] [--device-weights device-weights] [---device-read-iops-sec -device-read-iops-sec] [--device-write-iops-sec device-write-iops-sec] [--device-read-bytes-sec device-read-bytes-sec] [--device-write-bytes-sec device-write-bytes-sec] [[--config] [--live] | [--current]]
20.46. 메모리 튜닝 구성
21장. 오프라인 도구를 사용하여 게스트 가상 머신 디스크 액세스
21.1. 소개
libguestfs
유틸리티를 제공합니다. 이러한 툴에는 다음과 같은 여러 용도가 있습니다.
- 게스트 가상 머신 디스크에 있는 파일 보기 또는 다운로드.
- 게스트 가상 머신 디스크에서 파일 편집 또는 업로드.
- 게스트 가상 머신 구성 읽기 또는 쓰기.
- 파일, 디렉토리, 파일 시스템, 파티션, 논리 볼륨 및 기타 옵션이 포함된 새 디스크 이미지 준비
- 부팅이 실패하거나 부팅 구성 변경이 필요한 게스트 가상 머신을 복구하고 복구합니다.
- 게스트 가상 시스템의 디스크 사용량 모니터링.
- 게스트 가상 시스템의 규정 준수 감사(예: 조직의 보안 표준).
- 템플릿을 복제 및 수정하여 게스트 가상 머신 배포.
- CD 및 DVD ISO 이미지 및 디스크 이미지 읽기.
ro
옵션 사용)에서 특정 유틸리티를 사용할 수 있습니다.
21.1.1. 원격 연결 사용에 대해 자세히 알아보기
# virt-df -c qemu://remote/system
-d Guest
nbd://
URL을 사용하여 액세스할 수 있습니다. 방화벽에서 포트를 열어야 할 수도 있습니다(포트 64439)는 다음과 같습니다.
- RuntimeClass
- 게스트 마운트
- virt-alignment-scan
- virt-cat
- virt-copy-in
- virt-copy-out
- virt-df
- virt-edit
- virt-filesystems
- virt-inspector
- virt-ls
- virt-rescue
- virt-sysprep
- virt-tar-in
- virt-tar-out
- virt-win-reg
21.2. 용어
- libguestfs(GUEST FileSystem LIBrary) - 디스크 이미지 열기, 읽기 및 쓰기 등의 기본 C 라이브러리입니다. 이 API 에 C 프로그램을 직접 작성할 수 있습니다.
- RuntimeClass(GUEST Filesystem Interactive SHell) 는 명령줄 또는 쉘 스크립트에서 사용할 수 있는 대화형 쉘입니다. libguestfs API의 모든 기능을 노출합니다.
- 다양한 가상화 툴은 libguestfs 상단에 구축되며, 이러한 툴은 명령줄에서 특정 단일 작업을 수행할 수 있는 방법을 제공합니다. 이러한 툴에는 virt-df,virt-rescue,virt-resize, virt-edit 등이 있습니다.
- Augeas는 Linux 구성 파일을 편집하기 위한 라이브러리입니다. libguestfs와는 별도로 있지만 대부분의 libguestfs 값은 이 툴과 함께 제공됩니다.
- 게스트 마운트 는 libguestfs와 FUSE 간의 인터페이스입니다. 주로 호스트 물리적 시스템의 디스크 이미지에서 파일 시스템을 마운트하는 데 사용됩니다. 이 기능은 필수는 아니지만 유용할 수 있습니다.
21.3. 설치
# yum install libguestfs libguestfs-tools
# yum install '*guestf*'
21.4. RuntimeClass 쉘
$ guestfish --ro -a /path/to/disk/image
$ guestfish --ro -a /path/to/disk/image
Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.
Type: 'help' for help on commands
'man' to read the manual
'quit' to quit the shell
><fs>
21.4.1. RuntimeClass를 사용하여 파일 시스템 보기
21.4.1.1. 수동 목록 및 보기
><fs> run ><fs> list-filesystems /dev/vda1: ext3 /dev/VolGroup00/LogVol00: ext3 /dev/VolGroup00/LogVol01: swap
><fs> help vfs-type NAME vfs-type - get the Linux VFS type corresponding to a mounted device SYNOPSIS vfs-type mountable DESCRIPTION This command gets the filesystem type corresponding to the filesystem on "device". For most filesystems, the result is the name of the Linux VFS module which would be used to mount this filesystem if you mounted it without specifying the filesystem type. For example a string such as "ext3" or "ntfs".
21.4.1.2. pxe 검사를 통해
$ guestfish --ro -a /path/to/disk/image -i
Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.
Type: 'help' for help on commands
'man' to read the manual
'quit' to quit the shell
Operating system: Red Hat Enterprise Linux AS release 4 (Nahant Update 8)
/dev/VolGroup00/LogVol00 mounted on /
/dev/vda1 mounted on /boot
><fs> ll /
total 210
drwxr-xr-x. 24 root root 4096 Oct 28 09:09 .
drwxr-xr-x 21 root root 4096 Nov 17 15:10 ..
drwxr-xr-x. 2 root root 4096 Oct 27 22:37 bin
drwxr-xr-x. 4 root root 1024 Oct 27 21:52 boot
drwxr-xr-x. 4 root root 4096 Oct 27 21:21 dev
drwxr-xr-x. 86 root root 12288 Oct 28 09:09 etc
...
21.4.1.3. 이름으로 게스트 가상 머신에 액세스
$ guestfish --ro -d GuestName -i
21.4.2. RuntimeClass를 사용하여 파일 추가
- RuntimeClass -a 디스크.img
- RuntimeClass -a file:///디렉토리/disk.img
- pxe -a nbd://example.com[:port]
- guestfish -a nbd://example.com[:port]/exportname
- pxe -a nbd://?socket=/소켓
- sandbox -a nbd:///exportname?socket=/socket
- RuntimeClass -a rbd:///pool/disk
- RuntimeClass -a rbd://example.com[:포트]/풀/디스크
21.4.3. RuntimeClass를 사용하여 파일 수정
/boot/grub/grub.conf
파일을 편집하는 예를 제공합니다. 게스트 가상 머신이 종료된 경우 다음과 같은 명령을 사용하여 쓰기 액세스 권한을 얻기 위해 --ro 플래그를 생략할 수 있습니다.
$ guestfish -d RHEL3 -i
Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.
Type: 'help' for help on commands
'man' to read the manual
'quit' to quit the shell
Operating system: Red Hat Enterprise Linux AS release 3 (Taroon Update 9)
/dev/vda2 mounted on /
/dev/vda1 mounted on /boot
><fs> edit /boot/grub/grub.conf
21.4.4. RuntimeClass를 사용하는 기타 작업
21.4.5. RuntimeClass를 사용한 쉘 스크립팅
#!/bin/bash - set -e guestname="$1" guestfish -d "$guestname" -i <<'EOF' write /etc/motd "Welcome to Acme Incorporated." chmod 0644 /etc/motd EOF
21.4.6. augeas 및 libguestfs 스크립팅
#!/bin/bash - set -e guestname="$1" guestfish -d "$1" -i --ro <<'EOF' aug-init / 0 aug-get /files/etc/sysconfig/keyboard/LAYOUT EOF
#!/bin/bash - set -e guestname="$1" guestfish -d "$1" -i <<'EOF' aug-init / 0 aug-set /files/etc/sysconfig/keyboard/LAYOUT '"gb"' aug-save EOF
- 두 번째 예에서 --ro 옵션이 제거되어 게스트 가상 머신에 작성할 수 있는 기능이 있습니다.
- 값을 가져오는 대신 값을 변경하기 위해 aug-get 명령이 aug-set 로 변경되었습니다. 새 값은 "gb"( 표 포함)입니다.
- 여기에 aug-save 명령이 사용되어 Augeas가 변경 사항을 디스크에 씁니다.
guestfish -N fs
><fs> copy-out /home /tmp/home
21.5. 기타 명령
- virt-cat 은 RuntimeClass 다운로드 명령과 유사합니다. 게스트 가상 머신에 단일 파일을 다운로드하여 표시합니다. 예를 들면 다음과 같습니다.
# virt-cat RHEL3 /etc/ntp.conf | grep ^server server 127.127.1.0 # local clock
- virt-edit 는 RuntimeClass 편집 명령과 유사합니다. 게스트 가상 머신 내에서 단일 파일을 대화형으로 편집하는 데 사용할 수 있습니다. 예를 들어 부팅하지 않는 Linux 기반 게스트 가상 머신에서
grub.conf
파일을 편집해야 할 수 있습니다.# virt-edit LinuxGuest /boot/grub/grub.conf
virt-edit 에는 단일 파일에 대한 간단한 비대화형 변경을 수행하는 데 사용할 수 있는 또 다른 모드가 있습니다. 이를 위해 -e 옵션이 사용됩니다. 예를 들어 다음 명령은 암호가 없는 Linux 게스트 가상 머신의 root 암호를 변경합니다.# virt-edit LinuxGuest /etc/passwd -e 's/^root:.*?:/root::/'
- virt-ls 는 RuntimeClass ls, ll 및 find 명령과 유사합니다. 디렉터리 또는 디렉터리를 나열하는 데 사용됩니다(재구적으로). 예를 들어 다음 명령은 Linux 게스트 가상 머신의 /home 아래에 있는 파일과 디렉터리를 재귀적으로 나열합니다.
# virt-ls -R LinuxGuest /home/ | less
21.6. virt-rescue: 복구 쉘
21.6.1. 소개
21.6.2. virt-rescue 실행
$ virt-rescue -d GuestName
$ virt-rescue -a /path/to/disk/image
Welcome to virt-rescue, the libguestfs rescue shell. Note: The contents of / are the rescue appliance. You have to mount the guest virtual machine's partitions under /sysroot before you can examine them. bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell ><rescue>
><rescue> fdisk -l /dev/vda
/sysroot
아래에 마운트하는 것이 좋습니다. /
아래의 파일은 rescue VM 자체의 파일입니다.
><rescue> mount /dev/vda1 /sysroot/ EXT4-fs (vda1): mounted filesystem with ordered data mode. Opts: (null) ><rescue> ls -l /sysroot/grub/ total 324 -rw-r--r--. 1 root root 63 Sep 16 18:14 device.map -rw-r--r--. 1 root root 13200 Sep 16 18:14 e2fs_stage1_5 -rw-r--r--. 1 root root 12512 Sep 16 18:14 fat_stage1_5 -rw-r--r--. 1 root root 11744 Sep 16 18:14 ffs_stage1_5 -rw-------. 1 root root 1503 Oct 15 11:19 grub.conf [...]
- --ro: 게스트 가상 머신에서 읽기 전용 모드로 작동합니다. 변경 사항은 저장되지 않습니다. 이를 사용하여 게스트 가상 머신을 실험할 수 있습니다. 쉘을 종료하면 모든 변경 사항이 삭제됩니다.
- --network: rescue 쉘에서 네트워크 액세스를 활성화합니다. 예를 들어 RPM 또는 기타 파일을 게스트 가상 머신에 다운로드해야 하는 경우 이 방법을 사용합니다.
21.7. virt-df: 디스크 사용량 모니터링
21.7.1. 소개
21.7.2. virt-df 실행
# virt-df -a /dev/vg_guests/RHEL7
Filesystem 1K-blocks Used Available Use%
RHEL6:/dev/sda1 101086 10233 85634 11%
RHEL6:/dev/VolGroup00/LogVol00 7127864 2272744 4493036 32%
/dev/vg_guests/RHEL7
은 Red Hat Enterprise Linux 7 게스트 가상 머신 디스크 이미지입니다. 이 경우 경로는 이 디스크 이미지가 있는 호스트 물리 시스템 논리 볼륨입니다.)
# virt-df -h -d domname
Filesystem Size Used Available Use%
F14x64:/dev/sda1 484.2M 66.3M 392.9M 14%
F14x64:/dev/vg_f14x64/lv_root 7.4G 3.0G 4.4G 41%
RHEL6brewx64:/dev/sda1 484.2M 52.6M 406.6M 11%
RHEL6brewx64:/dev/vg_rhel6brewx64/lv_root
13.3G 3.4G 9.2G 26%
# virt-df --csv -d RHEL6Guest Virtual Machine,Filesystem,1K-blocks,Used,Available,Use% RHEL6brewx64,/dev/sda1,102396,24712,77684,24.1% RHEL6brewx64,/dev/sda2,20866940,7786652,13080288,37.3%
21.8. virt-resize: 게스트 가상 머신 오프라인 크기 조정
21.8.1. 소개
21.8.2. 디스크 이미지 확장
- 크기를 조정할 디스크 이미지를 찾습니다. libvirt 게스트 가상 머신에 virsh dumpxml GuestName 명령을 사용할 수 있습니다.
- 게스트 가상 머신을 확장하는 방법을 결정합니다. 다음 출력에 표시된 대로 게스트 가상 머신 디스크에서 virt-df -h 및 virt-filesystems 를 실행합니다.
# virt-df -h -a /dev/vg_guests/RHEL6 Filesystem Size Used Available Use% RHEL6:/dev/sda1 98.7M 10.0M 83.6M 11% RHEL6:/dev/VolGroup00/LogVol00 6.8G 2.2G 4.3G 32% # virt-filesystems -a disk.img --all --long -h /dev/sda1 ext3 101.9M /dev/sda2 pv 7.9G
- 첫 번째(부팅) 파티션의 크기를 약 100MB에서 500MB로 늘립니다.
- 총 디스크 크기를 8GB에서 16GB로 늘립니다.
- 두 번째 파티션을 확장하여 나머지 공간을 채웁니다.
/dev/VolGroup00/LogVol00
을 확장하여 두 번째 파티션에 새 공간을 채웁니다.
- guest 가상 머신이 종료되었는지 확인합니다.
- 원래 디스크의 이름을 백업으로 바꿉니다. 이 작업을 수행하는 방법은 원래 디스크의 호스트 물리적 시스템 스토리지 환경에 따라 다릅니다. 파일로 저장된 경우 mv 명령을 사용합니다. 논리 볼륨(이 예제에서는 설명됨)의 경우 lvrename 을 사용하십시오.
# lvrename /dev/vg_guests/RHEL6 /dev/vg_guests/RHEL6.backup
- 새 디스크를 만듭니다. 이 예제의 요구 사항은 총 디스크 크기를 16GB까지 확장하는 것입니다. 여기에서 논리 볼륨이 사용되므로 다음 명령이 사용됩니다.
# lvcreate -L 16G -n RHEL6 /dev/vg_guests Logical volume "RHEL6" created
- 2단계의 요구 사항은 다음 명령으로 표시됩니다.
# virt-resize \ /dev/vg_guests/RHEL6.backup /dev/vg_guests/RHEL6 \ --resize /dev/sda1=500M \ --expand /dev/sda2 \ --LV-expand /dev/VolGroup00/LogVol00
처음 두 개의 인수는 입력 디스크와 출력 디스크입니다. --resize /dev/sda1=500M 은 첫 번째 파티션 최대 500MB의 크기를 조정합니다. --expand /dev/sda2 는 두 번째 파티션을 확장하여 나머지 공간을 모두 채웁니다. --LV-expand /dev/VolGroup00/LogVol00 은 게스트 논리 볼륨을 확장합니다.virt-resize 는 출력에서 수행하는 작업을 설명합니다.Summary of changes: /dev/sda1: partition will be resized from 101.9M to 500.0M /dev/sda1: content will be expanded using the 'resize2fs' method /dev/sda2: partition will be resized from 7.9G to 15.5G /dev/sda2: content will be expanded using the 'pvresize' method /dev/VolGroup00/LogVol00: LV will be expanded to maximum size /dev/VolGroup00/LogVol00: content will be expanded using the 'resize2fs' method Copying /dev/sda1 ... [#####################################################] Copying /dev/sda2 ... [#####################################################] Expanding /dev/sda1 using the 'resize2fs' method Expanding /dev/sda2 using the 'pvresize' method Expanding /dev/VolGroup00/LogVol00 using the 'resize2fs' method
- 가상 머신을 부팅합니다. 작동 중인 경우(및 철저하게 테스트한 후에) 백업 디스크를 삭제할 수 있습니다. 가상 머신이 실패하면 가상 머신을 종료하고 새 디스크를 삭제하고 백업 디스크 이름을 다시 원래 이름으로 변경합니다.
- virt-df 또는 virt-filesystems 를 사용하여 새 크기를 표시합니다.
# virt-df -h -a /dev/vg_pin/RHEL6 Filesystem Size Used Available Use% RHEL6:/dev/sda1 484.4M 10.8M 448.6M 3% RHEL6:/dev/VolGroup00/LogVol00 14.3G 2.2G 11.4G 16%
21.9. virt-inspector: 게스트 가상 머신 검사
21.9.1. 소개
21.9.2. 설치
# yum install libguestfs-tools
/usr/share/doc/libguestfs-devel-*/
에 설치됩니다. 여기서 * 는 libguestfs 버전 번호로 대체됩니다.
21.9.3. virt-inspector 실행
$ virt-inspector -a disk.img > report.xml
$ virt-inspector -d GuestName > report.xml
report.xml
)입니다. XML 파일의 주요 구성 요소는 다음과 유사하게 일반적으로 단일 <operatingsystem>
요소를 포함하는 최상위 <operatingsytems>
요소입니다.
<operatingsystems> <operatingsystem> <!-- the type of operating system and Linux distribution --> <name>linux</name> <distro>rhel</distro> <!-- the name, version and architecture --> <product_name>Red Hat Enterprise Linux Server release 6.4 </product_name> <major_version>6</major_version> <minor_version>4</minor_version> <package_format>rpm</package_format> <package_management>yum</package_management> <root>/dev/VolGroup/lv_root</root> <!-- how the filesystems would be mounted when live --> <mountpoints> <mountpoint dev="/dev/VolGroup/lv_root">/</mountpoint> <mountpoint dev="/dev/sda1">/boot</mountpoint> <mountpoint dev="/dev/VolGroup/lv_swap">swap</mountpoint> </mountpoints> < !-- filesystems--> <filesystem dev="/dev/VolGroup/lv_root"> <label></label> <uuid>b24d9161-5613-4ab8-8649-f27a8a8068d3</uuid> <type>ext4</type> <content>linux-root</content> <spec>/dev/mapper/VolGroup-lv_root</spec> </filesystem> <filesystem dev="/dev/VolGroup/lv_swap"> <type>swap</type> <spec>/dev/mapper/VolGroup-lv_swap</spec> </filesystem> <!-- packages installed --> <applications> <application> <name>firefox</name> <version>3.5.5</version> <release>1.fc12</release> </application> </applications> </operatingsystem> </operatingsystems>
$ virt-inspector GuestName | xpath //filesystem/@dev
Found 3 nodes:
-- NODE --
dev="/dev/sda1"
-- NODE --
dev="/dev/vg_f12x64/lv_root"
-- NODE --
dev="/dev/vg_f12x64/lv_swap"
$ virt-inspector GuestName | xpath //application/name
[...long list...]
21.10. 프로그래밍 언어의 API 사용
- C 및 C++ 바인딩을 설치하려면 다음 명령을 입력합니다.
# yum install libguestfs-devel
- Perl 바인딩을 설치하려면 다음을 수행합니다.
# yum install 'perl(Sys::Guestfs)'
- Python 바인딩을 설치하려면 다음을 수행합니다.
# yum install python-libguestfs
- Java 바인딩을 설치하려면 다음을 수행합니다.
# yum install libguestfs-java libguestfs-java-devel libguestfs-javadoc
- Ruby 바인딩을 설치하려면 다음을 수행합니다.
# yum install ruby-libguestfs
- OCaml 바인딩을 설치하려면 다음을 수행합니다.
# yum install ocaml-libguestfs ocaml-libguestfs-devel
guestfs_launch (g);
$g->launch ()
g#launch ()
- libguestfs API가 동기화됩니다. 각 호출은 완료될 때까지 차단됩니다. 호출을 비동기적으로 수행하려는 경우 스레드를 만들어야 합니다.If you want to make calls asynchronously, you have to create a thread.
- libguestfs API는 스레드가 안전하지 않습니다. 각 핸들은 단일 스레드에서만 사용하거나 스레드 간 처리를 공유하려는 경우 두 스레드가 동시에 하나의 처리에서 명령을 실행할 수 없도록 자체 semaphore를 구현해야 합니다.
- 동일한 디스크 이미지에서 여러 개의 처리를 열 수 없습니다. 모든 처리가 읽기 전용인 경우 허용되지만 여전히 권장되지는 않습니다.
- 해당 디스크 이미지(예: 라이브 VM)를 사용할 수 있는 경우 쓰기 위해 디스크 이미지를 추가하지 않아야 합니다. 이렇게 하면 디스크 손상이 발생합니다.
- 현재 사용 중인 디스크 이미지에서 읽기 전용(예: 실시간 VM)을 열 수 있습니다. 그러나 결과는 예측할 수 없거나 일관되지 않을 수 있습니다. 특히 디스크 이미지를 읽는 시점에 디스크 이미지가 많이 기록되는 경우 특히 그렇습니다.
21.10.1. C 프로그램을 사용하여 API와 상호 작용
<guestfs.h>
헤더 파일을 포함하고 처리를 생성해야 합니다.
#include <stdio.h> #include <stdlib.h> #include <guestfs.h> int main (int argc, char *argv[]) { guestfs_h *g; g = guestfs_create (); if (g == NULL) { perror ("failed to create libguestfs handle"); exit (EXIT_FAILURE); } /* ... */ guestfs_close (g); exit (EXIT_SUCCESS); }
test.c
). 이 프로그램을 컴파일하고 다음 두 가지 명령으로 실행합니다.
gcc -Wall test.c -o test -lguestfs ./test
disk.img
라고 하며 현재 디렉터리에 생성됩니다.
- 핸들을 만듭니다.
- 디스크 추가Add disk(s) to the handle.
- libguestfs 백엔드를 시작합니다.
- 파티션, 파일 시스템 및 파일을 만듭니다.
- 핸들을 닫고 종료합니다.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <guestfs.h> int main (int argc, char *argv[]) { guestfs_h *g; size_t i; g = guestfs_create (); if (g == NULL) { perror ("failed to create libguestfs handle"); exit (EXIT_FAILURE); } /* Create a raw-format sparse disk image, 512 MB in size. */ int fd = open ("disk.img", O_CREAT|O_WRONLY|O_TRUNC|O_NOCTTY, 0666); if (fd == -1) { perror ("disk.img"); exit (EXIT_FAILURE); } if (ftruncate (fd, 512 * 1024 * 1024) == -1) { perror ("disk.img: truncate"); exit (EXIT_FAILURE); } if (close (fd) == -1) { perror ("disk.img: close"); exit (EXIT_FAILURE); } /* Set the trace flag so that we can see each libguestfs call. */ guestfs_set_trace (g, 1); /* Set the autosync flag so that the disk will be synchronized * automatically when the libguestfs handle is closed. */ guestfs_set_autosync (g, 1); /* Add the disk image to libguestfs. */ if (guestfs_add_drive_opts (g, "disk.img", GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw", /* raw format */ GUESTFS_ADD_DRIVE_OPTS_READONLY, 0, /* for write */ -1 /* this marks end of optional arguments */ ) == -1) exit (EXIT_FAILURE); /* Run the libguestfs back-end. */ if (guestfs_launch (g) == -1) exit (EXIT_FAILURE); /* Get the list of devices. Because we only added one drive * above, we expect that this list should contain a single * element. */ char **devices = guestfs_list_devices (g); if (devices == NULL) exit (EXIT_FAILURE); if (devices[0] == NULL || devices[1] != NULL) { fprintf (stderr, "error: expected a single device from list-devices\n"); exit (EXIT_FAILURE); } /* Partition the disk as one single MBR partition. */ if (guestfs_part_disk (g, devices[0], "mbr") == -1) exit (EXIT_FAILURE); /* Get the list of partitions. We expect a single element, which * is the partition we have just created. */ char **partitions = guestfs_list_partitions (g); if (partitions == NULL) exit (EXIT_FAILURE); if (partitions[0] == NULL || partitions[1] != NULL) { fprintf (stderr, "error: expected a single partition from list-partitions\n"); exit (EXIT_FAILURE); } /* Create an ext4 filesystem on the partition. */ if (guestfs_mkfs (g, "ext4", partitions[0]) == -1) exit (EXIT_FAILURE); /* Now mount the filesystem so that we can add files. */ if (guestfs_mount_options (g, "", partitions[0], "/") == -1) exit (EXIT_FAILURE); /* Create some files and directories. */ if (guestfs_touch (g, "/empty") == -1) exit (EXIT_FAILURE); const char *message = "Hello, world\n"; if (guestfs_write (g, "/hello", message, strlen (message)) == -1) exit (EXIT_FAILURE); if (guestfs_mkdir (g, "/foo") == -1) exit (EXIT_FAILURE); /* This uploads the local file /etc/resolv.conf into the disk image. */ if (guestfs_upload (g, "/etc/resolv.conf", "/foo/resolv.conf") == -1) exit (EXIT_FAILURE); /* Because 'autosync' was set (above) we can just close the handle * and the disk contents will be synchronized. You can also do * this manually by calling guestfs_umount_all and guestfs_sync. */ guestfs_close (g); /* Free up the lists. */ for (i = 0; devices[i] != NULL; ++i) free (devices[i]); free (devices); for (i = 0; partitions[i] != NULL; ++i) free (partitions[i]); free (partitions); exit (EXIT_SUCCESS); }
gcc -Wall test.c -o test -lguestfs ./test
disk.img
.img 라는 디스크 이미지로 남아 있어야 합니다.
guestfish --ro -a disk.img -m /dev/sda1 ><fs> ll / ><fs> cat /foo/resolv.conf
21.11. virt-sysprep: 가상 머신 설정 재설정
# yum install /usr/bin/virt-sysprep
표 21.1. virt-sysprep 명령
명령 | 설명 | 예제 |
---|---|---|
--help | 특정 명령 또는 virt-sysprep 명령에 대한 간략한 도움말 항목을 표시합니다. 추가 도움말은 virt-sysprep 도움말 페이지를 참조하십시오. | virt-sysprep --help |
-a [파일] 또는 --add [file] | 게스트 가상 머신의 디스크 이미지여야 하는 지정된 파일 을 추가합니다. 디스크 이미지 형식이 자동으로 탐지됩니다. 이 값을 재정의하고 특정 형식을 강제 적용하려면 --format 옵션을 사용합니다. | virt-sysprep --add /dev/vms/disk.img |
-a [URI] 또는 --add [URI] | 원격 디스크를 추가합니다. URI 형식은 RuntimeClass와 호환됩니다. 자세한 내용은 21.4.2절. “RuntimeClass를 사용하여 파일 추가”의 내용을 참조하십시오. | virt-sysprep -a rbd://example.com[:port]/pool/disk |
-c [URI] 또는 --connect [URI] | libvirt 를 사용하는 경우 지정된 URI에 연결합니다. 생략하면 KVM 하이퍼바이저를 통해 연결됩니다. 게스트 블록 장치를 직접 지정하는 경우(virt-sysprep -a) libvirt 가 전혀 사용되지 않습니다. | virt-sysprep -c qemu:///system |
-d [guest] 또는 --domain [guest] | 지정된 게스트 가상 머신의 모든 디스크를 추가합니다. 도메인 UUID는 도메인 이름 대신 사용할 수 있습니다. | virt-sysprep --domain 90df2f3f-8857-5ba9-2714-7d95907b1c9e |
-n 또는 --dry-run | 게스트 가상 시스템에서 읽기 전용 "dry run" sysprep 작업을 수행합니다. 이렇게 하면 sysprep 작업이 실행되지만 결국 디스크에 변경 사항이 취소됩니다. | virt-sysprep -n |
--enable [작업] | 지정된 작업을 활성화합니다. 가능한 작업을 나열하려면 --list 명령을 사용합니다. | virt-sysprep --enable ssh-hostkeys,udev-persistent-net |
--operation 또는 --operations | 수행할 sysprep 작업을 선택합니다. 작업을 비활성화하려면 작업 이름 앞에 -를 사용합니다. | virt-sysprep --operations ssh-hotkeys,udev-persistent-net 는 두 작업을 모두 활성화하는 반면 virt-sysprep --operations firewall-rules,-tmp-files 는 firewall-rules 작업을 활성화하고 tmp-files 작업을 비활성화합니다. 유효한 작업 목록은 libguestfs.org 를 참조하십시오. |
--format [raw |qcow2 |auto ] | a 옵션의 기본값은 디스크 이미지 형식을 자동으로 검색하는 것입니다. 이를 사용하면 명령줄에서 뒤에 오는 -a 옵션에 대해 디스크 형식이 강제 적용됩니다. --format auto를 사용하여 후속 -a 옵션에 대한 자동 감지로 다시 전환합니다(위의 -a 명령 참조). | virt-sysprep --format raw -a disk.img는 disk.img 에 대해 원시 형식(자동 감지 없음)을 강제 적용하지만 virt-sysprep --format raw -a disk.img --format auto-format auto -a another.img 는 disk.img 에 대해 원시 형식(자동 탐지 없음)을 강제 적용하여 다른.img .img의 경우 원시 형식(자동 탐지 없음)으로 되돌립니다.img 신뢰할 수 없는 원시 형식 게스트 디스크 이미지가 있는 경우 이 옵션을 사용하여 디스크 형식을 지정해야 합니다. 이로 인해 악의적인 게스트의 보안 문제가 발생할 수 있습니다. |
--list-operations | virt-sysprep 프로그램에서 지원하는 작업을 나열합니다. 이러한 필드는 한 줄에 하나씩 나열되며, 하나 이상의 단일 공백으로 구분된 필드가 있습니다. 출력의 첫 번째 필드는 --enable 플래그에 제공할 수 있는 작업 이름입니다. 두 번째 필드는 작업이 기본적으로 활성화되어 있거나 그렇지 않은 경우 비어 있는 경우 * 문자입니다. 동일한 줄의 추가 필드에는 작업에 대한 설명이 포함됩니다. | virt-sysprep --list-operations |
--Mount-options | 게스트 가상 시스템의 각 마운트 지점에 대한 마운트 옵션을 설정합니다. RuntimeClass로 구분된 마운트 지점:options 쌍을 사용합니다. 쉘에서 보호하려면 이 목록에 따옴표를 배치해야 할 수 있습니다. | virt-sysprep --mount-options "/:notime" 은 notime 작업을 통해 루트 디렉토리를 마운트합니다. |
-q 또는 --quiet | 로그 메시지 인쇄를 방지합니다. | virt-sysprep -q |
-v 또는 --verbose | 디버깅을 위해 자세한 메시지를 활성화합니다. | virt-sysprep -v |
-v 또는 --version | virt-sysprep 버전 번호를 표시하고 종료합니다. | virt-sysprep -V |
--root-password | 루트 암호를 설정합니다. 을 사용하여 새 암호를 명시적으로 지정하거나 선택한 파일의 첫 번째 행에서 문자열을 더 안전하게 지정할 수 있습니다. |
virt-sysprep
--root-password password: 123456 -a guest.img
또는
virt-sysprep
--root-password file: SOURCE_FILE_PATH -a guest.img
|
21.12. virt-customize 가상 머신 설정 사용자 정의
virt-customize
를 설치하려면 다음 명령 중 하나를 실행합니다.
# yum install /usr/bin/virt-customize
# yum install libguestfs-tools-c
표 21.2. virt-customize 옵션
명령 | 설명 | 예제 |
---|---|---|
--help | 특정 명령 또는 virt-customize 유틸리티에 대한 간단한 도움말 항목을 표시합니다. 추가 도움말은 virt-customize man 페이지를 참조하십시오. | virt-customize --help |
-a [파일] 또는 --add [file] | 게스트 가상 머신의 디스크 이미지여야 하는 지정된 파일 을 추가합니다. 디스크 이미지 형식이 자동으로 탐지됩니다. 이 값을 재정의하고 특정 형식을 강제 적용하려면 --format 옵션을 사용합니다. | virt-customize --add /dev/vms/disk.img |
-a [URI] 또는 --add [URI] | 원격 디스크를 추가합니다. URI 형식은 RuntimeClass와 호환됩니다. 자세한 내용은 21.4.2절. “RuntimeClass를 사용하여 파일 추가”의 내용을 참조하십시오. | virt-customize -a rbd://example.com[:port]/pool/disk |
-c [URI] 또는 --connect [URI] | libvirt 를 사용하는 경우 지정된 URI에 연결합니다. 생략하면 KVM 하이퍼바이저를 통해 연결됩니다. 게스트 블록 장치를 직접 지정하는 경우 (virt-customize -a), libvirt 가 전혀 사용되지 않습니다. | virt-customize -c qemu:///system |
-d [guest] 또는 --domain [guest] | 지정된 게스트 가상 머신의 모든 디스크를 추가합니다. 도메인 UUID는 도메인 이름 대신 사용할 수 있습니다. | virt-customize --domain 90df2f3f-8857-5ba9-2714-7d95907b1c9e |
-n 또는 --dry-run | 게스트 가상 시스템에서 읽기 전용 "실행" 사용자 지정 작업을 수행합니다. 이렇게 하면 사용자 지정 작업이 실행되지만 끝에 디스크에 모든 변경 사항이 제거됩니다. | virt-customize -n |
--format [raw |qcow2 |auto ] | a 옵션의 기본값은 디스크 이미지 형식을 자동으로 검색하는 것입니다. 이를 사용하면 명령줄에서 뒤에 오는 -a 옵션에 대해 디스크 형식이 강제 적용됩니다. --format auto 를 사용하여 후속 -a 옵션에 대한 자동 감지로 다시 전환합니다(위의 -a 명령 참조). | virt-customize --format raw -a disk.img 는 disk.img에 대해 원시 형식(자동 감지 없음)을 강제 적용하지만 virt-customize --format raw -a disk.img --format auto -a another.img 는 disk.img 에 대해 원시 형식(자동 탐지 없음)을 강제 적용하고 다른.img를 위해 원시 형식(자동 탐지 없음)으로 되돌립니다.img 신뢰할 수 없는 원시 형식 게스트 디스크 이미지가 있는 경우 이 옵션을 사용하여 디스크 형식을 지정해야 합니다. 이로 인해 악의적인 게스트의 보안 문제가 발생할 수 있습니다. |
-m [MB] 또는 --memsize [MB] | --run 스크립트에 할당된 메모리 양을 변경합니다. --run scripts 또는 --install 옵션을 사용하면 메모리 문제가 부족하여 메모리 할당을 늘립니다. | virt-customize --memsize 1024 |
--network 또는 --no-network | 설치하는 동안 게스트에서 네트워크 액세스를 활성화하거나 비활성화합니다. 기본값은 enabled입니다. --no-network 를 사용하여 액세스를 비활성화합니다. 이 명령은 부팅 후 네트워크에 대한 게스트 액세스에 영향을 미치지 않습니다. 자세한 내용은 libguestfs 설명서 를 참조하십시오. | virt-customize -a http://[user@]example.com[:port]/disk.img |
-q 또는 --quiet | 로그 메시지 인쇄를 방지합니다. | virt-customize -q |
-smp [N] | --install 스크립트에서 사용할 수 있는 N 가상 CPU를 활성화합니다. N 은 2 이상이어야 합니다. | virt-customize -smp 4 |
-v 또는 --verbose | 디버깅을 위해 자세한 메시지를 활성화합니다. | virt-customize --verbose |
-v 또는 --version | virt-customize 버전 번호를 표시하고 종료합니다. | virt-customize --V |
-x | libguestfs API 호출 추적을 활성화합니다. | virt-customize -x |
예 21.1. virt-customize 를 사용하여 게스트에 패키지 설치
virt-customize -a disk.img --install gimp,inkscape --selinux-relabel
21.13. virt-diff: 가상 머신 파일 간의 차이점 나열
virt-diff
를 설치하려면 다음 명령 중 하나를 실행합니다.
# yum install /usr/bin/virt-diff
# yum install libguestfs-tools-c
-a
또는 -d
옵션과 두 번째 게스트에 -A
또는 -D
옵션을 사용해야 합니다. 예를 들면 다음과 같습니다.
$ virt-diff -a old.img -A new.img
$ virt-diff -d oldguest -D newguest
표 21.3. virt-diff 옵션
명령 | 설명 | 예제 |
---|---|---|
--help | 특정 명령 또는 virt-diff 유틸리티에 대한 간략한 도움말 항목을 표시합니다. 추가 도움말은 virt-diff 매뉴얼 페이지를 참조하십시오. | virt-diff --help |
-a [파일] 또는 --add [file] |
첫 번째 가상 시스템의 디스크 이미지여야 하는 지정된 파일 을 추가합니다. 가상 머신에 블록 장치가 여러 개 있는 경우 별도의
-a 옵션으로 모든 장치를 제공해야 합니다.
디스크 이미지 형식이 자동으로 탐지됩니다. 이 값을 재정의하고 특정 형식을 강제 적용하려면
--format 옵션을 사용합니다.
| virt-customize --add /dev/vms/original.img -A /dev/vms/new.img |
-a [URI] 또는 --add [URI] | 원격 디스크를 추가합니다. URI 형식은 RuntimeClass와 호환됩니다. 자세한 내용은 21.4.2절. “RuntimeClass를 사용하여 파일 추가”의 내용을 참조하십시오. | virt-diff -a rbd://example.com[:port]/pool/newdisk -A rbd://example.com[:port]/pool/olddisk |
--all | --extra-stats --uids --uids --xattrs 와 동일합니다. | virt-diff --all |
--atime | 기본적으로 virt-diff 는 파일 액세스 시간에 대한 변경 사항을 무시합니다. 이러한 변경 사항은 흥미로운 경우가 거의 없기 때문입니다. --atime 옵션을 사용하여 액세스 시간 차이를 표시합니다. | virt-diff --atime |
-a [파일] | 두 번째 가상 시스템의 디스크 이미지여야 하는 지정된 파일 또는 URI 를 추가합니다. | virt-diff --add /dev/vms/original.img -A /dev/vms/new.img |
-c [URI] 또는 --connect [URI] | libvirt 를 사용하는 경우 지정된 URI에 연결합니다. 생략하면 기본 libvirt 하이퍼바이저에 연결됩니다. 게스트 블록 장치를 직접 지정하는 경우 (virt-diff -a), libvirt 가 전혀 사용되지 않습니다. | virt-diff -c qemu:///system |
--csv | 결과를 쉼표로 구분된 값(CSV) 형식으로 제공합니다. 이 형식은 데이터베이스 및 스프레드로 쉽게 가져올 수 있습니다. 자세한 내용은 참고 에서 참조하십시오. | virt-diff --csv |
-d [guest] 또는 --domain [guest] | 지정된 게스트 가상 머신의 모든 디스크를 첫 번째 게스트 가상 시스템으로 추가합니다. 도메인 UUID는 도메인 이름 대신 사용할 수 있습니다. | $ virt-diff --domain 90df2f3f-8857-5ba9-2714-7d95907b1c9e |
-d [guest] | 지정된 게스트 가상 시스템의 모든 디스크를 두 번째 게스트 가상 시스템으로 추가합니다. 도메인 UUID는 도메인 이름 대신 사용할 수 있습니다. | virt-diff --D 90df2f3f-8857-5ba9-2714-7d95907b1cd4 |
--extra-stats | 추가 통계를 표시합니다. | virt-diff --extra-stats |
--format 또는 --format=[raw |qcow2 ] | -a /-A 옵션의 기본값은 디스크 이미지의 형식을 자동으로 감지하는 것입니다. 이 기능을 사용하면 명령줄에서 뒤에 오는 -a /-A 옵션에 대한 디스크 형식이 강제 적용됩니다. --format auto 를 사용하여 후속 -a 옵션에 대한 자동 감지로 다시 전환합니다(위의 -a 명령 참조). | virt-diff --format raw -a new.img -A old.img 는 new.img 및 old.img에 대해 원시 형식(자동 감지 없음)을 강제 적용하지만 virt-diff --format raw -a new.img --format auto-format auto -a old.img 는 원시 형식(자동 감지 없음)을 강제 적용하며 new.img 에 대해 원시 형식(자동 탐지 없음)을 강제 적용합니다. 신뢰할 수 없는 원시 형식 게스트 디스크 이미지가 있는 경우 이 옵션을 사용하여 디스크 형식을 지정해야 합니다. 이로 인해 악의적인 게스트의 보안 문제가 발생할 수 있습니다. |
-H 또는 --human-readable | 사용자가 읽을 수 있는 형식으로 파일 크기를 표시합니다. | virt-diff -h |
--time-days |
변경된 파일의 시간 필드를 이제까지의 일(나중에 있는 경우)으로 표시합니다.
0 은 향후 86,399초(23시간, 59분, 59분, 59초) 사이를 의미합니다.
| virt-diff --time-days |
-v 또는 --verbose | 디버깅을 위해 자세한 메시지를 활성화합니다. | virt-diff --verbose |
-v 또는 --version | virt-diff 버전 번호를 표시하고 종료합니다. | virt-diff -V |
-x | libguestfs API 호출 추적을 활성화합니다. | virt-diff -x |
21.14. virt-sparsify: 빈 디스크 공간 회수
$ ls -lh test1.img -rw-rw-r--. 1 rjones rjones 100M Aug 8 08:08 test1.img $ du -sh test1.img 3.6M test1.img
중요한 제한 사항
- virt-sparsify 를 사용하기 전에 가상 머신을 종료해야 합니다.
- 심각한 경우 virt-sparsify 는 소스 디스크 이미지의 가상 크기보다 두 배가 필요할 수 있습니다. 임시 복사용이고 하나는 대상 이미지용입니다.
--in-place
옵션을 사용하는 경우 대량의 임시 공간이 필요하지 않습니다. - virt-sparsify 는 디스크 이미지의 크기를 조정하는 데 사용할 수 없습니다. 디스크 이미지의 크기를 조정하려면 virt-resize. virt-resize 에 대한 자세한 내용은 21.8절. “virt-resize: 게스트 가상 머신 오프라인 크기 조정” 을 참조하십시오.
- 암호화된 디스크를 확장할 수 없기 때문에 virt-sparsify 는 암호화된 디스크에서 작동하지 않습니다.
- virt-sparsify 는 파티션 간의 공간을 강화할 수 없습니다. 이 공간은 종종 부트로더와 같은 중요한 항목에 사용되므로 실제로는 사용되지 않는 공간이 아닙니다.
복사
모드에서 qcow2 내부 스냅샷은 대상 이미지에 복사되지 않습니다.
예
virt-sparsify
를 설치하려면 다음 명령 중 하나를 실행합니다.
# yum install /usr/bin/virt-sparsify
# yum install libguestfs-tools-c
# virt-sparsify /dev/sda1 /dev/device
/dev/sda1
의 콘텐츠를 /dev/device
에 복사하여 출력을 스파스로 만듭니다. /dev/device
가 이미 있는 경우 덮어씁니다. /dev/sda1
의 형식이 탐지되어 /dev/device
의 형식으로 사용됩니다.
# virt-sparsify disk.raw --convert qcow2 disk.qcow2
# virt-sparsify --ignore /dev/device /dev/sda1 /dev/device
# virt-sparsify --in-place disk.img
virt-sparsify 옵션
표 21.4. virt-sparsify 옵션
명령 | 설명 | 예제 |
---|---|---|
--help | 특정 명령 또는 virt-sparsify 유틸리티에 대한 간략한 도움말 항목을 표시합니다. 추가 도움말은 virt-sparsify man 페이지를 참조하십시오. | virt-sparsify --help |
--check-tmpdir ignore |continue |warn |fail | tmpdir 에 작업을 완료하기에 충분한 공간이 있는지 추정합니다. 지정된 옵션에서 작업을 완료하기에 충분한 공간이 없는 경우 동작을 결정합니다.
--in-place 옵션과 함께 사용할 수 없습니다. |
virt-sparsify --check-tmpdir ignore
/dev/sda1 /dev/device
virt-sparsify --check-tmpdir continue
/dev/sda1 /dev/device
virt-sparsify --check-tmpdir warn
/dev/sda1 /dev/device
virt-sparsify --check-tmpdir fail
/dev/sda1 /dev/device
|
--compress | 출력 파일을 압축합니다. 이는 출력 형식이 qcow2인 경우에만 작동합니다. 이 옵션은 --in-place 옵션과 함께 사용할 수 없습니다. | virt-sparsify --compress /dev/sda1 /dev/device |
--convert |
지정된 형식을 사용하여 스파스 이미지를 생성합니다. 형식을 지정하지 않으면 입력 형식이 사용됩니다.
다음 출력 형식이 지원되며, raw, qcow, vdi로 알려져 있습니다.
QEMU 에뮬레이터에서 지원하는 모든 형식을 사용할 수 있습니다.
--convert 옵션을 사용하는 것이 좋습니다. 이렇게 하면 virt-sparsify 가 입력 형식을 추측할 필요가 없습니다.
이 옵션은
--in-place 옵션과 함께 사용할 수 없습니다.
|
virt-sparsify --convert raw
/dev/sda1 /dev/device
virt-sparsify --convert qcow2
/dev/sda1 /dev/device
virt-sparsify --convert other_format indisk outdisk
|
--format | 입력 디스크 이미지의 형식을 지정합니다. 지정하지 않으면 이미지에서 형식이 감지됩니다. 신뢰할 수 없는 원시 형식 게스트 디스크 이미지로 작업할 때는 형식을 지정해야 합니다. |
virt-sparsify --format raw
/dev/sda1 /dev/device
virt-sparsify --format qcow2
/dev/sda1 /dev/device
|
--ignore |
지정된 파일 시스템 또는 볼륨 그룹을 무시합니다.
파일 시스템을 지정하고
--in-place 옵션을 지정하지 않으면 파일 시스템의 사용 가능한 공간이 0되지 않습니다. 그러나 기존 제로 블록은 스파르화되어 있습니다. --in-place 옵션을 지정하면 파일 시스템이 완전히 무시됩니다.
볼륨 그룹을 지정하면 볼륨 그룹이 무시됩니다. 볼륨 그룹 이름은 /dev/ 접두사 없이 사용해야 합니다. 예를 들면 --ignorevirtualization_foo입니다.
--ignore 옵션은 명령에 여러 번 포함될 수 있습니다.
|
virt-sparsify --ignore filesystem1
/dev/sda1 /dev/device
virt-sparsify --ignore volume_group
/dev/sda1 /dev/device
|
--in-place |
임시 복사본을 만드는 대신 이미지 스파스를 위치에 만듭니다. 인플레이션 스파화는 스파저션을 복사하는 것보다 더 효율적이지만 스파재를 복사하는 것과는 상당히 많은 디스크 공간을 복구할 수 없습니다. 내부 스파화는 삭제 (Fours or unmap) 지원을 사용하여 작동합니다.
인플레이션 스파 기능을 사용하려면 제대로 작동하는 디스크 이미지를 지정합니다.
인플레이스 스파 기능을 지정할 때 다음 옵션을 사용할 수 없습니다.
| virt-sparsify --in-place disk.img |
-x | libguestfs API 호출 추적을 활성화합니다. | virt-sparsify -x filesystem1 /dev/sda1 /dev/device |
22장. 게스트 가상 머신 관리용 그래픽 사용자 인터페이스 도구
22.1. virt-viewer
virt-viewer
는 게스트 가상 시스템의 그래픽 콘솔을 표시하기 위한 최소 명령줄 유틸리티입니다. 콘솔은 VNC 또는 SPICE 프로토콜을 사용하여 액세스할 수 있습니다. 게스트는 이름, ID 또는 UUID로 참조할 수 있습니다. 게스트가 아직 실행되고 있지 않은 경우, 뷰어는 콘솔에 연결을 시도하기 전에 시작할 때까지 대기하도록 설정할 수 있습니다. 뷰어는 원격 호스트에 연결하여 콘솔 정보를 가져온 다음 동일한 네트워크 전송을 사용하여 원격 콘솔에 연결할 수도 있습니다.
# yum install virt-viewer
구문
# virt-viewer [OPTIONS] {guest-name|id|uuid}
게스트 가상 머신에 연결
# virt-viewer guest-name
# virt-viewer --connect qemu:///system guest-name
# virt-viewer --connect qemu://example.org/ guest-name
# virt-viewer --direct --connect qemu+ssh://root@example.org/ guest-name
인터페이스
그림 22.1. 샘플 virt-viewer 인터페이스
핫키 설정
--hotkeys
옵션을 사용합니다.
# virt-viewer --hotkeys=action1=key-combination1[,action2=key-combination2] guest-name
- toggle-full screen
- release-cursor
- smartcard-insert
- smartcard-remove
예 22.1. virt-viewer hotkey 설정
# virt-viewer --hotkeys=toggle-fullscreen=shift+f11 qemu:///system testguest
Kiosk 모드
-k
또는 --kiosk
옵션을 사용하여 게스트에 연결합니다.
예 22.2. 키오스크 모드에서 virt-viewer 사용
# virt-viewer --connect qemu:///system guest-name --kiosk --kiosk-quit on-disconnect
22.2. remote-viewer
remote-viewer
는 SPICE 및 VNC를 지원하는 간단한 원격 데스크탑 디스플레이 클라이언트입니다. 대부분의 기능 및 제한 사항을 virt-viewer 와 공유합니다.
remote-viewer
유틸리티를 설치하려면 다음을 실행합니다.
# yum install virt-viewer
구문
# remote-viewer [OPTIONS] {guest-name|id|uuid}
게스트 가상 머신에 연결
예 22.3. SPICE를 사용하여 게스트 디스플레이에 연결
# remote-viewer spice://testguest:5900
예 22.4. VNC를 사용하여 게스트 디스플레이에 연결
testguest2
라는 시스템의 VNC 서버에 연결합니다.
# remote-viewer vnc://testguest2:5900
인터페이스
그림 22.2. 샘플 remote-viewer 인터페이스
22.3. GNOME Boxes
# yum install gnome-boxes
- - 검색 버튼을 사용하여 게스트 가상 머신을 이름으로 검색하고,
- 선택 버튼입니다.
그림 22.3. Operations Bar
- 자주 하는 질문: 선택한 게스트 가상 머신에 중심을 추가하고 게스트 목록의 맨 위로 이동합니다. 이는 게스트 수가 증가함에 따라 점점 더 도움이 되고 있습니다.
- 일시 중지: 선택한 게스트 가상 머신이 실행을 중지합니다.
- 삭제: 선택한 게스트 가상 머신을 제거합니다.
- properties: 선택한 게스트 가상 머신의 속성을 표시합니다.
절차 22.1. 상자를 사용하여 새 게스트 가상 머신 생성
새로생성을 클릭합니다.
그러면 Introduction 화면이 열립니다. Continue 를 클릭합니다.그림 22.4. 소개 화면
소스 선택
소스 선택 화면에는 다음 세 가지 옵션이 있습니다.- 사용 가능한 미디어: 즉시 사용 가능한 설치 미디어가 여기에 표시됩니다. 이 중 하나를 클릭하면 검토 화면으로 직접 이동합니다.
- URL을 입력하십시오. URL에 입력하여 ISO 파일의 로컬 URI 또는 경로를 지정합니다. 이 방법은 원격 시스템에 액세스하는 데도 사용할 수 있습니다. 주소는 프로토콜://IPaddress?포트 (예:)의 패턴을 따라야 합니다.
spice://192.168.122.1?port=5906;
프로토콜은spice://
,qemu://
또는vnc://
- 파일 선택: 설치 미디어를 수동으로 검색할 파일 디렉터리를 엽니다.
그림 22.5. 소스 선택 화면
세부 정보 검토
검토 화면에 게스트 가상 머신의 세부 정보가 표시됩니다.그림 22.6. 화면 검토
이러한 세부 사항은 다음과 같이 남겨질 수 있으며, 이 경우 최종 단계로 진행하거나:선택 사항: 세부 정보 사용자 지정
Customize 를 클릭하면 메모리 및 디스크 크기와 같은 게스트 가상 머신의 구성을 조정할 수 있습니다.그림 22.7. 사용자 정의 화면
create
생성을 클릭합니다. 새로운 게스트 가상 머신이 열립니다.
23장. 도메인 XML 조작
<도메인>
요소를 나타냅니다. 도메인 XML에는 type
및 id
라는 두 가지 속성이 있습니다.type
은 도메인 실행에 사용되는 하이퍼바이저를 지정합니다. 허용되는 값은 드라이버별이지만 KVM
과 기타를 포함합니다. id
는 실행 중인 게스트 가상 머신의 고유한 정수 식별자입니다. 비활성 시스템에는 id
값이 없습니다. 이 장의 섹션에서는 도메인 XML의 구성 요소에 대해 설명합니다. 이 설명서의 추가 장에서는 도메인 XML을 조작해야 할 때 이 장을 확인할 수 있습니다.
23.1. 일반 정보 및 메타데이터
그림 23.1. 도메인 XML 메타데이터
<domain type='kvm' id='3'> <name>fv0</name> <uuid>4dea22b31d52d8f32516782e98ab3fa0</uuid> <title>A short description - title - of the domain</title> <description>A human readable description</description> <metadata> <app1:foo xmlns:app1="http://app1.org/app1/">..</app1:foo> <app2:bar xmlns:app2="http://app1.org/app2/">..</app2:bar> </metadata> ... </domain>
표 23.1. 일반 메타데이터 요소
element | 설명 |
---|---|
<name> | 가상 머신의 이름을 할당합니다. 이 이름은 alpha-numeric 문자로만 구성되어야 하며 단일 호스트 물리적 머신 범위 내에서 고유해야 합니다. 영구 구성 파일을 저장하기 위해 파일 이름을 형성하는 데 사용되는 경우가 많습니다. |
<uuid> | 가상 머신의 전역 고유 식별자를 할당합니다. 형식은 RFC 4122-호환해야 합니다(예: 3e3fce45-4f53-4fa7-bb32-11f34168b82b ). 새 시스템을 정의하거나 생성할 때 생략된 경우 임의의 UUID가 생성됩니다. 또한 sysinfo 사양을 사용하여 UUID를 제공할 수도 있습니다. |
<title> | 도메인에 대한 간단한 설명을 위한 공간을 만듭니다. 제목에는 새 줄이 포함되어서는 안 됩니다. |
<description> | 제목과 달리 이 데이터는 libvirt에서 사용되지 않습니다. 여기에는 사용자가 표시하도록 선택하는 모든 정보가 포함될 수 있습니다. |
<metadata> | 애플리케이션에서 사용자 지정 메타데이터를 XML 노드/트리 형태로 저장하는 데 사용할 수 있습니다. 애플리케이션은 XML 노드/트리에서 사용자 지정 네임 스페이스를 사용해야 하며, 네임 스페이스당 하나의 최상위 요소(애플리케이션 요구 사항이 있는 경우)는 이름 공간에 하위 요소를 사용해야 합니다. |
23.2. 운영 체제 부팅
23.2.1. BIOS Boot Loader
<os>
섹션에는 다음 정보가 포함되어 있습니다.
그림 23.2. BIOS 부트 로더 도메인 XML
... <os> <type>hvm</type> <boot dev='fd'/> <boot dev='hd'/> <boot dev='cdrom'/> <boot dev='network'/> <bootmenu enable='yes'/> <smbios mode='sysinfo'/> <bios useserial='yes' rebootTimeout='0'/> </os> ...
표 23.2. BIOS 부트 로더 요소
element | 설명 |
---|---|
<type> | 게스트 가상 머신에서 부팅할 운영 체제 유형을 지정합니다. hvm 은 운영 체제가 베어 메탈에서 실행되도록 설계되었으며 완전한 가상화가 필요하다는 것을 나타냅니다. linux 는 KVM 하이퍼바이저 게스트 ABI를 지원하는 운영 체제를 나타냅니다. 또한 두 가지 선택적 속성이 있습니다. arch 는 CPU 아키텍처를 가상화에 지정하고 시스템은 시스템 유형을 나타냅니다. 자세한 내용은 libvirt 업스트림 문서를 참조하십시오. |
<boot> | 다음 값(fd ,hd ,cdrom 또는 network ) 중 하나로 고려할 다음 부팅 장치를 지정합니다. 부트 요소를 여러 번 반복하여 시도할 부팅 장치의 우선 순위 목록을 설정할 수 있습니다. 동일한 유형의 여러 장치가 버스의 순서를 유지하면서 목표에 따라 정렬됩니다. 도메인을 정의하면 libvirt에서 반환된 XML 구성이 정렬된 순서로 나열됩니다. 정렬되면 첫 번째 장치는 부팅 가능으로 표시됩니다. 자세한 내용은 libvirt 업스트림 문서를 참조하십시오. |
<부팅 메뉴> | 게스트 가상 머신을 시작할 때 대화형 부팅 메뉴 프롬프트를 활성화할지 여부를 결정합니다. enable 속성은 yes 또는 no 일 수 있습니다. 지정하지 않으면 하이퍼바이저 기본값이 사용됩니다. |
<SMBIOS> | 게스트 가상 머신에 SMBIOS 정보를 표시하는 방법을 결정합니다. mode 속성은 에뮬레이션 (하이퍼바이저가 모든 값을 생성할 수 있음), host (호스트의 물리적 시스템의 SMBIOS 값에서 UUID를 제외한 모든 블록 0 및 블록 1과 동일한)로 지정되어야 합니다. virConnectGetSysinfo 호출을 사용하여 어떤 값을 복사할지 확인할 수 있습니다( sysinfo 요소에서 사용). 지정하지 않으면 하이퍼바이저의 기본 설정이 사용됩니다. |
<BIOS> | 이 요소에는 가능한 값이 yes 또는 no 인 속성 use erial 가 있습니다. 이 속성은 사용자가 직렬 포트에서 BIOS 메시지를 볼 수 있도록 하는 직렬 그래픽 어댑터를 활성화하거나 비활성화합니다. 따라서 직렬 포트가 정의되어 있어야 합니다. rebootTimeout 속성은 부팅이 실패할 경우 게스트 가상 머신의 부팅을 다시 시작할 때까지의 기간( BIOS에 따라)을 제어합니다. 값은 최대 65535 ; 설정 -1 은 재부팅을 비활성화합니다. |
23.2.2. 직접 커널 부팅
initrd
에서 직접 부팅하면 명령줄 인수를 설치 프로그램에 직접 전달할 수 있습니다. 이 기능은 일반적으로 완전히 가상화된 게스트 가상 머신 모두에서 사용할 수 있습니다.
그림 23.3. 직접 커널 부팅
... <os> <type>hvm</type> <kernel>/root/f8-i386-vmlinuz</kernel> <initrd>/root/f8-i386-initrd</initrd> <cmdline>console=ttyS0 ks=http://example.com/f8-i386/os/</cmdline> <dtb>/root/ppc.dtb</dtb> </os> ...
표 23.3. 직접 커널 부팅 요소
element | 설명 |
---|---|
<type> | BIOS 부팅 섹션에 설명된 것과 동일합니다. |
<kernel> | 호스트 물리적 시스템 운영 체제에서 커널 이미지의 정규화된 경로를 지정합니다. |
<initrd> | 호스트 물리적 머신 운영 체제에서 (선택 사항) 램디스크 이미지에 대한 정규화된 경로를 지정합니다. |
<cmdline> | 부팅 시 커널(또는 설치 프로그램)에 전달할 인수를 지정합니다. 이는 종종 대체 기본 콘솔(예: 직렬 포트) 또는 설치 미디어 소스 또는 Kickstart 파일을 지정하는 데 사용됩니다. |
23.2.3. 컨테이너 부팅
init
요소를 사용하여 init
바이너리의 경로가 필요합니다. 기본적으로 이 작업은 인수 없이 시작됩니다. 초기 argv
를 지정하려면 필요에 따라 반복된 initarg
요소를 사용합니다. cmdline 요소는
/proc/cmdline
과 동일하지만 <initarg>
에는 영향을 미치지 않습니다.
그림 23.4. 컨테이너 부팅
... <os> <type arch='x86_64'>exe</type> <init>/bin/systemd</init> <initarg>--unit</initarg> <initarg>emergency.service</initarg> </os> ...
23.3. SMBIOS 시스템 정보
sysinfo
요소는 이러한 정보의 모든 카테고리를 다룹니다.
그림 23.5. SMBIOS 시스템 정보
... <os> <smbios mode='sysinfo'/> ... </os> <sysinfo type='smbios'> <bios> <entry name='vendor'>LENOVO</entry> </bios> <system> <entry name='manufacturer'>Fedora</entry> <entry name='vendor'>Virt-Manager</entry> </system> </sysinfo> ...
<sysinfo>
요소에는 하위 요소 레이아웃을 결정하는 필수 특성 유형이
있으며 다음과 같이 정의할 수 있습니다.
<SMBIOS>
- Sub- elements는 특정 SMBIOS 값을 호출합니다. 이 값은<os>
요소의 KubeMacPoolios
하위 항목과 함께 사용되는 경우 게스트 가상 머신에 영향을 미칩니다.<sysinfo>
의 각 하위 요소는 SMBIOS 블록 이름을 지정하고 해당 요소 내에는 블록 내의 필드를 설명하는 엔트리 요소 목록이 될 수 있습니다. 다음 블록 및 항목이 인식됩니다.<BIOS>
- SMBIOS의 블록 0이며벤더
에서 입력 이름이 ,버전
,날짜
및릴리스
.<시스템>
- 이 블록은 SMBIOS의 블록 1이며,제조업체
,제품
,버전
,직렬
,uuid
,스쿠
및제품군
에서 가져온 엔트리 이름이 있습니다.uuid
항목이
최상위 수준 uuid 요소와 함께 제공되는 경우 두 값이 일치해야 합니다.
23.4. CPU 할당
그림 23.6. CPU allocation
<domain> ... <vcpu placement='static' cpuset="1-4,^3,6" current="1">2</vcpu> ... </domain>
<vcpu>
요소는 게스트 가상 머신 운영 체제에 할당된 최대 가상 CPU 수를 정의합니다. 이는 하이퍼바이저에서 지원하는 최대 수와 1 사이여야 합니다. 이 요소에는 기본적으로 도메인 프로세스 및 가상 CPU를 고정할 수 있는 쉼표로 구분된 물리 CPU 번호 목록인 선택적 cpuset
속성이 포함될 수 있습니다.
cputune
속성을 사용하여 도메인 프로세스 및 가상 CPU의 고정 정책을 별도로 지정할 수 있습니다. emulatorpin
속성이 <cputune>
에 지정되면 <vcpu>
로 지정된cpuset
가 무시됩니다.
vcpupin
에 대한 값을 설정한 가상 CPU는 cpuset
설정을 무시하게 됩니다. vcpupin
이 지정되지 않은 가상 CPU의 경우 cpuset
에서 지정한 물리적 CPU에 고정됩니다. cpuset
목록의 각 요소는 단일 CPU 번호, CPU 번호 범위 또는 캐럿(^) 뒤에 이전 범위에서 제외할 CPU 번호입니다. 현재
속성을 사용하여 최대 가상 CPU 수를 활성화할지 여부를 지정할 수 있습니다.
배치
선택적 속성은 도메인 프로세스의 CPU 배치 모드를 나타내는 데 사용할 수 있습니다. 배치
값은 다음 중 하나로 설정할 수 있습니다.
정적
- vCPU를cpuset
특성에 정의된 물리적 CPU에 고정합니다.cpuset
가 정의되지 않은 경우 도메인 프로세스는 사용 가능한 모든 물리적 CPU에 고정됩니다.auto
- 도메인 프로세스가 쿼리 numad에서 권고 노드 세트에 고정되고 지정된 경우 속성cpuset
값이 무시됨을 나타냅니다.
23.5. CPU 튜닝
그림 23.7. CPU 튜닝
<domain> ... <cputune> <vcpupin vcpu="0" cpuset="1-4,^2"/> <vcpupin vcpu="1" cpuset="0,1"/> <vcpupin vcpu="2" cpuset="2,3"/> <vcpupin vcpu="3" cpuset="0,4"/> <emulatorpin cpuset="1-3"/> <shares>2048</shares> <period>1000000</period> <quota>-1</quota> <emulator_period>1000000</emulator_period> <emulator_quota>-1</emulator_quota> </cputune> ... </domain>
표 23.4. CPU 튜닝 요소
element | 설명 |
---|---|
<cputune> | 도메인의 CPU 튜닝 가능한 매개변수에 대한 세부 정보를 제공합니다. 이는 선택 사항입니다. |
<vcpupin> | 도메인 vCPU가 고정될 호스트 물리적 CPU 중 어느 것입니까. 이 값이 생략되고 <vcpu> 요소의 cpuset 속성이 지정되지 않은 경우 vCPU는 기본적으로 모든 물리적 CPU에 고정됩니다. 여기에는 두 가지 필수 특성이 포함되어 있습니다. <vcpu> 속성은 id 를 지정하고 cpuset 속성은 <vcpu> 요소의 cpuset 속성과 동일합니다. |
<emulatorpin> | 호스트 물리적 시스템 CPU 중 "emulator"(vcpu <를> 포함하지 않는 도메인의 서브 세트)를 고정할 호스트 물리적 시스템 CPU를 지정합니다. 이 값이 생략되고 <vcpu> 요소의 cpuset 속성이 지정되지 않은 경우 기본적으로 "emulator"가 모든 물리적 CPU에 고정됩니다. 고정할 물리적 CPU를 지정하는 데 필요한 cpuset 속성이 포함되어 있습니다. <vcpu> 요소의 placement 속성이 auto 로 설정된 경우 emulatorpin 은 허용되지 않습니다. |
<shares> | 도메인의 비율 가중치 공유를 지정합니다. 이 문제가 생략되면 기본값이 제공된 운영 체제의 기본값입니다. 값에 대한 장치가 없으면 다른 게스트 가상 머신의 설정에 따라 계산됩니다. 예를 들어 < 값이 2048인 게스트 가상 시스템으로 구성된 게스트 가상 시스템은 공유 값 1024로 구성된 게스트 가상 머신의 두 배의 CPU 시간을 가져옵니다. |
<기간> | 적용 간격을 마이크로초 단위로 지정합니다. <마침표> 를 사용하면 도메인의 vCPU마다 할당된 할당량 이상의 실행 시간을 사용할 수 없습니다. 이 값은 다음 범위 내에 있어야 합니다. 1000-1000000 . 값이 0 인 <period> 는 값이 없음을 의미합니다. |
<할당량> | microseconds에서 허용되는 최대 대역폭을 지정합니다. <할당량> 이 있는 도메인은 도메인에 무한 대역폭이 있음을 나타냅니다. 이는 대역폭이 제어되지 않음을 의미합니다. 값은 다음 범위 내에 있어야 합니다. 1000 - 18446744073709551 이하 0 . 값이 0 인 할당량 은 값이 없음을 의미합니다. 이 기능을 사용하여 모든 vCPU가 동일한 속도로 실행되도록 할 수 있습니다. |
<emulator_period> | 적용 간격을 마이크로초 단위로 지정합니다. <에뮬레이터_period> 내에서 도메인의 에뮬레이터 스레드(vCPU 제외)는 <에뮬레이터_quota> 이상의 런타임을 사용할 수 없습니다. <emulator_period> 값은 다음 범위에 있어야 합니다. 1000 - 1000000 . 값이 0 인 <emulator_period> 는 값이 없음을 의미합니다. |
<emulator_quota> | 도메인의 에뮬레이터 스레드(vCPU 제외)에 대해 microseconds에서 허용되는 최대 대역폭을 지정합니다. <에뮬레이터_quota> 를 음수 값으로 사용하는 도메인은 도메인에 에뮬레이터 스레드에 대한 무한 대역폭( vCPU 제외)이 있음을 나타냅니다. 이는 대역폭이 제어되지 않음을 의미합니다. 값은 다음 범위에 있어야 합니다. 1000 - 18446744073709551 또는 0 미만입니다. 값이 0 인 <emulator_quota> 는 값이 없음을 의미합니다. |
23.6. 메모리 백업
그림 23.8. 메모리 지원
<domain> ... <memoryBacking> <hugepages> <page size="1" unit="G" nodeset="0-3,5"/> <page size="2" unit="M" nodeset="4"/> </hugepages> <nosharepages/> <locked/> </memoryBacking> ... </domain>
23.7. 메모리 튜닝
그림 23.9. 메모리 튜닝
<domain> ... <memtune> <hard_limit unit='G'>1</hard_limit> <soft_limit unit='M'>128</soft_limit> <swap_hard_limit unit='G'>2</swap_hard_limit> <min_guarantee unit='bytes'>67108864</min_guarantee> </memtune> ... </domain>
<memtune>
은 선택 사항이지만 도메인 XML의 이 섹션의 구성 요소는 다음과 같습니다.
표 23.5. 메모리 튜닝 요소
element | 설명 |
---|---|
<memtune> | 도메인의 메모리 튜닝 가능 매개변수에 대한 세부 정보를 제공합니다. 이 문제가 생략되면 기본값이 제공된 운영 체제의 기본값입니다. 매개 변수가 프로세스에 전체적으로 적용되는 경우 제한을 설정할 때 게스트 가상 시스템 비디오 RAM에 게스트 가상 머신 RAM을 추가하여 값을 확인하여 일부 메모리 오버헤드를 허용합니다. 각 튜닝 가능 항목의 경우 <메모리와> 동일한 값을 사용하여 입력 시 번호가 있는 단위를 지정할 수 있습니다. 이전 버전과의 호환성을 위해 출력은 항상 kibibytes(KiB)입니다. |
<hard_limit> | 게스트 가상 머신에서 사용할 수 있는 최대 메모리입니다. 이 값은 kibibytes (24 바이트 블록)로 표시됩니다. |
<soft_limit> | 메모리 경합 중에 적용할 메모리 제한입니다. 이 값은 kibibytes (24 바이트 블록)로 표시됩니다. |
<swap_hard_limit> | 게스트 가상 머신에서 사용할 수 있는 최대 메모리와 스왑입니다. 이 값은 kibibytes (24 바이트 블록)로 표시됩니다. 이 값은 <hard_limit> 값보다 커야 합니다. |
<min_guarantee> | 게스트 가상 머신에 대한 최소 메모리 할당이 보장됩니다. 이 값은 kibibytes (24 바이트 블록)로 표시됩니다. |
23.8. 메모리 할당
dumpCore
특성을 사용하여 게스트 가상 시스템의 메모리가 생성된 코어 덤프(dumpCore='on'
)에 포함되어야 하는지 또는 포함하지 않아야 하는지를 제어할 수 있습니다(dumpCore='off'
). 기본 설정은 에
있으므로 매개 변수가 off
로 설정되어 있지 않으면 게스트 가상 머신 메모리가 코어 dumpfile에 포함됩니다.
<maxMemory>
요소는 게스트의 최대 런타임 메모리 할당을 결정합니다. slots
속성은 게스트에 메모리를 추가하는 데 사용할 수 있는 슬롯 수를 지정합니다.
<memory>
요소는 부팅 시 게스트의 최대 메모리 할당을 지정합니다. 이 값은 NUMA 셀 크기 구성을 사용하여 설정할 수도 있으며, 메모리를 핫플러그하여 maxMemory
에서 지정한 제한에 의해 증가될 수 있습니다.
<currentMemory>
요소는 게스트 가상 시스템의 실제 메모리 할당을 결정합니다. 이 값은 필요에 따라 게스트 가상 머신 <메모리>
가 balloon 로 설정되도록 최대 할당(메모리로 설정)보다 작을 수 있습니다. 생략하면 기본값은 <memory>
요소와 동일합니다. unit 속성은 메모리와 동일하게 작동합니다.
그림 23.10. 메모리 단위
<domain> <maxMemory slots='16' unit='KiB'>1524288</maxMemory> <memory unit='KiB' dumpCore='off'>524288</memory> <!-- changes the memory unit to KiB and does not allow the guest virtual machine's memory to be included in the generated core dumpfile --> <currentMemory unit='KiB'>524288</currentMemory> <!-- makes the current memory unit 524288 KiB --> ... </domain>
23.9. NUMA 노드 튜닝
그림 23.11. NUMA 노드 튜닝
<domain> ... <numatune> <memory mode="strict" nodeset="1-4,^3"/> </numatune> ... </domain>
표 23.6. NUMA 노드 튜닝 요소
element | 설명 |
---|---|
<numatune> | 도메인 프로세스에 대한 NUMA 정책을 제어하여 NUMA 호스트 물리적 시스템의 성능을 조정하는 방법에 대한 세부 정보를 제공합니다. |
<memory> | NUMA 호스트 물리적 시스템에서 도메인 프로세스에 대한 메모리를 할당하는 방법을 지정합니다. 여기에는 몇 가지 선택적 속성이 포함되어 있습니다. mode 속성은 interleave ,strict 또는 preferred 로 설정할 수 있습니다. 값을 지정하지 않으면 기본값은 strict 입니다. nodeset 속성은 <vcpu> 요소의 cpuset 속성과 동일한 구문을 사용하여 NUMA 노드를 지정합니다. 특성 배치를 사용하여 도메인 프로세스의 메모리 배치 모드를 나타낼 수 있습니다. 해당 값은 static 또는 auto 일 수 있습니다. <nodeset> 속성이 지정된 경우 기본값은 <vcpu> 또는 static .auto 는 도메인 프로세스가 numad 쿼리에서 반환된 권고 노드 세트의 메모리만 할당함을 나타내고 nodeset 속성 값이 지정된 경우 무시됩니다. <> vcpu 의 <placement> 속성이 auto 로 설정되고 <numatune> 속성이 지정되지 않은 경우 <placement> auto 및 strict 모드로 기본 <numatune> 이 암시적으로 추가됩니다. |
23.10. 블록 I/O 튜닝
그림 23.12. 블록 I/O 튜닝
<domain> ... <blkiotune> <weight>800</weight> <device> <path>/dev/sda</path> <weight>1000</weight> </device> <device> <path>/dev/sdb</path> <weight>500</weight> </device> </blkiotune> ... </domain>
표 23.7. 블록 I/O 튜닝 요소
element | 설명 |
---|---|
<blkiotune> | 이 선택적 요소는 도메인의 blkio cgroup 튜닝 가능 매개 변수를 튜닝하는 기능을 제공합니다. 이 문제가 생략되면 기본값이 제공된 운영 체제의 기본값입니다. |
<weight> | 이 선택적 weight 요소는 게스트 가상 시스템의 전체 I/O 가중치입니다. 값은 100~1000 범위 내에 있어야 합니다. |
<device> | 도메인에는 도메인에서 사용하는 각 호스트 물리적 시스템 블록 <장치에> 대한 가중치를 추가로 조정하는 여러 장치 요소가 있을 수 있습니다. 여러 게스트 가상 머신 디스크가 단일 호스트 물리적 시스템 블록 장치를 공유할 수 있습니다. 또한 동일한 호스트 물리적 머신 파일 시스템 내의 파일로 백업되기 때문에 이 튜닝 매개 변수는 각 게스트 가상 머신 디스크 장치(단일 <디스크에> 적용할 수 있는 <iotune> 요소와 연관되는 것이 아니라 글로벌 도메인 수준에 있습니다.) 각 장치 요소에는 두 가지 필수 하위 요소, 장치의 절대 <경로를> 설명하는 경로와 장치의 상대 가중치를 부여하는 가중치는 100 - 1000의 허용 가능한 범위가 있습니다. <> |
23.11. 리소스 파티셔닝
<리소스 요소는 리소스>
파티셔닝과 관련된 구성을 함께 그룹화합니다. 현재 콘텐츠를 도메인에 배치할 리소스 파티션의 경로를 정의하는 자식 요소 파티션을 지원합니다. 파티션이 나열되지 않으면 도메인이 기본 파티션에 배치됩니다. 게스트 가상 머신을 시작하기 전에 파티션을 생성해야 합니다. 기본적으로 (하이퍼바이저별) 기본 파티션만 존재할 수 있습니다.
그림 23.13. 리소스 파티션
<resource> <partition>/virtualmachines/production</partition> </resource>
23.12. CPU 모델 및 토폴로지
qemu32
및 qemu64
는 기본 CPU 모델이지만 사용 가능한 다른 모델(추가 기능)이 있습니다. 각 모델 및 해당 토폴로지는 도메인 XML의 다음 요소를 사용하여 지정됩니다.
그림 23.14. CPU 모델 및 토폴로지 예 1
<cpu match='exact'> <model fallback='allow'>core2duo</model> <vendor>Intel</vendor> <topology sockets='1' cores='2' threads='1'/> <feature policy='disable' name='lahf_lm'/> </cpu>
그림 23.15. CPU 모델 및 토폴로지 예 2
<cpu mode='host-model'> <model fallback='forbid'/> <topology sockets='1' cores='2' threads='1'/> </cpu>
그림 23.16. CPU 모델 및 토폴로지 예 3
<cpu mode='host-passthrough'/>
<cpu>
요소를 사용할 수 있습니다.
그림 23.17. CPU 모델 및 토폴로지 예 4
<cpu> <topology sockets='1' cores='2' threads='1'/> </cpu>
그림 23.18. PPC64/PSeries CPU 모델 예
<cpu mode='custom'> <model>POWER8</model> </cpu>
그림 23.19. aarch64/virt CPU 모델 예
<cpu mode='host-passthrough'/>
표 23.8. CPU 모델 및 토폴로지 요소
element | 설명 |
---|---|
<cpu> | 게스트 가상 머신 CPU 요구 사항을 설명하는 주요 컨테이너입니다. |
<match> | 게스트 가상 머신에 가상 CPU를 제공하는 방법을 이러한 요구 사항과 일치하도록 지정합니다. 토폴로지가 <cpu> 내의 유일한 요소인 경우 match 속성을 생략할 수 있습니다. match 특성에 사용 가능한 값은 다음과 같습니다.
match 속성은 생략할 수 있으며 기본값은 정확한 입니다. |
<mode> | 이 선택적 속성을 사용하면 가능한 한 호스트 물리적 머신 CPU에 가까운 게스트 가상 머신 CPU를 더 쉽게 구성할 수 있습니다. mode 특성에 가능한 값은 다음과 같습니다.
|
<model> | 게스트 가상 머신에서 요청한 CPU 모델을 지정합니다. 사용 가능한 CPU 모델 및 해당 정의 목록은 libvirt의 데이터 디렉터리에 설치된 cpu_map.xml 파일에서 확인할 수 있습니다. 하이퍼바이저가 정확한 CPU 모델을 사용할 수 없는 경우 libvirt는 CPU 기능 목록을 유지하면서 하이퍼바이저에서 지원하는 가장 가까운 모델로 자동 대체합니다. 선택적 대체 특성을 사용하여 이 동작을 금지할 수 있습니다. 이 경우 지원되지 않는 CPU 모델을 요청하는 도메인을 시작하려고 하면 실패합니다. 대체 특성에 지원되는 값은 allow (기본값) 및 forbid 입니다. 선택적 vendor_id 특성을 사용하여 게스트 가상 머신에서 표시되는 벤더 ID를 설정할 수 있습니다. 정확히 12자여야 합니다. 설정하지 않으면 호스트 물리적 시스템의 벤더 iID가 사용됩니다. 가능한 일반적인 값은 AuthenticAMD 및 GenuineIntel 입니다. |
<vendor> | 게스트 가상 머신에서 요청한 CPU 벤더를 지정합니다. 이 요소가 없는 경우 게스트 가상 머신은 공급업체에 관계없이 지정된 기능과 일치하는 CPU에서 실행됩니다. 지원되는 공급 업체 목록은 cpu_map.xml .에서 확인할 수 있습니다. |
<토폴로지> | 게스트 가상 머신에 제공된 가상 CPU의 요청된 토폴로지를 지정합니다. 소켓, 코어 및 스레드에 대해 0이 아닌 세 개의 값은 각각 소켓당 총 CPU 소켓 수, 소켓당 코어 수 및 코어당 스레드 수입니다. |
<feature> | 선택한 CPU 모델에서 제공하는 기능을 미세 조정하는 데 사용되는 요소가 0개 이상 포함될 수 있습니다. 알려진 기능 이름 목록은 cpu_map.xml 파일에서 확인할 수 있습니다. 각 기능 요소의 의미는 다음 값 중 하나로 설정해야 하는 policy 특성에 따라 달라집니다.
|
23.12.1. 지정된 CPU의 기능 세트 변경
절차 23.1. CPU 기능 활성화 및 비활성화
- 먼저 게스트 가상 머신을 종료합니다.
- virsh edit [domain] 명령을 실행하여 게스트 가상 시스템의 구성 파일을 엽니다.
'allow'
속성 값을 포함하도록<기능>
또는<모델>
내의 매개변수를 변경하여 기능을 허용하도록 강제 적용하거나'forbid'
가 해당 기능에 대한 지원을 거부하도록 합니다.그림 23.20. CPU 기능 활성화 또는 비활성화 예
<!-- original feature set --> <cpu mode='host-model'> <model fallback='allow'/> <topology sockets='1' cores='2' threads='1'/> </cpu> <!--changed feature set--> <cpu mode='host-model'> <model fallback='forbid'/> <topology sockets='1' cores='2' threads='1'/> </cpu>
그림 23.21. CPU 기능 활성화 또는 비활성화를 위한 예 2
<!--original feature set--> <cpu match='exact'> <model fallback='allow'>core2duo</model> <vendor>Intel</vendor> <topology sockets='1' cores='2' threads='1'/> <feature policy='disable' name='lahf_lm'/> </cpu> <!--changed feature set--> <cpu match='exact'> <model fallback='allow'>core2duo</model> <vendor>Intel</vendor> <topology sockets='1' cores='2' threads='1'/> <feature policy='enable' name='lahf_lm'/> </cpu>
- 변경 사항을 완료하면 구성 파일을 저장하고 게스트 가상 머신을 시작합니다.
23.12.2. 게스트 가상 머신 NUMA 토폴로지
<요소를>
사용하여 지정할 수 있습니다.
그림 23.22. 게스트 가상 머신 NUMA 토폴로지
<cpu> <numa> <cell cpus='0-3' memory='512000'/> <cell cpus='4-7' memory='512000'/> </numa> </cpu> ...
cpus
는 노드의 일부인 CPU 또는 CPU 범위를 지정합니다. memory
는 kibibytes (24 바이트 블록)로 노드 메모리를 지정합니다. 각 셀 또는 노드는 0부터 시작하는 순서를 늘리기 위해 cellid
또는 nodeid
가 할당됩니다.
23.13. 이벤트 구성
그림 23.23. 이벤트 구성
<on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <on_lockfailure>poweroff</on_lockfailure>
표 23.9. 이벤트 구성 요소
상태 | 설명 |
---|---|
<on_poweroff> | 게스트 가상 머신이 전원을 끄도록 요청할 때 실행할 작업을 지정합니다. 4 개의 인수가 가능합니다.
|
<on_reboot> | 게스트 가상 머신이 재부팅을 요청할 때 실행할 작업을 지정합니다. 4 개의 인수가 가능합니다.
|
<on_crash> | 게스트 가상 머신이 충돌할 때 실행할 작업을 지정합니다. 또한 다음과 같은 추가 작업을 지원합니다.
|
<on_lockfailure> | 잠금 관리자가 리소스 잠금을 잃을 때 수행할 작업을 지정합니다. 다음 작업은 libvirt에서 인식되지만 개별 잠금 관리자가 모두 지원할 필요는 없습니다. 작업을 지정하지 않으면 각 잠금 관리자가 기본 작업을 수행합니다. 다음과 같은 인수가 가능합니다.
|
23.14. 하이퍼바이저 기능
state='on'
) 또는 disabled (state='off'
).
그림 23.24. 하이퍼바이저 기능
... <features> <pae/> <acpi/> <apic/> <hap/> <privnet/> <hyperv> <relaxed state='on'/> </hyperv> </features> ...
<상태가>
지정되지 않은 경우 모든 기능은 <features>
요소 내에 나열됩니다. 사용 가능한 기능은 기능
XML을 호출하여 찾을 수 있지만, 완전히 가상화된 도메인의 공통 세트는 다음과 같습니다.
표 23.10. 하이퍼 바이저 기능 요소
상태 | 설명 |
---|---|
<pae> | 실제 주소 확장 모드를 사용하면 32비트 게스트 가상 머신이 4GB 이상의 메모리를 처리할 수 있습니다. |
<acpi> | 전원 관리에 유용합니다. 예를 들어 KVM 게스트 가상 머신을 사용하려면 정상적으로 종료해야 합니다. |
<apic> | 프로그래밍 가능한 IRQ 관리를 사용할 수 있습니다. 이 요소에는 게스트 가상 머신에 대한 EOI (End of Interrupt)의 가용성을 설정하는 의 값이 있는 선택적 속성 eoi 가 있습니다. |
<hap> | 하드웨어에서 사용 가능한 경우 하드웨어 지원 페이징을 사용할 수 있습니다. |
23.15. Timekeeping
<clock>
및 <timer>
요소를 사용하여 시간 관리를 위한 하이퍼바이저 독립적인 구성 설정을 제공합니다. 도메인 XML은 virsh edit 명령을 사용하여 편집할 수 있습니다. 자세한 내용은 20.22절. “게스트 가상 머신의 XML 설정 편집”의 내용을 참조하십시오.
그림 23.25. Timekeeping
... <clock offset='localtime'> <timer name='rtc' tickpolicy='catchup' track='guest'> <catchup threshold='123' slew='120' limit='10000'/> </timer> <timer name='pit' tickpolicy='delay'/> </clock> ...
표 23.11. 시간 유지 요소
상태 | 설명 |
---|---|
<clock> | <clock> 요소는 게스트 가상 시스템 클럭이 호스트 실제 시스템 클럭과 동기화되는 방법을 결정하는 데 사용됩니다. offset 속성은 네 가지 값을 사용하므로 게스트 가상 시스템 클럭이 호스트 물리적 시스템과 동기화되는 방법을 세부적으로 제어할 수 있습니다. 하이퍼 바이저는 모든 시간 소스에서 모든 정책을 지원할 필요는 없습니다.
|
<timer> | 참고 자료 보기 |
<present> | 게스트 가상 머신에서 특정 타이머를 사용할 수 있는지 여부를 지정합니다. yes 또는 no 로 설정할 수 있습니다. |
<clock>
요소는 하위 항목으로 0 개 이상의 <타이머>
요소를 가질 수 있습니다. <timer>
요소는 게스트 가상 머신 클럭 동기화에 사용되는 시간 소스를 지정합니다.
<timer>
요소에는 이름만
필요하며 다른 모든 속성은 선택 사항입니다.
name
- 수정 중인타이머
를 선택합니다. 다음 값을 사용할 수 있습니다.kvmclock
,pit
또는rtc
.track
- 타이머 경로를 지정합니다. 다음 값을 사용할 수 있습니다.boot
,guest
또는wall
.track
은name="rtc"
에만 유효합니다.tickpolicy
- 게스트 가상 머신에 틱을 삽입하는 데 데드라인이 누락될 때 어떤 일이 발생하는지 결정합니다. 다음 값을 할당할 수 있습니다.delay
- 정상적인 속도로 틱을 계속 전달합니다. 늦은 진드로 인해 게스트 가상 머신 시간이 지연됩니다.catchup
- 누락된 틱을 캡처하기 위해 더 높은 속도로 사용 중지됩니다. 캡처가 완료되면 게스트 가상 머신 시간이 표시되지 않습니다. 또한 세 가지 선택적 속성이 있을 수 있습니다. 각 정수는 임계값, 슬리어 및 제한입니다.병합
- 누락된 틱을 하나의 틱에 병합하여 삽입합니다. 병합 수행 방법에 따라 게스트 가상 머신 시간이 지연될 수 있습니다.삭제
- 누락된 틱을 제거하고 기본 간격 설정에서 향후 삽입을 계속합니다. 손실된 틱을 처리하기 위한 명시적 구문이 없는 한 게스트 가상 머신 시간이 지연될 수 있습니다.
예 23.1. 항상 UTC와 동기화
<clock offset="utc" />
예 23.2. 항상 호스트 물리적 시스템 시간대와 동기화
<clock offset="localtime" />
예 23.3. 임의의 시간대와 동기화
<clock offset="timezone" timezone="Europe/Paris" />
예 23.4. UTC + 임의의 오프셋과 동기화
<clock offset="variable" adjustment="123456" />
23.16. 타이머 요소 속성
name
요소에는 사용할 시간 소스의 이름이 포함되어 있습니다. 다음 값 중 하나를 사용할 수 있습니다.
표 23.12. name 속성 값
값 | 설명 |
---|---|
pit | 프로그래밍 가능한 간격 타이머 - 주기적인 인터럽트가 있는 타이머입니다. 이 속성을 사용하는 경우 tickpolicy 지연이 기본 설정이 됩니다. |
rtc | 실시간 시계 - 주기적 인터럽트와 함께 지속적으로 실행되는 타이머입니다. 이 속성은 tickpolicy catchup 하위 요소를 지원합니다. |
kvmclock | KVM 클럭 - KVM 게스트 가상 머신에 권장되는 클럭 소스입니다. KVM pvclock 또는 kvm-clock을 사용하면 게스트 가상 머신에서 호스트 물리적 시스템의 벽 클럭 시간을 읽을 수 있습니다. |
track
속성은 타이머에서 추적되는 항목을 지정하고 rtc
의 이름
값에만 유효합니다.
표 23.13. 특성 값 추적
값 | 설명 |
---|---|
boot | 이전 호스트 물리적 머신 옵션에 해당하며 이는 지원되지 않는 추적 옵션입니다. |
guest | RTC는 항상 게스트 가상 머신 시간을 추적합니다. |
wall | RTC는 항상 호스트 시간을 추적합니다. |
tickpolicy
속성 및 값은 게스트 가상 시스템에 틱을 전달하는 데 사용되는 정책을 나타냅니다.
표 23.14. tickpolicy 특성 값
값 | 설명 |
---|---|
delay | 정상적인 속도로 계속 전달하십시오 (티크가 지연됨). |
catchup | 상승하기 위해 더 높은 속도로 전달합니다. |
merge | 틱이 하나의 틱에 병합되었습니다. |
discard | 누락된 모든 틱은 삭제됩니다. |
present
속성은 게스트 가상 머신에 표시되는 기본 타이머 세트를 덮어쓰는 데 사용됩니다. present
속성은 다음 값을 사용할 수 있습니다.
표 23.15. 존재하는 특성 값
값 | 설명 |
---|---|
제공됨 | 게스트 가상 머신에 이 타이머를 강제로 표시합니다. |
제공되지 않음 | 게스트 가상 머신에 이 타이머를 강제로 표시하지 않도록 합니다. |
23.17. devices
<장치>
요소의 자식으로 표시됩니다.
- virtio-scsi-pci - PCI 버스 스토리지 장치
- virtio-blk-pci - PCI 버스 스토리지 장치
- virtio-net-pci - virtio-net이라고도 하는 PCI 버스 네트워크 장치
- virtio-serial-pci - PCI 버스 입력 장치
- virtio-balloon-pci - PCI 버스 메모리 balloon 장치
- virtio-rng-pci - PCI 버스 가상 난수 생성기 장치
virtio-balloon-pci
및 virtio-rng-pci
를 제외한 모든 virtio 장치는 벡터
인수를 허용합니다.
그림 23.26. 장치 - 하위 요소
... <devices> <emulator>/usr/libexec/qemu-kvm</emulator> </devices> ...
<에뮬레이터 요소의 내용은 장치 모델 에뮬레이터>
바이너리에 대한 정규화된 경로를 지정합니다. 기능 XML은 각 특정 도메인 유형 또는 아키텍처 조합에 사용할 권장 기본 에뮬레이터를 지정합니다.
23.17.1. 하드 드라이브, Floppy 디스크 및 CD-ROM
<디스크>
처럼 보이는 모든 장치를 지정합니다.
그림 23.27. 장치 - 하드 드라이브, 플로피 디스크, CD-ROM 예
<disk type='network'> <driver name="qemu" type="raw" io="threads" ioeventfd="on" event_idx="off"/> <source protocol="sheepdog" name="image_name"> <host name="hostname" port="7000"/> </source> <target dev="hdb" bus="ide"/> <boot order='1'/> <transient/> <address type='drive' controller='0' bus='1' unit='0'/> </disk>
그림 23.28. 장치 - 하드 드라이브, 플로피 디스크, CD-ROM 예 2
<disk type='network'> <driver name="qemu" type="raw"/> <source protocol="rbd" name="image_name2"> <host name="hostname" port="7000"/> </source> <target dev="hdd" bus="ide"/> <auth username='myuser'> <secret type='ceph' usage='mypassid'/> </auth> </disk>
그림 23.29. 장치 - 하드 드라이브, 플로피 디스크, CD-ROM 예 3
<disk type='block' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='hdc' bus='ide' tray='open'/> <readonly/> </disk> <disk type='network' device='cdrom'> <driver name='qemu' type='raw'/> <source protocol="http" name="url_path"> <host name="hostname" port="80"/> </source> <target dev='hdc' bus='ide' tray='open'/> <readonly/> </disk>
그림 23.30. 장치 - 하드 드라이브, 플로피 디스크, CD-ROM 예 4
<disk type='network' device='cdrom'> <driver name='qemu' type='raw'/> <source protocol="https" name="url_path"> <host name="hostname" port="443"/> </source> <target dev='hdc' bus='ide' tray='open'/> <readonly/> </disk> <disk type='network' device='cdrom'> <driver name='qemu' type='raw'/> <source protocol="ftp" name="url_path"> <host name="hostname" port="21"/> </source> <target dev='hdc' bus='ide' tray='open'/> <readonly/> </disk>
그림 23.31. 장치 - 하드 드라이브, 플로피 디스크, CD-ROM 예 5
<disk type='network' device='cdrom'> <driver name='qemu' type='raw'/> <source protocol="ftps" name="url_path"> <host name="hostname" port="990"/> </source> <target dev='hdc' bus='ide' tray='open'/> <readonly/> </disk> <disk type='network' device='cdrom'> <driver name='qemu' type='raw'/> <source protocol="tftp" name="url_path"> <host name="hostname" port="69"/> </source> <target dev='hdc' bus='ide' tray='open'/> <readonly/> </disk> <disk type='block' device='lun'> <driver name='qemu' type='raw'/> <source dev='/dev/sda'/> <target dev='sda' bus='scsi'/> <address type='drive' controller='0' bus='0' target='3' unit='0'/> </disk>
그림 23.32. 장치 - 하드 드라이브, 플로피 디스크, CD-ROM 예 6
<disk type='block' device='disk'> <driver name='qemu' type='raw'/> <source dev='/dev/sda'/> <geometry cyls='16383' heads='16' secs='63' trans='lba'/> <blockio logical_block_size='512' physical_block_size='4096'/> <target dev='hda' bus='ide'/> </disk> <disk type='volume' device='disk'> <driver name='qemu' type='raw'/> <source pool='blk-pool0' volume='blk-pool0-vol0'/> <target dev='hda' bus='ide'/> </disk> <disk type='network' device='disk'> <driver name='qemu' type='raw'/> <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-nopool/2'> <host name='example.com' port='3260'/> </source> <auth username='myuser'> <secret type='chap' usage='libvirtiscsi'/> </auth> <target dev='vda' bus='virtio'/> </disk>
그림 23.33. 장치 - 하드 드라이브, 플로피 디스크, CD-ROM 예 7
<disk type='network' device='lun'> <driver name='qemu' type='raw'/> <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-nopool/1'> iqn.2013-07.com.example:iscsi-pool <host name='example.com' port='3260'/> </source> <auth username='myuser'> <secret type='chap' usage='libvirtiscsi'/> </auth> <target dev='sda' bus='scsi'/> </disk> <disk type='volume' device='disk'> <driver name='qemu' type='raw'/> <source pool='iscsi-pool' volume='unit:0:0:1' mode='host'/> <auth username='myuser'> <secret type='chap' usage='libvirtiscsi'/> </auth> <target dev='vda' bus='virtio'/> </disk>
그림 23.34. 장치 - 하드 드라이브, 플로피 디스크, CD-ROM 예 8
<disk type='volume' device='disk'> <driver name='qemu' type='raw'/> <source pool='iscsi-pool' volume='unit:0:0:2' mode='direct'/> <auth username='myuser'> <secret type='chap' usage='libvirtiscsi'/> </auth> <target dev='vda' bus='virtio'/> </disk> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/tmp/test.img' startupPolicy='optional'/> <target dev='sdb' bus='scsi'/> <readonly/> </disk> <disk type='file' device='disk'> <driver name='qemu' type='raw' discard='unmap'/> <source file='/var/lib/libvirt/images/discard1.img'/> <target dev='vdb' bus='virtio'/> <alias name='virtio-disk1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> </disk> </devices> ...
23.17.1.1. 디스크 요소
<disk>
요소는 디스크를 설명하는 기본 컨테이너입니다. 특성 유형은
<disk>
요소와 함께 사용할 수 있습니다. 다음과 같은 유형이 허용됩니다.
file
블록
dir
network
23.17.1.2. 소스 요소
<file>
<block>
-dev
속성은 디스크로 사용되는 호스트 장치에 대한 정규화된 경로를 지정합니다.<dir>
-dir
특성은 디스크로 사용되는 디렉터리의 정규화된 경로를 지정합니다.<Network>
-protocol
속성은 요청된 이미지에 액세스하는 데 사용되는 프로토콜을 지정합니다. 가능한 값은nbd
,isci
,rbd
,heepdog
및gluster
입니다.protocol
속성이rbd
, Hepdog
, 또는gluster
인 경우 추가 속성이 필수입니다.이 속성은 사용할 볼륨과 이미지를 지정합니다.
protocol
속성이nbd
인 경우name
속성은 선택 사항입니다.protocol
속성이ci인 경우
대상의 이름에서 슬래시로 구분된 논리 단위 번호가 포함될 수 있습니다. 예:Consumern.2013-07.com.example:iscsi-pool/1. 지정하지 않으면 기본 LUN이 0입니다.name
속성에는
<볼륨>
- 기본 디스크 소스는풀
및볼륨
특성으로 표시됩니다.<pool>
- 디스크 소스가 상주하는 스토리지 풀의 이름( libvirt)입니다.<volume>
- 디스크 소스로 사용되는 스토리지 볼륨( libvirt)의 이름입니다.volume
속성의 값은 virsh vol-list [pool-name]의 Name 열에서 출력입니다.
네트워크인
경우 소스에
는 연결할 호스트 물리적 시스템을 지정하는 데 사용되는 호스트
하위 요소(예: type='dir'
및 type='network'
)가 하나 이상 있을 수 있습니다. CD-ROM 또는 플로피(장치 속성)를 나타내는 파일
디스크 유형의 경우 소스 파일에 액세스할 수 없는 경우 디스크로 수행할 작업을 정의할 수 있습니다. 이 작업은 startupPolicy
특성을 다음 값 중 하나로 설정하여 수행됩니다.
- 어떠한 이유로든 누락된 경우
필수
로 인해 오류가 발생합니다. 이 설정은 기본 설정입니다. 필수
조건은 부팅 시 누락된 경우 실패하거나 마이그레이션, 복원 또는 복원이 누락된 경우 삭제됩니다.- 모든 시작 시도에서 누락된 경우
선택 사항이
감소합니다.
23.17.1.3. mirror 요소
<미러>
위치는 결국 소스와 동일한 내용을 가지며, 파일 형식(소스의 형식과 다를 수 있음)이 있습니다. ready 속성이 있는 경우 디스크가 피벗할 준비가 된 것으로 알려져 있습니다. 그러지 않으면 디스크가 계속 복사될 수 있습니다. 현재 이 요소는 출력에서만 유효하며 입력 시 무시됩니다.
23.17.1.4. 대상 요소
<target>
요소는 게스트 가상 머신 운영 체제에 디스크가 노출되는 버스 또는 장치를 제어합니다. dev
속성은 논리 장치 이름을 나타냅니다. 지정된 실제 장치 이름은 게스트 가상 머신 운영 체제의 장치 이름에 매핑되지 않습니다. 선택 사항인 bus 속성은 에뮬레이션할 디스크 장치의 유형을 지정합니다. 가능한 값은 드라이버별로이며 일반적인 값은 ide
,scsi
,virtio
,kvm
,usb
또는 sata
입니다. 생략하면 장치 이름 스타일에서 버스 유형을 유추합니다. 예를 들어 'sda'
라는 장치는 일반적으로 SCSI 버스를 사용하여 내보냅니다. 선택적 특성 트레이
는 이동식 디스크(예: CD-ROM 또는 Floppy 디스크)의 트레이스 상태를 나타내며 이 값은 열리
거나 닫을
수 있습니다. 기본 설정은 닫힙니다
.
23.17.1.5. iotune 요소
<iotune>
요소는 추가 장치별 I/O 튜닝을 제공할 수 있으며, 각 장치에 대해 다를 수 있는 값을 제공합니다(이 값은 도메인에 전역적으로 적용되는 blkiotune
요소에 따라 다릅니다). 이 요소에는 다음과 같은 선택적 하위 요소(값이 0
으로 지정되거나 지정되지 않은 모든 하위 요소)가 제한이 없습니다.
<total_bytes_sec>
- 초당 총 처리량 제한(바이트 단위)입니다. 이 요소는<read_bytes_sec>
또는<write_bytes_sec>
에는 사용할 수 없습니다.<read_bytes_sec>
- 초당 읽기 처리량 제한(바이트)입니다.<write_bytes_sec>
- 초당 쓰기 처리량 제한(바이트)입니다.<total_iops_sec>
- 초당 총 I/O 작업 수입니다. 이 요소는<read_iops_sec>
또는<write_iops_sec>
에는 사용할 수 없습니다.<read_iops_sec>
- 초당 읽기 I/O 작업.<write_iops_sec>
- 초당 쓰기 I/O 작업.
23.17.1.6. 드라이버 요소
<드라이버>
요소를 사용하면 디스크를 제공하는 데 사용되는 하이퍼바이저 드라이버와 관련된 추가 세부 정보를 지정할 수 있습니다. 다음 옵션을 사용할 수 있습니다.
- 하이퍼바이저가 여러 백엔드 드라이버를 지원하는 경우
name
속성은 기본 백엔드 드라이버 이름을 선택하는 반면, 선택 사항인 type 속성은 하위 유형을 제공합니다. - 선택적
cache
속성은 캐시 메커니즘을 제어합니다. 가능한 값은기본값
,none
,writethrough
,writeback
,directsync
(writethrough
와 유사함)이며안전하지 않은
호스트 물리적 머신 페이지 캐시를 바이패스합니다 (호스트 물리적 머신은 모든 디스크 I/O를 캐시하고 게스트 가상 머신의 동기화 요청은 무시) - 선택적
error_policy
속성은 하이퍼바이저가 디스크 읽기 또는 쓰기 오류에서 작동하는 방식을 제어합니다. 가능한 값은stop
,report
,ignore
,enospace
입니다.error_policy
의 기본 설정은report
입니다. 읽기 오류에 대한 동작만 제어하는 선택적rerror_policy
도 있습니다.rerror_policy
가 제공되지 않으면error_policy
가 읽기 및 쓰기 오류에 모두 사용됩니다.rerror_policy
가 지정된 경우error_policy
에서 읽기 오류가 발생합니다. 또한enospace
는 읽기 오류에 대한 올바른 정책이 아니므로error_policy
가enospace
로 설정되어 있고rerror_policy
가 지정되지 않은 경우 읽기 오류 기본 설정인보고서가
사용됩니다. - 선택적
io
속성은 I/O의 특정 정책을 제어합니다.kvm
게스트 가상 머신은스레드
와네이티브
를 지원합니다. 선택적ioeventfd
속성을 사용하면 virtio 디스크 장치에 대한 도메인 I/O 비동기 처리를 설정할 수 있습니다. 기본값은 하이퍼바이저에 따라 결정됩니다. 허용되는 값은설정 및
입니다. 이를 활성화하면 별도의 스레드가 I/O를 처리하는 동안 게스트 가상 머신을 실행할 수 있습니다. 일반적으로 I/O 중 높은 시스템 CPU 사용률이 발생하는 게스트 가상 시스템은 이러한 이점을 활용할 수 있습니다. 반면 과부하된 호스트 물리적 머신은 게스트 가상 머신 I/O 대기 시간을 늘릴 수 있습니다. 그러나 기본 설정은 변경하지 않고 하이퍼바이저에서 설정을 결정하는 것이 좋습니다.해제
참고ioeventfd
속성은디스크
XML 섹션의<드라이버>
요소와장치
XML 섹션의<드라이버>
요소에 포함되어 있습니다. 이전 경우 virtIO 디스크 및 후자의 경우 SCSI 디스크에 영향을 미칩니다. - 선택적
event_idx
속성은 장치 이벤트 처리의 일부 측면을 제어하며켜
거나끄
도록 설정할 수 있습니다.on
으로 설정하면 인터럽트 수를 줄이고 게스트 가상 머신에 대해 종료됩니다. 기본값은 하이퍼바이저에 따라 결정되며 기본 설정은 입니다.이 동작이 필요하지 않은 경우 기능을 강제로 설정합니다.
그러나 기본 설정을 변경하지 않고 하이퍼바이저에서 설정을 지정하는 것이 좋습니다.
- 선택 사항인
copy_on_read
속성은 읽기 백업 파일을 이미지 파일에 복사할지 여부를 제어합니다. 허용되는 값은on
또는<off>
일 수 있습니다.copy-on-read
는 동일한 백업 파일 섹터에 반복적으로 액세스하지 않으며 백업 파일이 느린 네트워크를 통해 있을 때 유용합니다. 기본적으로copy-on-read
는off
입니다. discard='unmap'
을 설정하여 삭제 지원을 활성화할 수 있습니다. 동일한 행을 disable='ignore'로 교체하여 비활성화할 수 있습니다.discard='ignore'
23.17.1.7. 추가 장치 요소
장치
요소 내에서 사용할 수 있습니다.
<boot>
- 디스크를 부팅할 수 있도록 지정합니다.추가 부팅 값
<order>
- 부팅 시퀀스 중에 장치를 시도할 순서를 결정합니다.<장치별>
부팅 요소는 BIOS 부트 로더 섹션의 일반 부팅 요소와 함께 사용할 수 없습니다.
<Encryption>
- 볼륨의 암호화 방법을 지정합니다.<ReadOnly>
- 게스트 가상 머신에서 장치를 수정할 수 없음을 나타냅니다. 이 설정은<device='cdrom'>
을 가진 디스크의 기본값입니다.<공유할 수 있는>
경우 장치를 도메인 간에 공유할 것으로 예상됩니다(하이퍼 바이저와 운영 체제가 지원하는 경우).shareable
을 사용하는 경우 해당 장치에cache='no'
를 사용해야 합니다.<transient>
- 게스트 가상 머신이 종료될 때 장치 콘텐츠에 대한 변경 사항을 자동으로 되돌려야 함을 나타냅니다. 일부 하이퍼바이저에서 디스크를일시적으로
표시하면 도메인이 마이그레이션 또는 스냅샷에 참여하지 않습니다.<serial>
- 게스트 가상 머신의 하드 드라이브의 일련 번호를 지정합니다. 예를 들어<직렬>
WD-WMAP9A966149</직렬>
.<WW>
N - 가상 하드 디스크 또는 CD-ROM 드라이브의 WWN( World Wide Name)을 지정합니다. 16진수 16진수로 구성되어야 합니다.<vendor>
- 가상 하드 디스크 또는 CD-ROM 장치의 벤더를 지정합니다. 인쇄 가능한 문자가 8자 이상이어야 합니다.<product>
- 가상 하드 디스크 또는 CD-ROM 장치의 제품을 지정합니다. 16 인쇄 가능 문자를 초과해서는 안 됩니다.<host>
- 다음 특성을 지원합니다.이 요소의 의미는 다음과 같이name
- 호스트 이름을 지정합니다.port
- 포트 번호를 지정합니다.transport
- 전송 유형을 지정합니다.socket
- 소켓의 경로를 지정합니다.
프로토콜
특성에 따라 달라집니다. 프로토콜을 기반으로 하는 추가 호스트 속성프로토콜을 기반으로 하는 추가 호스트 속성
- NBD -
nbd
-server RBD
- RBD 유형의 서버를 모니터링하며 하나 이상의 호스트 물리적 시스템에 사용할 수 있습니다.halfepdog
- 서버 중 하나를 지정합니다 (기본값은 localhost:7000)와 함께 사용할 수 있는 호스트 물리적 시스템 중 하나 이상에서 사용할 수 있습니다.Gluster
- pxe 데몬을 실행하는 서버를 지정하고 하나의 호스트 물리적 시스템에만 사용할 수 있습니다. 전송 특성에 유효한 값은tcp
, rdma또는
unix
입니다. 지정하지 않으면tcp
로 가정합니다. 전송이unix
인 경우socket
속성은unix
소켓의 경로를 지정합니다.
<address>
- 지정된 컨트롤러 슬롯에 디스크를 연결합니다. 실제<컨트롤러>
장치는 을 추측할 수 있지만 명시적으로 지정할 수도 있습니다.type
속성은 필수이며 일반적으로pci
또는drive
입니다.pci
컨트롤러의 경우버스
,슬롯
및함수에
대한 추가 속성이 있어야 하며 선택적domain
및 multifunction .multifunction
드라이브
컨트롤러의 경우 추가 특성컨트롤러
,버스
,대상
및장치를
사용할 수 있으며 각각 기본 설정0
.auth
- 소스에 액세스하는 데 필요한 인증 자격 증명을 제공합니다. 여기에는 인증 중에 사용할사용자
이름을 식별하는 필수 속성 사용자 이름 및 필수 특성유형이
있는 하위 요소시크릿
이 포함되어 있습니다.geometry
- geometry 설정을 재정의하는 기능을 제공합니다. 이는 주로 S390 DASD-디스크 또는 이전 MacOS-disks에 유용합니다. 다음과 같은 매개 변수를 사용할 수 있습니다.Cyls
- 실린더 수를 지정합니다.heads
- 헤드 수를 지정합니다.Subjects
- 트랙당 섹터 수를 지정합니다.trans
- BIOS-Translation-Modes를 지정하고 다음 값을 가질 수 있습니다.none
,lba
또는auto
.
blockio
- 아래 나열된 블록 장치 속성을 사용하여 블록 장치를 재정의할 수 있습니다.Blockio 옵션
logical_block_size
- 게스트 가상 머신 운영 체제에 보고하고 디스크 I/O의 최소 단위를 설명합니다.physical_block_size
- 게스트 가상 머신 운영 체제에 보고하고 디스크 데이터 정렬과 관련이 있을 수 있는 디스크의 하드웨어 섹터 크기를 설명합니다.
23.17.2. 장치 주소
<주소>
하위 요소가 있습니다. 입력 시 주소(또는 주소 내의 선택적 속성)가 생략된 경우 libvirt는 적절한 주소를 생성하지만 레이아웃을 추가로 제어해야 하는 경우 명시적 주소가 필요합니다. address 요소를 포함한 장치 예제는 아래를 참조하십시오.
유형이
있습니다. 지정된 장치에 사용할 주소를 선택하는 것은 장치 및 게스트 가상 머신의 아키텍처로 제한됩니다. 예를 들어 디스크 장치는 type='disk'
을 사용하는 반면 콘솔 장치는 32비트 AMD 및 Intel, AMD64 및 Intel 64, 게스트 가상 머신 또는 Intel 64의papr -vio' on PowerPC64 pseries 게스트 가상 머신에서 type='
pci'
를 사용합니다. 각 주소 <유형에>
는 장치가 배치될 버스의 위치를 제어하는 추가 선택적 속성이 있습니다. 추가 속성은 다음과 같습니다.
type='pci'
- PCI 주소에는 다음과 같은 추가 속성이 있습니다.domain
(현재 KVM에서 사용하지 않는 2바이트 정수)버스
(포함 0에서 0xff 사이의 16진수 값 포함)슬롯
(0x0과 0x1f 사이의 16진수 값 포함)함수
(0에서 7 포함) 사이의 값- 또한 사용 가능한
다기능
속성은 PCI 제어 레지스터의 특정 슬롯 또는 함수에 대해 다중 함수 비트를 전환하는 것을 제어합니다. 이 다중 기능 속성은 기본적으로'off'
로 설정하지만 여러 함수가 사용될 슬롯의 함수 0에 대해'on'
으로 설정해야 합니다.
type=' drive'
-드라이브
주소에는 다음과 같은 추가 속성이 있습니다.Controller
- (두 자리 컨트롤러 번호)버스
- (두 자리 버스 번호)target
- (두 자리 버스 번호)단위
- (버스의 2자리 단위 번호)
type='virtio-serial'
- 각virtio-serial
주소에는 다음과 같은 추가 속성이 있습니다.Controller
- (두 자리 컨트롤러 번호)버스
- (두 자리 버스 번호)슬롯
- (버스 내 2자리 슬롯)
type='ccid'
- 스마트 카드에 사용되는 CCID 주소에는 다음과 같은 추가 속성이 있습니다.버스
- (두 자리 버스 번호)슬롯
- (버스 내 2자리 슬롯)
type='usb'
- USB 주소에는 다음과 같은 추가 속성이 있습니다.bus
- (포함 0에서 0xfff 사이의 16진수 값)port
- ( 1.2 또는 2.1.3.1과 같은 최대 4개의 8개의 8진수 표기법)
type=의papr-vio'
- PowerPC pseries guest 가상 머신에서 장치를 SPAPR-VIO 버스에 할당할 수 있습니다. 여기에는 플랫 64비트 주소 공간이 있습니다. 규칙적으로 장치는 0이 아닌 0개가 아닌 0개로 할당되지만 다른 주소는libvirt
에서 유효하고 허용됩니다. 시작 레지스터의 16진수 값 주소를 결정하는 추가reg
속성을 이 속성에 할당할 수 있습니다.
23.17.3. 컨트롤러
<컨트롤러>
요소를 제공해야 할 수 있습니다.
그림 23.35. 컨트롤러 element
... <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 type='scsi' index='0' model='virtio-scsi' num_queues='8'/> </controller> ... </devices> ...
유형인
, "ide", "fdc", "scsi", "sata", "usb", "ccid", "ccid" 또는 "virtio-serial"
, 및 버스 컨트롤러가 발생하는 순서로 설명되는 10진수 정수(프로바이터 요소의 속성 사용) 중 하나여야 합니다.
"virtio-serial"
컨트롤러에는 컨트롤러를 통해 연결할 수 있는 장치 수를 제어하는 두 가지 추가 선택적 속성인 포트
및 벡터
가 있습니다.
<컨트롤러 type='scsi'>
에는 선택적 특성 모델인
"auto", "buslogic", "ibmvscsi", "lsilogic", "lsias1068", "virtio-scsi 또는 "vmpvscsi"
. <컨트롤러 type='scsi'>
에는 지정된 큐 수에 다중 큐 지원을 활성화하는 num_queues
속성도 있습니다. 또한 SCSI 디스크에서 컨트롤러가 비동기 처리를 사용해야 하는지 여부를 지정하는 ioeventfd
특성을 사용할 수 있습니다. 허용되는 값은 "on" 및 "off"입니다.
"usb"
컨트롤러에는 선택적 특성 모델
, 즉 "piix3-uhci", "piix4-uhci", "ehci", "ich9-ehci1", "ich9-uhci1", "ich9-uhci2", "ich9-uhci3", "ich9-uhci3", "vt82c686b-uhci", "pci-ohci" 또는 "nec-xhci"
. 또한 게스트 가상 머신에 대해 USB 버스를 명시적으로 비활성화해야 하는 경우 model='none'
을 사용할 수 있습니다. PowerPC64 "spapr-vio" 주소에 연결된 컨트롤러가 없습니다.
주소는
위에 지정된 의미와 함께 마스터 버스에 컨트롤러의 정확한 관계를 지정할 수 있습니다.
마스터
컨트롤러와의 파트너의 정확한 관계를 지정하는 선택적 하위 요소 마스터가 있습니다. 동반 컨트롤러는 마스터와 동일한 버스에 있으므로 그에 동반되는 인덱스 값이 동일해야 합니다.
그림 23.36. 장치 - 컨트롤러 - USB
... <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> ...
23.17.4. 장치 리스
그림 23.37. 장치 - 장치 리스
... <devices> ... <lease> <lockspace>somearea</lockspace> <key>somekey</key> <target path='/some/lease/path' offset='1024'/> </lease> ... </devices> ...
lease
섹션에는 다음과 같은 인수가 있을 수 있습니다.
lockspace
- 키가 유지되는 잠금 공간을 식별하는 임의의 문자열입니다. 잠금 관리자는 잠금 공간 이름 또는 잠금 공간에 추가 제한을 적용할 수 있습니다.Key
- 취득할 리스를 고유하게 식별하는 임의의 문자열입니다. 잠금 관리자는 키의 형식 또는 길이에 추가 제한을 적용할 수 있습니다.target
- 잠금 공간과 연결된 파일의 정규화된 경로입니다. 오프셋은 리스가 파일 내에 저장되는 위치를 지정합니다. 잠금 관리자가 오프셋이 필요하지 않은 경우 이 값을0
으로 설정합니다.
23.17.5. 호스트 물리적 시스템 장치 할당
23.17.5.1. USB / PCI 장치
hostdev
요소를 사용하여 게스트 가상 시스템으로 전달할 수 있습니다. 도메인 XML 파일의 다음 섹션을 구성합니다.
그림 23.38. 장치 - 호스트 물리적 시스템 장치 할당
... <devices> <hostdev mode='subsystem' type='usb'> <source startupPolicy='optional'> <vendor id='0x1234'/> <product id='0xbeef'/> </source> <boot order='2'/> </hostdev> </devices> ...
그림 23.39. 장치 - 호스트 물리적 시스템 장치 할당 대안
... <devices> <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address bus='0x06' slot='0x02' function='0x0'/> </source> <boot order='1'/> <rom bar='on' file='/etc/fake/boot.bin'/> </hostdev> </devices> ...
그림 23.40. 장치 - 호스트 물리적 시스템 scsi 장치 할당
... <devices> <hostdev mode='subsystem' type='scsi'> <source> <adapter name='scsi_host0'/> <address type='scsi' bus='0' target='0' unit='0'/> </source> <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </hostdev> </devices> ..
표 23.16. 호스트 물리적 시스템 장치 할당 요소
매개변수 | 설명 |
---|---|
hostdev |
이는 호스트 물리적 시스템 장치를 설명하는 주요 요소입니다. 다음 옵션을 허용합니다.
|
소스 | 호스트 물리적 시스템에서 볼 수 있는 장치를 설명합니다. USB 장치는 공급업체 및 제품 요소를 사용하여 공급 업체 또는 제품 ID로 또는 address 요소를 사용하여 호스트 물리적 시스템의 장치 주소로 해결할 수 있습니다. 반면 PCI 장치는 주소별로만 설명할 수 있습니다. USB 장치의 소스 요소에는 지정된 호스트 물리적 시스템 USB 장치를 찾을 수 없는 경우 수행할 작업을 정의하는 데 사용할 수 있는 startupPolicy 속성이 포함될 수 있습니다. 속성은 다음 값을 허용합니다.
|
vendor, product | 이러한 요소에는 각각 USB 벤더 및 제품 ID를 지정하는 id 속성이 있습니다. ID는 10진수, 16진수(0x로 시작) 또는 8진수(0으로 시작) 양식으로 지정할 수 있습니다. |
boot | 장치를 부팅할 수 있도록 지정합니다. 특성의 순서는 부팅 시퀀스 중에 장치를 시도할 순서를 결정합니다. 장치별 부팅 요소는 BIOS 부트 로더 섹션의 일반 부팅 요소와 함께 사용할 수 없습니다. |
rom | PCI 장치의 RAM이 게스트 가상 머신에 표시되는 방식을 변경하는 데 사용됩니다. 선택 사항인 bar 속성은 on 또는 off 로 설정할 수 있으며, 장치의 RAM이 게스트 가상 머신의 메모리 맵에 표시되는지 여부를 결정합니다. (PC 설명서에서 rom bar 설정은 Romom에 대한 기본 주소 레지스터의 존재를 제어합니다. rom 표시줄 을 지정하지 않으면 기본 설정이 사용됩니다. 선택적 file 속성은 장치의 RAM BIOS로 게스트 가상 머신에 표시되는 바이너리 파일을 가리키는 데 사용됩니다. 예를 들어 SR-IOV 가능 이더넷 장치의 가상 기능을 위해 PXE 부팅ROM을 제공하는 데 유용할 수 있습니다(Vernet에는 VF에 부팅 Makefile이 없음). |
address | 또한 USB 버스와 장치 번호를 지정하는 버스 및 장치 속성이 있으며, 호스트 물리적 시스템의 장치에 표시됩니다. 이러한 속성의 값은 10진수, 16진수(0x로 시작) 또는 8진수(0으로 시작) 양식으로 지정할 수 있습니다. PCI 장치의 경우 요소는 lspci 또는 virsh nodedev-list 를 사용하여 찾을 수 있는 장치를 지정할 수 있는 세 가지 속성을 제공합니다. |
23.17.5.2. 블록 / 문자 장치
hostdev
요소를 수정하여 게스트 가상 시스템으로 전달할 수 있습니다. 이는 컨테이너 기반 가상화에서만 가능합니다.
그림 23.41. 장치 - 호스트 물리적 시스템 장치 할당 블록 문자 장치
... <hostdev mode='capabilities' type='storage'> <source> <block>/dev/sdf1</block> </source> </hostdev> ...
그림 23.42. 장치 - 호스트 물리적 시스템 장치 할당 블록 장치 대신 1
... <hostdev mode='capabilities' type='misc'> <source> <char>/dev/input/event3</char> </source> </hostdev> ...
그림 23.43. 장치 - 호스트 물리적 시스템 장치 할당 블록 장치 대안 2
... <hostdev mode='capabilities' type='net'> <source> <interface>eth0</interface> </source> </hostdev> ...
표 23.17. 블록 / 문자 장치 요소
매개변수 | 설명 |
---|---|
hostdev | 호스트 물리적 시스템 장치를 설명하는 기본 컨테이너입니다. 블록/자기 장치의 경우 패스스루 모드는 항상 기능이며, 문자 장치의 경우 type 은 블록 장치 및 char 에 대한 블록입니다. |
소스 | 이는 호스트 물리적 시스템에서 볼 수 있는 장치를 설명합니다. 블록 장치의 경우 호스트 물리적 시스템 운영 체제의 블록 장치에 대한 경로는 중첩된 블록 요소에서 제공되며, 문자 장치의 경우 char 요소가 사용됩니다. |
23.17.6. 리디렉션 장치
그림 23.44. 장치 - 리디렉션 장치
... <devices> <redirdev bus='usb' type='tcp'> <source mode='connect' host='localhost' service='4000'/> <boot order='1'/> </redirdev> <redirfilter> <usbdev class='0x08' vendor='0x1234' product='0xbeef' version='2.00' allow='yes'/> <usbdev allow='no'/> </redirfilter> </devices> ...
표 23.18. 리디렉션된 장치 요소
매개변수 | 설명 |
---|---|
redirdev | 리디렉션된 장치를 설명하는 주요 컨테이너입니다. 버스 는 USB 장치용 usb 여야 합니다. 지원되는 직렬 장치 유형 중 하나를 사용하여 터널: type='tcp' 또는 type='spicevmc'( SPICE 그래픽 장치의 usbredir 채널을 사용하는 type='spicevmc' 를 설명하는 지원되는 직렬 장치 유형 중 하나를 지정해야 합니다. redirdev 요소에는 장치를 특정 컨트롤러에 연결할 수 있는 선택적 하위 요소 주소 가 있습니다. 소스 와 같은 추가 하위 요소(예: 소스 )는 특정 유형에 따라 필요할 수 있지만 대상 하위 요소는 필요하지 않지만 대상 하위 요소는 필요하지 않습니다(게스트 가상 머신에 표시되는 장치가 아닌 문자 장치의 소비자는 하이퍼 바이저 자체임). |
boot | 장치를 부팅할 수 있도록 지정합니다. order 속성은 부팅 시퀀스 중에 장치를 시도할 순서를 결정합니다. 장치별 부팅 요소는 BIOS 부트 로더 섹션의 일반 부팅 요소와 함께 사용할 수 없습니다. |
redirfilter | 이는 리디렉션에서 특정 장치를 필터링하는 데 필터 규칙을 생성하는 데 사용됩니다. 하위 요소 usbdev 를 사용하여 각 필터 규칙을 정의합니다. class 속성은 USB 클래스 코드입니다. |
23.17.7. 스마트 카드 장치
스마트
카드 요소를 통해 게스트 가상 머신에 제공할 수 있습니다. 호스트 물리적 머신의 USB 스마트 카드 리더 장치는 장치 패스스루가 있는 게스트 가상 시스템에서 사용할 수 없습니다. 이는 호스트 물리적 시스템과 게스트 가상 시스템에서 모두 사용할 수 없으므로 게스트 가상 시스템에서 제거될 때 호스트 물리적 시스템 컴퓨터를 잠글 수 있기 때문입니다. 따라서 일부 하이퍼바이저는 게스트 가상 머신에 스마트 카드 인터페이스를 제공할 수 있는 특수 가상 장치를 제공하며, 호스트 물리적 시스템에서 또는 타사 스마트 카드 공급자로 생성된 채널에서 인증 정보를 얻는 방법을 설명하는 몇 가지 모드를 제공합니다.
그림 23.45. 장치 - 스마트 카드 장치
... <devices> <smartcard mode='host'/> <smartcard mode='host-certificates'> <certificate>cert1</certificate> <certificate>cert2</certificate> <certificate>cert3</certificate> <database>/etc/pki/nssdb/</database> </smartcard> <smartcard mode='passthrough' type='tcp'> <source mode='bind' host='127.0.0.1' service='2001'/> <protocol type='raw'/> <address type='ccid' controller='0' slot='0'/> </smartcard> <smartcard mode='passthrough' type='spicevmc'/> </devices> ...
smartcard
요소에는 필수 특성 모드가
있습니다. 각 모드에서 게스트 가상 머신은 실제 USB CCID(Chip/Smart Card Interface 장치) 카드처럼 작동하는 USB 버스의 장치를 확인합니다.
표 23.19. 스마트 카드 모드 요소
매개변수 | 설명 |
---|---|
mode='host' | 이 모드에서 하이퍼바이저는 게스트 가상 머신의 모든 요청을 NSS를 통해 호스트 물리적 시스템의 스마트 카드에 직접 액세스할 수 있도록 릴레이합니다. 다른 속성이나 하위 요소가 필요하지 않습니다. 선택적 주소 하위 요소 사용에 대한 아래를 참조하십시오. |
mode='host-certificates' | 이 모드를 사용하면 스마트 카드를 호스트 물리적 시스템에 연결해야 하는 대신 호스트 물리적 시스템의 데이터베이스에 있는 세 개의 NSS 인증서 이름을 제공할 수 있습니다. 이러한 인증서는 certutil -d /etc/pki/nssdb -x -tGPU,CT,CT -S -s CN=cert1 -n cert1 명령을 사용하여 생성할 수 있으며 결과 3개의 인증서 이름을 각각 세 개의 인증서 하위 요소 콘텐츠로 제공해야 합니다. 추가 하위 요소 데이터베이스 는 대체 디렉터리의 절대 경로를 지정할 수 있습니다(인증서를 생성할 때 certutil 명령의 -d 플래그 일치)가 존재하지 않는 경우 기본값은 /etc/pki/nssdb 입니다. |
mode='passthrough' | 이 모드를 사용하면 보조 문자 장치를 통해 모든 요청을 타사 제공자에게 터널링하거나 하이퍼바이저가 호스트 물리적 시스템과 직접 통신하는 대신 3개의 인증서 파일을 사용할 수 있습니다. 이 작업 모드에서는 지원되는 직렬 장치 유형 중 하나와 일치하는 추가 속성 유형이 필요하며 터널의 호스트 물리적 시스템 측면을 설명할 수 있습니다. type='tcp' 또는 type='spicevmc' ( SPICE 그래픽 장치의 스마트 카드 채널을 사용하는)는 일반적입니다. 소스 와 같은 추가 하위 요소(예: 소스 )는 지정된 유형에 따라 필요할 수 있지만 대상 하위 요소(대상 하위 요소 사용자는 게스트 가상 머신에 표시되는 장치가 아닌) 문자 장치의 소비자가 하이퍼바이저 자체임을 가정할 수 있습니다. |
주소
. 자세한 내용은 23.17.2절. “장치 주소”을 참조하십시오.
23.17.8. 네트워크 인터페이스
그림 23.46. devices - 네트워크 인터페이스
... <devices> <interface type='direct' trustGuestRxFilters='yes'> <source dev='eth0'/> <mac address='52:54:00:5d:c7:9e'/> <boot order='1'/> <rom bar='off'/> </interface> </devices> ...
"direct"
- 게스트 가상 머신의 NIC를 호스트 물리적 머신의 물리적 NIC에 연결합니다. 자세한 내용 및 예제는 23.17.8.6절. “물리적 인터페이스에 직접 첨부” 을 참조하십시오."네트워크"
- 동적 또는 무선 네트워킹 구성이 있는 호스트 물리적 머신에서 일반 게스트 가상 머신 연결에 권장되는 구성입니다. 자세한 내용 및 예제는 23.17.8.1절. “가상 네트워크” 을 참조하십시오."Bridge"
- 정적 유선 네트워킹 구성이 있는 호스트 물리적 머신에서 게스트 가상 머신 연결에 권장되는 구성 설정입니다. 자세한 내용 및 예제는 23.17.8.2절. “LAN으로 브리지” 을 참조하십시오."Ethernet"
- 관리자가 게스트 가상 시스템의 네트워크를 LAN에 연결하는 임의의 스크립트를 실행할 수 있는 수단을 제공합니다. 자세한 내용 및 예제는 23.17.8.5절. “일반 이더넷 연결” 을 참조하십시오."hostdev"
- 일반 장치 패스스루를 사용하여 PCI 네트워크 장치를 게스트 가상 머신에 직접 할당할 수 있습니다. 자세한 내용 및 예제는 23.17.8.7절. “PCI 패스스루” 을 참조하십시오."MCAST"
- 멀티 캐스트 그룹을 사용하여 가상 네트워크를 나타낼 수 있습니다. 자세한 내용 및 예제는 23.17.8.8절. “멀티 캐스트 터널” 을 참조하십시오."user"
- user 옵션을 사용하면 사용자 공간 SLIRP 스택 매개 변수를 설정하여 NAT를 사용하는 가상 LAN을 외부 환경에 제공합니다. 자세한 내용 및 예제는 23.17.8.4절. “사용자 공간 SLIRP 스택” 을 참조하십시오."서버"
- 서버 옵션을 사용하면 하나의 게스트 가상 머신이 서버의 서버 엔드를 제공하고 다른 모든 게스트 가상 시스템이 클라이언트로 구성된 가상 네트워크를 제공하기 위해 TCP 클라이언트-서버 아키텍처를 생성합니다. 자세한 내용 및 예제는 23.17.8.9절. “TCP 터널” 을 참조하십시오.
<인터페이스>
요소는 선택적 <trustGuestRxFilters>
속성으로 정의될 수 있습니다. 그러면 호스트 물리적 머신이 게스트 가상 머신에서 수신한 보고서를 탐지하고 신뢰할 수 있습니다. 이러한 보고서는 인터페이스가 필터에 대한 변경을 수신할 때마다 전송됩니다. 여기에는 기본 MAC 주소, 장치 주소 필터 또는 vlan 구성의 변경 사항이 포함됩니다. 보안상의 이유로 <trustGuestRxFilters>
속성은 기본적으로 비활성화되어 있습니다. 또한 이 속성에 대한 지원은 게스트 네트워크 장치 모델 및 호스트 물리적 시스템의 연결 유형에 따라 달라집니다. 현재는 호스트 물리적 시스템의 virtio 장치 모델 및 macvtap 연결에 대해서만 지원됩니다. 게스트가 설정한 필터도 호스트에 미러링되므로 게스트가 선택적 매개변수 <trustGuestRxFilters>
를 설정하는 것이 좋습니다. 게스트 가상 머신에 호스트 물리적 머신 사이드 필터를 제어할 수 있는 권한을 부여하려는 경우입니다.
<인터페이스>
요소에는 type='pci'
속성과 함께 인터페이스를 특정 PCI 슬롯에 연결할 수 있는 선택적 <주소>
하위 요소를 사용할 수 있습니다. 자세한 내용은 23.17.2절. “장치 주소”의 내용을 참조하십시오.
23.17.8.1. 가상 네트워크
<네트워크>
정의에서 별도로 설명된 호스트 물리적 머신 하드웨어 세부 정보)에 대한 일반 게스트 가상 머신 연결에 권장되는 구성입니다. 또한 named 네트워크 정의에서 설명하는 세부 정보와 연결을 제공합니다. 가상 네트워크의 전달 모드
구성에 따라 NAT를 사용하여 명시적 네트워크 장치 또는 기본 경로(전달모드='nat'
)에 연결하고 NAT를 사용하지 않고 라우팅되거나 MACvtap 네트워크 인터페이스( macvtap 네트워크 인터페이스)를 사용하여 직접 라우팅되거나 MACvtap 브리지를 사용하여 네트워크를 완전히 격리할
수 있습니다. <>
브리지
의 전달 모드,프라이빗
,vepa
, 통과
가 있는 네트워크의 경우 호스트 물리적 시스템에 필요한 DNS 및 DHCP 서비스가 이미 libvirt 범위 외부에 설정되어 있는 것으로 가정합니다. 격리된 네트워크, nat 및 라우팅된 네트워크의 경우 DHCP 및 DNS는 libvirt에 의해 가상 네트워크에서 제공되며 IP 범위는 virsh net-dumpxml [networkname] 으로 가상 네트워크 구성을 검사하여 확인할 수 있습니다. 상자에서 설정되는 'default' 가상 네트워크는 NAT를 사용하여 기본 경로에 연결하고 IP 범위가 192.168.122.0/255.255.0입니다. 각 게스트 가상 머신에는 vnetN이라는 이름으로 생성된 관련 tun 장치가 있으며 <대상>
요소( 23.17.8.11절. “대상 요소 덮어쓰기”참조)로 재정의할 수도 있습니다.
<직접>
네트워크 연결(아래 설명됨)과 유사하게 유형 네트워크의
연결은 802.1Qbg 또는 802.1Qbh 호환 Virtual Ethernet Port Aggregator (VEPA) 스위치 또는 Open vSwitch 가상 스위치로 전달될 구성 데이터를 사용하여 <virtualport>
요소를 지정할 수 있습니다.
<network>
요소의 구성 설정에 따라 달라지므로 <virtualport 유형>
특성을 생략할 수 있습니다. <가상 포트 유형을>
한 번 또는 여러 번 지정해야 합니다. 도메인이 완전한 <virtualport>
요소를 시작하면 정의된 유형 및 속성을 함께 병합하여 구성됩니다. 그러면 새로 구성된 가상 포트가 생성됩니다. 하위 가상 포트의 속성은 상위 가상 포트에 정의된 속성을 변경할 수 없습니다. 인터페이스는 우선 순위가 가장 높은 반면 포트 그룹은 우선 순위가 가장 낮습니다.
profileid
와 interfaceid
를 모두 제공해야 합니다. managerid
,typeid
, profileid
와 같이 가상 포트에서 채울 다른 속성은 선택 사항입니다.
그림 23.47. 장치 - 네트워크 인터페이스- 가상 네트워크
... <devices> <interface type='network'> <source network='default'/> </interface> ... <interface type='network'> <source network='default' portgroup='engineering'/> <target dev='vnet7'/> <mac address="00:11:22:33:44:55"/> <virtualport> <parameters instanceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/> </virtualport> </interface> </devices> ...
23.17.8.2. LAN으로 브리지
<vnetN>
이라는 이름으로 생성된 관련 tun
장치가 있으며, <대상>
요소( 23.17.8.11절. “대상 요소 덮어쓰기”참조)로 재정의할 수도 있습니다. <tun>
장치는 브리지에 종속됩니다. IP 범위 또는 네트워크 구성은 LAN에서 사용되는 것과 동일합니다. 이렇게 하면 실제 시스템과 마찬가지로 전체 수신 및 발신 네트워크 액세스 권한이 제공됩니다.
virtualport type='openvswitch'/
를 추가하여 Open vSwitch 브리지 장치에 연결할 수도 있습니다. Open vSwitch 유형 virtualport
는 해당 매개변수 요소에서 두 개의 매개 변수를
허용합니다. interfaceid
는 Open vSwitch에 이 특정 인터페이스를 고유하게 식별하는 데 사용되는 표준 UUID인 interfaceid와 인터페이스를 처음 정의할 때 임의의 interfaceid
가 생성되며, 인터페이스 <포트-profile>
으로 Open vSwitch로 전송되는 선택적 profileid
를 사용할 수 있습니다. 브리지를 LAN 설정으로 설정하려면 도메인 XML의 다음 부분을 구성할 관리 도구를 사용합니다.
그림 23.48. devices - 네트워크 인터페이스- LAN
... <devices> ... <interface type='bridge'> <source bridge='br0'/> </interface> <interface type='bridge'> <source bridge='br1'/> <target dev='vnet7'/> <mac address="00:11:22:33:44:55"/> </interface> <interface type='bridge'> <source bridge='ovsbr'/> <virtualport type='openvswitch'> <parameters profileid='menial' interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/> </virtualport> </interface> ... </devices>
23.17.8.3. 포트 마스커레이딩 범위 설정
그림 23.49. 포트 마스커레이딩 범위
<forward mode='nat'> <address start='1.2.3.4' end='1.2.3.10'/> </forward> ...
23.17.8.4. 사용자 공간 SLIRP 스택
그림 23.50. 장치 - 네트워크 인터페이스-사용자 공간 SLIRP 스택
... <devices> <interface type='user'/> ... <interface type='user'> <mac address="00:11:22:33:44:55"/> </interface> </devices> ...
23.17.8.5. 일반 이더넷 연결
vnetN
이라는 이름으로 생성된 <tun>
장치가 있으며, <대상>
요소로도 재정의할 수 있습니다. tun 장치를 만든
후 쉘 스크립트가 실행되고 필요한 호스트 물리적 시스템 네트워크 통합을 완료합니다. 기본적으로 이 스크립트는 /etc/qemu-ifup
이라고 하지만 재정의할 수 있습니다( 23.17.8.11절. “대상 요소 덮어쓰기”참조).
그림 23.51. devices - 네트워크 인터페이스-일반 이더넷 연결
... <devices> <interface type='ethernet'/> ... <interface type='ethernet'> <target dev='vnet7'/> <script path='/etc/qemu-ifup-mynet'/> </interface> </devices> ...
23.17.8.6. 물리적 인터페이스에 직접 첨부
모드
특성 값 vepa
('Virtual Ethernet Port Aggregator'), bridge
또는 private
중 하나를 macvtap 장치의 작업 모드로 선택할 수 있습니다. vepa
는 기본 모드입니다.
그림 23.52. 장치 - 네트워크 인터페이스- 물리적 인터페이스에 직접 연결
... <devices> ... <interface type='direct'> <source dev='eth0' mode='vepa'/> </interface> </devices> ...
표 23.20. 물리적 인터페이스 요소에 직접 첨부
element | 설명 |
---|---|
VEPA | 모든 게스트 가상 머신의 패킷은 외부 브리지로 전송됩니다. 패킷이 생성되는 것과 동일한 호스트 물리적 시스템의 게스트 가상 시스템인 패킷은 VEPA 가능 브릿지(일반적으로 VEPA가 작동하지 않음)에 의해 호스트 물리적 시스템으로 다시 전송됩니다. |
bridge | 대상이 시작되는 것과 동일한 호스트 물리적 시스템에 있는 패킷은 대상 macvtap 장치로 직접 전달됩니다. 직접 전달하려면 원본 및 대상 장치가 브리지 모드에 있어야 합니다. 둘 중 하나가 비호환 모드이면 VEPA 가능 브릿지가 필요합니다. |
private | 모든 패킷은 외부 브리지로 전송되며 외부 라우터 또는 게이트웨이를 통해 전송되는 경우에만 동일한 호스트 물리적 시스템의 대상 가상 시스템으로 전송되고 해당 장치는 호스트 물리적 시스템으로 다시 전송됩니다. 다음 절차는 소스 또는 대상 장치가 개인 모드인 경우 수행됩니다. |
passthrough | 이 기능은 마이그레이션 기능을 손실하지 않고 SR-IOV 가능 NIC의 가상 기능을 게스트 가상 머신에 직접 연결합니다. 모든 패킷은 구성된 네트워크 장치의 VF/IF로 전송됩니다. 장치의 기능에 따라 추가 사전 요구 사항 또는 제한 사항이 적용될 수 있습니다. 예를 들어, 여기에는 커널 2.6.38 이상이 필요합니다. |
표 23.21. 물리적 인터페이스 추가 요소에 직접 첨부
element | 설명 |
---|---|
managerid | VSI 관리자 ID는 VSI 유형 및 인스턴스 정의가 포함된 데이터베이스를 식별합니다. 이는 정수 값이며 값 0 이 예약되어 있습니다. |
typeid | VSI 유형 ID는 네트워크 액세스를 문자 지정하는 VSI 유형을 식별합니다. VSI 유형은 일반적으로 네트워크 관리자가 관리합니다. 정수 값입니다. |
typeidversion | VSI 유형 버전에서는 VSI 유형의 여러 버전을 사용할 수 있습니다. 정수 값입니다. |
instanceid | VSI 인스턴스(가상 머신의 가상 인터페이스)가 생성되면 VSI 인스턴스 식별자가 생성됩니다. 이는 전역적으로 고유 식별자입니다. |
profileid | 프로필 ID에는 이 인터페이스에 적용할 포트 프로필 이름이 포함되어 있습니다. 이 이름은 port 프로필 데이터베이스에서 포트 프로필의 네트워크 매개 변수로 확인되고 해당 네트워크 매개 변수가 이 인터페이스에 적용됩니다. |
그림 23.53. devices - 네트워크 인터페이스- 물리적 인터페이스에 직접 연결
... <devices> ... <interface type='direct'> <source dev='eth0.2' mode='vepa'/> <virtualport type="802.1Qbg"> <parameters managerid="11" typeid="1193047" typeidversion="2" instanceid="09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f"/> </virtualport> </interface> </devices> ...
그림 23.54. 장치 - 네트워크 인터페이스 - 물리적 인터페이스에 직접 연결하여 더 많은 추가 매개 변수
... <devices> ... <interface type='direct'> <source dev='eth0' mode='private'/> <virtualport type='802.1Qbh'> <parameters profileid='finance'/> </virtualport> </interface> </devices> ...
profileid
특성에는 이 인터페이스에 적용할 포트 프로필의 이름이 포함되어 있습니다. 이 이름은 port 프로필 데이터베이스에서 포트 프로필의 네트워크 매개 변수로 확인되고 해당 네트워크 매개 변수가 이 인터페이스에 적용됩니다.
23.17.8.7. PCI 패스스루
소스
요소로 지정됨)는 먼저 장치의 MAC 주소를 구성된 값으로 설정한 후 일반 장치 패스스루를 사용하여 게스트 가상 시스템에 직접 할당되며, 장치를 선택적으로 지정된 virtualport
요소를 사용하여 연결할 수 있습니다(Type ='direct
네트워크 장치에 대해 제공된 virtualport 예제 참조). 표준 단일 포트 PCI 이더넷 카드 드라이버 설계의 제한으로 인해 SR-IOV(Single Root I/O Virtualization) 가상 기능(VF) 장치만 이러한 방식으로 할당할 수 있습니다. 게스트 가상 머신에 표준 단일 포트 PCI 또는 PCIe 이더넷 카드를 할당하려면 기존 hostdev
장치 정의를 사용합니다.
hostdev
장치의 기능과 매우 유사하며, 이 방법은 통과된 장치에 대한 MAC 주소와 virtualport
를 지정할 수 있다는 점입니다. 이러한 기능이 필요하지 않은 경우 SR-IOV를 지원하지 않는 표준 단일 포트 PCI, PCIe 또는 USB 네트워크 카드가 있는 경우 (따라서 게스트 가상 머신 도메인에 할당되는 동안 구성된 MAC 주소가 손실됨) 또는 0.9.11 이전의 libvirt 버전을 사용하는 경우 표준 hostdev
정의를 사용하여 게스트 가상 머신 인터페이스 유형
대신 장치를 할당합니다.
그림 23.55. 장치 - 네트워크 인터페이스 PCI 패스스루
... <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> ...
23.17.8.8. 멀티 캐스트 터널
인터페이스 유형을
조작하고 이를 mcast
로 설정하고 mac 주소 및 소스 주소를
제공하여 생성됩니다. 예를 들면 다음과 같습니다.
그림 23.56. 장치 - 네트워크 인터페이스 멀티 캐스트 터널
... <devices> <interface type='mcast'> <mac address='52:54:00:6d:90:01'> <source address='230.0.0.1' port='5558'/> </interface> </devices> ...
23.17.8.9. TCP 터널
인터페이스 유형을
조작하고 이를 mcast
로 설정하고 mac 주소 및 소스 주소를
제공하여 생성됩니다. 예를 들면 다음과 같습니다.
그림 23.57. 장치 - 네트워크 인터페이스- TCP 터널
... <devices> <interface type='server'> <mac address='52:54:00:22:c9:42'> <source address='192.168.0.1' port='5558'/> </interface> ... <interface type='client'> <mac address='52:54:00:8b:c9:51'> <source address='192.168.0.1' port='5558'/> </interface> </devices> ...
23.17.8.10. NIC 드라이버별 옵션 설정
드라이버
하위 요소의 특성으로 설정됩니다. 이러한 옵션은 관리 도구를 사용하여 도메인 XML의 다음 섹션을 구성하는 방식으로 설정됩니다.
그림 23.58. 장치 - 네트워크 인터페이스 설정 NIC 드라이버별 옵션
<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> ...
표 23.22. virtio NIC 드라이버 요소
매개변수 | 설명 |
---|---|
name | 선택적 name 속성은 사용할 백엔드 드라이버 유형을 강제 적용합니다. 값은 kvm (사용자 공간 백엔드) 또는 vhost (커널 백엔드)일 수 있습니다. 커널에서 vhost 모듈을 제공해야 합니다. 커널 지원 없이 vhost 드라이버를 요구하려고 합니다. 기본 설정은 vhost 드라이버가 있는 경우 vhost이지만 그렇지 않은 경우 kvm 으로 자동으로 대체됩니다. |
txmode | 전송 버퍼가 가득 찰 때 패킷의 전송을 처리하는 방법을 지정합니다. 값은 iothread 또는 timer 일 수 있습니다. iothread 로 설정하면 패킷 tx는 모두 드라이버의 하단의 iothread에서 수행됩니다. (이 옵션은 "tx=bh" 를 kvm 명령 줄 "-device" virtio-net-pci 옵션에 추가함). 타이머 로 설정하면 KVM에서 tx 작업이 수행되며 현재 시간에 전송할 수 있는 것보다 더 많은 tx 데이터가 있는 경우 KVM이 다른 작업을 수행하기 전에 타이머가 설정됩니다. 타이머가 실행되면 더 많은 데이터를 전송하려고 시도합니다. 이 값은 변경하지 않는 것이 좋습니다. |
ioeventfd | 인터페이스 장치에 대한 도메인 I/O 비동기 처리를 설정합니다. 기본값은 하이퍼바이저의 재량에 따라 다릅니다. 허용되는 값은 설정 및 입니다. 이 옵션을 활성화하면 KVM은 별도의 스레드가 I/O를 처리하는 동안 게스트 가상 머신을 실행할 수 있습니다. 일반적으로 I/O 중 높은 시스템 CPU 사용률이 발생하는 게스트 가상 시스템은 이러한 이점을 활용할 수 있습니다. 반면 물리적 호스트 시스템의 과부하는 게스트 가상 머신 I/O 대기 시간을 늘릴 수 있습니다. 이 값은 변경하지 않는 것이 좋습니다. |
event_idx | event_idx 속성은 장치 이벤트 처리의 일부 측면을 제어합니다. 값이 또는 off 중 하나일 수 있습니다. 의 기본값은 인터럽트 수를 줄이고 게스트 가상 머신에 대해 종료됩니다. 이 동작이 하위 선택인 경우 이 속성은 기능을 강제로 해제할 수 있는 방법을 제공합니다. 이 값은 변경하지 않는 것이 좋습니다. |
23.17.8.11. 대상 요소 덮어쓰기
그림 23.59. devices - 네트워크 인터페이스-대상 요소를 덮어씁니다.
... <devices> <interface type='network'> <source network='default'/> <target dev='vnet1'/> </interface> </devices> ...
vnet
또는 vif
로 시작할 수 없습니다. 이러한 접두사를 사용하여 수동으로 지정한 대상은 무시됩니다.
23.17.8.12. 부팅 순서 지정
그림 23.60. 부팅 순서 지정
... <devices> <interface type='network'> <source network='default'/> <target dev='vnet1'/> <boot order='1'/> </interface> </devices> ...
23.17.8.13. 인터페이스 Makefile BIOS 구성
그림 23.61. 인터페이스 Makefile BIOS 구성
... <devices> <interface type='network'> <source network='default'/> <target dev='vnet1'/> <rom bar='on' file='/etc/fake/boot.bin'/> </interface> </devices> ...
bar
속성은 on
또는 off
로 설정할 수 있으며, 장치의 RAM이 게스트 가상 머신의 메모리 맵에 표시되는지 여부를 결정합니다. (PC 설명서에서 rom bar
설정은 Romom에 대한 기본 주소 레지스터의 존재를 제어합니다. rom 바가
지정되지 않은 경우 KVM 기본값(기본 에
사용된 KVM의 이전 버전)이 사용되며 최신 KVM 하이퍼바이저는 기본적으로 입니다.
선택적 file
속성은 장치의 RAM BIOS로 게스트 가상 머신에 표시되는 바이너리 파일을 가리키는 데 사용됩니다. 이 기능은 네트워크 장치에 대한 대체 부팅ROM을 제공하는 데 유용할 수 있습니다.
23.17.8.14. QoS (Quality of Service)
bandwidth
요소는 대부분의 인바운드 및 하나의 아웃바운드 자식 요소를 가질 수 있습니다. 이러한 자식 요소를 벗어나면 해당 트래픽 방향에 QoS가 적용되지 않습니다. 따라서 도메인의 들어오는 트래픽만 정렬하려면 인바운드만 사용하고 그 반대의 경우도 마찬가지입니다.
평균이
1개(또는 아래에 설명된
대로)가 있습니다. 평균은
형성되는 인터페이스에서 평균 비트 비율을 지정합니다. 또한 다음 두 가지 선택적 속성이 있습니다.
peak
- 이 속성은 브리지에서 데이터를 보낼 수 있는 최대 속도를 초 단위로 지정합니다. Linux 인그레스 필터가 아직 알 수 없으므로 이 구현의 제한은 아웃바운드 요소에서 이 특성이 무시됩니다.- 최대 속도에서 버스트 수 있는 바이트 수를 지정합니다.Specifies the amount of bytes that can be
burst
at peak speed. 특성에 허용되는 값은 정수 번호입니다.
평균
및 최대
특성의 단위는 초당 킬로바이트이며, burst
는 킬로바이트로만 설정됩니다. 또한 인바운드 트래픽은 선택적으로 플로어
특성을 가질 수 있습니다. 이렇게 하면 셰이핑된 인터페이스에 대해 최소 처리량이 보장됩니다. 플로어
를 사용하면 모든 트래픽이 QoS 결정이 내려질 수 있는 한 지점을 통과해야 합니다. 따라서 인터페이스 type='network'/와 forward
type
of route
,nat
, 또는 전혀 전달하지 않는 경우에만 사용할 수 있습니다. 가상 네트워크 내에서 모든 연결된 인터페이스에 적어도 인바운드 QoS 세트(최소평균
)가 있어야 하지만, 플로어 특성은 평균을
지정할 필요가 없습니다. 그러나 최대
및 버스트
속성에는 여전히 평균이
필요합니다. 현재 수신 qdiscs에는 클래스가 없을 수 있으므로 플로어
는 아웃바운드 트래픽만 적용할 수 있습니다.
그림 23.62. 서비스 품질
... <devices> <interface type='network'> <source network='default'/> <target dev='vnet0'/> <bandwidth> <inbound average='1000' peak='5000' floor='200' burst='1024'/> <outbound average='128' peak='256' burst='256'/> </bandwidth> </interface> <devices> ...
23.17.8.15. VLAN 태그 설정(네트워크 유형만 지원)
그림 23.63. VLAN 태그 설정(네트워크 유형만 지원)
... <devices> <interface type='bridge'> <vlan> <tag id='42'/> </vlan> <source bridge='ovsbr0'/> <virtualport type='openvswitch'> <parameters interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/> </virtualport> </interface> <devices> ...
vlan
요소는 게스트 가상 시스템의 네트워크 트래픽에 적용하기 위해 하나 이상의 VLAN 태그를 지정할 수 있습니다. OpenvSwitch 및 type='hostdev의
SR-IOV 인터페이스만 게스트 가상 머신 트래픽의 투명 VLAN 태그를 지원합니다. 표준 Linux 브리지 및 libvirt의 자체 가상 네트워크를 포함한 기타 인터페이스는 지원하지 않습니다. 802.1QBH(vn-link) 및 802.1Qbg(VEPA) 스위치는 게스트 가상 시스템 트래픽을 특정 VLAN에 태그하는 고유의 방법을 제공합니다. VLAN 트렁크링의 경우 여러 태그의 사양을 허용하기 위해 태그
하위 요소는 사용할 VLAN 태그(예: tag id='42'/
)를 지정합니다. 인터페이스에 두 개 이상의 vlan
요소가 정의되어 있는 경우 사용자가 지정된 모든 태그를 사용하여 VLAN 트렁크를 수행하려는 것으로 가정합니다. 단일 태그가 있는 VLAN 트렁크링이 필요한 경우 선택적 속성 trunk='yes'
를 최상위 vlan
요소에 추가할 수 있습니다.
23.17.8.16. 가상 링크 상태 수정
상태에
사용 가능한 값은 up
및 down
입니다. down
이 값으로 지정되면 인터페이스는 네트워크케이블이 연결 해제될 때 작동합니다. 이 요소가 지정되지 않은 경우 기본 동작은 up
입니다.
그림 23.64. 가상 링크 상태 수정
... <devices> <interface type='network'> <source network='default'/> <target dev='vnet0'/> <link state='down'/> </interface> <devices> ...
23.17.9. 입력 장치
그림 23.65. 입력 장치
... <devices> <input type='mouse' bus='usb'/> </devices> ...
<입력>
요소에는 하나의 필수 특성이 있습니다: type
, type , which can be set to mouse
or tablet
.tablet
은 절대 커서 이동을 제공하는 반면 마우스
는 상대 이동을 사용합니다. 선택적 bus
속성은 정확한 장치 유형을 구체화하는 데 사용할 수 있으며 kvm
(paravirtualized), ps2
및 usb
로 설정할 수 있습니다.
<주소가>
있습니다.
23.17.10. Hub 장치
그림 23.66. hub devices
... <devices> <hub type='usb'/> </devices> ...
hub
요소에는 usb
로만 설정할 수 있는 하나의 필수 특성 type
이 있습니다. hub
요소에는 장치를 특정 컨트롤러에 연결할 수 있는 type='usb'
가 있는 선택적 하위 요소인 주소
가 있습니다.
23.17.11. 그래픽 프레임 버퍼
그림 23.67. 그래픽 프레임버
... <devices> <graphics type='sdl' display=':0.0'/> <graphics type='vnc' port='5904'> <listen type='address' address='1.2.3.4'/> </graphics> <graphics type='rdp' autoport='yes' multiUser='yes' /> <graphics type='desktop' fullscreen='yes'/> <graphics type='spice'> <listen type='network' network='rednet'/> </graphics> </devices> ...
graphics
요소에는 필수 유형
속성이 있습니다. 이 속성은 아래 표에 설명된 대로 sdl
,vnc
,rdp
,desktop
또는 spice
값을 사용합니다.
표 23.23. 그래픽 프레임버 기본 요소
매개변수 | 설명 |
---|---|
sdl | 호스트 물리적 시스템 데스크탑에 창이 표시됩니다. 다음과 같은 선택적 인수를 허용합니다.
|
vnc | VNC 서버를 시작합니다.
|
spice | SPICE 서버를 시작합니다.
|
그래픽
요소 내에 하나 이상의 channel
요소를 추가합니다. 유효한 채널 이름에는 main
,display
,inputs
,cursor
,playback
,record
,smartcard
, usbredir
등이 있습니다.
그림 23.68. 샘플 SPICE 구성
<graphics type='spice' port='-1' tlsPort='-1' autoport='yes'> <channel name='main' mode='secure'/> <channel name='record' mode='insecure'/> <image compression='auto_glz'/> <streaming mode='filter'/> <clipboard copypaste='no'/> <mouse mode='client'/> </graphics>
압축
속성을 사용하여 구성됩니다.
이미지
압축을 설정하여 이미지 압축을 설정합니다(Auto_g
,lz
,auto_lz
quic
, 글z
, lz ,off
)- WAN을 통한 이미지에 대한 username 압축의cs 압축 (
자동
,
수락하지 않음)항상
- forms 이미지 압축을 구성하기 위한
zlib
(자동
,절대
,항상
) 및재생
을 통해 오디오 스트림 압축(사용 가능)을
활성화합니다
.
streaming
요소는 스트리밍 모드를 설정합니다. mode
특성은all
또는 off
를 필터링
하도록 설정할 수 있습니다.
클립보드
요소에서 설정합니다. 기본적으로 활성화되어 있으며 copy
puts 속성을 no
로 설정하여 비활성화할 수 있습니다.
mouse
요소는 마우스 모드를 설정합니다. mode
속성은 server
또는 client
로 설정할 수 있습니다. 모드가 지정되지 않은 경우 KVM 기본값은클라이언트
모드(클라이언트 모드)입니다.
표 23.24. 추가 그래픽 프레임버 요소
매개변수 | 설명 |
---|---|
rdp | RDP 서버를 시작합니다.
|
desktop | 이 값은 현재octets 도메인에 예약되어 있습니다. sdl 과 유사하게 호스트 물리적 머신 데스크탑의 창을 표시하지만 alice 뷰어를 사용합니다. sdl 과 마찬가지로 선택적 특성 표시 및 전체 화면 을 허용합니다. |
listen | 그래픽 유형 vnc 및 spice 에 대한 수신 소켓을 설정하는 데 사용되는 주소 정보를 입력하는 대신 listen 속성은 그래픽 의 별도의 하위 요소인 을 지정할 수 있습니다(위의 예제 참조). listen 는 다음 특성을 허용합니다.
|
23.17.12. 동영상 장치
그림 23.69. 비디오 장치
... <devices> <video> <model type='vga' vram='8192' heads='1'> <acceleration accel3d='yes' accel2d='yes'/> </model> </video> </devices> ...
graphics
요소에는 아래에 설명된 대로 "sdl", "vnc", "rdp" 또는 "#150" 값을 사용하는 필수 type
속성이 있습니다.
표 23.25. 그래픽 프레임버 요소
매개변수 | 설명 |
---|---|
video | video 요소는 비디오 장치를 설명하는 컨테이너입니다. 이전 버전과의 호환성을 위해, 동영상이 설정되지 않았지만 도메인 XML에 그래픽 요소가 있는 경우 libvirt는 게스트 가상 머신 유형에 따라 기본 비디오를 추가합니다. "ram" 또는 "vram"을 제공하지 않으면 기본값이 사용됩니다. |
model | 여기에는 사용 가능한 하이퍼바이저 기능에 따라 pxea ,cirrus ,vmvga ,kvm ,vbox , qxl 값을 사용하는 필수 유형 속성이 있습니다. 또한 vram 및 헤드와 함께 그림 수를 사용하여 kibibytes (24 바이트 블록)로 비디오 메모리 크기를 제공할 수 있습니다. |
가속 | 가속이 지원되는 경우 가속 요소에서 accel3d 및 accel2d 속성을 사용하여 활성화해야 합니다. |
address | 선택적 주소 하위 요소를 사용하여 비디오 장치를 특정 PCI 슬롯에 연결할 수 있습니다. |
23.17.13. 콘솔, 직렬 및 채널 장치
그림 23.70. 콘솔, 직렬 및 채널 장치
... <devices> <serial type='pty'> <source path='/dev/pts/3'/> <target port='0'/> </serial> <console type='pty'> <source path='/dev/pts/4'/> <target port='0'/> </console> <channel type='unix'> <source mode='bind' path='/tmp/guestfwd'/> <target type='guestfwd' address='10.0.2.1' port='4600'/> </channel> </devices> ...
serial
,console
,channel
)은 게스트 가상 머신에 장치가 제공되는 방법을 설명합니다. 게스트 가상 머신 인터페이스는 대상
요소에 의해 구성됩니다. 호스트 물리적 시스템에 제공되는 인터페이스는 최상위 요소의 type
특성에 제공됩니다. 호스트 물리적 시스템 인터페이스는 소스 요소에 의해 구성됩니다. source
요소에는 소켓 경로에서 레이블 지정이 수행되는 방식을 재정의하는 선택적 초라벨
이 포함될 수 있습니다. 이 요소가 없으면 보안 레이블이 도메인별 설정에서 상속됩니다. 각 문자 장치 요소에는 장치를 특정 컨트롤러 또는 PCI 슬롯에 연결할 수 있는 선택적 하위 요소 주소가
있습니다.
isa-parallel
장치는 더 이상 지원되지 않습니다.
23.17.14. 게스트 가상 머신 인터페이스
그림 23.71. 게스트 가상 머신 인터페이스 직렬 포트
... <devices> <serial type='pty'> <source path='/dev/pts/3'/> <target port='0'/> </serial> </devices> ...
<target>
에는 포트 번호를 지정하는 port
속성이 있을 수 있습니다. 포트는 0부터 번호가 매겨집니다. 일반적으로 0, 1 또는 2 개의 직렬 포트가 있습니다. 또한 해당 값에 대한 두 가지 선택 사항인 isa-serial
또는 usb-serial
인 선택적 type
속성이 있습니다. type
이 누락된 경우 isa-serial
는 기본적으로 사용됩니다. usb-serial
의 경우 type='usb'
가 있는 선택적 하위 요소 <주소는>
위에 설명된 특정 컨트롤러에 장치를 연결할 수 있습니다.
<console>
요소는 대화형 콘솔을 표시하는 데 사용됩니다. 사용 중인 게스트 가상 머신 유형에 따라 콘솔은 반가상화 장치이거나 다음 규칙에 따라 직렬 장치의 복제본일 수 있습니다.
targetType
특성이 설정되지 않은 경우 기본 장치유형은
하이퍼바이저의 규칙에 따라 달라집니다. 기본유형은
XML을 libvirt에 다시 쿼리할 때 추가됩니다. 완전히 가상화된 게스트 가상 머신의 경우 기본 장치 유형은 일반적으로 직렬 포트입니다.targetType
속성이직렬
이고<직렬>
요소가 없는 경우 console 요소가<serial>
요소에 복사됩니다.<serial>
요소가 이미 존재하는 경우 console 요소는 무시됩니다.targetType
속성이직렬
이 아닌 경우 정상적으로 처리됩니다.- 첫 번째
<콘솔>
요소만serial
의targetType
을 사용할 수 있습니다. 보조 콘솔은 모두 반가상화해야 합니다. - s390에서 콘솔 요소는
targetType
의sclp
또는sclplm
(line mode)을 사용할 수 있습니다. SCLP는 s390의 기본 콘솔 유형입니다. SCLP 콘솔에 연결된 컨트롤러가 없습니다.
/dev/hvc[0-7]
로 게스트 가상 머신에 노출됩니다(자세한 내용은 Fedora 프로젝트의 virtio-serial 페이지참조).
그림 23.72. 게스트 가상 머신 인터페이스 - virtio 콘솔 장치
... <devices> <console type='pty'> <source path='/dev/pts/4'/> <target port='0'/> </console> <!-- KVM virtio console --> <console type='pty'> <source path='/dev/pts/5'/> <target type='virtio' port='0'/> </console> </devices> ... ... <devices> <!-- KVM s390 sclp console --> <console type='pty'> <source path='/dev/pts/1'/> <target type='sclp' port='0'/> </console> </devices> ...
<target>
요소에는 직렬 포트와 동일한 속성이 있습니다. 일반적으로 하나의 콘솔만 있습니다.
23.17.15. 채널
그림 23.73. 채널
... <devices> <channel type='unix'> <source mode='bind' path='/tmp/guestfwd'/> <target type='guestfwd' address='10.0.2.1' port='4600'/> </channel> <!-- KVM virtio channel --> <channel type='pty'> <target type='virtio' name='arbitrary.virtio.serial.port.name'/> </channel> <channel type='unix'> <source mode='bind' path='/var/lib/libvirt/kvm/f16x86_64.agent'/> <target type='virtio' name='org.kvm.guest_agent.0'/> </channel> <channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> </channel> </devices> ...
<채널>
의 특정 유형은 <대상>
요소의 type
속성에 제공됩니다. 다른 채널 유형에는 다음과 같이 다른 대상 속성이 있습니다.
guestfwd
- 게스트 가상 머신에서 지정된 IP 주소로 전송된 TCP 트래픽을 호스트 물리적 시스템의 채널 장치로 전달합니다.target
요소에는 address 및 port 속성이 있어야 합니다.virtio
- 반가상화 virtio 채널.<채널>
은/dev/vport*
아래의 게스트 가상 머신에 노출되며 선택적 요소이름이
지정된 경우/dev/virtio-ports/$name
(자세한 내용은 Fedora 프로젝트의 virtio-serial 페이지)을 참조하십시오. 선택적 요소주소는
위에 설명된 특정type='virtio-serial'
컨트롤러에 채널을 연결할 수 있습니다. KVM을 사용하면 name이 "org.kvm.guest_agent.0"인 경우 libvirt는 게스트 가상 시스템에 설치된 게스트 에이전트와 상호 작용하여 게스트 가상 시스템 종료 또는 파일 시스템 quiescing과 같은 작업을 수행할 수 있습니다.spicevmc
- 반가상화 SPICE 채널. 또한 도메인에는 그래픽 장치로 SPICE 서버가 있어야 하며, 이 시점에서 기본 채널에서 호스트 물리적 머신 비열기 메시지도 있어야 합니다.type='virtio'
속성과 함께target
요소가 있어야 합니다. 선택적 속성이름은
게스트 가상 머신이 채널에 액세스하는 방법을 제어하며 기본값은name='com.spice.0'
입니다. 선택적<address>
요소는 채널을 특정type='virtio-serial'
컨트롤러에 연결할 수 있습니다.
23.17.16. 호스트 물리적 시스템 인터페이스
표 23.26. 문자 장치 요소
매개변수 | 설명 | XML 스니펫 |
---|---|---|
도메인 로그 파일 | 문자 장치의 모든 입력을 비활성화하고 가상 시스템의 로그 파일로 출력을 보냅니다. |
|
장치 로그 파일 | 파일이 열리고 문자 장치로 전송된 모든 데이터가 파일에 기록됩니다. 대상 디렉토리에 이 설정이 성공적으로 시작되면 게스트의 virt_log_t SELinux 레이블이 있어야 합니다. |
|
가상 콘솔 | 가상 콘솔의 그래픽 프레임 버퍼에 문자 장치를 연결합니다. 일반적으로 "ctrl+3"과 같은 특수 hotkey 시퀀스를 사용하여 액세스할 수 있습니다. |
|
null 장치 | 문자 장치를 void에 연결합니다. 입력에 데이터가 제공되지 않습니다. 기록된 모든 데이터는 삭제됩니다. |
|
Pseudo TTY | /dev/ptmx 를 사용하여 Pseudo TTY가 할당됩니다. virsh 콘솔 과 같은 적절한 클라이언트가 직렬 포트와 로컬로 상호 작용할 수 있습니다. |
|
NB Special 케이스 | NB special case if <console type='pty'> , then the TTY path is also duplicated as an attribute tty='/dev/pts/3' on the top level <console> tag. 이는 <콘솔> 태그에 대한 기존 구문과 유사합니다. | |
호스트 물리적 시스템 장치 프록시 | 문자 장치는 기본 물리적 문자 장치로 전달됩니다. 장치 유형(예: 에뮬레이션된 직렬 포트는 호스트 물리적 시스템 직렬 포트에만 연결됨)과 일치해야 하며 직렬 포트를 병렬 포트에 연결하지 않습니다. |
|
명명된 파이프 | 문자 장치는 이름이 지정된 파이프에 출력을 씁니다. 자세한 내용은 pipe(7) 도움말 페이지를 참조하십시오. |
|
TCP 클라이언트-서버 | 문자 장치는 원격 서버에 연결하는 TCP 클라이언트 역할을 합니다. |
또는 클라이언트 연결을 기다리는 TCP 서버로서.
또는 원시 TCP 대신 telnet을 사용할 수 있습니다. 또한 telnet(보안 telnet) 및 tls를 사용할 수도 있습니다.
|
UDP 네트워크 콘솔 | 문자 장치는 UDP netconsole 서비스 역할을 하며 패킷을 전송 및 수신합니다. 이것은 손실 된 서비스입니다. |
|
UNIX 도메인 소켓 클라이언트-서버 | 문자 장치는 로컬 클라이언트의 연결을 수락하는 UNIX 도메인 소켓 서버 역할을 합니다. |
|
23.17.17. 건전한 장치
음향
요소를 사용하여 호스트 물리적 시스템에 연결할 수 있습니다.
그림 23.74. 가상 음향 카드
... <devices> <sound model='ac97'/> </devices> ...
sound
요소에는 하나의 필수 특성인 model
이 있으며, 이는 실제 건전한 장치를 에뮬레이션한 것을 지정합니다. 유효한 값은 기본 하이퍼바이저에 고유하지만 일반적인 선택 사항은 'sb16'
, 'ac97'
및 'ich6'
입니다. 또한, 'ich6'
모델 세트가 있는 음향
요소에는 다양한 오디오 코드 세트를 오디오 장치에 연결하기 위한 선택적 codec
하위 요소를 가질 수 있습니다. 지정하지 않으면 재생 및 레코딩을 허용하기 위해 기본 codec가 연결됩니다. 유효한 값은 'duplex'
(선선 및 라인 아웃) 및 '마이크로이드'
(인가기와 마이크로폰 전달)입니다.
그림 23.75. 건전한 장치
... <devices> <sound model='ich6'> <codec type='micro'/> <sound/> </devices> ...
<주소가>
있습니다.
23.17.18. 워치독 장치
<>
워치독 장치에는 게스트 가상 머신에 추가 드라이버 및 관리 데몬이 필요합니다. 현재 워치독이 실행되는 경우 지원 알림이 없습니다.
그림 23.76. 워치독 장치
... <devices> <watchdog model='i6300esb'/> </devices> ... ... <devices> <watchdog model='i6300esb' action='poweroff'/> </devices> ...
model
- 필수모델
속성은 실제 워치독 장치 에뮬레이션을 지정합니다. 유효한 값은 기본 하이퍼바이저에 따라 다릅니다.model
속성은 다음 값을 사용할 수 있습니다.i6300esb
- 권장되는 장치는 PCI Intel 6300databindib700
- RuntimeClass iBase IB700 에뮬레이션
작업
- 선택적action
속성은 워치독이 만료될 때 수행할 작업을 설명합니다. 유효한 값은 기본 하이퍼바이저에 따라 다릅니다.action
속성에는 다음 값이 있을 수 있습니다.reset
- default setting, guest 가상 머신을 강제로 재설정shutdown
- 게스트 가상 머신을 정상적으로 종료(권장하지 않음)poweroff
- 게스트 가상 머신의 전원을 강제로 끕니다.pause
- 게스트 가상 머신 일시 중지none
- 아무 작업도 수행하지 않음dump
- 게스트 가상 머신을 자동으로 덤프합니다.
23.17.19. Panic Device 설정
pvpanic
메커니즘을 사용하여 Linux 게스트 가상 머신 커널 패닉을 감지할 수 있습니다. pvpanic
을 호출하면 libvirtd
데몬에 메시지를 보내 사전 구성된 반응을 시작합니다.
pvpanic
장치를 활성화하려면 다음을 수행합니다.
- 호스트 시스템의
/etc/libvirt/qemu.conf
파일에 다음 행을 추가하거나 주석 처리를 해제합니다.auto_dump_path = "/var/lib/libvirt/qemu/dump"
- virsh edit 명령을 실행하여 지정된 게스트의 도메인 XML 파일을 편집하고
장치
상위 요소에패닉
을 추가합니다.<devices> <panic> <address type='isa' iobase='0x505'/> </panic> </devices>
<address>
요소는 panic의 주소를 지정합니다. 기본 ioport는 0x505입니다. 대부분의 경우 주소를 지정할 필요가 없습니다.
libvirtd
가 충돌에 대응하는 방법은 도메인 XML의 <on_crash>
요소에 의해 결정됩니다. 가능한 작업은 다음과 같습니다.
coredump-destroy
- 게스트 가상 머신의 코어 덤프를 캡처하고 게스트를 종료합니다.coredump-restart
- 게스트 가상 머신의 코어 덤프를 캡처하고 게스트를 다시 시작합니다.preserve
- 게스트 가상 머신이 추가 작업을 대기하도록 시간(Halts the guest virtual machine)
pvpanic
에 대한 자세한 내용은 관련 지식 베이스 문서를 참조하십시오.
23.17.20. 메모리 대역폭 장치
<currentMemory>
와 <메모리>
설정 간의 차이에 따라 결정됩니다. 예를 들어 <메모리>
가 2GiB로 설정되고 <currentMemory>
가 1GiB인 경우 풍선에 1GiB가 포함됩니다. 수동 구성이 필요한 경우 virsh setmem 명령을 사용하여 <currentMemory>
값을 설정할 수 있으며 virsh setmaxmem 명령을 사용하여 <메모리>
값을 설정할 수 있습니다.
<currentMemory>
값을 수정할 경우 게스트 OS가 제대로 작동할 수 있도록 충분한 메모리를 남겨 두어야 합니다. 설정된 값이 너무 작으면 게스트가 불안정해질 수 있습니다.
<memballoon>
요소로 표시됩니다. 메모리 증대는 libvirt
서비스에서 관리하며 적절한 경우 자동으로 추가됩니다. 따라서 특정 PCI 슬롯을 할당해야 하지 않는 한 게스트 가상 머신 XML에 이 요소를 명시적으로 추가할 필요는 없습니다. <memballoon>
장치를 명시적으로 비활성화해야 하는 경우 이 용도로 model='none'
을 사용할 수 있습니다.
libvirt
가 자동으로 추가하는 memballoon 장치를 보여줍니다.
그림 23.77. 메모리 풍선 장치
... <devices> <memballoon model='virtio'/> </devices> ...
그림 23.78. 수동으로 추가된 메모리 풍선 장치
... <devices> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </memballoon> </devices> ...
model
속성은 제공되는 풍선 장치의 유형을 지정합니다. 유효한 값은 가상화 플랫폼에 고유합니다. KVM 하이퍼바이저에서 'virtio'
가 기본 설정입니다.
23.18. 스토리지 풀
<풀>
입니다. dir, fs, netfs, disk, iscsi, logical, scsi, mpath, rbd, Hepdog
또는 gluster
의 값을 사용할 수 있는 단일 속성 유형이
있습니다.
23.18.1. 스토리지 풀에 메타데이터 제공
그림 23.79. 일반 메타데이터 태그
<pool type="iscsi"> <name>virtimages</name> <uuid>3e3fce45-4f53-4fa7-bb32-11f34168b82b</uuid> <allocation>10000000</allocation> <capacity>50000000</capacity> <available>40000000</available> ... </pool>
표 23.27. virt-sysprep 명령
element | 설명 |
---|---|
<name> | 호스트 물리적 시스템에서 고유해야 하는 스토리지 풀의 이름을 제공합니다. 이는 스토리지 풀을 정의할 때 필요합니다. |
<uuid> | 전 세계적으로 고유해야 하는 스토리지 풀의 식별자를 제공합니다. UUID를 제공하는 것은 선택 사항이지만, 스토리지 풀을 만들 때 UUID를 제공하지 않으면 UUID가 자동으로 생성됩니다. |
<allocation> | 스토리지 풀에 대한 총 스토리지 할당을 제공합니다. 메타데이터 오버헤드로 인해 모든 스토리지 볼륨에서 총 할당 합계보다 클 수 있습니다. 이 값은 바이트로 표시됩니다. 이 요소는 읽기 전용이며 값은 변경할 수 없습니다. |
<용량> | 풀에 대한 총 스토리지 용량을 제공합니다. 기본 장치 제약 조건으로 인해 스토리지 볼륨에 전체 용량을 사용할 수 없습니다. 이 값은 바이트 단위입니다. 이 요소는 읽기 전용이며 값은 변경할 수 없습니다. |
<Available> | 스토리지 풀에서 새 스토리지 볼륨을 할당하는 데 사용할 수 있는 여유 공간을 제공합니다. 기본 장치 제약 조건으로 인해 사용 가능한 모든 공간을 단일 스토리지 볼륨에 할당할 수 없습니다. 이 값은 바이트 단위입니다. 이 요소는 읽기 전용이며 값은 변경할 수 없습니다. |
23.18.2. 소스 element
<pool>
요소 내에는 정의된 단일 <소스>
요소(하나만)가 있을 수 있습니다. <소스>
의 하위 요소는 스토리지 풀 유형에 따라 다릅니다. 사용할 수 있는 XML의 예는 다음과 같습니다.
그림 23.80. 소스 요소 옵션 1
... <source> <host name="iscsi.example.com"/> <device path="demo-target"/> <auth type='chap' username='myname'> <secret type='iscsi' usage='mycluster_myname'/> </auth> <vendor name="Acme"/> <product name="model"/> </source> ...
그림 23.81. 소스 요소 옵션 2
... <source> <adapter type='fc_host' parent='scsi_host5' wwnn='20000000c9831b4b' wwpn='10000000c9831b4b'/> </source> ...
<소스에서>
허용하는 하위 요소는 표 23.28. “소스 하위 요소 명령” 에서 설명합니다.
표 23.28. 소스 하위 요소 명령
element | 설명 |
---|---|
<device> | 호스트 물리적 머신 장치(풀 <유형= 기반)에서 지원하는 스토리지 풀> 의 소스를 제공합니다( 23.18절. “스토리지 풀” ) 백엔드 드라이버에 따라 여러 번 반복될 수 있습니다. 블록 장치 노드의 정규화된 경로인 단일 속성 경로를 포함합니다. |
<dir> | 디렉터리(<type='dir' 풀)에서 지원하는 스토리지 풀> 의 소스를 제공하거나 필요에 따라 파일 시스템을 기반으로 하는 스토리지 풀 내에서 하위 디렉터리를 선택합니다(<type='gluster'> ). 이 요소는 풀당 한 번만 발생할 수 있습니다(<풀> ). 이 요소는 백업 디렉터리의 전체<경로> 인 단일 속성(path )을 허용합니다. |
<adapter> | SCSI 어댑터(풀<type='scsi' )에서 지원하는 스토리지 풀> 의 소스를 제공합니다. 이 요소는 풀당 한 번만 발생할 수 있습니다(<풀> ). 특성 이름은 SCSI 어댑터 이름(ex. "scsi_host1")입니다. 이전 버전과의 호환성을 위해 여전히 "host1"이 지원되지만 권장되지 않습니다. 특성 유형은 어댑터 유형을 지정합니다. 유효한 값은 'fc_host'| 'scsi_host' 입니다. 생략된 경우 name 속성이 지정된 경우 기본값은 type='scsi_host' 입니다. 이전 버전과의 호환성을 유지하려면 어댑터의 경우 속성 유형이 선택 사항이지만 type='fc_host' 어댑터에는 필수입니다. wwnn (Word Wide Node Name) 및 wwpn (Word Wide Port Name)은 type='fc_host' 어댑터에서 장치를 고유하게 식별하는 데 사용됩니다(장치는 HBA 또는 vHBA일 수 있음). wwnn 및 wwpn 을 모두 지정해야 합니다. (v)HBA의 wwnn/wwpn을 얻는 방법에 대한 자세한 내용은 20.27.11절. “장치 설정 수집” 를 참조하십시오. 선택 사항인 속성 부모는 type='fc_host' 어댑터에 대한 상위 장치를 지정합니다. |
<호스트> | 원격 서버에서 지원하는 스토리지 풀의 소스를 제공합니다(type='netfs'|'iscsi'|'rbd'|'sheepdog'|'gluster' ). 이 요소는 <디렉터리> 또는 <장치> 요소와 함께 사용해야 합니다. 서버의 호스트 이름 또는 IP 주소인 속성 이름을 포함합니다. 프로토콜별 포트 번호에 대한 포트 속성을 선택적으로 포함할 수 있습니다. |
<auth> | 존재하는 경우 <auth> 요소는 type 속성(pool type='iscsi'|'rbd' )의 설정을 통해 소스에 액세스하는 데 필요한 인증 자격 증명을 제공합니다. 유형은 또는 type='ceph' 여야 합니다. Ceph RBD(Rados Block Device) 네트워크 소스에 "ceph"를 사용하고 CHAP(Challenge-Handshake Authentication Protocol) iSCSI 대상에 "iscsi"를 사용합니다. 또한 필수 특성 사용자 이름은 실제 암호 또는 기타 인증 정보를 보유한 libvirt 보안 오브젝트에 다시 연결하기 위해 인증 중에 사용할 사용자 이름과 필수 특성 유형의 하위 요소 시크릿을 식별합니다. 도메인 XML은 의도적으로 암호를 노출하지 않으며 암호를 관리하는 오브젝트에 대한 참조만 공개합니다. secret 요소에는 보안 오브젝트의 UUID가 있는 uuid 속성 또는 secret 오브젝트에 지정된 키와 일치하는 usage 속성이 필요합니다. |
<name> | (type='logical'|'rbd'|'sheepdog','gluster' ) 값을 사용할 수 있는 명명된 요소 <유형에서> 지원하는 스토리지 풀에 대한 소스를 제공합니다. |
<형식> | ) 값을 사용할 수 있는 스토리지 풀 유형의 형식에 대한 정보를 제공합니다. 이 값은 백엔드에 따라 다릅니다. 일반적으로 파일 시스템 유형 또는 네트워크 파일 시스템 유형 또는 파티션 테이블 유형 또는 LVM 메타데이터 유형을 나타내는 데 사용됩니다. 모든 드라이버에 이의 기본값이 있어야 하므로 요소는 선택 사항입니다. |
<vendor> | 스토리지 장치 공급업체에 대한 선택적 정보를 제공합니다. 여기에는 값이 백엔드에 고유한 단일 속성 <이름이> 포함됩니다. |
<product> | 스토리지 장치의 제품 이름에 대한 선택적 정보를 제공합니다. 여기에는 값이 백엔드에 고유한 단일 속성 <이름이> 포함됩니다. |
23.18.3. 대상 요소 생성
<대상>
요소는 다음 유형의 최상위 수준 <풀>
요소에 포함됩니다. (type='dir'|'fs'|'netfs'|'logical'|'disk'|'scsi'|'mpath'
). 이 태그는 스토리지 풀의 매핑을 호스트 파일 시스템에 대해 설명하는 데 사용됩니다. 여기에는 다음 하위 요소가 포함될 수 있습니다.
그림 23.82. 대상 요소 XML 예
<pool> ... <target> <path>/dev/disk/by-path</path> <permissions> <owner>107</owner> <group>107</group> <mode>0744</mode> <label>virt_image_t</label> </permissions> <timestamps> <atime>1341933637.273190990</atime> <mtime>1341930622.047245868</mtime> <ctime>1341930622.047245868</ctime> </timestamps> <encryption type='...'> ... </encryption> </target> </pool>
<대상>
요소에 유효한 자식 요소를 설명합니다.
표 23.29. 대상 자식 요소
element | 설명 |
---|---|
<path> | 스토리지 풀을 로컬 파일 시스템 네임스페이스에 매핑할 위치를 제공합니다. 파일 시스템 또는 디렉터리 기반 스토리지 풀의 경우 스토리지 볼륨이 생성될 디렉터리의 이름입니다. 장치 기반 스토리지 풀의 경우 장치의 노드가 존재하는 디렉터리의 이름입니다. 후자의 경우 /dev/ 는 논리 선택처럼 보일 수 있지만 장치의 노드는 필요에 따라 할당되므로 재부팅 시 안정적인 것으로 보장되지 않습니다. /dev/disk/by-{path,id,uuid,label} 위치 중 하나와 같은 안정적인 위치를 사용하는 것이 좋습니다. |
<권한> | 현재 이는 로컬 파일 시스템 네임스페이스에 디렉터리로 매핑되는 디렉터리 또는 파일 시스템 기반 스토리지 풀에만 유용합니다. 스토리지 풀이 빌드될 때 최종 디렉터리에 사용할 권한에 대한 정보를 제공합니다. <mode> 요소에는 8진수 권한 세트가 포함되어 있습니다. <owner> 요소에는 숫자 사용자 ID가 포함됩니다. <group> 요소에는 숫자 그룹 ID가 포함되어 있습니다. <레이블> 요소에는 MAC(예: SELinux) 레이블 문자열이 포함되어 있습니다. |
<timestamps> | 스토리지 볼륨에 대한 타이밍 정보를 제공합니다. 최대 4개의 하위 요소가 있습니다. 여기서 timestamps ='atime'|'ctime|'mtime'|'mtime' 에는 알려진 스토리지 볼륨의 액세스, 생성, 변경 및 수정 시간이 포함됩니다. 사용된 시간 형식은 epoch의 시작 이후 <초> (<나노> 초)입니다(1년 1월 1일). 나노초 해상도가 0이거나 호스트 운영 체제 또는 파일 시스템에 의해 지원되지 않는 경우 나노초 부분은 생략됩니다. 이는 읽기 전용 속성이며 스토리지 볼륨을 생성할 때 무시됩니다. |
<Encryption> | 존재하는 경우 스토리지 볼륨을 암호화하는 방법을 지정합니다. 자세한 내용은 libvirt 업스트림 페이지를 참조하십시오. |
23.18.4. 장치 Extents 설정
<source>
요소 내의 <장치>
요소에는 사용 가능한 확장 영역에 대한 정보가 포함될 수 있습니다. 일부 스토리지 풀에는 스토리지 볼륨을 단일 제약 조건(예: 디스크 파티션 풀) 내에서 전적으로 할당해야 한다는 제약 조건이 있습니다. 따라서 범위 정보를 통해 애플리케이션이 새 스토리지 볼륨의 가능한 최대 크기를 결정할 수 있습니다.
<장치>
요소 내에서 확장 영역 정보를 지원하는 스토리지 풀의 경우 0개 이상의 <freeExtent>
요소가 있습니다. 이러한 각 요소에는 바이트로 측정된 장치에서 범위를 경계를 제공하는 <start>
및 <end>
라는 두 가지 특성이 있습니다.
23.19. 스토리지 볼륨
23.19.1. 일반 메타데이터
<볼륨>
요소의 상단 섹션에는 다음 XML 예제와 같이 metadata라고 하는 정보가 포함되어 있습니다.
그림 23.83. 스토리지 볼륨에 대한 일반 메타데이터
... <volume type='file'> <name>sparse.img</name> <key>/var/lib/libvirt/images/sparse.img</key> <allocation>0</allocation> <capacity unit="T">1</capacity> ... </volume>
<볼륨>
요소에 유효한 하위 요소를 설명합니다.
표 23.30. 볼륨 하위 요소
element | 설명 |
---|---|
<name> | 스토리지 풀에 고유한 스토리지 볼륨의 이름을 제공합니다. 이는 스토리지 볼륨을 정의할 때 필요합니다. |
<key> | 단일 스토리지 볼륨을 식별하는 스토리지 볼륨의 식별자를 제공합니다. 경우에 따라 단일 스토리지 볼륨을 식별하는 두 개의 고유 키가 있을 수 있습니다. 이 필드는 항상 생성되는 스토리지 볼륨을 생성할 때 설정할 수 없습니다. |
<allocation> | 스토리지 볼륨에 대한 총 스토리지 할당을 제공합니다. 스토리지 볼륨이 스파스로 할당된 경우 논리 용량보다 작을 수 있습니다. 스토리지 볼륨에 메타데이터 오버헤드가 많은 경우 논리 용량보다 클 수도 있습니다. 이 값은 바이트 단위입니다. 스토리지 볼륨을 생성할 때 생략하면 스토리지 볼륨이 생성 시 완전히 할당됩니다. 용량보다 작은 값으로 설정하면 스토리지 풀에서 스토리지 볼륨을 스파스적으로 할당할지 여부를 결정할 수 있습니다. 다른 유형의 스토리지 풀은 스파스 스토리지 볼륨을 다르게 취급할 수 있습니다. 예를 들어, 논리 풀은 스토리지 볼륨의 할당을 자동으로 확장하지 않습니다. 사용자는 스토리지 볼륨 할당을 자동으로 확장하거나 구성이 자동으로 수행됩니다. 기본적으로 이 값은 바이트 단위로 지정됩니다. 보기 참고 |
<용량> | 스토리지 볼륨의 논리 용량을 제공합니다. 이 값은 기본적으로 바이트 <단위이지만 참고 에 설명된 특성을 지정할 수 있습니다. 이는 스토리지 볼륨을 생성할 때 반드시 필요합니다. |
<소스> | 스토리지 볼륨의 기본 스토리지 할당에 대한 정보를 제공합니다. 일부 스토리지 풀 유형에는 사용할 수 없습니다. |
<대상> | 로컬 호스트 물리적 시스템에서 스토리지 볼륨의 표현에 대한 정보를 제공합니다. |
유닛
을 지정할 수 있습니다. 이 속성은 요소 <할당>
및 <용량>
과 함께 사용할 수 있습니다. 특성 단위에
허용되는 값은 다음과 같습니다.
- 바이트의 경우
B
또는바이트
KB
(KB)- kibibytes의 경우
K
또는KiB
- 메가바이트의 경우
MB
- 메비 바이트의 경우 m 또는
MiB
GB
(GB)g
또는GiB
for gibibytes- 테라바이트의 경우
TB
t
또는TiB
for tebibytesPB
for페타바이트P
또는PiB
for pebibytes- e
xabytes
의 경우 ebonbytes E
또는EiB
for exbibytes
23.19.2. 대상 요소 설정
<target>
요소는 <볼륨>
최상위 요소에 배치할 수 있습니다. 스토리지 볼륨에서 수행되는 매핑을 호스트 물리 시스템 파일 시스템으로 설명하는 데 사용됩니다. 이 요소는 다음 자식 요소를 사용할 수 있습니다.
그림 23.84. 대상 자식 요소
<target> <path>/var/lib/libvirt/images/sparse.img</path> <format type='qcow2'/> <permissions> <owner>107</owner> <group>107</group> <mode>0744</mode> <label>virt_image_t</label> </permissions> <compat>1.1</compat> <features> <lazy_refcounts/> </features> </target>
<대상에>
대한 특정 하위 요소는 표 23.31. “대상 자식 요소” 에 설명되어 있습니다.
표 23.31. 대상 자식 요소
element | 설명 |
---|---|
<path> | 절대 경로로 로컬 파일 시스템에서 스토리지 볼륨에 액세스할 수 있는 위치를 제공합니다. 이는 읽기 전용 속성이며 볼륨을 만들 때 지정할 수 없습니다. |
<형식> | 풀 특정 볼륨 형식에 대한 정보를 제공합니다. 디스크 기반 스토리지 풀의 경우 파티션 유형을 제공합니다. 파일 시스템 또는 디렉터리 기반 스토리지 풀의 경우 파일 형식 유형(예: 소포, qcow, vmdk, raw)을 제공합니다. 스토리지 볼륨을 생성할 때 생략하면 스토리지 풀의 기본 형식이 사용됩니다. 실제 형식은 type 특성에 의해 지정됩니다. 유효한 값 목록은 13.2절. “스토리지 풀 사용” 의 특정 스토리지 풀 섹션을 참조하십시오. |
<권한> | 스토리지 볼륨을 생성할 때 사용할 기본 권한에 대한 정보를 제공합니다. 현재는 할당된 스토리지 볼륨이 간단한 파일인 디렉터리 또는 파일 시스템 기반 스토리지 풀에만 유용합니다. 스토리지 볼륨이 장치 노드인 스토리지 풀의 경우 핫플러그 스크립트에서 권한을 결정합니다. 여기에는 4 개의 자식 요소가 있습니다. <mode> 요소에는 8진수 권한 세트가 포함되어 있습니다. <owner> 요소에는 숫자 사용자 ID가 포함됩니다. <group> 요소에는 숫자 그룹 ID가 포함되어 있습니다. <레이블> 요소에는 MAC(예: SELinux) 레이블 문자열이 포함되어 있습니다. |
<compat> | 호환성 수준을 지정합니다. 지금까지 <type='qcow2> 의 볼륨에만 사용됩니다. 유효한 값은 qcow2(버전 2)용</ 0.10 <compat> 이고 qcow2(버전 3)에 대한</compat> 1.1 compat입니다. 지금까지는 이미지와 호환되어야 하는 QEMU 버전을 지정하는 데 사용됩니다. <기능> 요소가 있는 경우 <compat> 1.1</compat> 이 사용됩니다. 생략하면 qemu-img 기본값이 사용됩니다. |
<기능> | 형식별 기능. 현재 <type='qcow2'/(버전 3) 형식> 에서만 사용됩니다. 유효한 하위 요소에는 <lazy_refcounts/> 가 포함됩니다. 이렇게 하면 메타데이터 쓰기 및 플러시 횟수가 줄어들어 초기 쓰기 성능이 향상됩니다. 이러한 개선 사항은 특히 충돌 후 이미지를 복구해야 하는 대신 쓰기 캐시 모드의 경우 볼 수 있으며 참조 업데이트가 지연될 수 있습니다. qcow2(버전 3)와 함께 이 기능을 구현하는 것이 더 빠르기 때문에 이 기능을 사용하는 것이 좋습니다. |
23.19.3. 백업 저장소 element 설정
<백업Store>
요소는 최상위 <볼륨>
요소에 포함되어 있습니다. 이 태그는 스토리지 볼륨의 선택적 copy-on-write 백업 저장소를 설명하는 데 사용됩니다. 여기에는 다음 하위 요소가 포함될 수 있습니다.
그림 23.85. 백업 저장소 하위 요소
<backingStore> <path>/var/lib/libvirt/images/master.img</path> <format type='raw'/> <permissions> <owner>107</owner> <group>107</group> <mode>0744</mode> <label>virt_image_t</label> </permissions> </backingStore>
표 23.32. 백업 저장소 하위 요소
element | 설명 |
---|---|
<path> | 절대 경로로 로컬 파일 시스템에서 백업 저장소에 액세스할 수 있는 위치를 제공합니다. 생략하면 이 스토리지 볼륨의 백업 저장소가 없습니다. |
<형식> | 풀별 백업 저장소 형식에 대한 정보를 제공합니다. 디스크 기반 스토리지 풀의 경우 파티션 유형을 제공합니다. 파일 시스템 또는 디렉터리 기반 스토리지 풀의 경우 파일 형식 유형(예: 소포, qcow, vmdk, raw)을 제공합니다. 실제 형식은 <type> 특성을 통해 지정됩니다. 유효한 값 목록은 풀별 문서를 참조하십시오. 대부분의 파일 형식에는 동일한 형식의 백업 저장소가 필요하지만 qcow2 형식은 다른 백업 저장소 형식을 사용할 수 있습니다. |
<권한> | 백업 파일의 권한에 대한 정보를 제공합니다. 여기에는 4 개의 자식 요소가 있습니다. <owner> 요소에는 숫자 사용자 ID가 포함됩니다. <group> 요소에는 숫자 그룹 ID가 포함되어 있습니다. <레이블> 요소에는 MAC(예: SELinux) 레이블 문자열이 포함되어 있습니다. |
23.20. 보안 레이블
<seclabel>
요소를 사용하면 보안 드라이버의 작동을 제어할 수 있습니다. 작업 기본 모드는 'dynamic'
이며, libvirt가 고유한 보안 레이블을 자동으로 생성하는 'static'
, 애플리케이션/관리자가 레이블을 선택하는 '정규(static)' 또는 confinement가 비활성화된 'none'
이 있습니다. libvirt는 동적 레이블 생성을 통해 항상 가상 머신과 관련된 모든 리소스의 레이블을 자동으로 다시 지정합니다. 정적 레이블 할당을 사용하면 기본적으로 관리자 또는 애플리케이션에서 라벨이 모든 리소스에서 올바르게 설정되어 있는지 확인해야 하지만 필요한 경우 자동 레이블 재지정을 활성화할 수 있습니다.
모델을
사용하여 정의할 수 있습니다. 최상위 보안 레이블에 유효한 입력 XML 구성은 다음과 같습니다.
그림 23.86. 보안 레이블
<seclabel type='dynamic' model='selinux'/> <seclabel type='dynamic' model='selinux'> <baselabel>system_u:system_r:my_svirt_t:s0</baselabel> </seclabel> <seclabel type='static' model='selinux' relabel='no'> <label>system_u:system_r:svirt_t:s0:c392,c662</label> </seclabel> <seclabel type='static' model='selinux' relabel='yes'> <label>system_u:system_r:svirt_t:s0:c392,c662</label> </seclabel> <seclabel type='none'/>
'type'
특성이 제공되지 않으면 'none'
또는 'dynamic'
일 수 있는 보안 드라이버 기본 설정이 사용됩니다. <baselabel>
이 설정되었지만 'type'
이 설정되어 있지 않으면 유형이 '동적화'인 것으로 간주됩니다
. 자동 리소스 레이블을 다시 지정하여 실행 중인 게스트 가상 머신의 XML을 볼 때 추가 XML 요소인 imagelabel
이 포함됩니다. 이는 출력 전용 요소이므로 사용자가 제공한 XML 문서에서 무시됩니다.
유형
-정적
, 동적
또는 libvirt가 고유한 보안 레이블을 자동으로 생성하는지 여부를 확인할 수 없습니다.모델
- 현재 활성화된 보안 모델과 일치하는 유효한 보안 모델 이름입니다.레이블 재지정
-예 또는
. 동적 레이블 할당이 사용되는 경우 항상아니오
yes
여야 합니다. 정적 레이블 할당을 사용하면 기본적으로no
가 설정됩니다.<레이블>
- 정적 레이블링이 사용되는 경우 가상 도메인에 할당할 전체 보안 레이블을 지정해야 합니다. 콘텐츠 형식은 사용 중인 보안 드라이버에 따라 다릅니다.selinux
: SELinux 컨텍스트.AppArmor
: AppArmor 프로필입니다.DAC
: 콜론으로 구분된 소유자 및 그룹. 사용자/그룹 이름 또는 UID/GID로 둘 다 정의할 수 있습니다. 드라이버는 먼저 이러한 값을 이름으로 구문 분석하려고 하지만 선행 더하기 기호는 드라이버에서 UID 또는 GID로 구문 분석하도록 강제할 수 있습니다.
<baselabel>
- 동적 레이블이 사용되는 경우 선택적으로 기본 보안 레이블을 지정하는 데 사용할 수 있습니다. 콘텐츠 형식은 사용 중인 보안 드라이버에 따라 다릅니다.<imagelabel>
- 출력 전용 요소이며 가상 도메인과 연결된 리소스에 사용되는 보안 레이블을 표시합니다. 콘텐츠 형식은 사용 중인 보안 드라이버에 따라 다릅니다. 레이블 재지정이 적용되는 경우 레이블을 비활성화하여 특정 소스 파일 이름에 대해 수행되는 레이블을 미세 조정할 수도 있습니다(보안 레이블이 없는 파일이 NFS 또는 기타 파일 시스템에 존재하는 경우 유용함) 관리 애플리케이션에서 특정 도메인 간 공유를 허용하기 위해 특수 레이블을 생성할 때 사용할 수도 있습니다. 보안 주체가 최상위 도메인 할당이 아닌 특정 경로에 연결된 경우 특성 레이블 레이블 또는 하위 요소 레이블만 지원됩니다.
23.21. 샘플 가상 머신 XML 구성
표 23.33. 샘플 도메인 XML 구성
도메인 XML 섹션 | 설명 |
---|---|
<domain type='kvm'> <name>Testguest1</name> <uuid>ec6fbaa1-3eb4-49da-bf61-bb02fbec4967</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>1</vcpu> | 이 KVM은 1024MiB 할당된 RAM이 있는 Testguest1이라는 KVM입니다. 일반 VM 매개변수 구성에 대한 자세한 내용은 23.1절. “일반 정보 및 메타데이터” 을 참조하십시오. |
<vcpu placement='static'>1</vcpu> | 게스트 VM에는 1개의 vCPU가 할당되어 있습니다. CPU 할당에 대한 자세한 내용은 23.4절. “CPU 할당” 을 참조하십시오. |
<os> <type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type> <boot dev='hd'/> </os> | 머신 아키텍처는 AMD64 및 Intel 64 아키텍처로 설정되며 Intel 440NetworkPolicy 머신 유형을 사용하여 기능 호환성을 결정합니다. OS는 하드 드라이브에서 부팅됩니다. OS 매개변수 수정에 대한 자세한 내용은 23.2절. “운영 체제 부팅” 을 참조하십시오. |
<features> <acpi/> <apic/> <vmport state='off'/> </features> | 하이퍼바이저 기능 acpi 및 apic 는 비활성화되어 VMWare IO 포트가 해제되었습니다. Hypervisor 기능 수정에 대한 자세한 내용은 -23.14절. “하이퍼바이저 기능” 를 참조하십시오. |
<cpu mode='host-passthrough' check='none'/> | 게스트 CPU 기능은 호스트 CPU의 기능과 동일하게 설정되어 있습니다. CPU 기능 수정에 대한 자세한 내용은 -23.12절. “CPU 모델 및 토폴로지” 을 참조하십시오. |
<clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> | 게스트의 가상 하드웨어 시계는 UTC 시간대를 사용합니다. 또한 QEMU 하이퍼바이저와 동기화되도록 3개의 다른 타이머가 설정됩니다. 시간 유지 설정에 대한 자세한 내용은 -23.15절. “Timekeeping” 을 참조하십시오. |
<on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> | VM의 전원을 끄거나 OS가 예기치 않게 종료되면 libvirt는 게스트를 종료하고 할당된 모든 리소스를 해제합니다. 게스트가 재부팅되면 동일한 구성으로 다시 시작됩니다. 이러한 설정 구성에 대한 자세한 내용은 -23.13절. “이벤트 구성” 을 참조하십시오. |
<pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> | 이 게스트 VM의 S3 및 S4 ACPI 절전 상태는 비활성화됩니다. "/>. |
<devices> <emulator>/usr/bin/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/Testguest.qcow2'/> <target dev='hda' bus='ide'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='hdb' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='1'/> </disk> | VM은 에뮬레이션에 /usr/bin/qemu-kvm 바이너리 파일을 사용합니다. 또한 두 개의 디스크가 연결되어 있습니다. 첫 번째 디스크는 호스트에 저장된 /var/lib/libvirt/images/Testguest.qcow2 를 기반으로 하는 가상화된 하드 드라이브이며 논리 장치 이름은 hda 로 설정됩니다. 디스크 관리에 대한 자세한 내용은 -23.17.1절. “하드 드라이브, Floppy 디스크 및 CD-ROM” 을 참조하십시오. |
<controller type='usb' index='0' model='ich9-ehci1'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'/> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </controller> | VM은 USB 장치를 연결하는 데 네 개의 컨트롤러를 사용하고 PCI(PCIe) 장치에 root 컨트롤러를 사용합니다. 또한 virtio-serial 컨트롤러를 사용하면 VM이 직렬 콘솔과 같은 다양한 방식으로 호스트와 상호 작용할 수 있습니다. 컨트롤러 구성에 대한 자세한 내용은 -23.17.3절. “컨트롤러” 을 참조하십시오. |
<interface type='network'> <mac address='52:54:00:65:29:21'/> <source network='default'/> <model type='rtl8139'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> | 네트워크 인터페이스는 기본 가상 네트워크와 rtl8139 네트워크 장치 모델을 사용하는 VM에 설정됩니다. 네트워크 인터페이스 구성에 대한 자세한 내용은 -23.17.8절. “네트워크 인터페이스” 을 참조하십시오. |
<serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> | 호스트와의 가장 기본적인 VM 통신을 가능하게 하는 VM에 pty 직렬 콘솔이 설정됩니다. 콘솔은 반가상화 SPICE 채널을 사용합니다. 이 설정은 자동으로 설정되어 있으며 이러한 설정을 변경하는 것은 권장되지 않습니다. 문자 장치에 대한 개요는 -23.17.8절. “네트워크 인터페이스” 를 참조하십시오. 직렬 포트 및 콘솔에 대한 자세한 내용은 23.17.14절. “게스트 가상 머신 인터페이스” 을 참조하십시오. 채널에 대한 자세한 내용은 23.17.15절. “채널” 을 참조하십시오. |
<input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> | VM은 마우스 및 키보드 입력을 수신하도록 설정된 가상 ps2 포트를 사용합니다. 이 설정은 자동으로 설정되어 있으며 이러한 설정을 변경하는 것은 권장되지 않습니다. 자세한 내용은 23.17.9절. “입력 장치”의 내용을 참조하십시오. |
<graphics type='spice' autoport='yes'> <listen type='address'/> <image compression='off'/> </graphics> | VM은 자동 할당된 포트 번호 및 이미지 압축을 해제하여 그래픽 출력을 렌더링하는 데 SPICE 프로토콜을 사용합니다. 그래픽 장치 구성에 대한 자세한 내용은 23.17.11절. “그래픽 프레임 버퍼” 을 참조하십시오. |
<sound model='ich6'> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </sound> <video> <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> | ICH6 HDA 음향 장치는 VM용으로 설정되고 QEMU QXL 반가상화 프레임buffer 장치가 비디오 가속기로 설정됩니다. 이 설정은 자동으로 설정되어 있으며 이러한 설정을 변경하는 것은 권장되지 않습니다. 건전한 장치 구성에 대한 자세한 내용은 23.17.17절. “건전한 장치” 을 참조하십시오. 비디오 장치 구성은 23.17.12절. “동영상 장치” 에서 참조하십시오. |
<redirdev bus='usb' type='spicevmc'> <address type='usb' bus='0' port='1'/> </redirdev> <redirdev bus='usb' type='spicevmc'> <address type='usb' bus='0' port='2'/> </redirdev> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </memballoon> </devices> </domain> | VM에는 USB 장치를 원격으로 연결하기 위한 리디렉션기 두 개가 있으며 메모리 증대 가 켜집니다. 이 설정은 자동으로 설정되어 있으며 이러한 설정을 변경하는 것은 권장되지 않습니다. 자세한 내용은 다음을 참조하십시오. 23.17.6절. “리디렉션 장치” |
III 부. 부록
부록 A. 문제 해결
A.1. 디버깅 및 문제 해결 툴
- kvm_stat - KVM 런타임 통계를 검색합니다. 자세한 내용은 A.4절. “kvm_stat”의 내용을 참조하십시오.
- ftrace - 커널 이벤트를 추적합니다. 자세한 내용은 What is ftrace and how do I use it? solution article (subscription required) 을 참조하십시오.
- vmstat - 가상 메모리 통계를 표시합니다. 자세한 내용은 man vmstat 명령을 사용합니다.
- iostat - I/O 로드 통계를 제공합니다. 자세한 내용은 Red Hat Enterprise Linux 성능 튜닝 가이드를 참조하십시오.
- lsof - 열려 있는 파일 목록입니다. 자세한 내용은 man lsof 명령을 사용합니다.
- SystemTap - 운영 체제를 모니터링하기 위한 스크립팅 유틸리티입니다. 자세한 내용은 Red Hat Enterprise Linux 개발자 가이드 를 참조하십시오.
- 크래시 - 커널 크래시 덤프 데이터 또는 라이브 시스템을 분석합니다. 자세한 내용은 Red Hat Enterprise Linux Kernel Crash Dump Guide 를 참조하십시오.
- SysR q - 콘솔이 응답하지 않는 경우에도 커널이 응답하는 키 조합입니다. 자세한 내용은 Red Hat 지식 베이스 를 참조하십시오.
- IP addr,ip route, ip monitor
- tcpdump - 네트워크에서 패킷 트래픽을 진단합니다. 이 명령은 네트워크 비정상적인 상태 및 네트워크 인증 문제를 찾는 데 유용합니다. tcpdump 라는 이름의 그래픽 버전이 있습니다.
- brctl - Linux 커널에서 이더넷 브리지 구성을 검사하고 구성하는 네트워킹 유틸리티입니다. 예를 들면 다음과 같습니다.
$ brctl show bridge-name bridge-id STP enabled interfaces ----------------------------------------------------------------------------- virtbr0 8000.feffffff yes eth0 $ brctl showmacs virtbr0 port-no mac-addr local? aging timer 1 fe:ff:ff:ff:ff: yes 0.00 2 fe:ff:ff:fe:ff: yes 0.00 $ brctl showstp virtbr0 virtbr0 bridge-id 8000.fefffffffff designated-root 8000.fefffffffff root-port 0 path-cost 0 max-age 20.00 bridge-max-age 20.00 hello-time 2.00 bridge-hello-time 2.00 forward-delay 0.00 bridge-forward-delay 0.00 aging-time 300.01 hello-timer 1.43 tcn-timer 0.00 topology-change-timer 0.00 gc-timer 0.02
- strace 는 다른 프로세스에서 수신하고 사용하는 시스템 호출 및 이벤트를 추적하는 명령입니다.
- vncviewer 는 서버 또는 가상 시스템에서 실행 중인 VNC 서버에 연결합니다. yum install tigervnc 명령을 사용하여 vncviewer 를 설치합니다.
- vncserver 는 서버에서 원격 데스크탑을 시작합니다. 원격 세션을 사용하여 virt-manager와 같은 그래픽 사용자 인터페이스를 실행할 수 있는 기능을 제공합니다. yum install tigervnc-server 명령을 사용하여 vncserver 를 설치합니다.
A.2. 덤프 파일 생성
<features>
섹션에 <vmcoreinfo/>
요소를 추가합니다.
<vmcoreinfo/>
를 지원하지 않는 OS를 사용하는 경우 <vmcoreinfo/>
를 사용하여 게스트 마이그레이션 은 실패합니다. 여기에는 Red Hat Enterprise Linux 7.4 및 Red Hat Enterprise Linux 6.9 및 이전 버전이 포함됩니다.
A.2.1. virsh Dump 파일 생성
A.2.2. Python 스크립트를 사용하여 코어 덤프 저장
dump-guest-memory.py
python 스크립트는 qemu-kvm 프로세스가 호스트에 충돌한 후 코어 덤프에서 게스트 가상 머신의 메모리를 추출 및 저장하는 GDB(GNU Debugger) 확장을 구현합니다. 호스트 측 QEMU 프로세스 충돌이 게스트 작업과 관련된 경우 QEMU 프로세스 충돌 시 게스트 상태를 조사하는 것이 유용할 수 있습니다.
dump-guest-memory.py
python 스크립트를 사용하려면 다음을 수행합니다.
- 시스템에 qemu-kvm-debuginfo 패키지를 설치합니다.
- GDB를 시작하여 크래시된
/usr/libexec/qemu-kvm
바이너리에 대해 저장된 코어 덤프 파일을 엽니다. 디버그 기호가 자동으로 로드됩니다. - GDB에서 새 명령을 로드합니다.
# source /usr/share/qemu-kvm/dump-guest-memory.py
참고python 스크립트를 로드한 후 built-in GDB help 명령은dump-guest-memory
확장에 대한 자세한 정보를 제공할 수 있습니다. - GDB에서 명령을 실행합니다. 예를 들면 다음과 같습니다.
# dump-guest-memory /home/user/extracted-vmcore X86_64
- 게스트 커널 분석을 위한 크래시 유틸리티를 사용하여
/home/user/extracted-vmcore
를 엽니다.
A.3. Systemtap Flight Recorder를 사용하여 Constant Basis에서 추적 데이터 캡처
절차 A.1. systemtap 구성 및 실행
패키지를 설치합니다.
다음 명령을 실행하여 systemtap-initscript 패키지를 설치합니다.# yum install systemtap-initscript
구성 파일 복사
다음 명령을 실행하여 systemtap 스크립트 및 구성 파일을 systemtap 디렉터리에 복사합니다.# cp /usr/share/qemu-kvm/systemtap/script.d/qemu_kvm.stp /etc/systemtap/script.d/ # cp /usr/share/qemu-kvm/systemtap/conf.d/qemu_kvm.conf /etc/systemtap/conf.d/
활성화할 추적 이벤트 세트는 qemu_kvm.stp에 제공됩니다. 이 SystemTap 스크립트는/usr/share/systemtap/tapset/qemu-kvm-simpletrace.stp
에 제공된 추적 이벤트를 추가 또는 제거하도록 사용자 지정할 수 있습니다.qemu_kvm.conf
에서 flight recorder 버퍼 크기 및 메모리에 추적 저장 여부를 제어하도록 qemu_kvm.conf를 만들 수 있습니다.서비스 시작
다음 명령을 실행하여 systemtap 서비스를 시작합니다.# systemctl start systemtap qemu_kvm
부팅 시 systemtap을 사용하도록 설정
다음 명령을 실행하여 부팅 시 systemtap 서비스가 실행되도록 활성화합니다.# systemctl enable systemtap qemu_kvm
서비스가 실행 중인지 확인
다음 명령을 실행하여 서비스가 작동하는지 확인합니다.# systemctl status systemtap qemu_kvm qemu_kvm is running...
절차 A.2. 추적 버퍼 검사
추적 버퍼 덤프 파일 생성
trace.log라는 추적 버퍼 덤프 파일을 생성하고 다음 명령을 실행하여 tmp 디렉터리에 배치합니다.# staprun -A qemu_kvm >/tmp/trace.log
파일 이름과 위치를 다른 이름으로 변경할 수 있습니다.서비스 시작
이전 단계에서 서비스를 중지하면 다음 명령을 실행하여 서비스를 다시 시작합니다.# systemctl start systemtap qemu_kvm
추적 내용을 읽을 수 있는 형식으로 변환
추적 파일 내용을 보다 읽기 쉬운 형식으로 변환하려면 다음 명령을 입력합니다.# /usr/share/qemu-kvm/simpletrace.py --no-header /usr/share/qemu-kvm/trace-events /tmp/trace.log
- systemtap 서비스는 기본적으로 비활성화되어 있습니다.
- 이 서비스를 활성화하면 작은 성능 저하가 있지만 총 사용 가능한 이벤트에 따라 달라집니다.
/usr/share/doc/qemu-kvm-*/README.systemtap
에 README 파일이 있습니다.
A.4. kvm_stat
kvm
커널 모듈에서 런타임 통계를 검색하는 python 스크립트입니다. kvm_stat 명령을 사용하여 kvm
에 표시되는 게스트 동작을 진단할 수 있습니다. 특히 게스트와 관련된 성능 관련 문제가 있습니다. 현재 보고된 통계는 전체 시스템에 적용됩니다. 실행 중인 모든 게스트의 동작이 보고됩니다. 이 스크립트를 실행하려면 qemu-kvm-tools 패키지를 설치해야 합니다. 자세한 내용은 2.2절. “기존 Red Hat Enterprise Linux 시스템에 가상화 패키지 설치”의 내용을 참조하십시오.
kvm
커널 모듈이 로드되고 debugfs 가 마운트됩니다. 이러한 기능 중 하나가 활성화되지 않은 경우 명령은 debugfs 또는 kvm
모듈을 활성화하는 데 필요한 단계를 출력합니다. 예를 들면 다음과 같습니다.
# kvm_stat
Please mount debugfs ('mount -t debugfs debugfs /sys/kernel/debug')
and ensure the kvm modules are loaded
# mount -t debugfs debugfs /sys/kernel/debug
kvm_stat Output
kvm_stat 명령은 모든 게스트 및 호스트에 대한 통계를 출력합니다. Ctrl+c 또는 q 키를 사용하여 명령이 종료될 때까지 출력이 업데이트됩니다. 화면에 표시되는 출력은 다를 수 있습니다. 출력 요소에 대한 설명을 보려면 용어 중 하나를 클릭하여 조각 모음에 연결합니다.
# kvm_stat kvm statistics kvm_exit 17724 66 Individual exit reasons follow, see kvm_exit (NAME) for more information. kvm_exit(CLGI) 0 0 kvm_exit(CPUID) 0 0 kvm_exit(CR0_SEL_WRITE) 0 0 kvm_exit(EXCP_BASE) 0 0 kvm_exit(FERR_FREEZE) 0 0 kvm_exit(GDTR_READ) 0 0 kvm_exit(GDTR_WRITE) 0 0 kvm_exit(HLT) 11 11 kvm_exit(ICEBP) 0 0 kvm_exit(IDTR_READ) 0 0 kvm_exit(IDTR_WRITE) 0 0 kvm_exit(INIT) 0 0 kvm_exit(INTR) 0 0 kvm_exit(INVD) 0 0 kvm_exit(INVLPG) 0 0 kvm_exit(INVLPGA) 0 0 kvm_exit(IOIO) 0 0 kvm_exit(IRET) 0 0 kvm_exit(LDTR_READ) 0 0 kvm_exit(LDTR_WRITE) 0 0 kvm_exit(MONITOR) 0 0 kvm_exit(MSR) 40 40 kvm_exit(MWAIT) 0 0 kvm_exit(MWAIT_COND) 0 0 kvm_exit(NMI) 0 0 kvm_exit(NPF) 0 0 kvm_exit(PAUSE) 0 0 kvm_exit(POPF) 0 0 kvm_exit(PUSHF) 0 0 kvm_exit(RDPMC) 0 0 kvm_exit(RDTSC) 0 0 kvm_exit(RDTSCP) 0 0 kvm_exit(READ_CR0) 0 0 kvm_exit(READ_CR3) 0 0 kvm_exit(READ_CR4) 0 0 kvm_exit(READ_CR8) 0 0 kvm_exit(READ_DR0) 0 0 kvm_exit(READ_DR1) 0 0 kvm_exit(READ_DR2) 0 0 kvm_exit(READ_DR3) 0 0 kvm_exit(READ_DR4) 0 0 kvm_exit(READ_DR5) 0 0 kvm_exit(READ_DR6) 0 0 kvm_exit(READ_DR7) 0 0 kvm_exit(RSM) 0 0 kvm_exit(SHUTDOWN) 0 0 kvm_exit(SKINIT) 0 0 kvm_exit(SMI) 0 0 kvm_exit(STGI) 0 0 kvm_exit(SWINT) 0 0 kvm_exit(TASK_SWITCH) 0 0 kvm_exit(TR_READ) 0 0 kvm_exit(TR_WRITE) 0 0 kvm_exit(VINTR) 1 1 kvm_exit(VMLOAD) 0 0 kvm_exit(VMMCALL) 0 0 kvm_exit(VMRUN) 0 0 kvm_exit(VMSAVE) 0 0 kvm_exit(WBINVD) 0 0 kvm_exit(WRITE_CR0) 2 2 kvm_exit(WRITE_CR3) 0 0 kvm_exit(WRITE_CR4) 0 0 kvm_exit(WRITE_CR8) 0 0 kvm_exit(WRITE_DR0) 0 0 kvm_exit(WRITE_DR1) 0 0 kvm_exit(WRITE_DR2) 0 0 kvm_exit(WRITE_DR3) 0 0 kvm_exit(WRITE_DR4) 0 0 kvm_exit(WRITE_DR5) 0 0 kvm_exit(WRITE_DR6) 0 0 kvm_exit(WRITE_DR7) 0 0 kvm_entry 17724 66 kvm_apic 13935 51 kvm_emulate_insn 13924 51 kvm_mmio 13897 50 varl-kvm_eoi 3222 12 kvm_inj_virq 3222 12 kvm_apic_accept_irq 3222 12 kvm_pv_eoi 3184 12 kvm_fpu 376 2 kvm_cr 177 1 kvm_apic_ipi 278 1 kvm_msi_set_irq 295 0 kvm_pio 79 0 kvm_userspace_exit 52 0 kvm_set_irq 50 0 kvm_pic_set_irq 50 0 kvm_ioapic_set_irq 50 0 kvm_ack_irq 25 0 kvm_cpuid 90 0 kvm_msr 12 0
변수에 대한 설명:
kvm_ack_irq
- 인터럽트 컨트롤러 (PIC/IOAPIC) 인터럽트 승인 수kvm_age_page
- 메모리 관리 장치(MMU) 알림에 의한 페이지 사용 기간 반복 수입니다.kvm_apic
- APIC 레지스터 액세스 수입니다.kvm_apic_accept_irq
- 로컬 APIC에 허용되는 인터럽트 수입니다.kvm_apic_ipi
- 프로세서 인터럽트 수입니다.kvm_async_pf_completed
- 비동기 페이지 폴트 수입니다.kvm_async_pf_doublefault
- 비동기 페이지 폴트 수가 중단됩니다.kvm_async_pf_not_present
- 비동기 페이지 폴트의 초기화 횟수입니다.kvm_async_pf_ready
- 비동기 페이지 폴트 수입니다.kvm_cpuid
- 실행되는 CPUID 명령 수입니다.kvm_cr
- 묶기 및 에뮬레이션된 컨트롤 레지스터(CR) 액세스 수(CR0, CR3, CR4, CR8)kvm_emulate_insn
- 에뮬레이션된 명령 수입니다.kvm_entry
- 에뮬레이션된 명령 수입니다.kvm_eoi
- EOI(Advanced Programmable Interrupt Controller) 알림 종료입니다.kvm_exit
-VM-exits
수입니다.kvm_exit(NAME)
- 프로세서에 고유한 개별 종료입니다. 자세한 내용은 프로세서의 설명서를 참조하십시오.kvm_fpu
- KVM 부동 소수점 단위(FPU) 수를 다시 로드합니다.kvm_hv_hypercall
- 하이퍼 V 하이퍼 호출 수입니다.kvm_hypercall
- Hyper-V 하이퍼 호출 수입니다.kvm_inj_exception
- 게스트에 삽입된 예외 수입니다.kvm_inj_virq
- 게스트에 삽입된 인터럽트 수입니다.kvm_invlpga
- INVLPGA 명령의 수가 차단되었습니다.kvm_ioapic_set_irq
- 인터럽트 수준 수가 가상 IOAPIC 컨트롤러에 변경됨kvm_mmio
- 에뮬레이션된 메모리 매핑된 I/O(MMIO) 작업 수입니다.kvm_msi_set_irq
- MSI(메시지 서명 인터럽트) 수입니다.kvm_msr
- 모델별 레지스터(MSR) 액세스 수입니다.kvm_nested_intercepts
- L1의 L1 중첩된 SVM 스위치 수입니다.kvm_nested_vmrun
- L1의 중첩된 SVM 스위치 수입니다.kvm_nested_intr_vmexit
- 인터럽트 윈도우로 인해 중첩된 VM-exit 삽입 수입니다.kvm_nested_vmexit
- 중첩(L2) 게스트를 실행하는 동안 하이퍼바이저로 종료됩니다.kvm_nested_vmexit_inject
- L2의 L1 중첩된 스위치 수.kvm_page_fault
- 하이퍼바이저에서 처리하는 페이지 폴트 수입니다.kvm_pic_set_irq
- 인터럽트 수준 수가 가상 프로그래밍 가능 인터럽트 컨트롤러(PIC)로 변경됩니다.kvm_pio
- 에뮬레이션된 I/O(PIO) 작업 수입니다.kvm_pv_eoi
- EOI(Input of input) 이벤트 수입니다.kvm_set_irq
- 일반 IRQ 컨트롤러 레벨 (국가 PIC, IOAPIC 및 rootfs)의 인터럽트 수준 변경 수입니다.kvm_skinit
- SVM SKINIT이 종료됩니다.kvm_track_tsc
- 타임스탬프 카운터(TSC) 쓰기 수입니다.kvm_try_async_get_page
- 비동기 페이지 폴트 횟수입니다.kvm_update_master_clock
- pvclock 업데이트 번호입니다.kvm_userspace_exit
- 사용자 공간에 대한 종료 횟수입니다.kvm_write_tsc_offset
- TSC 오프셋 쓰기 수입니다.vcpu_match_mmio
- 캐시된 SPTE 메모리 매핑 I/O (MMIO)가 충돌했습니다.
/sys/kernel/debug/tracing/events/kvm/
디렉터리에 있는 의사 파일로 내보냅니다.
A.5. 직렬 콘솔 문제 해결
- 게스트의 도메인 XML 파일에 직렬 콘솔의 구성이 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.
<console type='pty'> <source path='/dev/pts/16'/> <target type='virtio' port='1'/> <alias name='console1'/> </console>
- 게스트에서 Red Hat 지식베이스에 대한 직렬 콘솔을 활성화하려면 How can I enable serial console for Red Hat Enterprise Linux 7? 문서를 참조하십시오.
# virsh console guestname
A.6. 가상화 로그
- 각 게스트에는
/var/log/libvirt/qemu/
디렉터리에 저장된 로그가 있습니다. 로그의 이름은 GuestName.log이며 크기 제한에 도달하면 주기적으로 압축됩니다. - auvirt 명령은 하이퍼바이저의 게스트와 관련된 감사 결과를 표시합니다. 표시된 데이터는 특정 게스트, 시간 프레임 및 정보 형식을 선택하여 좁힐 수 있습니다. 예를 들어 다음 명령은 현재 날짜의
testguest
가상 시스템에 대한 이벤트 요약을 제공합니다.# auvirt --start today --vm testguest --summary Range of time for report: Mon Sep 4 16:44 - Mon Sep 4 17:04 Number of guest starts: 2 Number of guest stops: 1 Number of resource assignments: 14 Number of related AVCs: 0 Number of related anomalies: 0 Number of host shutdowns: 0 Number of failed operations: 0
systemd
journal에 auvirt 정보가 자동으로 포함되도록 구성할 수도 있습니다. 이를 위해/etc/libvirt/libvirtd.conf
파일을 편집하고audit_logging
매개 변수 값을1
로 설정합니다.자세한 내용은 auvirt 매뉴얼 페이지를 참조하십시오. - Virtual Machine Manager에 오류가 발생하면
$HOME/.virt-manager/
디렉토리의virt-manager.log
파일에서 생성된 데이터를 검토할 수 있습니다. - 하이퍼바이저 시스템의 감사 로그는
/var/log/audit/audit.log
파일을 참조하십시오. - 게스트 운영 체제에 따라 다양한 시스템 로그 파일도 게스트에 저장될 수 있습니다.
A.7. 루프 장치 오류
/etc/modprobe.d/
디렉토리에서 구성된 루프 장치 수를 조정할 수 있습니다. 다음 행을 추가합니다.
options loop max_loop=64
A.8. 실시간 마이그레이션 오류
A.9. BIOS에서 Intel VT-x 및 AMD-V 가상화 하드웨어 확장 활성화
절차 A.3. BIOS에서 가상화 확장 활성화
- 컴퓨터를 재부팅하고 시스템의 BIOS 메뉴를 엽니다. 일반적으로 시스템에 따라 삭제 키, F1 키 또는 Alt 및 F4 키를 눌러 수행할 수 있습니다.
BIOS에서 가상화 확장 활성화
참고아래의 많은 단계는 마더보드, 프로세서 유형, 칩셋 및 OEM에 따라 달라질 수 있습니다. 시스템 구성에 대한 올바른 정보는 시스템 관련 문서를 참조하십시오.- Processor 하위 메뉴에서 프로세서 설정 메뉴가 Chipset,Advanced CPU Configuration 또는 Northbridge 에서 숨겨질 수 있습니다.
- Intel Virtualization Technology (Intel VT-x라고도 함)를 활성화합니다. AMD-V 확장은 BIOS에서 비활성화할 수 없으며 이미 활성화되어 있어야 합니다. 가상화 확장 기능은 OEM 및 시스템 BIOS에 따라 가상화 확장 기능,Vanderpool 또는 기타 다양한 이름으로 레이블이 지정될 수 있습니다.
- 옵션을 사용할 수 있는 경우 Intel VT-d 또는 AMD IOMMU를 활성화합니다. Intel VT-d 및 AMD IOMMU는 PCI 장치 할당에 사용됩니다.
- 저장 및 종료를 선택합니다.
- 시스템을 재부팅합니다.
- 머신이 부팅되면 grep -E "vmx|svm" /proc/cpuinfo 를 실행합니다.
--color
를 지정하는 것은 선택 사항이지만 검색어가 강조 표시된 경우 유용합니다. 명령이 출력되면 가상화 확장이 활성화됩니다. 출력이 없는 경우 시스템에 가상화 확장 기능이 없거나 올바른 BIOS 설정이 활성화되어 있지 않을 수 있습니다.
A.10. Red Hat Enterprise Linux 7 호스트에서 Red Hat Enterprise Linux 6 게스트 종료
Minimal 설치
옵션을 사용하여 Red Hat Enterprise Linux 6 게스트 가상 머신을 설치해도 acpid (acpi 데몬)를 설치하지 않습니다. Red Hat Enterprise Linux 7은 systemd
에서 인수했기 때문에 이 패키지가 더 이상 필요하지 않습니다. 그러나 Red Hat Enterprise Linux 7 호스트에서 실행되는 Red Hat Enterprise Linux 6 게스트 가상 머신에는 여전히 필요합니다.
절차 A.4. Red Hat Enterprise Linux 6 게스트의 해결방법
acpid 패키지 설치
acpid 서비스는 ACPI 요청을 수신하고 처리합니다.게스트 가상 머신에 로그인하고 게스트 가상 머신에 acpid 패키지를 설치합니다.# yum install acpid
게스트에서 acpid 서비스 활성화
게스트 가상 머신 부팅 시퀀스 중에acpid
서비스가 시작되도록 설정하고 서비스를 시작합니다.# chkconfig acpid on # service acpid start
게스트 도메인 XML 준비
다음 요소를 포함하도록 도메인 XML 파일을 편집합니다. virtio 직렬 포트를org.qemu.guest_agent.0
으로 바꾸고 표시된 포트 대신 게스트 이름을 사용합니다. 이 예에서 게스트는 guest1입니다. 파일을 저장해야 합니다.그림 A.1. 게스트 XML 교체
<channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/guest1.agent'/> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel>
QEMU 게스트 에이전트 설치
QEMU 게스트 에이전트(QEMU-GA)를 설치하고 Red Hat Enterprise Linux 6 Virtualization 관리 가이드에서 지시된 대로 서비스를 시작합니다.게스트 종료
- 종료하려는 게스트 가상 시스템의 이름을 검색할 수 있도록 알려진 게스트 가상 시스템을 나열합니다.
# virsh list --all Id Name State ---------------------------------- 14 guest1 running
- 게스트 가상 머신을 종료합니다.
# virsh shutdown guest1 guest virtual machine guest1 is being shutdown
- 게스트 가상 머신이 종료될 때까지 몇 초 정도 기다립니다. 서비스가 종료되었는지 확인합니다.
# virsh list --all Id Name State ---------------------------------- 14 guest1 shut off
- 편집한 XML 파일을 사용하여 guest1 이라는 게스트 가상 머신을 시작합니다.
# virsh start guest1
- guest1 게스트 가상 머신에서 acpi를 종료합니다.
# virsh shutdown --mode acpi guest1
- 모든 게스트 가상 머신을 다시 나열하며 guest1 은 계속 목록에 있어야 하며, 종료되었음을 나타내야 합니다.
# virsh list --all Id Name State ---------------------------------- 14 guest1 shut off
- 편집한 XML 파일을 사용하여 guest1 이라는 게스트 가상 머신을 시작합니다.
# virsh start guest1
- guest1 게스트 가상 머신 게스트 에이전트를 종료합니다.
# virsh shutdown --mode agent guest1
- 게스트 가상 머신을 나열합니다. guest1 은 여전히 목록에 있어야 하며, 종료되었음을 나타내야 합니다.
# virsh list --all Id Name State ---------------------------------- guest1 shut off
libvirt-guests
서비스를 중지하여 게스트를 자동으로 종료할 수 있습니다. 이 방법에 대한 자세한 내용은 A.11절. “중요한 종료를 허용하는 선택적 작업 방법” 을 참조하십시오.
A.11. 중요한 종료를 허용하는 선택적 작업 방법
libvirt-guests
서비스에는 게스트가 올바르게 종료될 수 있도록 구성할 수 있는 매개 변수 설정이 있습니다. 이 패키지는 libvirt 설치의 일부이며 기본적으로 설치됩니다. 이 서비스는 호스트가 종료되면 자동으로 디스크에 게스트를 저장하고, 호스트를 재부팅할 때 사전 종료 상태로 복원합니다. 기본적으로 이 설정은 게스트를 일시 중지하도록 설정되어 있습니다. 게스트를 정상적으로 종료하려면 libvirt-guests
구성 파일의 매개 변수 중 하나를 변경해야 합니다.
절차 A.5. 게스트의 정상 종료를 허용하도록 libvirt-guests 서비스 매개 변수 변경
구성 파일을 엽니다.
구성 파일은/etc/sysconfig/libvirt-guests
에 있습니다. 파일을 편집하고 주석 표시(#)를 제거하고ON_SHUTDOWN=suspend
를ON_SHUTDOWN=shutdown
로 변경합니다. 변경 사항을 저장해야 합니다.$ vi /etc/sysconfig/libvirt-guests # URIs to check for running guests # example: URIS='default xen:/// vbox+tcp://host/system lxc:///' #URIS=default # action taken on host boot # - start all guests which were running on shutdown are started on boot # regardless on their autostart settings # - ignore libvirt-guests init script won't start any guest on boot, however, # guests marked as autostart will still be automatically started by # libvirtd #ON_BOOT=start # Number of seconds to wait between each guest start. Set to 0 to allow # parallel startup. #START_DELAY=0 # action taken on host shutdown # - suspend all running guests are suspended using virsh managedsave # - shutdown all running guests are asked to shutdown. Please be careful with # this settings since there is no way to distinguish between a # guest which is stuck or ignores shutdown requests and a guest # which just needs a long time to shutdown. When setting # ON_SHUTDOWN=shutdown, you must also set SHUTDOWN_TIMEOUT to a # value suitable for your guests. ON_SHUTDOWN=shutdown # If set to non-zero, shutdown will suspend guests concurrently. Number of # guests on shutdown at any time will not exceed number set in this variable. #PARALLEL_SHUTDOWN=0 # Number of seconds we're willing to wait for a guest to shut down. If parallel # shutdown is enabled, this timeout applies as a timeout for shutting down all # guests on a single URI defined in the variable URIS. If this is 0, then there # is no time out (use with caution, as guests might not respond to a shutdown # request). The default value is 300 seconds (5 minutes). #SHUTDOWN_TIMEOUT=300 # If non-zero, try to bypass the file system cache when saving and # restoring guests, even though this may give slower operation for # some file systems. #BYPASS_CACHE=0
- ???
URIS
- checks the specified connections for a running guest. TheDefault
setting functions in the same manner as virsh does when no explicit URI is set In addition, one can explicitly set the URI from/etc/libvirt/libvirt.conf
. Note that when using the libvirt configuration file default setting, no probing will be used.- ???
ON_BOOT
- specifies the action to be done to / on the guests when the host boots. Thestart
option starts all guests that were running prior to shutdown regardless on their autostart settings. Theignore
option will not start the formally running guest on boot, however, any guest marked as autostart will still be automatically started bylibvirtd
.- ???
- The
START_DELAY
- sets a delay interval in between starting up the guests. This time period is set in seconds. Use the 0 time setting to make sure there is no delay and that all guests are started simultaneously. - ???
ON_SHUTDOWN
- specifies the action taken when a host shuts down. Options that can be set include:suspend
which suspends all running guests using virsh managedsave andshutdown
which shuts down all running guests. It is best to be careful with using theshutdown
option as there is no way to distinguish between a guest which is stuck or ignores shutdown requests and a guest that just needs a longer time to shutdown. When setting theON_SHUTDOWN=shutdown
, you must also setSHUTDOWN_TIMEOUT
to a value suitable for the guests.- ???
PARALLEL_SHUTDOWN
Dictates that the number of guests on shutdown at any time will not exceed number set in this variable and the guests will be suspended concurrently. If set to0
, then guests are not shutdown concurrently.- ???
- Number of seconds to wait for a guest to shut down. If
SHUTDOWN_TIMEOUT
is enabled, this timeout applies as a timeout for shutting down all guests on a single URI defined in the variable URIS. IfSHUTDOWN_TIMEOUT
is set to0
, then there is no timeout (use with caution, as guests might not respond to a shutdown request). The default value is 300 seconds (5 minutes). - ???
BYPASS_CACHE
can have 2 values, 0 to disable and 1 to enable. If enabled it will by-pass the file system cache when guests are restored. Note that setting this may effect performance and may cause slower operation for some file systems.
libvirt-guests 서비스 시작
서비스를 시작하지 않은 경우libvirt-guests
서비스를 시작합니다. 이렇게 하면 실행 중인 모든 게스트 가상 시스템이 종료되므로 서비스를 재시작하지 마십시오.
A.12. KVM 네트워킹 성능
e1000
) 드라이버도 에뮬레이션 드라이버 선택으로 지원됩니다. e1000
드라이버를 사용하려면 아래 절차의 virtio
를 e1000
으로 교체합니다. 최적의 성능을 위해서는 virtio
드라이버를 사용하는 것이 좋습니다.
절차 A.6. virtio 드라이버로 전환
- 게스트 운영 체제를 종료합니다.
- virsh 명령을 사용하여 게스트 구성 파일을 편집합니다(여기서
GUEST
는 게스트의 이름임).# virsh edit
GUEST
virsh edit 명령은 $EDITOR 쉘 변수를 사용하여 사용할 편집기를 결정합니다. - 구성의 네트워크 인터페이스 섹션을 찾습니다. 이 섹션은 아래 코드 조각과 유사합니다.
<interface type='network'> [output truncated] <model type='rtl8139' /> </interface>
- model 요소의 type 속성을
'rtl8139'
에서'virtio'
로 변경합니다. 이렇게 하면 드라이버가 rtl8139 드라이버에서 virtio 드라이버로 변경됩니다.<interface type='network'> [output truncated] <model type=
'virtio'
/> </interface> - 변경 사항을 저장하고 텍스트 편집기를 종료합니다.
- 게스트 운영 체제를 다시 시작합니다.
기타 네트워크 드라이버를 사용하여 새 게스트 생성
또는 다른 네트워크 드라이버를 사용하여 새 게스트를 만들 수 있습니다. 네트워크 연결을 통해 게스트를 설치하는 데 어려움이 있는 경우 이 작업이 필요할 수 있습니다. 이 방법을 사용하려면 하나 이상의 게스트가 이미 생성(CD 또는 DVD에서 설치될 수 있음)이 템플릿으로 사용해야 합니다.
- 기존 게스트(이 예에서는 Guest1라는 이름의 XML 템플릿)를 만듭니다.
# virsh dumpxml Guest1 > /tmp/guest-template.xml
- XML 파일을 복사하고 편집하고 가상 머신 이름, UUID, 디스크 이미지, MAC 주소 및 기타 고유한 매개 변수 등의 고유한 필드를 업데이트합니다. UUID 및 MAC 주소 행을 삭제할 수 있으며 virsh는 UUID와 MAC 주소를 생성합니다.
# cp /tmp/guest-template.xml /tmp/new-guest.xml # vi /tmp/new-guest.xml
네트워크 인터페이스 섹션에 model 행을 추가합니다.<interface type='network'> [output truncated] <model type='virtio' /> </interface>
- 새 가상 머신을 생성합니다.
# virsh define /tmp/new-guest.xml # virsh start new-guest
A.13. libvirt를 사용하여 외부 스냅샷 생성을 위한 해결방법
- 내부 스냅샷 은 qcow2 파일에 완전히 포함되어 있으며 libvirt 에서 완전히 지원하므로 스냅샷을 생성, 삭제 및 되돌릴 수 있습니다. 이 설정은 특히 옵션을 지정하지 않은 경우 스냅샷을 만들 때 libvirt 에서 사용하는 기본 설정입니다. 이 파일 유형은 스냅샷을 생성하는 데 다른 파일 유형보다 약간 더 오래 걸리며 qcow2 디스크가 필요한 단점도 있습니다.중요내부 스냅샷은 적극적으로 개발되지 않고 있으며 Red Hat은 그 사용을 권장하지 않습니다.
- 외부 스냅샷 은 모든 유형의 원래 디스크 이미지로 작업하고 게스트 다운타임 없이 수행할 수 있으며 더 안정적이고 안정적입니다. 따라서 KVM 게스트 가상 머신에서 외부 스냅샷을 사용하는 것이 좋습니다. 그러나 외부 스냅샷은 현재 Red Hat Enterprise Linux 7에서 완전히 구현되지 않으며 virt-manager 를 사용할 때 사용할 수 없습니다.외부 스냅샷을 생성하려면
--diskspec vda,snapshot=external
옵션과 함께 snapshot-create-as 를 사용하거나 스냅샷 XML 파일에서 다음 디스크 행을 사용합니다.<disk name=’vda’ snapshot=’external’> <source file=’/path/to,new’/> </disk>
현재 외부 스냅샷은 libvirt 에서 생성할 수 있는 한방향 작업이지만 해당 스냅샷은 더 이상 수행할 수 없습니다. 해결방법은 libvirt 업스트림 페이지에 설명되어 있습니다.
A.14. Japanese cursor가 있는 게스트 콘솔에서 문자 누락된 문자
atkdb.c: Unknown key pressed (translated set 2, code 0x0 on isa0060/serio0). atkbd.c: Use 'setkeycodes 00 <keycode>' to make it known.
- virt-manager 에서 영향을 받는 게스트를 엽니다.
- 세부 정보+보기를 클릭합니다.
- 목록에서 VNC 표시를 선택합니다.
- Keymap 풀다운 메뉴에서 Auto 를 ja 로 변경합니다.
- Apply 버튼을 클릭합니다.
- virsh edit guestname을 실행합니다.
- <graphics> 태그에 다음 특성을 추가합니다. keymap='ja'. 예를 들면 다음과 같습니다.
<graphics type='vnc' port='-1' autoport='yes' keymap='ja'/>
A.15. 시스템 종료에 대해 게스트 가상 머신 오류
절차 A.7. 게스트 가상 머신에서 게스트 에이전트 채널 구성
- 게스트 가상 머신을 중지합니다.
- 게스트 가상 머신의 도메인 XML을 열고 다음 스니펫을 추가합니다.
그림 A.2. 게스트 에이전트 채널 구성
<channel type='unix'> <source mode='bind'/> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel>
- virsh start [domain] 을 실행하여 guest 가상 시스템을 시작합니다.
- 게스트 가상 머신(yum install qemu-guest-agent )에 qemu-guest-agent를 설치하고 서비스(qemu-guest-agent.service)로 부팅할 때마다 자동으로 실행되도록 합니다.
A.16. 게스트 가상 머신에 대해 SMART 디스크 모니터링 비활성화
# service smartd stop # systemctl --del smartd
A.17. libguestfs 문제 해결
$ libguestfs-test-tool
===== TEST FINISHED OK =====
A.18. SR-IOV 문제 해결
- 게스트 시작 오류
- 구성된 가상 머신을 시작할 때 다음과 같이 오류가 발생합니다.
# virsh start test error: Failed to start domain test error: Requested operation is not valid: PCI device 0000:03:10.1 is in use by domain rhel7
이 오류는 종종 다른 게스트 또는 호스트 자체에 이미 할당된 장치로 인해 발생합니다. - 게스트 마이그레이션, 저장 또는 덤프 오류
- 가상 머신을 마이그레이션 및 덤프하려고 하면 다음과 유사한 오류가 발생합니다.
# virsh dump rhel7/tmp/rhel7.dump error: Failed to core dump domain rhel7 to /tmp/rhel7.dump error: internal error: unable to execute QEMU command 'migrate': State blocked by non-migratable device '0000:00:03.0/vfio-pci'
장치 할당은 가상 머신이 시작된 특정 호스트의 하드웨어를 사용하므로 장치 할당이 사용 중일 때 게스트 마이그레이션 및 저장이 지원되지 않습니다. 현재 게스트의 코어 덤프에도 동일한 제한 사항이 적용됩니다. 이는 향후 변경될 수 있습니다.--memory-only
옵션을 지정하지 않는 한 QEMU는 PCI 장치가 연결된 게스트 가상 머신에서 현재 마이그레이션, 저장, 덤프 작업을 지원하지 않습니다. 현재 USB 장치에서만 이러한 작업을 지원할 수 있습니다. 향후 이를 개선하기 위한 작업이 진행 중입니다.
A.19. 일반 libvirt 오류 및 문제 해결
솔루션
아래의 해당 링크를 따라 자세한 문제 해결 정보를 확인하십시오.
표 A.1. 공통 libvirt 오류
오류 | 문제에 대한 설명 | 해결책 |
---|---|---|
libvirtd 를 시작하지 못했습니다. | libvirt 데몬을 시작하지 못했습니다. 그러나 /var/log/ message에 이 오류에 대한 정보는 없습니다. | A.19.1절. “libvirtd 를 시작하지 못했습니다.” |
CA 인증서를 읽을 수 없음 | URI가 하이퍼바이저에 연결하지 못하는 경우 발생하는 몇 가지 오류 중 하나입니다. | A.19.2절. “URI가 Hypervisor에 연결하지 못했습니다.” |
기타 연결 오류 | URI가 하이퍼바이저에 연결하지 못하는 경우 발생하는 기타 오류입니다. | A.19.2절. “URI가 Hypervisor에 연결하지 못했습니다.” |
게스트의 PXE 부팅(또는 DHCP)이 실패했습니다. | 게스트 가상 머신이 성공적으로 시작되지만 DHCP에서 IP 주소를 가져오거나 PXE 프로토콜을 사용하여 부팅하거나 둘 다 가져올 수 없습니다. 이는 종종 브리지에 설정된 긴 지연 시간 또는 iptables 패키지 및 커널에서 규칙 체크섬을 지원하지 않는 경우 발생합니다. | A.19.3절. “게스트의 PXE 부팅(또는 DHCP) 실패” |
게스트는 외부 네트워크에 연결할 수 있지만 macvtap 인터페이스를 사용하는 경우에는 호스트에 연결할 수 없습니다. |
게스트는 다른 게스트와 통신할 수 있지만 macvtap(또는
type='direct' ) 네트워크 인터페이스를 사용하도록 구성된 후에는 호스트 시스템에 연결할 수 없습니다.
이것은 실제로 오류가 아니며 macvtap의 정의된 동작입니다.
| A.19.4절. “게스트는 외부 네트워크를 변경할 수 있지만 macvtap 인터페이스를 사용하는 경우 Reach Host는 사용할 수 없습니다.” |
네트워크 'default'에서 DHCP 응답 체크섬을 수정하는 규칙을 추가할 수 없습니다. | 이 경고 메시지는 거의 항상 무해하지만 문제의 증거로 실수로 표시됩니다. | A.19.5절. “네트워크 'default'에서 DHCP 응답 체크섬을 수정하는 규칙을 추가할 수 없습니다.” |
브리지 br0 포트 vnet0을 추가할 수 없습니다. 해당 장치가 없습니다. | 이 오류 메시지 또는 유사한 Failed to add interface to bridge 'br0': 이러한 장치 는 게스트의(또는 도메인) <interface> 정의에 지정된 브리지 장치가 없음을 나타냅니다. | A.19.6절. “브리지 br0 포트 vnet0을 추가할 수 없습니다. 해당 장치가 없습니다.” |
name_of_host 서비스 '49155' 주소를 확인할 수 없습니다. 알 수 없는 이름 또는 서비스 | QEMU 게스트 마이그레이션이 실패하고 이 오류 메시지는 익숙하지 않은 호스트 이름과 함께 표시됩니다. | A.19.7절. “Migration Fails with error: unable to resolve address ” |
디스크 경로 /var/lib/libvirt/images/qemu.img에 대한 액세스를 허용할 수 없습니다. 이러한 파일 또는 디렉터리 없음 | libvirt 가 디스크 이미지에 액세스할 수 없기 때문에 게스트 가상 머신을 마이그레이션할 수 없습니다. | A.19.8절. “디스크 경로에 대한 액세스를 허용하기 위해 Unable이 있는 마이그레이션 Fails: 이러한 파일 또는 디렉터리 없음 ” |
libvirtd 가 시작될 때 게스트 가상 시스템이 존재하지 않습니다. | libvirt 데몬이 성공적으로 시작되었지만 virsh list --all 을 실행할 때 게스트 가상 머신이 존재하지 않습니다. | A.19.9절. “libvirtd 가 시작될 때 게스트 가상 머신이 준비되지 않습니다.” |
일반적인 XML 오류 | libvirt 는 XML 문서를 사용하여 구조화된 데이터를 저장합니다. API를 통해 libvirt 에 전달될 때 XML 문서에서 몇 가지 일반적인 오류가 발생합니다. 이 항목에서는 게스트 XML 정의 편집과 XML 구문 및 구성의 일반적인 오류에 대한 지침을 제공합니다. | A.19.10절. “일반적인 XML 오류” |
A.19.1. libvirtd 를 시작하지 못했습니다.
- 증상
- libvirt 데몬이 자동으로 시작되지 않습니다. libvirt 데몬을 수동으로 시작하면 다음 작업도 실패합니다.
# systemctl start libvirtd.service * Caching service dependencies ... [ ok ] * Starting libvirtd ... /usr/sbin/libvirtd: error: Unable to initialize network sockets. Check /var/log/messages or run without --daemon for more info. * start-stop-daemon: failed to start `/usr/sbin/libvirtd' [ !! ] * ERROR: libvirtd failed to start
또한/var/log/
message에 이 오류에 대한'more info'
가 없습니다. - 조사
- 아래 행 을 활성화하여
/etc/libvirt/libvirtd.conf
에서 libvirt 의 로깅을 변경합니다. 설정을 활성화하려면 텍스트 편집기에서/etc/libvirt/libvirtd.conf
파일을 열고 다음 줄에서 해시(또는#
) 기호를 제거하고 변경 사항을 저장합니다.log_outputs="3:syslog:libvirtd"
참고이 행은 libvirt 에서 과도한 로그 메시지를 생성하지 않도록 기본적으로 주석 처리됩니다. 문제를 진단한 후/etc/libvirt/libvirtd.conf
파일에서 이 행을 다시 주석 처리하는 것이 좋습니다.libvirt 를 다시 시작하여 이 문제가 해결되었는지 확인합니다.libvirtd
가 여전히 시작되지 않으면 다음과 같은 오류가 출력됩니다.# systemctl restart libvirtd Job for libvirtd.service failed because the control process exited with error code. See "systemctl status libvirtd.service" and "journalctl -xe" for details. Sep 19 16:06:02 jsrh libvirtd[30708]: 2017-09-19 14:06:02.097+0000: 30708: info : libvirt version: 3.7.0, package: 1.el7 (Unknown, 2017-09-06-09:01:55, js Sep 19 16:06:02 jsrh libvirtd[30708]: 2017-09-19 14:06:02.097+0000: 30708: info : hostname: jsrh Sep 19 16:06:02 jsrh libvirtd[30708]: 2017-09-19 14:06:02.097+0000: 30708: error : daemonSetupNetworking:502 : unsupported configuration: No server certif Sep 19 16:06:02 jsrh systemd[1]: libvirtd.service: main process exited, code=exited, status=6/NOTCONFIGURED Sep 19 16:06:02 jsrh systemd[1]: Failed to start Virtualization daemon. -- Subject: Unit libvirtd.service has failed -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit libvirtd.service has failed. -- -- The result is failed.
libvirtd 도움말 페이지에는 libvirt 가TCP/IP 연결 모드에 대해 Listen
에서 실행될 때 누락된cacert.pem
파일이 TLS 기관으로 사용됩니다. 즉--listen
매개변수가 전달되고 있습니다. - 해결책
- 다음 방법 중 하나로 libvirt 데몬 설정을 구성합니다.
- CA 인증서를 설치합니다.참고CA 인증서 및 시스템 인증 구성에 대한 자세한 내용은 Red Hat Enterprise Linux 7 도메인 ID, 인증 및 정책 가이드의 인증서 및 인증 기관 관리 장을 참조하십시오.
- TLS를 사용하지 마십시오. 대신 베어 TCP를 사용합니다.
/etc/libvirt/libvirtd.conf
에서listen_tls = 0
및listen_tcp = 1
을 설정합니다. 기본값은listen_tls = 1
및listen_tcp = 0
입니다. --listen
매개변수를 전달하지 마십시오./etc/sysconfig/libvirtd.conf
에서LIBVIRTD_ARGS
변수를 변경합니다.
A.19.2. URI가 Hypervisor에 연결하지 못했습니다.
A.19.2.1. CA 인증서를 읽을 수 없음
- 증상
- 명령을 실행하면 다음과 같은 오류(또는 유사한)가 표시됩니다.
$ virsh -c qemu://$hostname/system_list error: failed to connect to the hypervisor error: Cannot read CA certificate '/etc/pki/CA/cacert.pem': No such file or directory
- 조사
- 오류 메시지는 실제 원인에 대해 잘못된 것입니다. 이 오류는 잘못 지정된 URI 또는 구성되지 않은 연결과 같은 다양한 요인으로 인해 발생할 수 있습니다.
- 해결책
- URI를 잘못 지정했습니다.
qemu://system
또는qemu://session
을 연결 URI로 지정할 때 virsh 는 호스트 이름의시스템
또는세션에
각각 연결을 시도합니다. virsh 는 두 번째 슬래시 뒤에 있는 텍스트를 호스트로 인식하기 때문입니다.세 개의 슬래시를 사용하여 로컬 호스트에 연결합니다. 예를 들어qemu:///system
을 지정하면 virsh 가 로컬 호스트에서 libvirtd 의시스템
인스턴스에 연결하도록 지시합니다.호스트 이름을 지정하면 QEMU 전송의 기본값은TLS
로 설정됩니다. 이로 인해 인증서가 생성됩니다.- 연결이 구성되지 않음
- URI는 정확하지만 (예:
qemu[+tls]://server/system
)는 시스템에 올바르게 설정되지 않습니다. TLS 구성에 대한 자세한 내용은 업스트림 libvirt 웹 사이트를 참조하십시오.
A.19.2.2. 'host:16509'에서 서버에 연결할 수 없습니다. 연결이 거부됨
- 증상
- libvirtd 는 TCP 포트에서 연결을 수신 대기해야 하지만 연결에 실패합니다.
# virsh -c qemu+tcp://host/system error: failed to connect to the hypervisor error: unable to connect to server at 'host:16509': Connection refused
/etc/libvirt/libvirtd.conf
에서 구성을 변경한 후에도 libvirt 데몬이 TCP 포트에서 수신 대기하지 않습니다.# grep listen_ /etc/libvirt/libvirtd.conf listen_tls = 1 listen_tcp = 1 listen_addr = "0.0.0.0"
그러나 구성을 변경한 후에도 libvirt 의 TCP 포트가 열려 있지 않습니다.# netstat -lntp | grep libvirtd #
- 조사
- libvirt 데몬은
--listen
옵션 없이 시작되었습니다. 이 명령을 실행하여 확인합니다.# ps aux | grep libvirtd root 10749 0.1 0.2 558276 18280 ? Ssl 23:21 0:00 /usr/sbin/libvirtd
출력에--listen
옵션이 포함되어 있지 않습니다. - 해결책
--listen
옵션을 사용하여 데몬을 시작합니다.이 작업을 수행하려면/etc/sysconfig/libvirtd
파일을 수정하고 다음 행의 주석을 제거합니다.# LIBVIRTD_ARGS="--listen"
그런 다음 다음 명령을 사용하여 libvirtd 서비스를 다시 시작합니다.# /bin/systemctl restart libvirtd.service
A.19.2.3. 인증 실패
- 증상
- 명령을 실행하면 다음과 같은 오류(또는 유사한)가 표시됩니다.
$ virsh -c qemu://$hostname/system_list error: failed to connect to the hypervisor error: authentication failed: authentication failed
- 조사
- 올바른 자격 증명을 사용하는 경우에도 인증이 실패하면 SASL 인증이 구성되지 않을 수 있습니다.
- 해결책
/etc/libvirt/libvirtd.conf
파일을 편집하고auth_tcp
매개 변수의 값을 sasl로설정합니다
. 확인하려면 다음을 수행하십시오.# cat /etc/libvirt/libvirtd.conf | grep auth_tcp auth_tcp = "sasl"
/etc/sasl2/libvirt.conf
파일을 편집하고 다음 행을 파일에 추가합니다.mech_list: digest-md5 sasldb_path: /etc/libvirt/passwd.db
- cyrus-sasl-md5 패키지가 설치되어 있는지 확인합니다.
# yum install cyrus-sasl-md5
libvirtd
서비스를 다시 시작합니다.# systemctl restart libvirtd
- libvirt SASL의 사용자 이름 및 암호를 설정합니다.
# saslpasswd2 -a libvirt 1
A.19.2.4. 권한 거부
- 증상
- root가 아닌 사용자로 virsh 명령을 실행하면 다음과 같은 오류(또는 이와 유사한)가 표시됩니다.
$ virsh -c qemu://$hostname/system_list error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied error: failed to connect to the hypervisor
- 해결책
/etc/libvirt/libvirt.conf
파일을 편집하고 다음 행을 파일에 추가합니다.#unix_sock_group = "libvirt" #unix_sock_ro_perms = "0777" #unix_sock_rw_perms = "0770"
libvirtd
서비스를 다시 시작합니다.# systemctl restart libvirtd
A.19.3. 게스트의 PXE 부팅(또는 DHCP) 실패
- 증상
- 게스트 가상 머신이 성공적으로 시작되지만 DHCP에서 IP 주소를 가져오거나 PXE 프로토콜을 사용하여 부팅할 수 없습니다. 이 오류의 일반적인 원인은 브리지에 긴 지연 시간을 설정하고 iptables 패키지 및 커널에서 체크섬 조작을 지원하지 않는 경우의 두 가지 일반적인 원인이 있습니다.
- 브리지의 긴 전달 지연 시간
- 조사
- 이는 이 오류의 가장 일반적인 원인입니다. 게스트 네트워크 인터페이스가 STP(Spanning Tree Protocol)가 활성화된 브릿지 장치에 연결되어 있고 장기적인 지연이 설정된 브릿지 장치에 연결된 경우 브릿지는 게스트 가상 머신의 네트워크 패킷을 브릿지로 전달하지 않습니다. 브리지는 게스트가 브릿지에 연결된 이후 해당 수의 전달 지연 시간 간격이 경과한 때까지 브리지에서 네트워크 패킷을 브릿지로 전달하지 않습니다. 이 지연을 사용하면 브리지 시간이 인터페이스에서 트래픽을 감시하고 뒤에 있는 MAC 주소를 확인하고 네트워크 토폴로지에서 전달 루프를 방지할 수 있습니다.전달 지연이 게스트 PXE 또는 DHCP 클라이언트의 시간 초과보다 길면 클라이언트의 작업이 실패하고 게스트가 부팅하지 못하거나 (DHCP의 경우 DHCP의 경우) IP 주소를 얻지 못합니다.
- 해결책
- 이 경우 브리지의 전달 지연을 0으로 변경합니다. 브리지에서 STP를 비활성화하거나 둘 다 비활성화합니다.참고이 솔루션은 브리지를 여러 네트워크를 연결하는 데 사용되지 않지만 여러 끝점을 단일 네트워크에 연결하는 데만 적용됩니다( libvirt에서 사용하는 브리지의 가장 일반적인 사용 사례).게스트에 libvirt-managed 가상 네트워크에 연결된 인터페이스가 있는 경우 네트워크의 정의를 편집한 후 다시 시작합니다. 예를 들어 다음 명령을 사용하여 기본 네트워크를 편집합니다.
# virsh net-edit default
<bridge>
요소에 다음 속성을 추가합니다.<name_of_bridge='virbr0'
delay='0' stp='on'
/>참고delay='0'
및stp='on'
은 가상 네트워크의 기본 설정이므로 이 단계는 기본값에서 구성을 수정한 경우에만 필요합니다.게스트 인터페이스가 libvirt 외부에서 구성된 호스트 브리지에 연결된 경우 지연 설정을 변경합니다./etc/sysconfig/network-scripts/ifcfg-name_of_bridge
파일에서 다음 행을 추가하거나 편집하여 STP를 0초 지연으로 설정합니다.STP=on DELAY=0
구성 파일을 변경한 후 브리지 장치를 다시 시작합니다./usr/sbin/ifdown name_of_bridge /usr/sbin/ifup name_of_bridge
참고name_of_bridge 가 네트워크의 루트 브릿지가 아닌 경우 해당 브리지의 지연이 결국 root 브리지에 대해 구성된 지연 시간으로 재설정됩니다. 이 문제가 발생하지 않도록 하려면 name_of_bridge 에서 STP를 비활성화합니다.
- iptables 패키지 및 커널에서 체크섬 조작 규칙을 지원하지 않습니다.
- 조사
- 이 메시지는 다음 조건 중 4개 모두 충족되는 경우에만 문제가 됩니다.
- 게스트는 virtio 네트워크 장치를 사용하고 있습니다.이렇게 하면 구성 파일에 다음이 포함됩니다.
model type='virtio'
- 호스트에는
vhost-net
모듈이 로드되었습니다.ls
에서 빈 결과를 반환하지 않는 경우 해당합니다./dev/vhost-net
- 게스트는 호스트에서 직접 실행 중인 DHCP 서버에서 IP 주소를 가져오려고 합니다.
- 호스트의 iptables 버전은 1.4.10 미만입니다.iptables 1.4.10은
libxt_CHECKSUM
확장을 추가하는 첫 번째 버전입니다. libvirtd 로그에 다음 메시지가 표시되는 경우입니다.warning: Could not add rule to fixup DHCP response checksums on network default warning: May need to update iptables package and kernel to support CHECKSUM rule.
중요이 목록에 있는 다른 세 가지 조건 모두 true인 경우를 제외하고 위의 경고 메시지는 무시될 수 있으며 다른 문제의 표시가 아닙니다.
이러한 조건이 발생하면 호스트에서 게스트로 전송된 UDP 패킷의 계산되지 않은 체크섬이 있습니다. 이로 인해 호스트의 UDP 패킷이 게스트의 네트워크 스택에 유효하지 않은 것처럼 보일 수 있습니다. - 해결책
- 이 문제를 해결하려면 위의 네 가지 점을 무효화합니다. 가장 좋은 해결책은 호스트 iptables 및 커널을 iptables-1.4.10 이상으로 업데이트하는 것입니다. 그렇지 않으면 가장 구체적인 수정 사항은 이 특정 게스트에 대해
vhost-net
드라이버를 비활성화하는 것입니다. 이 작업을 수행하려면 다음 명령을 사용하여 게스트 구성을 편집합니다.virsh edit name_of_guest
<driver>
행을 변경 또는<interface>
섹션에 추가합니다.<interface type='network'> <model type='virtio'/> <driver name='qemu'/> ... </interface>
변경 사항을 저장하고 게스트를 종료한 다음 다시 시작합니다.이 문제가 여전히 해결되지 않으면 firewalld 와 기본 libvirt 네트워크 간의 충돌로 인해 문제가 발생할 수 있습니다.이 문제를 해결하려면 service firewalld stop 명령을 사용하여 firewalld를 중지한 다음 service libvirtd restart 명령을 사용하여 libvirt 를 다시 시작합니다.
참고또한/etc/sysconfig/network-scripts/ifcfg-network_name
파일이 올바르게 구성된 경우 게스트에서 dhclient 명령을 게스트에서 root로 사용하여 IP 주소를 가져올 수 있습니다.
A.19.4. 게스트는 외부 네트워크를 변경할 수 있지만 macvtap 인터페이스를 사용하는 경우 Reach Host는 사용할 수 없습니다.
- 증상
- 게스트 가상 머신은 다른 게스트와 통신할 수 있지만 macvtap(
type='direct'
) 네트워크 인터페이스를 사용하도록 구성된 후에는 호스트 시스템에 연결할 수 없습니다. - 조사
- 가상 이더넷 Port Aggregator(VEPA) 또는 VN-Link 가능 스위치에 연결하지 않아도 macvtap 인터페이스가 유용할 수 있습니다. 브리지로 이러한 인터페이스의 모드를 설정하면 기존 호스트
브리지
장치를 사용할 수 있는 설정 문제(또는 NetworkManager 와 호환되지 않음) 없이 매우 간단한 방식으로 게스트를 물리적 네트워크에 직접 연결할 수 있습니다.그러나 게스트 가상 시스템이 macvtap과 같은type='direct'
네트워크 인터페이스를 사용하도록 설정된 경우, 네트워크에서 다른 게스트 및 기타 외부 호스트와 통신할 수 있는 경우에도 게스트가 자체 호스트와 통신할 수 없습니다.이 상황은 실제로 오류가 아니며 macvtap의 정의된 동작입니다. 호스트의 물리적 이더넷이 macvtap 브리지에 연결된 방식으로 인해 물리적 인터페이스로 전달되는 게스트의 해당 브리지로 들어오는 트래픽이 호스트의 IP 스택으로 이동될 수 없습니다. 또한 물리적 인터페이스로 전송되는 호스트의 IP 스택의 트래픽은 게스트로 전달하기 위해 macvtap 브리지로 복구할 수 없습니다. - 해결책
- libvirt 를 사용하여 격리된 네트워크를 만들고 이 네트워크에 연결된 각 게스트 가상 시스템에 대해 두 번째 인터페이스를 만듭니다. 그러면 호스트와 게스트가 이 격리된 네트워크를 통해 직접 통신할 수 있지만 NetworkManager 와의 호환성도 유지됩니다.
절차 A.8. libvirt를 사용하여 격리된 네트워크 생성
/tmp/isolated.xml
파일에 다음 XML을 추가하고 저장합니다. 192.168.254.0/24 네트워크가 이미 네트워크의 다른 위치에서 사용 중인 경우 다른 네트워크를 선택할 수 있습니다.그림 A.3. 격리된 네트워크 XML
... <network> <name>isolated</name> <ip address='192.168.254.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.254.2' end='192.168.254.254'/> </dhcp> </ip> </network> ...
- 다음 명령을 사용하여 네트워크 생성: virsh net-define /tmp/isolated.xml
- virsh net-autostart isolated 명령을 사용하여 네트워크를 autostart로 설정합니다.
- virsh net-start isolated 명령을 사용하여 네트워크를 시작합니다.
- virsh edit name_of_guest 를 사용하여 네트워크 연결에 macvtap를 사용하는 각 게스트의 구성을 편집하고 다음과 유사한
<devices>
섹션에 새<인터페이스를>
추가합니다(포함할<모델 type='virtio'/>
행은 선택 사항임).그림 A.4. 인터페이스 장치 XML
... <interface type='network' trustGuestRxFilters='yes'> <source network='isolated'/> <model type='virtio'/> </interface>
- 를 종료한 다음 각 게스트를 다시 시작합니다.
이제 게스트가 주소 192.168.254.1에서 호스트에 도달할 수 있으며 호스트는 DHCP에서 수집한 IP 주소에서 게스트에 연결할 수 있습니다(실제로 게스트의 IP 주소를 수동으로 구성할 수 있음). 이 새 네트워크는 호스트와 게스트로만 격리되므로 게스트의 다른 모든 통신에서는 macvtap 인터페이스를 사용합니다. 자세한 내용은 23.17.8절. “네트워크 인터페이스”의 내용을 참조하십시오.
A.19.5. 네트워크 'default'에서 DHCP 응답 체크섬을 수정하는 규칙을 추가할 수 없습니다.
- 증상
- 이 메시지가 나타납니다.
Could not add rule to fixup DHCP response checksums on network 'default'
- 조사
- 이 메시지는 오류의 증거인 것처럼 보이지만 거의 항상 무해합니다.
- 해결책
- 문제가 발생하지 않는 한 게스트 가상 머신이 DHCP를 통해 IP 주소를 가져올 수 없다는 것입니다. 이 메시지는 무시할 수 있습니다.이 경우 이 상황에 대한 자세한 내용은 A.19.3절. “게스트의 PXE 부팅(또는 DHCP) 실패” 을 참조하십시오.
A.19.6. 브리지 br0 포트 vnet0을 추가할 수 없습니다. 해당 장치가 없습니다.
- 증상
- 다음과 같은 오류 메시지가 표시됩니다.
Unable to add bridge name_of_bridge port vnet0: No such device
예를 들어 브리지 이름이 br0 인 경우 오류 메시지가 다음과 같이 표시됩니다.Unable to add bridge br0 port vnet0: No such device
libvirt 버전 0.9.6 및 이전 버전에서는 다음과 같은 오류가 나타납니다.Failed to add tap interface to bridge name_of_bridge: No such device
예를 들어 브리지 이름이 br0 인 경우 다음을 실행합니다.Failed to add tap interface to bridge 'br0': No such device
- 조사
- 두 오류 메시지 모두 게스트의 (또는 도메인)
<interface>
정의에 지정된 브리지 장치가 없음을 나타냅니다.오류 메시지에 나열된 브리지 장치가 없는지 확인하려면 쉘 명령 ip addr show br0.이와 유사한 메시지는 호스트에 해당 이름의 브리지가 없음을 확인합니다.br0: error fetching interface information: Device not found
이 경우 해결 방법으로 계속 진행하십시오.그러나 결과 메시지가 다음과 유사한 경우 문제가 다른 곳에 있습니다.br0 Link encap:Ethernet HWaddr 00:00:5A:11:70:48 inet addr:10.22.1.5 Bcast:10.255.255.255 Mask:255.0.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:249841 errors:0 dropped:0 overruns:0 frame:0 TX packets:281948 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:106327234 (101.4 MiB) TX bytes:21182634 (20.2 MiB)
- 해결책
- 기존 브리지를 편집하거나 virsh를 사용하여 새 브리지 만들기
- virsh 를 사용하여 기존 브리지 또는 네트워크의 설정을 편집하거나 호스트 시스템 구성에 브리지 장치를 추가합니다.
- virsh를 사용하여 기존 브리지 설정 편집
- virsh edit name_of_guest 를 사용하여 이미 존재하는 브리지 또는 네트워크를 사용하도록
<interface>
정의를 변경합니다.예를 들어type='bridge'
을type='network'
로,<source bridge='br0'/>
을<source network='default'/>
로 변경합니다. - virsh를 사용하여 호스트 브리지 만들기
- libvirt 버전 0.9.8 이상의 경우 virsh iface-bridge 명령을 사용하여 브리지 장치를 만들 수 있습니다. 이렇게 하면
eth0
의 브리지 장치 br0 이 생성되고 연결된 브리지의 일부로 설정된 물리적 네트워크 인터페이스가 생성됩니다.virsh iface-bridge eth0 br0
선택 사항: 필요한 경우 이 브리지를 제거하고 다음 명령을 사용하여 원래eth0
구성을 복원합니다.virsh iface-unbridge br0
- 호스트 브릿지를 수동으로 생성
- 이전 버전의 libvirt 의 경우 호스트에 브리지 장치를 수동으로 만들 수 있습니다. 자세한 내용은 6.4.3절. “libvirt를 사용한 브리지 네트워킹”에서 참조하십시오.
A.19.7. Migration Fails with error: unable to resolve address
- 증상
- QEMU 게스트 마이그레이션이 실패하고 이 오류 메시지가 표시됩니다.
# virsh migrate qemu qemu+tcp://192.168.122.12/system error: Unable to resolve address name_of_host service '49155': Name or service not known
예를 들어 대상 호스트 이름이newyork
인 경우 오류 메시지가 다음과 같이 표시됩니다.# virsh migrate qemu qemu+tcp://192.168.122.12/system error: Unable to resolve address 'newyork' service '49155': Name or service not known
그러나 이 오류는 어디에서도newyork
호스트 이름을 사용하지 않았기 때문에 이상하게 보입니다. - 조사
- 마이그레이션 중에 대상 호스트에서 실행되는 libvirtd 는 마이그레이션 데이터를 수신할 것으로 예상되는 주소 및 포트에서 URI를 생성하고 소스 호스트에서 실행 중인 libvirtd 로 다시 보냅니다.이 경우 대상 호스트(
192.168.122.12
)의 이름이 'newyork' 로 설정되어 있습니다. 어떤 이유로 해당 호스트에서 실행 중인 libvirtd 는 이름을 다시 보낼 수 있는 IP 주소로 확인할 수 없으며 계속 유용합니다. 따라서 소스 libvirtd 가 이름을 확인하는 데 성공해야 하는 'newyork' 호스트 이름을 반환했습니다. DNS가 올바르게 구성되지 않았거나/etc/hosts
에 로컬 루프백 주소(127.0.0.1
)와 연결된 호스트 이름이 있는 경우 이 문제가 발생할 수 있습니다.마이그레이션 데이터에 사용되는 주소는 대상 libvirtd 연결에 사용되는 주소에서 자동으로 확인할 수 없습니다(예:qemu+tcp://192.168.122.12/system
). 이는 대상 libvirtd 와 통신하기 때문에 소스 libvirtd 는 virsh 가 요구하는 유형의 네트워크 인프라를 사용해야 할 수 있습니다. - 해결책
- 마이그레이션에 관련된 모든 호스트가 모든 호스트 이름을 확인할 수 있도록 DNS를 올바르게 구성하는 것이 가장 좋습니다.DNS를 이 작업을 수행하도록 구성할 수 없는 경우 마이그레이션에 사용되는 모든 호스트 목록을 각 호스트의
/etc/hosts
파일에 수동으로 추가할 수 있습니다. 그러나 이러한 목록을 동적 환경에서 일관되게 유지하기는 어렵습니다.어떤 방법으로도 호스트 이름을 확인할 수 없는 경우 virsh migrate 는 마이그레이션 호스트 지정을 지원합니다.# virsh migrate qemu qemu+tcp://192.168.122.12/system tcp://192.168.122.12
대상 libvirtd 는tcp://192.168.122.12
URI를 사용하고 자동으로 생성된 포트 번호를 추가합니다. 방화벽 구성(예: 방화벽 구성)이 적합하지 않은 경우 다음 명령에 포트 번호를 지정할 수 있습니다.# virsh migrate qemu qemu+tcp://192.168.122.12/system tcp://192.168.122.12:12345
또 다른 옵션은 터널링된 마이그레이션을 사용하는 것입니다. 터널링 마이그레이션은 마이그레이션 데이터에 대한 별도의 연결을 생성하지 않지만 대상 libvirtd 와의 통신에 사용되는 연결을 통해 데이터를 터널링하지 않습니다(예:qemu+tcp://192.168.122.12/system
).# virsh migrate qemu qemu+tcp://192.168.122.12/system --p2p --tunnelled
A.19.8. 디스크 경로에 대한 액세스를 허용하기 위해 Unable이 있는 마이그레이션 Fails: 이러한 파일 또는 디렉터리 없음
- 증상
- libvirt 가 디스크 이미지에 액세스할 수 없기 때문에 게스트 가상 머신(또는 도메인)을 마이그레이션할 수 없습니다.
# virsh migrate qemu qemu+tcp://name_of_host/system error: Unable to allow access for disk path /var/lib/libvirt/images/qemu.img: No such file or directory
예를 들어 대상 호스트 이름이newyork
인 경우 오류 메시지가 다음과 같이 표시됩니다.# virsh migrate qemu qemu+tcp://newyork/system error: Unable to allow access for disk path /var/lib/libvirt/images/qemu.img: No such file or directory
- 조사
- 기본적으로 마이그레이션은 실행 중인 게스트(예: 메모리 또는 CPU 상태)의 메모리 내 상태만 전송합니다. 마이그레이션 중에 디스크 이미지를 전송하지는 않지만 두 호스트 모두에서 동일한 경로에서 액세스할 수 있어야 합니다.
- 해결책
- 두 호스트 모두에서 동일한 위치에 공유 스토리지를 설정하고 마운트합니다. 가장 간단한 방법은 NFS를 사용하는 것입니다.
절차 A.9. 공유 스토리지 설정
- 공유 스토리지 역할을 하는 호스트에서 NFS 서버를 설정합니다. NFS 서버는 NFS를 통해 공유 스토리지에 액세스하는 경우 마이그레이션과 관련된 모든 호스트 중 하나일 수 있습니다.
# mkdir -p /exports/images # cat >>/etc/exports <<EOF /exports/images 192.168.122.0/24(rw,no_root_squash) EOF
- libvirt 를 실행하는 모든 호스트의 공통 위치에 내보낸 디렉터리를 마운트합니다. 예를 들어 NFS 서버의 IP 주소가 192.168.122.1인 경우 다음 명령을 사용하여 디렉터리를 마운트합니다.
# cat >>/etc/fstab <<EOF 192.168.122.1:/exports/images /var/lib/libvirt/images nfs auto 0 0 EOF # mount /var/lib/libvirt/images
참고NFS를 사용하여 한 호스트에서 로컬 디렉터리를 내보내고 다른 호스트의 동일한 경로에 마운트할 수 없습니다. 디스크 이미지를 저장하는 데 사용되는 디렉터리는 두 호스트의 공유 스토리지에서 마운트해야 합니다. 이 값이 올바르게 구성되지 않으면 소스 호스트의 libvirt 데몬이 게스트를 대상으로 마이그레이션한 후 디스크 이미지의 소유자, 권한 및 SELinux 레이블을 변경할 수 있으므로 마이그레이션 중에 디스크 이미지에 대한 액세스 권한이 손실될 수 있습니다.libvirt 가 공유 스토리지 위치에서 디스크 이미지가 마운트되었음을 탐지하면 이러한 변경 사항이 적용되지 않습니다.
A.19.9. libvirtd 가 시작될 때 게스트 가상 머신이 준비되지 않습니다.
- 증상
- libvirt 데몬이 성공적으로 시작되었지만 게스트 가상 머신이 존재하지 않습니다.
# virsh list --all Id Name State ----------------------------------------------------
- 조사
- 이 문제의 원인에는 여러 가지가 있습니다. 이러한 테스트를 수행하면 이 문제의 원인을 파악하는 데 도움이 됩니다.
- KVM 커널 모듈 확인
- KVM 커널 모듈이 커널에 삽입되었는지 확인합니다.
# lsmod | grep kvm kvm_intel 121346 0 kvm 328927 1 kvm_intel
AMD 시스템을 사용하는 경우 root 쉘에서 lsmod | grepkvm_amd
명령을 사용하여 kvm_amd 커널 모듈이 커널에 삽입되었는지 확인합니다.모듈이 없으면 modprobe <modulename> 명령을 사용하여 삽입합니다.참고드문 경우지만 KVM 가상화 지원은 커널로 컴파일될 수 있습니다. 이 경우에는 모듈이 필요하지 않습니다. - 가상화 확장 확인
- 호스트에서 가상화 확장 기능이 지원 및 활성화되어 있는지 확인합니다.
# egrep "(vmx|svm)" /proc/cpuinfo flags : fpu vme de pse tsc ... svm ... skinit wdt npt lbrv svm_lock nrip_save flags : fpu vme de pse tsc ... svm ... skinit wdt npt lbrv svm_lock nrip_save
BIOS 설정에서 하드웨어 펌웨어 설정에서 가상화 확장 기능을 활성화합니다. 이에 대한 자세한 내용은 하드웨어 설명서를 참조하십시오. - 클라이언트 URI 구성 확인
- 클라이언트의 URI가 의도한 대로 구성되었는지 확인합니다.
# virsh uri vbox:///system
예를 들어, 이 메시지는 URI가 QEMU 가 아닌 RWO 하이퍼바이저에 연결되어 있음을 표시하고 QEMU 하이퍼바이저에 연결하도록 설정된 URI에 대한 구성 오류를 표시합니다. URI가 QEMU 에 올바르게 연결된 경우 다음과 같은 메시지가 표시됩니다.# virsh uri qemu:///system
이 상황은 libvirt 가 기본적으로 사용할 수 있는 다른 하이퍼바이저가 있는 경우 발생합니다.
- 해결책
- 이러한 테스트를 수행한 후 다음 명령을 사용하여 게스트 가상 머신 목록을 확인합니다.
# virsh list --all
A.19.10. 일반적인 XML 오류
A.19.10.1. 도메인 정의 편집
# virsh edit name_of_guest.xml
# virsh edit name_of_guest.xml
Domain name_of_guest.xml XML configuration edited.
# xmllint --noout config.xml
# virt-xml-validate config.xml
- libvirt에 의해 저장된 XML 문서
- 이 문서에는 게스트에 대한 상태 및 구성 정의가 포함되어 있습니다. 이러한 문서는 자동으로 생성되며 수동으로 편집해서는 안 됩니다. 이러한 문서에는 손상된 문서의 파일 이름이 포함되어 있습니다. 파일 이름은 URI에서 정의한 호스트 시스템에서만 유효하며, 이 경우 명령이 실행된 시스템을 볼 수 있습니다.libvirt 에서 생성한 파일의 오류는 드물다. 그러나 이러한 오류의 가능한 소스 중 하나는 libvirt 의 다운그레이드이며 최신 버전의 libvirt 는 항상 이전 버전에서 생성된 XML을 읽을 수 있지만 이전 버전의 libvirt 는 최신 버전에 추가된 XML 요소에 의해 혼동될 수 있습니다.
A.19.10.2. XML 구문 오류
error: (name_of_guest.xml):6: StartTag: invalid element name <vcpu>2</vcpu>< -----------------^
- 이 메시지에 포함된 정보:
- (name_of_guest.xml)
- 오류가 포함된 문서의 파일 이름입니다. 괄호 안에 있는 파일 이름은 메모리에서 구문 분석되는 XML 문서를 설명하는 심볼릭 이름이며 디스크의 파일에 직접 일치하지 않습니다. 괄호 안에 포함되지 않은 파일 이름은 연결의 대상에 있는 로컬 파일입니다.
- 6
- 오류가 포함된 XML 파일의 줄 번호입니다.
- StartTag: 잘못된 요소 이름
- 이는 특정 XML 오류를 설명하는 libxml2 구문 분석기의 오류 메시지입니다.
A.19.10.2.1. 스프레이 <
문서에서
- 증상
- 다음과 같은 오류가 발생합니다.
error: (name_of_guest.xml):6: StartTag: invalid element name <vcpu>2</vcpu>< -----------------^
- 조사
- 이 오류 메시지는 구문 분석기에서 게스트 XML 파일의 6행에서
<
기호 뒤에 새 요소 이름을 예상한다는 것을 보여줍니다.텍스트 편집기에서 줄 번호 표시가 활성화되어 있는지 확인합니다. XML 파일을 열고 6행에서 텍스트를 찾습니다.<domain type='kvm'> <name>name_of_guest</name> <memory>524288</memory> <vcpu>2</vcpu><
게스트의 XML 파일에 대한 이 조각에는 추가<
가 포함되어 있습니다. - 해결책
- 추가
<
를 제거하거나 새 요소를 완료합니다.
A.19.10.2.2. Unterminated 속성
- 증상
- 다음과 같은 오류가 발생합니다.
error: (name_of_guest.xml):2: Unescaped '<' not allowed in attributes values <name>name_of_guest</name> --^
- 조사
- 게스트의 XML 파일의 스니펫에는 정의되지 않은 element 특성 값이 포함되어 있습니다.
<domain type='kvm> <name>name_of_guest</name>
이 경우'kvm'
에 두 번째 따옴표가 없습니다. 특성 값은 XML start 및 end 태그와 유사하게 따옴표 또는 게시rophes로 열고 닫아야 합니다. - 해결책
- 모든 속성 값 문자열을 올바르게 열고 닫습니다.
A.19.10.2.3. 열기 및 종료 태그 불일치
- 증상
- 다음과 같은 오류가 발생합니다.
error: (name_of_guest.xml):61: Opening and ending tag mismatch: clock line 16 and domain </domain> ---------^
- 조사
- 위의 오류 메시지에는ending 태그를 식별하는 세 가지 결과가 포함되어 있습니다.마지막 콜론,
클럭 라인 16 및 도메인
뒤에 오는 메시지는<clock>
에 문서의 16 라인에 일치하지 않는 태그가 있음을 보여줍니다. 마지막 힌트는 메시지의 컨텍스트 부분에 있는 포인터로, 두 번째 오름차림 태그를 식별합니다.연결되지 않은 태그는/>
로 닫아야 합니다. 다음 스니펫에서는 이 규칙을 따르지 않으며 위에 표시된 오류 메시지가 생성되었습니다.<domain type='kvm'> ... <clock offset='utc'>
이 오류는 파일의 일치하지 않는 XML 태그로 인해 발생합니다. 모든 XML 태그에는 일치하는 start 및 end 태그가 있어야 합니다.- 일치하지 않는 XML 태그의 다른 예
- 다음 예제에서는 유사한 오류 메시지를 생성하고 일치하지 않는 XML 태그의 변형을 보여줍니다.이 스니펫에는 최종 태그가 없기 때문에
<features>
에 대한 불일치 오류가 포함되어 있습니다(</name>
):<domain type='kvm'> ... <features> <acpi/> <pae/> ... </domain>
이 스니펫에는 해당 시작 태그가 없는 엔드 태그(</name>
)가 포함되어 있습니다.<domain type='kvm'> </name> ... </domain>
- 해결책
- 모든 XML 태그가 올바르게 시작되고 종료되는지 확인합니다.
A.19.10.2.4. 태그의 오타 오류
- 증상
- 다음과 같은 오류 메시지가 표시됩니다.
error: (name_of_guest.xml):1: Specification mandate value for attribute ty <domain ty pe='kvm'> -----------^
- 조사
- XML 오류는 간단한 오타 오류로 인해 쉽게 발생할 수 있습니다. 이 오류 메시지는 XML 오류를 강조 표시합니다.이 경우 포인터와 함께 word
type
내의 추가 공백을 나타냅니다.<domain ty pe='kvm'>
이러한 XML 예제는 누락된 특수 문자 또는 추가 문자와 같은 오타 오류로 인해 올바르게 구문 분석되지 않습니다.<domain type 'kvm'>
<dom#ain type='kvm'>
- 해결책
- 문제가 있는 태그를 식별하려면 파일 컨텍스트에 대한 오류 메시지를 읽고 포인터를 사용하여 오류를 찾습니다. XML을 수정하고 변경 사항을 저장합니다.
A.19.10.3. 논리 및 구성 오류
A.19.10.3.1. vanishing parts
- 증상
- 변경 사항의 일부는 표시되지 않으며 도메인을 편집하거나 정의한 후에는 적용되지 않습니다. define 또는 edit 명령이 작동하지만 XML을 다시 덤프하면 변경 사항이 사라집니다.
- 조사
- 이 오류는 libvirt가 구문 분석하지 않는 구문 또는 구문으로 인해 발생할 수 있습니다. libvirt 툴은 일반적으로 이를 알고 있는 구문만 찾고 다른 모든 것은 무시하므로 libvirt 가 입력을 구문 분석한 후 일부 XML 변경 사항이 발생합니다.
- 해결책
- 편집 으로 전달하거나 명령을 정의하기 전에 XML 입력을 검증합니다. libvirt 개발자는 libvirt 에서 사용하는 XML 문서에 허용되는 대부분의 구문을 정의하는 libvirt 와 함께 번들된 XML 스키마 집합을 유지합니다.다음 명령을 사용하여 libvirt XML 파일을 검증합니다.
# virt-xml-validate libvirt.xml
이 명령이 통과하면 libvirt 는 스키마가 지정된 하이퍼바이저에 대해서만 유효한 옵션을 탐지할 수 없는 경우를 제외하고 XML의 모든 구문을 이해할 수 있습니다. 예를 들어 virsh dump 명령의 결과로 libvirt 에서 생성한 모든 XML은 오류 없이 유효성을 검사해야 합니다.
A.19.10.3.2. 잘못된 드라이브 장치 유형
- 증상
- CD-ROM 가상 드라이브의 소스 이미지에 대한 정의는 추가되지 않았습니다.
# virsh dumpxml domain <domain type='kvm'> ... <disk type='block' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='hdc' bus='ide'/> <readonly/> </disk> ... </domain>
- 해결책
- 다음과 같이 누락된
<source>
매개변수를 추가하여 XML을 수정합니다.<disk type='block' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/path/to/image.iso'/> <target dev='hdc' bus='ide'/> <readonly/> </disk>
type='block'
디스크 장치는 소스가 물리적 장치여야 합니다. 이미지 파일이 있는 디스크를 사용하려면 대신type='file'
을 사용합니다.
부록 B. 여러 아키텍처에서 KVM 가상화 사용
B.1. IBM POWER Systems에서 KVM 가상화 사용
설치
- 고객 포털의 부팅 가능한 이미지에서 호스트 시스템을 설치합니다.자세한 내용은 Red Hat Enterprise Linux 7 설치 가이드 를 참조하십시오.
- 호스트 시스템이 하이퍼바이저 요구 사항을 충족하는지 확인합니다.
- 시스템 유형이 올바른지 확인합니다.
# grep ^platform /proc/cpuinfo
이 명령의 출력에는 지원되는PowerNV
머신 유형에서 실행 중임을 나타내는 PowerNV 항목이 포함되어야 합니다.platform : PowerNV
- KVM-HV 커널 모듈을 로드합니다.
# modprobe kvm_hv
- KVM-HV 커널 모듈이 로드되었는지 확인합니다.
# lsmod | grep kvm
KVM-HV가 성공적으로 로드되면 이 명령의 출력에kvm_hv
가 포함됩니다.
- 2장. 가상화 패키지 설치 에 설명된 다른 가상화 패키지 외에도 qemu-kvm-ma 패키지를 설치합니다.
아키텍처별
- IBM POWER 호스트에서 게스트의 최소 메모리 할당은 2GB RAM 입니다.
- 다음 가상화 기능은 AMD64 및 Intel 64 호스트에서 비활성화되어 있지만 IBM POWER에서 작동합니다. 그러나 Red Hat에서는 지원되지 않으므로 다음을 사용하지 않는 것이 좋습니다.
- I/O 스레드
- SMBIOS 구성을 사용할 수 없습니다.
- 호환성 모드 게스트를 포함한 POWER8 게스트는 다음과 같은 오류로 인해 시작되지 않을 수 있습니다.
qemu-kvm: Failed to allocate KVM HPT of order 33 (try smaller maxmem?): Cannot allocate memory
이는 Red Hat Enterprise Linux 7.3 또는 이전 버전을 사용하는 게스트에서 훨씬 더 발생할 가능성이 높습니다.이 문제를 해결하려면kvm_cma_resv_ratio=
메모리를 호스트의 커널 명령줄에 추가하여 게스트의 해시된 페이지 테이블(HPT)에 사용할 수 있는 CMA 메모리 풀을 늘립니다. 여기서 메모리는 CMA 풀에 예약해야 하는 호스트 메모리의 백분율입니다(기본값: 5). - THP(Transparent Huge Page)는 현재 IBM POWER8 게스트에서 주목할 만한 성능 이점을 제공하지 않습니다.또한 IBM POWER8 시스템의 정적 대규모 페이지 크기는 16MiB 및 16GiB이며 AMD64 및 Intel 64 및 IBM POWER9에서는 1GiB입니다. 결과적으로 게스트가 정적 대규모 페이지로 구성된 경우 IBM POWER8 호스트에서 IBM POWER9 호스트로 게스트를 마이그레이션할 수 없습니다.또한 IBM POWER8 게스트에서 정적 대규모 페이지 또는 THP를 사용하려면 먼저 호스트에서 대규모 페이지를 설정해야 합니다.
- AMD64 및 Intel 64 시스템에서 지원되는 여러 가상 주변 장치는 IBM POWER 시스템에서 지원되지 않거나 교체로 다른 장치가 지원됩니다.
ioh3420
및xio3130-downstream
장치를 포함한 PCI-E 계층에 사용되는 장치는 지원되지 않습니다. 이 기능은스파pr-pci-host-bridge
장치에서 제공되는 여러 개의 독립적인 PCI 루트 브리지로 교체됩니다.- UHCI 및 EHCI PCI 컨트롤러는 지원되지 않습니다. 대신 OHCI 및 XHCI 컨트롤러를 사용합니다.
- 가상 IDE CD-ROM(
ide-cd
) 및 가상 IDE 디스크(ide-hd
)를 포함한 IDE 장치는 지원되지 않습니다. 대신virtio-scsi
및virtio-blk
장치를 사용합니다. - 에뮬레이션된 PCI NIC(
rtl8139
)는 지원되지 않습니다. 대신virtio-net
장치를 사용합니다. intel-hda
,hda-output
,AC97
을 포함한 건전한 장치는 지원되지 않습니다.usb-redir
및usb-tablet
를 포함한 USB 리디렉션 장치는 지원되지 않습니다.
kvm-clock
서비스 는 IBM POWER 시스템에서 시간 관리를 위해 구성할 필요가 없습니다.pvpanic
장치는 IBM POWER 시스템에서 지원되지 않습니다. 그러나 기본적으로 이 아키텍처에서 동등한 기능을 사용할 수 있습니다. 게스트에서 활성화하려면preserve
값과 함께<on_crash>
구성 요소를 사용합니다. 또한 게스트가 IBM POWER 시스템에서 부팅하지 못할 수 있으므로<devices>
섹션에서<panic>
요소를 제거해야 합니다.- IBM POWER8 시스템에서는 게스트를 지원하기 위해 호스트 시스템을 단일 스레드 모드로 실행해야 합니다. qemu-kvm-ma 패키지가 설치된 경우 자동으로 구성됩니다. 그러나 단일 스레드 호스트에서 실행되는 게스트는 여전히 여러 스레드를 사용할 수 있습니다.
- RHEL 7 호스트에서 실행되는 IBM POWER 가상 머신(VM)이 제로 메모리(
memory='0'
)를 사용하는 NUMA 노드로 구성된 경우 VM이 제대로 작동하지 않습니다. 결과적으로 Red Hat은 RHEL 7에서 제로 메모리 NUMA 노드가 있는 IBM POWER VM을 지원하지 않습니다.
B.2. IBM Z에서 KVM 가상화 사용
설치
- 고객 포털의 부팅 가능한 이미지에서 호스트 시스템을 설치합니다. 자세한 내용은 설치 가이드 를 참조하십시오.
- 시스템이 하이퍼바이저 요구 사항을 충족하는지 확인합니다.
- CPU 가상화 확장을 사용할 수 있는지 확인합니다.
# grep sie /proc/cpuinfo
이 명령의 출력에는 프로세서에 필요한 가상화 확장이 있음을 나타내는sie
항목이 포함되어야 합니다.features : esan3 zarch stfle msa ldisp eimm dfp edat etf3eh highgprs te sie
- KVM 커널 모듈을 로드합니다.
# modprobe kvm
- KVM 커널 모듈이 로드되었는지 확인합니다.
# lsmod | grep kvm
KVM이 성공적으로 로드되면 이 명령의 출력에kvm
이 포함됩니다. 그렇지 않은 경우 Red Hat Enterprise Linux 7에 커널의 kernel-alt 버전을 사용하고 있는지 확인하십시오.
- 2장. 가상화 패키지 설치 에 설명된 다른 가상화 패키지 외에도 qemu-kvm-ma 패키지를 설치합니다.
- 게스트를 설정할 때 "Spectre" 취약점으로부터 게스트 를 보호하는 다음 방법 중 하나로 CPU 를 설정하는 것이 좋습니다.
- 예를 들면 다음과 같이 호스트 CPU 모델을 사용합니다.
<cpu mode='host-model' check='partial'> <model fallback='allow'/> </cpu>
이렇게 하면 호스트가 지원하는 경우ppa15
및bpb
기능을 게스트에서 사용할 수 있습니다. - 특정 호스트 모델을 사용하는 경우
ppa15
및bpb
기능을 추가합니다. 다음 예에서는zEC12
CPU 모델을 사용합니다.<cpu mode='custom' match='exact' check='partial'> <model fallback='allow'>zEC12</model> <feature policy='force' name='ppa15'/> <feature policy='force' name='bpb'/> </cpu>
참고z12
호스트 시스템에서z114
및z196
CPU 모델에ppa15
기능을 사용하는 경우 최신 마이크로 코드 수준(bundle 95 이상)을 사용해야 합니다.
아키텍처별
- SPICE 및 VNC 프로토콜을 사용할 수 없으며 가상 그래픽 카드 장치는 IBM Z에서 지원되지 않습니다. 따라서 게스트 그래픽 출력을 표시할 수 없습니다.
- 가상 PCI 및 USB 장치는 IBM Z에서 지원되지 않습니다. 즉, virtio-*-pci 장치는 지원되지 않으며
virtio-*-ccw
장치를 대신 사용해야 합니다. 예를 들어virtio-net-pci
대신virtio-net-ccw
를 사용합니다. - <boot dev='장치'/> XML 구성 요소는 IBM Z에서 지원되지 않습니다. 장치 부팅 순서를 정의하려면 <devices> 섹션에 <boot order='번호'/> 요소를 사용합니다. 예를 들어 업스트림 libvirt 문서를 참조하십시오.참고부팅 순서 관리에 <boot order='번호'/>를 사용하는 것이 AMD64 및 Intel 64 호스트에서도 선호됩니다.
- SMBIOS 구성을 사용할 수 없습니다.
- IBM Z에서 사용되는 워치독 장치 모델은 diag
288 여야
합니다. - IBM Z에서 중첩된 가상화 기능을 활성화하려면 다음을 수행하십시오. AMD64 및 Intel 64 시스템에서와 마찬가지로 중첩된 가상화는 IBM Z에서 기술 프리뷰 로 제공되므로 프로덕션 환경에서 사용하지 않는 것이 좋습니다.
- 시스템에서 중첩된 가상화가 이미 활성화되어 있는지 확인합니다.
$ cat /sys/module/kvm/parameters/nested
이 명령이1
을 반환하면 해당 기능이 이미 활성화되어 있습니다.명령에서0
을 반환하는 경우 다음 단계를 사용하여 활성화합니다. kvm
모듈을 언로드합니다.# modprobe -r kvm
- 중첩 기능을 활성화합니다.
# modprobe kvm nested=1
- 이제 다음 호스트를 재부팅할 때까지만 중첩 기능이 활성화됩니다. 영구적으로 활성화하려면
/etc/modprobe.d/kvm.conf
파일에 다음 행을 추가합니다.options kvm nested=1
kvm-clock
서비스는 AMD64 및 Intel 64 시스템에 고유하며 IBM Z에서 시간 관리를 위해 구성할 필요가 없습니다.
B.3. ARM 시스템에서 KVM 가상화 사용
설치
- 고객 포털의 부팅 가능한 이미지에서 호스트 시스템을 설치합니다.
- 시스템이 설치되면 다음 명령을 사용하여 시스템에 가상화 스택을 설치합니다.
# yum install qemu-kvm-ma libvirt libvirt-client virt-install AAVMF
설치에 대해선택적
채널이 활성화되어 있는지 확인합니다.
아키텍처별
- PXE 부팅은
virtio-net-device
및virtio-net-pci
NIC(네트워크 인터페이스 컨트롤러)에서만 지원됩니다. 또한 ARM 아키텍처 가상 머신 펌웨어(AAVMF)의 내장VirtioNetDxe
드라이버를 PXE 부팅에 사용해야 합니다. iPXE 옵션 Roms는 지원되지 않습니다. - 최대 123개의 가상 CPU(vCPU)만 단일 게스트에 할당할 수 있습니다.
부록 C. 가상화 제한 사항
C.1. 시스템 제한 사항
- 호스트 시스템
- KVM이 포함된 Red Hat Enterprise Linux는 다음 호스트 아키텍처에서만 지원됩니다.
- AMD64 및 Intel 64
- IBM Z
- IBM POWER8
- IBM POWER9
이 문서에서는 AMD64 및 Intel 64 기능 및 기능을 설명하지만 다른 지원되는 아키텍처는 매우 유사합니다. 자세한 내용은 부록 B. 여러 아키텍처에서 KVM 가상화 사용의 내용을 참조하십시오. - 게스트 시스템
- Red Hat Enterprise Linux 7에서 Microsoft Windows 게스트 가상 머신은 AMQP(Advanced mission Critical)와 같은 특정 서브스크립션 프로그램에서만 지원됩니다. 서브스크립션 모델에 Windows 게스트에 대한 지원이 포함되어 있는지 확실하지 않은 경우 고객 지원에 문의하십시오.Red Hat Enterprise Linux 7의 Windows 게스트 가상 머신에 대한 자세한 내용은 Red Hat Enterprise Linux 7 지식 베이스에서 Windows 게스트 가상 머신 을 참조하십시오.
C.2. 기능 제한
- 게스트당 최대 vCPU 수
- Red Hat Enterprise Linux 7.2 이상에서는 Red Hat Enterprise Linux 7.0의160부터 게스트당240개의 vCPU를 지원합니다.
- 중첩된 가상화
- 중첩된 가상화는 Red Hat Enterprise Linux 7.2 이상에서 기술 프리뷰 로 제공됩니다. 이 기능을 통해 KVM은 하이퍼바이저로 작동하고 자체 게스트를 생성할 수 있는 게스트를 시작할 수 있습니다.
- DomainMappingG 지원
- QEMU 및 libvirt 에는 QEMU Tiny Code Generator(DEVG)를 사용하는 동적 변환 모드가 포함되어 있습니다. 이 모드에서는 하드웨어 가상화 지원이 필요하지 않습니다. 그러나 ProcessG는 Red Hat에서 지원하지 않습니다.qemu-kvm 패키지가 가상 머신에 중첩된 게스트를 생성하는 데 사용되는 경우 상위 가상 머신에서 중첩된 가상화가 활성화되지 않는 한 ProcessG를 사용합니다. 중첩된 가상화는 현재 기술 프리뷰입니다. 자세한 내용은 12장. 중첩된 가상화의 내용을 참조하십시오.ProcessG 기반 게스트는 다음을 사용하여 인식할 수 있습니다.
- 게스트의 도메인 XML 파일에는
<domain type='qemu'>
행이 포함된 반면 KVM 게스트에는<domain type='kvm'>
이 포함되어 있습니다.
- 상수 TSC 비트
- Constant Time Stampredentials(TSC)가 없는 시스템에는 추가 구성이 필요합니다. 관련 문제를 해결하기 위한 지속적인 TSC 및 구성 단계가 있는지 확인하는 방법에 대한 자세한 내용은 8장. KVM 게스트 타이밍 관리 을 참조하십시오.
- 에뮬레이션된 SCSI 어댑터
- SCSI 장치 에뮬레이션은 virtio-scsi 반가상화 호스트 버스 어댑터(HBA)에서만 지원됩니다. 에뮬레이션된 SCSI HBA는 Red Hat Enterprise Linux의 KVM에서 지원되지 않습니다.
- 에뮬레이션된 IDE 장치
- KVM은 가상 머신당 최대 4개의 가상화된 (emulated) IDE 장치로 제한됩니다.
- 반가상화 장치
- 반가상화 장치는 VirtIO 장치라고도 합니다. 가상 머신에서 최적으로 작동하도록 설계된 순수한 가상 장치입니다.Red Hat Enterprise Linux 7은 가상 머신 버스당 32개의 PCI 장치 슬롯과 장치 슬롯당 8개의 PCI 기능을 지원합니다. 이를 통해 가상 머신에서 다중 기능 기능이 활성화되고 PCI 브리지가 사용되는 경우 버스당 최대 256개의 PCI 기능을 사용할 수 있습니다. 각 PCI 브릿지는 새로운 버스를 추가하여 잠재적으로 다른 256개의 장치 주소를 가능하게 합니다. 그러나 일부 버스는 사용자가 256 장치 주소를 모두 사용할 수 있도록 하지 않습니다; 예를 들어 루트 버스에는 슬롯을 차지하는 여러 개의 내장 장치가 있습니다.PCI 브리지에 대한 자세한 내용은 16장. 게스트 가상 머신 장치 구성 을 참조하십시오. 16.1.5절. “PCI 브리지”
- 마이그레이션 제한 사항
- 장치 할당은 해당 가상 머신을 독점적으로 사용하기 위해 가상 머신에 노출된 물리적 장치를 나타냅니다. 장치 할당은 가상 머신이 실행되는 특정 호스트의 하드웨어를 사용하므로 장치 할당이 사용 중일 때 마이그레이션 및 저장/복원이 지원되지 않습니다. 게스트 운영 체제가 핫 플러그를 지원하는 경우 이 기능을 활성화하기 위해 마이그레이션 전에 할당된 장치를 제거하거나 저장/복원 작업을 수행할 수 있습니다.실시간 마이그레이션은 동일한 CPU 유형의 호스트 (즉 Intel에서 Intel 또는 AMD에서 AMD로만)를 사용하는 호스트 사이에서만 가능합니다.실시간 마이그레이션의 경우 두 호스트 모두 NX(No eXecution) 비트에 대해 설정된 것과 동일한 값이 있어야 합니다.마이그레이션이 작동하려면 쓰기 모드에서 열린 모든 블록 장치에 대해
cache=none
을 지정해야 합니다.주의cache=none
옵션을 포함하지 않으면 디스크 손상이 발생할 수 있습니다. - 스토리지 제한 사항
- 게스트 가상 머신은 전체 디스크 또는 블록 장치(예:
/dev/sdb
)에 대한 쓰기 액세스 권한을 부여하는 것과 관련된 위험이 있습니다. 게스트 가상 머신이 전체 블록 장치에 액세스할 수 있는 경우 모든 볼륨 레이블 또는 파티션 테이블을 호스트 시스템과 공유할 수 있습니다. 호스트 시스템의 파티션 인식 코드에 버그가 있는 경우 보안 위험이 발생할 수 있습니다. 게스트 가상 머신에 할당된 장치를 무시하도록 호스트 시스템을 구성하여 이러한 위험을 방지합니다.주의스토리지 제한 사항을 준수하지 않으면 보안에 위험이 발생할 수 있습니다. - 실시간 스냅샷
- Red Hat Enterprise Linux의 KVM의 백업 및 복원 API는 실시간 스냅샷을 지원하지 않습니다.
- 스트리밍, 미러링 및 라이브 병합
- streaming, mirroring 및 live-merge는 지원되지 않습니다. 이렇게 하면 block-jobs가 방지됩니다.
- I/O 제한
- Red Hat Enterprise Linux는 가상 디스크의 작업에 대한 최대 입력 및 출력 레벨 구성을 지원하지 않습니다.
- I/O 스레드
- Red Hat Enterprise Linux는 VirtIO 인터페이스가 있는 디스크에서 입력 및 출력 작업을 위해 별도의 스레드 생성을 지원하지 않습니다.
- 메모리 핫 플러그 및 핫 언플러그
- Red Hat Enterprise Linux는 가상 머신에서 메모리를 핫 플러그 또는 핫 플러그 해제를 지원하지 않습니다.
- vhost-user
- Red Hat Enterprise Linux는 사용자 공간 가상호스트 인터페이스의 구현을 지원하지 않습니다.
- CPU 핫 언플러그
- Red Hat Enterprise Linux는 가상 머신에서 CPU 핫 플러그를 지원하지 않습니다.
- PCIe의 NUMA 게스트 지역성
- Red Hat Enterprise Linux는 가상 PCIe 장치 바인딩을 특정 NUMA 노드에 바인딩하는 것을 지원하지 않습니다.
- 코어 덤프 제한 사항
- 현재 코어 덤프가 마이그레이션 시 구현되므로 장치 할당이 사용 중일 때 지원되지 않습니다.
- 실시간 커널
- KVM은 현재 실시간 커널을 지원하지 않으므로 Red Hat Enterprise Linux for Real Time에서 사용할 수 없습니다.
C.3. 애플리케이션 제한
- kdump 서버
- netdump 서버
C.4. 기타 제한 사항
C.5. 스토리지 지원
- 로컬 스토리지의 파일
- 물리 디스크 파티션
- 로컬로 연결된 물리적 LUN
- LVM 파티션
- NFS 공유 파일 시스템
- iSCSI
- GFS2 클러스터형 파일 시스템
- 파이버 채널 기반 LUN
- FCoE(Fibre Channel over Ethernet)
C.6. USB 3 / xHCI 지원
- 가상화 호환 하드웨어 설계는 xHCI 에뮬레이션에 폴링 오버헤드 감소로 인해 이전 버전보다 적은 CPU 리소스가 필요합니다.
- USB 3 장치의 USB 패스스루를 사용할 수 있습니다.
- Red Hat Enterprise Linux 5 게스트는 지원되지 않습니다.
부록 D. 추가 리소스
D.1. 온라인 리소스
- http://www.libvirt.org/ 은 libvirt 가상화 API의 공식 업스트림 웹 사이트입니다.
- https://virt-manager.org/ 는 가상 머신 관리를 위한 그래픽 애플리케이션인 Virtual Machine Manager (virt-manager)의 업스트림 프로젝트 웹 사이트입니다.
- Red Hat Virtualization - http://www.redhat.com/products/cloud-computing/virtualization/
- Red Hat 제품 설명서 - https://access.redhat.com/documentation/en/
- 가상화 기술 개요 - http://virt.kernelnewbies.org
D.2. 설치된 문서
- man virsh 및
/usr/share/doc/libvirt-version-number
- virsh 가상 머신 관리 유틸리티에 대한 하위 명령 및 옵션을 비롯하여libvirt
가상화 라이브러리 API에 대한 포괄적인 정보가 포함되어 있습니다. /usr/share/doc/gnome-applet-vm-version-number
- 로컬 실행 가상 머신을 모니터링하고 관리하는 GNOME 그래픽 패널 장치 문서에 대한 설명서입니다./usr/share/doc/libvirt-python-version-number
-libvirt
라이브러리의 Python 바인딩에 대한 세부 정보를 제공합니다.libvirt-python
패키지를 사용하면 python 개발자가libvirt
가상화 관리 라이브러리와 인터페이스하는 프로그램을 생성할 수 있습니다./usr/share/doc/virt-install-version-number
- 가상 머신 내부에 Fedora 및 Red Hat Enterprise Linux 관련 배포 설치를 시작하는 데 도움이 되는 virt-install 명령에 대한 설명서를 제공합니다./usr/share/doc/virt-manager-version-number
- 가상 머신을 관리하는 그래픽 도구를 제공하는 가상 머신 관리자에 대한 설명서를 제공합니다.- 참고다른 Red Hat Enterprise Linux 구성 요소에 대한 자세한 내용은
usr/share/doc/
.에서 해당 man 페이지 또는 파일을 참조하십시오.
부록 E. IOMMU 그룹 작업[1]
- IOMMU 그룹의 개요
- 장치 분리의 중요
- VFIO 이점
E.1. IOMMU 개요
- 흐름 버퍼 는 장치의 주소 지정 기능이 플랫폼의 기능보다 작은 경우 필요합니다. 예를 들어, 장치의 주소 공간이 메모리의 4GB(32비트)로 제한되고 드라이버는 4GB 이상의 버퍼에 할당하는 경우 장치는 버퍼에 직접 액세스할 수 없습니다. 이러한 상황은 소진 버퍼를 사용하는 상황이 필요합니다. 더 낮은 메모리에 위치한 버퍼 공간은 장치가 Makefile 작업을 수행할 수 있습니다. 버퍼의 데이터는 작업 완료 시 드라이버의 할당된 버퍼에만 복사됩니다. 즉, 하위 메모리 주소에서 더 높은 메모리 주소로 버퍼가 소진됩니다. IOMMUs는 장치의 주소 공간 내에 IOVA 변환을 제공하여 버퍼링을 피합니다. 그러면 버퍼가 장치의 실제 주소 공간을 초과하여 확장되는 경우에도 장치가 버퍼로 직접 수행할 수 있습니다. 이전에는 이 IOMMU 기능이 IOMMU의 배타적 사용 사례이지만 PCI (PCIe) 채택을 통해 4GB 이상의 주소 지정을 지원할 수 있는 기능이 기존이 아닌 모든 끝점에 필요합니다.
- 기존 메모리 할당에서는 애플리케이션의 필요에 따라 메모리 블록이 할당되고 해제됩니다. 이 방법을 사용하면 실제 주소 공간 전체에 메모리 부족이 발생합니다. 메모리 간격을 더 효율적으로 사용하거나 메모리 간격을 함께 수집할 경우 기본 용어가 더 적합할 경우 더 좋습니다. IOMMU는 IOVA 공간을 통해 이러한 분산된 메모리 목록을 병합하고, 경우에 따라 spread-gather 목록이라고 합니다. 이를 통해 IOMMU는 연속된 ImageStreamTag 작업을 생성하고 궁극적으로 I/O 성능의 효율성을 높입니다. 가장 간단한 예에서 드라이버는 실제 메모리 공간에 연속되지 않은 두 개의 4KB 버퍼를 할당할 수 있습니다. IOMMU는 이러한 버퍼에 연속된 범위를 할당할 수 있으므로 I/O 장치가 두 개의 별도의 4KBReplicass가 아니라 단일 8KBReplicas를 수행할 수 있습니다.
E.2. IOMMU 그룹에 대한 Deep-dive
E.3. IOMMU 그룹 식별 및 할당 방법
절차 E.1. IOMMU 그룹
장치 나열
virsh nodev-list device-type명령을 실행하여 시스템의 장치를 식별합니다. 이 예제에서는 PCI 장치를 찾는 방법을 보여줍니다. 출력은 간결성을 위해 잘립니다.# virsh nodedev-list pci pci_0000_00_00_0 pci_0000_00_01_0 pci_0000_00_03_0 pci_0000_00_07_0 [...] pci_0000_00_1c_0 pci_0000_00_1c_4 [...] pci_0000_01_00_0 pci_0000_01_00_1 [...] pci_0000_03_00_0 pci_0000_03_00_1 pci_0000_04_00_0 pci_0000_05_00_0 pci_0000_06_0d_0
장치의 IOMMU 그룹화 찾기
나열된 각 장치에 대해 IOMMU 그룹화를 포함한 장치에 대한 자세한 정보는 virsh nodedev-dumpxml name-of-device 명령을 사용하여 확인할 수 있습니다. 예를 들어 pci_0000_04_00_0(PCI 주소 0000:04:00.0)이라는 PCI 장치의 IOMMU 그룹화를 찾으려면 다음 명령을 사용합니다.# virsh nodedev-dumpxml pci_0000_04_00_0
이 명령은 표시된 것과 유사한 XML 덤프를 생성합니다.그림 E.1. IOMMU 그룹 XML
<device> <name>pci_0000_04_00_0</name> <path>/sys/devices/pci0000:00/0000:00:1c.0/0000:04:00.0</path> <parent>pci_0000_00_1c_0</parent> <capability type='pci'> <domain>0</domain> <bus>4</bus> <slot>0</slot> <function>0</function> <product id='0x10d3'>82574L Gigabit Network Connection</product> <vendor id='0x8086'>Intel Corporation</vendor> <iommuGroup number='8'> <!--This is the element block you will need to use--> <address domain='0x0000' bus='0x00' slot='0x1c' function='0x0'/> <address domain='0x0000' bus='0x00' slot='0x1c' function='0x4'/> <address domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> <address domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> </iommuGroup> <pci-express> <link validity='cap' port='0' speed='2.5' width='1'/> <link validity='sta' speed='2.5' width='1'/> </pci-express> </capability> </device>
PCI 데이터 보기
위에서 수집된 출력에는 4개의 장치가 있는 IOMMU 그룹이 있습니다. 이는 ACS를 지원하지 않는 다중 기능 PCIe 루트 포트의 예입니다. 슬롯 0x1c의 두 가지 기능은 lspci 명령을 실행하여 식별할 수 있는 PCIe 루트 포트입니다( pciutils 패키지의 경우).# lspci -s 1c 00:1c.0 PCI bridge: Intel Corporation 82801JI (ICH10 Family) PCI Express Root Port 1 00:1c.4 PCI bridge: Intel Corporation 82801JI (ICH10 Family) PCI Express Root Port 5
버스 0x04 및 0x05에서 엔드포인트 장치인 2개의 PCIe 장치에 대해 이 단계를 반복합니다.# lspci -s 4 04:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection This is used in the next step and is called 04:00.0 # lspci -s 5 This is used in the next step and is called 05:00.0 05:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5755 Gigabit Ethernet PCI Express (rev 02)
게스트 가상 머신에 끝점 할당
끝점 중 하나를 가상 머신에 할당하려면 현재 할당하지 않는 끝점을 VFIO 호환 드라이버에 바인딩해야 하므로 IOMMU 그룹이 사용자와 호스트 드라이버 간에 분할되지 않도록 해야 합니다. 예를 들어, 위에서 수신한 출력을 사용하는 경우 04:00.0만 사용하여 가상 시스템을 구성하는 것입니다. 가상 시스템은 호스트 드라이버에서 05:00.0을 분리하지 않는 한 가상 머신을 시작할 수 없습니다. 05:00.0을 분리하려면 virsh nodedev-detach 명령을 root로 실행합니다.# virsh nodedev-detach pci_0000_05_00_0 Device pci_0000_05_00_0 detached
이 문제를 해결하기 위한 또 다른 옵션은 가상 머신에 두 끝점을 모두 할당하는 것입니다. libvirt 는<hostdev>
요소 내의managed
속성의 yes 값을 사용할 때 연결된 장치에 대해 이 작업을 자동으로 수행합니다. 예:<hostdev mode='subsystem' type='pci' managed='yes'>
. 자세한 내용은 참고를 참조하십시오.
<hostdev>
요소 내의 관리
특성에 지정된 값에 의해 결정됩니다. 장치를 관리하면 libvirt 는 기존 드라이버에서 장치를 자동으로 분리한 다음 부팅 시 vfio-pci(가상 머신의 경우)에 바인딩하여 가상 머신에 할당합니다. 가상 머신이 종료되거나 삭제되거나 PCI 장치가 가상 머신에서 분리되면 libvirt는 vfio-pci에서 장치를 바인딩 해제하고 원래 드라이버로 다시 바인딩합니다. 장치가 관리되지 않는 경우 libvirt 는 프로세스를 자동화하지 않으며, 가상 머신에 장치를 할당하기 전에 설명된 관리 측면을 모두 수행해야 하며, 가상 머신에서 장치를 더 이상 사용하지 않으면 장치를 다시 할당해야 합니다. 관리되지 않는 장치에서 이러한 작업을 수행하지 않으면 가상 머신이 실패합니다. 따라서 libvirt 에서 장치를 관리하는 것이 더 쉬워질 수 있습니다.
E.4. IOMMU 전략 및 사용 사례
부록 F. 개정 내역
고친 과정 | |||
---|---|---|---|
고침 2-42 | Thu August 9 2019 | Jiri Herrmann | |
| |||
고침 2-40 | Thu May 23 2019 | Jiri Herrmann | |
| |||
고침 2-39 | Thu Oct 25 2018 | Jiri Herrmann | |
| |||
고침 2-37 | Thu Aug 14 2018 | Jiri Herrmann | |
| |||
고침 2-36 | Thu Aug 14 2018 | Jiri Herrmann | |
| |||
고침 2-35 | Thu Apr 5 2018 | Jiri Herrmann | |
| |||
고침 2-32 | Thu Jul 27 2017 | Jiri Herrmann | |
| |||
고침 2-32 | Thu Jul 27 2017 | Jiri Herrmann | |
| |||
고침 2-29 | Mon Oct 17 2016 | Jiri Herrmann | |
| |||
고침 2-24 | Thu Dec 17 2015 | Laura Novich | |
| |||
고침 2-23 | Sun Nov 22 2015 | Laura Novich | |
| |||
고침 2-21 | Thu Nov 12 2015 | Laura Novich | |
| |||
고침 2-19 | Thu Oct 08 2015 | Jiri Herrmann | |
| |||
고침 2-17 | Thu Aug 27 2015 | Dayle Parker | |
|