Computer >> 컴퓨터 >  >> 소프트웨어 >> 가상 기기

KVM에서 가상 머신을 복제하는 방법 - 자습서

참고:이 자습서에서는 virt-sysprep이 없다고 가정합니다.; 아래 참조!

아니요, 이것은 virt-clone 사용에 대한 또 다른 일반적인 하우투가 아닙니다. virt-clone은 가상 머신의 복제본을 생성하는 데 다소 유용한 도구이지만 현재 구성에서는 복제된 시스템에 고유한 ID와 MAC 주소만 할당하므로 복제본이 부팅되면 추가 조정 및 사용자 지정을 수행해야 합니다. 이것은 당신이 원하는 것이 아닌 상당히 간섭해야 할 수도 있음을 의미합니다.

좋습니다. KVM 기술에서 고유한 호스트별 정보를 사용하여 가상 머신의 동일한 복사본을 생성하는 다른 방법을 보여 드리겠습니다. 그러면 얼마든지 중복된 것이 네트워크의 개별 호스트가 됩니다. 즉, 한 번 설치한 다음 각각 고유한 호스트 이름, MAC 주소, IP 주소 등을 사용하여 필요한 만큼 게스트 인스턴스를 생성합니다. 완전히 스크립트 가능하고 그 모든 것. 그러니 저를 따라오세요.

참고:이 이미지는 CC BY 2.0에 따라 라이선스가 부여된 Wikimedia에서 가져온 것입니다.

덜 효율적인 방법

잠시 동안 virt-clone에 대해 간략하게 살펴보겠습니다. 나쁜 유틸리티는 아니지만 그 사용은 배포판에서 표준이 아닙니다. 일부는 Virtual Machine Manager의 일부로 GUI 구성 요소를 모두 제공하고 다른 일부는 명령줄 도구도 제공합니다. 두 경우 모두 클론에는 새로운 고유 ID와 MAC 주소만 할당되며 다른 정보는 할당되지 않습니다. 구성 파일은 /etc/libvirt/qemu에 저장됩니다.

다음은 예입니다.

이제 우리는 이것을 원하지 않습니다. 완벽하지 않습니다.

복제 + 거래 도구

이제 올바른 방법입니다. 원하는 결과를 얻으려면 도구가 거의 필요하지 않습니다. 사실 파티션 테이블에서 장치 맵을 생성할 수 있는 유틸리티인 kpartx라는 하나의 도구입니다. 특히 여기에서 이를 사용하여 가상 디스크를 쿼리하여 게스트 머신에 대한 파티션 매핑을 생성할 수 있습니다. Linux를 사용하여 시연하지만 대부분의 UNIX 기반 시스템이 작동합니다.

따라서 우리가 해야 할 일은 가상 디스크에서 파티션 테이블을 읽는 것입니다. 먼저 가상 디스크의 복사본을 생성해야 합니다. 각 머신에는 고유한 것이 있습니다. 이것은 복제 절차의 느린 한 단계이며 파일 크기와 디스크 속도에 따라 달라집니다. 일반적으로 일반적인 20GB 디스크 파일을 복사하는 데 몇 분 정도 걸립니다.

cp <이전 디스크 파일> <새 디스크 파일>

이제 파티션 테이블:

kpartx -a <가상 디스크 파일>

이것은 약간의 출력을 생성합니다. 실제로 가상 머신 내부에 포함된 각 개별 파티션에 대해 별도의 매퍼가 표시됩니다. 예를 들어 / 및 /home이 있는 경우 두 개의 매퍼가 있습니다.

kpartx -av /kvm/disk.raw
추가 맵 loop0p1(253:0):0 4206592 linear /dev/loop0 2048
루프0p2 맵 추가(253:1):0 79677440 linear /dev/loop0 4208640

이제 관련 장치를 마운트하고 호스트별로 변경하는 문제입니다.

mount /dev/mapper/<관련 파티션 루프백> /mountpoint

예:

마운트 /dev/mapper/loop0p1 /mnt

고유한 호스트 변경 사항

이제 가상 머신에 다음 변경이 필요할 가능성이 높습니다.

/기타/호스트
/etc/호스트 이름

Debian을 사용하는지 아니면 RedHat/SUSE를 사용하는지에 따라 네트워크 구성이 있지만 DHCP를 사용하는 경우 필요하지 않을 수도 있습니다. 그러나 정적 IP 주소를 사용하는 경우 다음이 필수입니다.

/etc/sysconfig/network/ifcfg-<장치>

또는

/etc/네트워크/인터페이스

다른 변경 사항이 필요할 수 있지만 기본 변경 사항이 있습니다. 변경 사항을 저장했으면 마운트를 해제합니다. 다음 단계는 새 클론에 대한 KVM 구성 파일을 편집하는 것입니다. 머신이 Virtual Machine Manager를 사용하여 자동 생성된 경우 XML 파일은 일반적으로 /etc/kvm/vm 또는 /etc/libvirt/qemu 디렉토리에 보관됩니다.

XML 파일 변경

먼저 템플릿 구성의 복사본을 만듭니다.

이제 도메인의 고유 ID, 이름 및 MAC 주소를 편집해야 합니다. 이전과 마찬가지로 grep, awk 및 인라인 검색 및 sed로 바꾸기를 사용하는 일종의 고유성 논리를 적용하고 필요한 경우 적절한 양의 정규식을 추가하여 절차를 완전히 스크립팅할 수 있도록 해야 합니다. 당연히 하드 디스크 지시어가 올바른 파일을 가리키도록 해야 합니다.

