IT/VMWare

Migrate VMs : from CloudStack/OpenStack/KVM to VMWare

울티마 2023. 6. 15. 16:04

- CloudStack 기준 기술 > OpenStack, KVM도 큰틀의 절차는 동일

1. 사전작업

1. Target VMWare에서 Datastore 접근 설정

   - 이관 받을 datastore 확인

   - Container 설정에서 SourceCloudStack의 각 호스트로 “Filesystem Whitelist” 추가

       ) 18.18.23.101/255.255.255.255, 18.18.23.102/255.255.255.255, 18.18.23.103

 

2. SourceCloudStack에서

   - Target VMWare의 DatastoreNFS 마운트

       # mkdir -p /nxmig

       # mount -t nfs -o nolock 18.18.23.194:/default-container /nxmig

 

3. Source VMOS 미디어 확보 및 VMWare에 업로드

    - 이관 후 부트로더(grub,grub2) 오류를 복구하기 위해 필요

 

4. Source VM의 디스크 구조 및 block id 확인 및 기록

    - 부트로더 복구를 위해 각 파일 시스템의 구조 및 UUID 확인

    - UDEV 정책에 따라 이관 완료 후 디스크 순서가 바뀔 수 있어 사전에 확인/기록 필요

       # lsblk      # blkid

< 실제 이관될 파티션 확인 >
< 각 파티션의 UUID 기록 필요 >

5. Source VM의 네트워크 정보 확인

   - ifconfig -a , ip -a 결과 및 ifcfg-ethX 파일 내용

   - lspci | grep -i ethernet

   - UDEV 정책에 따라 이관 완료 후 디바이스명, 순서 등이 바뀔 수 있어 사전에 확인/기록 필요

< dev명, ip 설정, mac 주소 등 보관 >

2. Source 호스트에서 Source VM의 디스크 식별 및 VMWare 디스크로 변환

1. Source VM의 디스크 볼륨들 식별

1) Home > Instances > “Source VM” > Volumes > “이관 대상 볼륨“ > ID

2) Source 호스트에서 해당 볼륨이 위치한 디렉토리 및 파일 형식 확인

# find /Edge -name d4b7216e-39ad-4e0c-bef2-03fe16d5fec9 -print

 

# file d4b7216e-39ad-4e0c-bef2-03fe16d5fec9

d4b7216e-39ad-4e0c-bef2-03fe16d5fec9: QEMU QCOW Image (v3), 107374182400 bytes

 

2. VMWare 디스크로 변환 (Convert to VMDK)

1) qemu-img 이용해 qcow2 > vmdk 변환

qemu-img convert -p -f qcow2 -O vmdk -o adapter_type=lsilogic,subformat=streamOptimized,compat6 <SrcName> <TgtName>

  -p : 진행 상황 확인

  -f : source의 디스크 타입 (raw, qcow, qcow2 )

  -O : target의 디스크 타입 (vmdk, qcow2 )

  - adapter_type : VMWare에서 지원하는 디스크 어댑터

  - streamOptimized : ESXiVMDK 포맷, ovf-xml과 같이 사용, monolithiocSparse 포맷의 일종

    > 사용할 경우 변환된 디스크 용량은 압축되나 변환에 더 많은 시간 소요, datastore 용량이 충분할 경우 제외

  - compat6 : VMWare의 호환성 버전은 vmdk 6 버전으로 지정 (기본은 VMDK version 4)

2) 예시

# qemu-img convert -p -f qcow2 -O vmdk -o adapter_type=lsilogic,subformat=streamOptimized,compat6 ./d4b7216e-39ad-4e0c-bef2-03fe16d5fec9 /nxmig/win-mig-test-orig.vmdk

# qemu-img convert -p -f qcow2 -O vmdk -o adapter_type=lsilogic,subformat=streamOptimized,compat6 ./c747b067-56aa-4a25-8caa-a97d0307f9ad /nxmig/lin-mig-test-orig.vmdk

 

3. vCenter에서 디스크가 제거된 새로운 VM 생성

- VM 생성 시 default 옵션 적용 후 생성된 VM에서 디스크 제거

구분 Windows Linux
CPU Source 동일하게 또는 요청에 맞게 조절
메모리 Source 동일하게 또는 요청에 맞게 조절
SCSI Controller LSI Logic SAS VMWare Paravirtual
Ethernet E1000E VMXNET3
Boot Option Legacy BIOS Legacy BIOS

4. ESXi 호스트에서 변환된 VMDK 파일을 Thin 형식으로 변환

1. Source VM에서 변환된 VMDK 파일 확인 후 Thin 형식으로 변환

   - vSphere ssh 접속 후 esxcli 실행

   - vmkfstools -i <변환된 VMDK파일> -d thin <대상VM디렉토리>/<디스크명>.vmdk

   - 예시)

      # esxcli

      [root@esxi] cd /vmfs/volumes/<...>

      [root@esxi] vmkfstools -i ./win-mig-test-orig.vmdk -d thin testwin/win-mig-test01.vmdk

      [root@esxi] vmkfstools -i ./lin-mig-test-orig.vmdk -d thin lintest/lin-mig-test01.vmdk

