- CloudStack 기준 기술 > OpenStack, KVM도 큰틀의 절차는 동일
1. 사전작업
1. Target VMWare에서 Datastore 접근 설정
- 이관 받을 datastore 확인
- Container 설정에서 Source인 CloudStack의 각 호스트로 “Filesystem Whitelist” 추가
예) 18.18.23.101/255.255.255.255, 18.18.23.102/255.255.255.255, 18.18.23.103
2. Source인 CloudStack에서 …
- Target VMWare의 Datastore를 NFS 마운트
# mkdir -p /nxmig
# mount -t nfs -o nolock 18.18.23.194:/default-container /nxmig
3. Source VM의 OS 미디어 확보 및 VMWare에 업로드
- 이관 후 부트로더(grub,grub2 등) 오류를 복구하기 위해 필요
4. Source VM의 디스크 구조 및 block id 확인 및 기록
- 부트로더 복구를 위해 각 파일 시스템의 구조 및 UUID 확인
- UDEV 정책에 따라 이관 완료 후 디스크 순서가 바뀔 수 있어 사전에 확인/기록 필요
# lsblk # blkid
5. Source VM의 네트워크 정보 확인
- ifconfig -a , ip -a 결과 및 ifcfg-ethX 파일 내용
- lspci | grep -i ethernet
- UDEV 정책에 따라 이관 완료 후 디바이스명, 순서 등이 바뀔 수 있어 사전에 확인/기록 필요
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 : ESXi의 VMDK 포맷, 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에서 신규 VM에 Thin으로 변환된 추가
1. VM > Edit Setting > Add New Device
1) Exsisting Hard Disk
6. Linux VM의 grub2 부트 로더 재구성
1. 신규 VM의 OS 미디어 마운트 후 Boot Order 조정
1) OS 미디어 마운트 및 CDROM 강제 부트 설정
- OS 미디어 마운트, Source VM이 가동 중일 경우 원본과 충돌나지 않도록 NIC은 Connect 해제
- VM Options에서 “Force BIOS setup” 설정 후 Boot Order 조정 > 다음 부팅 시 강제로 CDROM 부팅
2. “Rescue” 모드로 부팅
1) Troubleshooting > Rescue a Red Hat Enterprise Linux System << Redhat 기준
# chroot /mnt/sysroot
>> 수행 후 /boot/grub,grub2 디렉토리 및 그 안의 파일 존재 여부 확인
/boot가 마운트 되어 있지 않을 경우 아래 절차에서 /boot 파티션 관련 UUID 먼저 수정 후
마운트 또는 리부팅/rescue boot 필요할 수 있음
3. Source VM과 신규 VM의 디스크 구성 확인
1) 원본의 디스크 구성
sda1 > /boot
sda2 > LVM의 PV
rootvg-root > /
sdb1 > swap
2) 복제본의 디스크 구성
sda1 > /boot
sdb1 > swap
sdc1 > LVM의 PV
rootvg-root > /
>> swap과 PV가 변경됨
4. (옵션1) LVM 구성이 변경 되었을 경우 이를 복제된 신규 VM에서 반영해야 함
1) 위 예시에서 PV가 원본의 sda2에서 복제본의 sdc1으로 변경됨
- pvs, vgs 등의 명령으로 확인
- pvs -o +pv_ext_vsn 수행 결과에서 PExtVsn의 값이 2가 아닐 경우 vgck 수행
2) 변경된 LVM 구성 반영
- vgck --updatemetadata <VG명>
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가 마운트 되어 있지 않을 경우 blkid나 lsblk에서 확인한 boot 파티션명으로 마운트
# swapon -s > swap 상태 확인
# swapoff -a > swap 해제
# mkswap /dev/sdb1 > blkid나 lsblk에서 확인한 swap 파티션명으로 새로운 swap 생성
6. grub config 파일 변경 및 boot loader 재생성
1) /boot/grub2/grub.cfg의 boot, root UUID 변경
- Swap은 grub config 재생성 시 변경되므로 이 단계에서는 무시
2) /etc/default/grub 수정
- swap의 UUID 변경
- 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) vCenter의 VM에서 CDROM 제거 및 “VM Options”의 BIOS 부팅 설정 후 Boot Order 재조정 후 VM 재부팅
7. 부팅 완료 후 로그인 및 통신 확인
7. vmtools 설치
1. VMWare의 디바이스 드라이버로 교체를 위한 vmtools 설치
'IT > VMWare' 카테고리의 다른 글
VMWare vCenter Converter : firewall port 및 Pre-Check 실패 시 (0) | 2023.06.21 |
---|---|
VMWare Converter : GrubInstaller Error (0) | 2023.06.20 |