কম্পিউটার টিউটোরিয়াল

KVM에서 가상 머신 클로닝 단계별 가이드

참고: 이 튜토리얼은 당신이 virt-sysprep을 가지고 있지 않다고 가정합니다; 아래 참조!

아니요, 이것은 virt-clone 사용에 대한 또 다른 일반적인 how-to가 아닙니다. virt-clone은 당신의 가상 머신들의 복제본들을 생성하기 위한 꽤 유용한 도구지만, 그것의 현재 구성에서, 그것은 당신의 클론된 시스템에 오직 고유한 ID와 MAC 주소만을 할당할 것이고, 당신이 클론이 부팅한 후에 추가적인 조정들과 커스터마이징들을 수행하도록 강요할 것입니다. 이는 당신이 꽤 많이 만지작거려야 할 수도 있음을 의미하며, 그것은 당신이 원하는 것이 아닙니다.

좋아요, 저는 KVM 기술에서 당신의 가상 머신들의 동일한 복사본들을 생성하는 다른 방법을 보여줄 것입니다, 호스트별 고유 정보들과 함께 그래서 어떤 수의 복제본들도 당신의 네트워크에서 개별 호스트들이 됩니다. 다른 말로, 한 번 설치하고 나서 당신이 필요로 하는 게스트의 인스턴스들을 원하는 만큼 생성하세요, 각각 그것의 자신의 호스트네임, MAC 주소, IP 주소 등을 가지고. 완전히 스크립트 가능하고 그 모든 것. 그래서 저를 따라오세요.

참고: 이 이미지는 Wikimedia에서 가져온 것으로, CC BY 2.0 라이선스하에 있습니다.

덜 효율적인 방법

잠시 virt-clone에 대해 논의해 봅시다. 그것은 나쁜 유틸리티는 아니지만, 그것의 사용은 배포판들 간에 표준이 아닙니다. 일부는 GUI 구성 요소를, Virtual Machine Manager의 일부로, 다른 것들은 명령줄 도구도 제공합니다. 두 경우 모두, 클론들은 오직 새로운 고유 ID와 MAC 주소만 할당받을 것이지만, 다른 정보는 없습니다. 구성 파일들은 /etc/libvirt/qemu 아래에 저장될 것입니다.

여기 예가 있습니다:

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

클로닝 + 무역의 도구들

이제, 올바른 방법. 당신은 원하는 결과를 달성하기 위해 매우 적은 도구들이 필요할 것입니다; 사실, 단지 하나의 도구, 그리고 그것은 kpartx라고 불립니다, 파티션 테이블들로부터 장치 맵들을 생성할 수 있는 유틸리티. 구체적으로 여기, 당신은 그것을 당신의 게스트 머신들을 위한 파티션 매핑들을 생성하기 위해 가상 디스크들을 쿼리함으로써 사용할 수 있습니다. 우리는 리눅스를 사용하여 시연할 것이지만, 대부분의 유닉스-기반 시스템들이 작동할 것입니다.

그래서 우리가 해야 할 일은 가상 디스크로부터 파티션 테이블을 읽는 것입니다. 먼저, 우리는 가상 디스크의 복사본을 생성해야 합니다, 왜냐하면 각 머신이 그것의 자신의 것을 가질 것이기 때문입니다. 이것은 클론 절차의 유일한 느린 단계이며, 그것은 당신의 파일들이 얼마나 큰지와 디스크들이 얼마나 느린지에 의존할 것입니다. 일반적으로, 당신은 전형적인 20GB 디스크 파일을 복사하는 데 몇 분이 필요할 것입니다.

cp <old disk file> <new disk file>

이제, 파티션 테이블:

kpartx -a <virtual disk file>

이것은 몇몇 출력을 생성할 것입니다. 사실, 당신은 가상 머신 내부에 포함된 각 개별 파티션에 대한 별도의 매퍼를 볼 것입니다. 예를 들어, 만약 당신이 /와 /home을 가지고 있다면, 당신은 두 개의 매퍼들을 가질 것입니다.

kpartx -av /kvm/disk.raw
add map loop0p1 (253:0): 0 4206592 linear /dev/loop0 2048
add map loop0p2 (253:1): 0 79677440 linear /dev/loop0 4208640

