VMWare 로 가상화할때 VM을 template 로 만들어 놓고 cloning 하는 기능이 있다.

이 기능을 이용하면 순식간에 서비스에 필요한 VM 을 deploy 할수 있으나 비싼 vCenter server 를 사야하는 문제가 있다.

 

vCenter 없고 vSphere 로 ESXi 에 바로 연결해서 VM 이미지 파일 자체를 복사(Copy, Not Cloning) 해서 VM 을 빠르게 deploy 하는 방법을 정리해 본다.

 

VSphere 에서 수행

  1. vSphere clinet 로 ESXi 서버에 연결
  2. 구성(Configuration) -> 스토리지(Storage) 클릭하면 우측에 Datastore 목록이 표시됨
  3. VM 이 설치된 datastore 를 선택하고 마우스 우클릭해서 데이터스토어 찾아보기(Browse) 선택
  4. VM을 복사할 폴더를 만든다. (ex: New VM)
     
  5. .vmdk, .vmx, .vmxf 를 선택한후에 마우스 우클릭후 복사를 선택한다
     
  6. 새로운 VM 폴더를 클릭한후에 붙여넣기를 선택한다.
  7. VM을 Inventory에 추가한다.

 

Console 에서 수행

사전에 remote 에서 ssh 연결이 가능하게 설정되어야 한다. (VMware ESXi 에 외부에서 ssh 연결할수 있게 설정하기 참고)

  1. ssh 로 ESXi 서버에 연결
  2. cd /vmfs/volumes/DATASTORE_NAME (DATASTORE_NAME 은 VSphere 에서 보이는 데이타스토어 이름이다. Ex: LocalStorage)
  3. 새로 만들 VM의 이름으로 폴더를 생성한다.
    1. mkdir NewVM
  4. vmkfstools 로 vmdk 를 복제한다. (기존 VM 이름: "CentOS 6", 신규 VM이름: NewVM)

    /vmfs/volumes/522e8af9-f59a0983-39fd-d89d672a29ac # vmkfstools -i CentOS\ 6/CentOS\ 6.vmdk NewVM/NewVM.vmdk
    Destination disk format: VMFS zeroedthick
    Cloning disk 'CentOS 6/CentOS 6.vmdk'...
    Clone: 100% done.

  5. vm configuration file(*.vmx, *.vmxf) 를 새로운 VM 에 복사한다.

    cp CentOS\ 6/CentOS\ 6.vmx NewVM/NewVM.vmx
    cp CentOS\ 6/CentOS\ 6.vmxf NewVM/NewVM.vmxf
    CODE
  6. vi 로 *.vmx 파일을 열어서 VM이름을 변경한다. ("CentOS 6" -> "NewVM")

    vi NewVM/NewVM.vmx NewVM/NewVM.vmxf
    CODE
  7. 또는 위의 기능을 shell script 로 만든 vm-copy.sh를 사용
    vm-copy.sh VMDIR CopyVMDIR

    vm-copy.sh

    #!/bin/sh -x
    if [ $# -ne 2 ];then
            echo "USAGE: $0 SRC_DIR DEST_DIR";
            exit;
    fi;
    ## remove /
    SRC=`basename "$1" /`
    DEST=`basename "$2" /`
    if [ ! -d "$SRC" ];then
            echo "Source Dir \"$SRC\" is not exist. Exit....";
            exit;
    fi
    if [ -d "$DEST" ];then
            echo "Dest Dir \"$DEST\" is already exist. Exit....";
            exit;
    fi
    mkdir "$DEST"
    vmkfstools -i "${SRC}/${SRC}".vmdk "${DEST}/${DEST}".vmdk
    sed "s/${SRC}/${DEST}/g" < "${SRC}/${SRC}".vmx > "${DEST}/${DEST}".vmx
    sed "s/${SRC}/${DEST}/g" < "${SRC}/${SRC}".vmxf > "${DEST}/${DEST}".vmxf
    
    echo "$Done!";
    BASH

 

Inventory에 추가

복사된 VM 을 인벤토리에 추가해야 VSphere 에서 사용할 수 있다.

  1. 데이터스토어 브라우저를 띄워서 VM 을 복사한 데이터스토어로 들어간다.
  2. 새로 추가된 VM(NewVM) 을 클릭하고 NewVM.vmx 를 선택한후 마우스 우클릭해서 "인벤토리에 추가(A)" 를 선택한다
     
  3. 인벤토리 이름을 입력하고 다음을 누른다
     
  4. VM을 실행할 ResourcePool 을 선택한다.
  5. 완료를 누르고 VM 을 부팅해서 정상동작 여부를 확인한다.
  6. 부팅시 다음과 같은 메시지가 나오면 "i copied it" 을 선택한다. ( 참고 링크 - VMware vSphere “I moved it” or “I copied it” – What’s the difference?)

Ref