예를 들어 다음은 필요할 수 있는 명령 세트입니다.

sed -i -e 's/\.*/\<\/uuid\>/uuid\>dedoimedo\<\/uuid/'
파일.xml

그리고 grep을 사용하여 작동하는지 확인합니다.

sed -i -e 's/\.*/\<\/uuid\>/uuid\>dedoimedo\<\/uuid/'
파일.xml. | 그렙 데도이메도

데도이메도

종합하기

따라서 완전한 복제 스크립트는 다음과 같습니다. 일반적인 RedHat 예제를 제공하고 있으므로 직접 조정할 수 있습니다. 마찬가지로 스크립트의 일부에는 파티션 출력을 구문 분석하는 방법을 결정하는 것과 같은 고유한 논리가 필요합니다. 또한 XML 파일의 출력을 구문 분석하고 여는 괄호와 닫는 괄호, 따옴표 및 기타 문자를 제거하는 추가 작업이 필요할 수 있습니다.

#!/빈/배시

# 복제하는 동안 템플릿 OS 일시 중지

virsh 정지 <도메인>
cp <이전 디스크> <새 디스크>
virsh 이력서 <도메인>

kpartx -a <새 디스크>

# 관련 파티션을 읽는 논리

mount <원하는 파티션> <마운트 지점>

# 호스트 고유 파일의 내용을 구문 분석하는 몇 가지 논리

sed -i -e 's/이전 호스트 이름 행/새 호스트 이름 행/' /etc/HOSTNAME
sed -i -e 's/이전 호스트 이름 줄/새 호스트 이름 줄/' /etc/hosts
sed -i -e 's/이전 IP 구성/새 IP 구성/' /etc/sysconfig/network/ifcfg-eth0

umount <마운트 지점>

CP /etc/kvm/vm/old.xml /etc/kvm/vm/new.xml

# 새로운 uuid, 이름, mac 등을 생성하는 몇 가지 논리
# XML 파일을 올바르게 구문 분석하기 위한 몇 가지 논리

sed -i -e 's/old uuid/new uuid/' /etc/kvm/vm/new.xml
sed -i -e 's/이전 이름/새 이름/' /etc/kvm/vm/new.xml
sed -i -e 's/old mac/new mac/' /etc/kvm/vm/new.xml
sed -i -e 's/이전 디스크/새 디스크/' /etc/kvm/vm/new.xml

virsh 생성 /etc/kvm/vm/new.xml

출구 0

그리고 끝났습니다. 부팅하고 즐기십시오!

가능성이 가장 높은 미래:virt-sysprep

상자에 virt-sysprep을 사용할 수 있는 경우 이 전체 자습서는 쓸모가 없습니다. 이는 아마도 선호하는 운영 체제의 최신 버전 중 하나를 사용하고 있음을 의미합니다. 그러나 비즈니스 환경에서는 그렇지 않을 가능성이 높으므로 대부분의 시스템 관리자는 이 도구를 사용할 수 없습니다. 사용할 기회가 있다면 기본 복제 도구에 대한 정말 편리한 개선 사항을 제공합니다. 원본 문서 인용:

Virt-sysprep은 클론을 만들 수 있도록 가상 머신을 재설정하거나 구성 해제합니다. 이 프로세스의 단계에는 SSH 호스트 키 제거, 영구 네트워크 MAC 구성 제거 및 사용자 계정 제거가 포함됩니다. 필요에 따라 각 단계를 활성화하거나 비활성화할 수 있습니다. Virt-sysprep은 게스트 또는 디스크 이미지를 제자리에서 수정합니다. 게스트를 종료해야 합니다. 게스트의 기존 콘텐츠를 보존하려면 먼저 디스크를 복사하거나 복제해야 합니다.

이 편리한 도구는 다른 자습서에서 별도로 설명합니다.

더 읽어보기

KVM 재미에 대한 자세한 내용:

KVM + VirtualBox의 조화

KVM 브리지 네트워크 자습서

KVM 스토리지 및 네트워크 관리

ESXi 시스템을 복제하는 방법은 다음과 같습니다. 개념상 유사합니다.

가상 머신 디스크 이미지 도구의 또 다른 멋진 리소스 - libguestfs

결론

이것은 매우 간단하고 우아한 자습서입니다. 다른 도구를 사용하여 대부분 수동 복제 절차를 보완하므로 매우 유용하다고 생각합니다. 단일 BASH 스크립트에 쉽게 배치할 수 있는 일련의 명령을 얻은 다음 Bob은 삼촌입니다.

좀 더 진지하게 말하자면, KVM 구성 및 파일 위치, virt-clone의 매우 기초적인 사용, 네트워크 및 호스트 구성을 포함하여 partx를 사용하여 가상 머신 디스크를 마운트하고 관련 파티션에서 데이터를 편집하는 방법에 대해 조금 더 배웠습니다. 가상 도메인에 고유한 필드를 할당하는 방법. 그리고 libguestfs도 있습니다. 또한 매우 유용한 다른 가이드도 있습니다. 대체로 5분 작업에 나쁘지 않습니다.

마지막으로 virt-sysprep을 사용하면 복제가 훨씬 쉬워지지만 수동 방법은 조금 더 복잡하지만 완벽합니다. 이를 사용하여 원하는 모든 작업을 수행할 수 있으며 명령줄 스위치 및 옵션의 기존 하위 집합으로 제한되지 않습니다. 항상 작동하며 항상 완전히 스크립트로 작성할 수 있습니다. 화려한.

글쎄, 그게 전부일 것 같아.

건배.