이제, 관련 장치를 마운트하고 호스트별 변경들을 만드는 문제입니다:

mount /dev/mapper/<relevant partition loopback> /mountpoint

예를 들어:

mount /dev/mapper/loop0p1 /mnt

고유 호스트 변경들

이제 당신의 가상 머신은 가장 가능성이 높게 다음 변경들을 요구할 것입니다:

/etc/hosts
/etc/HOSTNAME

그리고 당신이 데비안을 사용하는지 레드햇/수세를 사용하는지에 따라 네트워크 구성들, 비록 이것들이 DHCP를 사용한다면 필요하지 않을 수도 있습니다. 그러나, 만약 당신이 정적 IP 주소들을 사용한다면, 이것은 필수입니다:

/etc/sysconfig/network/ifcfg-<device>

OR

/etc/network/interfaces

다른 변경들이 필요할 수 있지만, 이것들이 기본적인 것들입니다. 당신이 변경들을 저장하면, 언마운트하세요. 당신의 다음 단계는 새로운 클론을 위한 KVM 구성 파일을 편집하는 것입니다. XML 파일들은 정상적으로 /etc/kvm/vm 또는 /etc/libvirt/qemu 디렉토리들에 보관됩니다, 만약 머신들이 Virtual Machine Manager를 사용하여 자동 생성되었다면.

XML 파일 변경들

먼저, 템플릿 구성의 복사본을 생성하세요.

당신은 이제 당신의 도메인의 고유 ID, 이름, MAC 주소를 편집해야 할 것입니다. 전에처럼, 당신은 어떤 종류의 고유성 로직을 적용해야 할 것입니다, 아마도 grep, awk, 그리고 sed를 사용한 인라인 검색 & 대체, 정규 표현식들이 필요할 때 건강한 양과 함께, 그래서 당신이 당신의 절차를 완전히 스크립트화할 수 있게. 자연스럽게, 당신은 또한 하드 디스크 지시어를 올바른 파일을 가리키도록 해야 할 것입니다.

예로서, 여기 당신이 필요로 할 수도 있는 명령어 세트가 있습니다:

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

그리고 작동하는지 확인하기 위해 grep으로:

sed -i -e 's/\<uuid\>.*/\<\/uuid\>/uuid\>dedoimedo\<\/uuid/'
file.xml. | grep dedoimedo

<uuid>dedoimedo</uuid>

모두 합치기

따라서, 완전한 클론 스크립트는 - 저는 전형적인 레드햇 예제를 주고 있습니다, 당신은 당신 자신의 조정을 할 수 있습니다. 마찬가지로, 스크립트의 일부 부분들은 당신 자신의 로직을 요구할 것입니다, 파티션 출력을 어떻게 파싱할지 결정하는 것처럼. 게다가, 당신은 XML 파일들을 올바르게 파싱하고 여는 것과 닫는 괄호들, 따옴표들, 그리고 다른 문자들을 벗겨내는 데 약간의 추가 작업이 필요할 수 있습니다.

#!/bin/bash

# 클로닝하는 동안 템플릿 OS 일시중지

virsh suspend <domain>
cp <old disk> <new disk>
virsh resume <domain>

kpartx -a <new disk>

# 관련 파티션들을 읽기 위한 어떤 로직

mount <desired partition> <mount point>

# 호스트-고유 파일들의 내용들을 파싱하기 위한 어떤 로직

sed -i -e 's/old hostname line/new hostname line/' /etc/HOSTNAME
sed -i -e 's/old hostname line/new hostname line/' /etc/hosts
sed -i -e 's/old IP config/new IP config/' /etc/sysconfig/network/ifcfg-eth0

umount <mount point>

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

# 새로운 uuid, name, mac, 등을 생성하기 위한 어떤 로직
# XML 파일들을 올바르게 파싱하기 위한 어떤 로직

sed -i -e 's/old uuid/new uuid/' /etc/kvm/vm/new.xml
sed -i -e 's/old name/new name/' /etc/kvm/vm/new.xml
sed -i -e 's/old mac/new mac/' /etc/kvm/vm/new.xml
sed -i -e 's/old disk/new disk/' /etc/kvm/vm/new.xml