5. vCenter에서 신규 VMThin으로 변환된 추가

1. VM > Edit Setting > Add New Device

   1) Exsisting Hard Disk

6. Linux VM의 grub2 부트 로더 재구성

1. 신규 VMOS 미디어 마운트 후 Boot Order 조정

   1) OS 미디어 마운트 및 CDROM 강제 부트 설정

      - OS 미디어 마운트, Source VM이 가동 중일 경우 원본과 충돌나지 않도록 NICConnect 해제

      VM Options에서 “Force BIOS setup” 설정 후 Boot Order 조정 > 다음 부팅 시 강제로 CDROM 부팅

< cdrom으로 부팅 되도록 boot order 설정 >

2. “Rescue” 모드로 부팅

   1) Troubleshooting > Rescue a Red Hat Enterprise Linux System  << Redhat 기준

< linux 미디어의 rescue boot >

# chroot /mnt/sysroot

>> 수행 후 /boot/grub,grub2 디렉토리 및 그 안의 파일 존재 여부 확인

     /boot가 마운트 되어 있지 않을 경우 아래 절차에서 /boot 파티션 관련 UUID 먼저 수정 후

    마운트 또는 리부팅/rescue boot 필요할 수 있음

 

 

3. Source VM과 신규 VM의 디스크 구성 확인

   1) 원본의 디스크 구성

sda1 > /boot

sda2 > LVMPV

rootvg-root > /

sdb1 > swap

 

   2) 복제본의 디스크 구성

sda1 > /boot

sdb1 > swap

sdc1 > LVMPV

rootvg-root > /

>> swap과 PV가 변경됨

 

4. (옵션1) LVM 구성이 변경 되었을 경우 이를 복제된 신규 VM에서 반영해야 함

   1) 위 예시에서 PV가 원본의 sda2에서 복제본의 sdc1으로 변경됨

     - pvs, vgs 등의 명령으로 확인

     - pvs -o +pv_ext_vsn 수행 결과에서 PExtVsn의 값이 2가 아닐 경우 vgck 수행

< 예시 : PExtVsn값이 2로 추가 작업 불필요 >

   2) 변경된 LVM 구성 반영

     - vgck --updatemetadata <VG>

< PV 정보 등이 변경되어 vgck가 필요한 경우 >

4. (옵션2) 네트워크 디바이스명이 원본의 ethXX 형태인지 확인, ensXX형태일경우 /etc/default/grub 수정 필요

   1) lspci를 이용해 앞에서 생성한 디바이스 개수 확인 및 ip a, ifconfig -a 등을 통해 디바이스명 확인

      - 아래 처럼 ensXX로 되어 있을 경우 /etc/default/grub 수정 필요 > 뒤 과정에서 설명

      - 또는 OS 설정 파일 수준에서 디바이스명 변경 반영 (nmcli의 con-name 옵션 등)

5. Source VM과 신규 VM의 디스크 UUID 확인 및 Swap 재생성

   1) 원본의 디스크 구성 (# blkid)

   2)복제본의 디스크 구성 (# blkid)

   3) swap 재생성 및 최종 UUID 확인

      # chroot /mnt/sysimage

      # mount /dev/sda1 /boot      /boot가 마운트 되어 있지 않을 경우 blkidlsblk에서 확인한 boot 파티션명으로 마운트

      # swapon -s                         > swap 상태 확인

      # swapoff -a                         >  swap 해제

      # mkswap /dev/sdb1            >  blkidlsblk에서 확인한 swap 파티션명으로 새로운 swap 생성

6. grub config 파일 변경 및 boot loader 재생성

   1) /boot/grub2/grub.cfgboot, root UUID 변경

      - Swapgrub config 재생성 시 변경되므로 이 단계에서는 무시

   2) /etc/default/grub 수정

      - swapUUID 변경

      - ethernet 디바이스명이 ensXX로 되어 있는 것을 ethXX로 변경 필요할 경우

        GRUB_CMDLINE_LINUX 라인에 net.ifnames=0 추가

   3) grub config 재생성

      # grub2-mkconfig -o /boot/grub2/grub.cfg

   4) /etc/fstab 수정 >> UUID로 되어 있는 설정 변경

   5) grub config 재생성

      # source /etc/profile

      # dracut --regenerate-all --force  >> initramfs 파일 재생성

   6) 부트 로더 재생

      # grub2-install /dev/sda

   7) vCenterVM에서 CDROM 제거 및 “VM Options”BIOS 부팅 설정 후 Boot Order 재조정 후 VM 재부팅

 

7. 부팅 완료 후 로그인 및 통신 확인

7. vmtools 설치

1. VMWare의 디바이스 드라이버로 교체를 위한 vmtools 설치