virsh create /etc/kvm/vm/new.xml

exit 0

그리고 우리는 끝났습니다. 부팅하고 즐기세요!

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

이 전체 튜토리얼은 당신이 당신의 박스에서 virt-sysprep을 사용할 수 있게 되면 쓸모없게 됩니다, 그것은 아마도 당신이 당신이 좋아하는 운영 체제의 후기 버전들 중 하나를 사용하고 있음을 의미합니다. 그러나, 비즈니스 환경에서, 이것은 가장 가능성이 높은 경우가 아니므로, 그 도구는 대부분의 시스템 관리자들에게 사용할 수 없을 것입니다. 만약 당신이 그것을 사용할 기회를 얻으면, 그것은 기본 클론 도구에 대한 정말 편리한 개선들을 제공합니다. 원래 문서에서 인용:

Virt-sysprep은 클론들이 그것으로부터 만들어질 수 있도록 가상 머신을 리셋하거나 언컨피규어합니다. 이 과정의 단계들은 SSH 호스트 키들 제거, 지속적인 네트워크 MAC 구성 제거, 사용자 계정 제거를 포함합니다. 각 단계는 요구에 따라 활성화되거나 비활성화될 수 있습니다. Virt-sysprep은 게스트나 디스크 이미지를 제자리에서 수정합니다. 게스트는 종료되어야 합니다. 만약 당신이 게스트의 기존 내용들을 보존하고 싶다면, 당신은 디스크를 먼저 복사하거나 클론해야 합니다.

우리는 이 편리한 도구를 별도의 튜토리얼에서 논의할 것입니다.

추가 자료

KVM 재미에 대한 더 많은 것:

KVM + VirtualBox 조화롭게 살기

KVM 브리지드 네트워크 튜토리얼

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

그리고 여기 ESXi 머신들을 클로닝하는 방법 - 개념적으로 유사

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

결론

이것은 매우 심플하고 우아한 튜토리얼입니다. 저는 당신이 그것을 극도로 유용하게 찾을 것이라고 생각합니다, 왜냐하면 그것은 대부분 수동 클로닝 절차들을 다른 도구들로 보완하기 때문입니다. 당신은 쉽게 단일 BASH 스크립트에 배치할 수 있는 명령어 세트를 얻고, 그때, 밥은 당신의 삼촌입니다.

더 심각한 노트에서, 당신은 KVM 구성들과 파일 위치들에 대해 조금 더 배웠고, virt-clone의 매우 기초적인 사용, partx를 사용하여 가상 머신 디스크들을 마운트하고 관련 파티션들의 데이터를 편집하는 방법, 네트워크와 호스트 구성들을 포함하여, 그리고 당신의 가상 도메인에 고유 필드들을 할당하는 방법. 그리고 libguestfs도 있습니다. 플러스 몇몇 다른 매우 유용한 가이드들. 전반적으로, 다섯 분의 작업으로는 나쁘지 않습니다.

마침내, virt-sysprep은 클로닝을 훨씬 더 쉽게 만들지만, 수동 방법은, 약간 더 복잡하지만, 방탄입니다. 당신은 그것을 사용하여 당신이 원하는 무엇이든 할 수 있고, 당신은 기존의 명령줄 스위치들과 옵션들의 부분집합에 제한되지 않습니다. 그것은 항상 작동할 것이고, 그것은 항상 완전히 스크립트화될 수 있습니다. 훌륭합니다.

자, 저는 그게 다일 거라고 추측합니다.

치어스.

  1. ভিএমওয়্যার কনভার্টার (VMware Converter) দিয়ে সমস্যারহিত ভিএম রূপান্তর

  2. ধাপে ধাপে গাইড: VMware Server-এ ভার্চুয়াল মেশিন ক্লোন করা

  3. ভার্চুয়ালবক্সে ৩ডি এক্সিলারেশন মাস্টার করুন: উইন্ডোজ VM-এ OpenGL সক্ষম করুন

  4. VMware VM-এ DirectX দিয়ে ৩ডি এক্সিলারেশন অপ্টিমাইজ করা - টিউটোরিয়াল পার্ট ১