Amazon EC2 : 기존 PV AMI를 HVM으로 변환하는 방법


82

질문:

전체 시스템 설정을 다시 생성하지 않고 기존 AMI에서 새 AWS EC2 클래스 (r3, i2)를 사용하려면 어떻게해야합니까?

새로운 EC2 클래스는 HVM 기반 가상화 만 지원하지만 PVM AMI 이미지 만 있습니다.


3
CentOS로 이것을 시도했지만 다음 오류와 함께 10 단계로 끝납니다. / dev / xvdf에 해당 BIOS 드라이브가 없습니다.
Tobias

@ROMANARMY가 말한 것 외에도 대답 적절한 대답으로 분리 되어야한다고 생각합니다 . 그러면 질문이 답변되지 않은 것으로 표시되지 않도록 수락 할 수 있습니다. 참조 stackoverflow.com/help/self-answer

@Tobias Zander CentOS에서이 작업을 수행 한 적이 있습니까?
dhempler

1
@ 우리는 훨씬 더 많은 시간과 방금 만든 새 인스턴스 투자하지 않았다 dennis.hempler
토비아스

답변:


77

대답:

  1. Ubuntu HVM Linux, 모든 버전, 새 시작

  2. 기존 AMI / PVM Linux를 사용하여 Ubuntu를 시작하고 여기에 grub 패키지를 설치합니다. apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists

  3. PVM Linux 중지

  4. PVM Linux에서 루트 (/ dev / sda1) 파티션 분리

  5. PVM Linux 루트 파티션을 실행중인 HVM Linux 어딘가에 연결합니다. 예 : / dev / sdf

  6. HVM Linux에서 : mkdir -p /mnt/xvdf && mount /dev/xvdf /mnt/xvdf

  7. rsync -avzXA /boot/ /mnt/xvdf/boot/

  8. mount -o bind /dev /mnt/xvdf/dev && mount -o bind /dev/pts /mnt/xvdf/dev/pts && mount -o bind /proc /mnt/xvdf/proc && mount -o bind /sys /mnt/xvdf/sys

  9. chroot /mnt/xvdf

  10. grub-install --no-floppy --recheck --force /dev/xvdf

  11. update-grub2

  12. chroot 종료 : CTRL + D

  13. HVM Linux 중지

  14. / dev / sda1 원래 루트 분리 및 / dev / sdf PVM 루트 분리

  15. PVM 루트를 HVM Linux에 / dev / sda1로 연결합니다.

  16. HVM Linux를 시작하십시오.

  17. 실행중인 HVM Linux에서 새 AMI 이미지를 생성하면 HVM이 가상화됩니다.


완벽하게 작동했습니다 ... PVM 볼륨과 똑같은 가용 영역에 HVM 인스턴스를 만든 후.
cloudsurfin 2014

2
grub-install을 실행할 때 다음과 같은 경고가 표시됩니다. warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.. /usr/sbin/grub-bios-setup: error: will not proceed with blocklists.그러면 모든 것이 좋아 보이지만 부팅되지 않거나 부팅되지 않는 이유에 대한 단서를 제공합니다.
Paulo Neves 2015

3
이것은 나를 위해 완벽하게 작동했습니다. 정말 감사합니다! Paulo Neves가 위에서보고 한 무서운 경고를 받았지만 새 인스턴스는 어쨌든 정상적으로 부팅되었습니다.
GaryO

AMI Linux PVM 인스턴스가 있고이를 새 HVM AMI Linux 인스턴스로 마이그레이션하려고합니다. 솔루션을 적용하려고했지만 10 단계에서 멈췄습니다. 누군가 Ubuntu 대신 새 AMI Linux 인스턴스에 대해이 작업을 수행하는 방법에 대해 자세히 설명해 주시겠습니까? 감사!
tolgamorf

1
최신 인스턴스 유형 (예 : C5)을 사용하는 경우 인스턴스에 연결할 수 없습니다. 전혀 없습니다 xvd*만이, 이러한 경우에 nvme*이름 지정 규칙. 교체 xvd올바른로하는 것은 nvme작동하지 않습니다. :(
Alex

2

@divyenduz의 답변은 작동하지만 최신 (2019 년경) AWS EC2에 대한 정리 및 설명이 필요합니다. 중요한 것은 최신 인스턴스 클래스가 장치 이름을 다르게 변환한다는 것입니다.

수정 된 단계는 다음과 같습니다.

명확성을 위해 노드는 다음과 같습니다.

  • HVM으로 업그레이드하려는 원래 PVM 노드는 "PVM01"입니다.
  • PVM01의 루트 디스크를 마이그레이션 할 새 HVM 노드는 "HVM01"입니다.

진행하기 전에 : 원래 노드 PVM01 백업

  1. 노드 PVM01에 전제 조건 설치

    • PVM01에 GRUB 패키지 설치

      apt-get install  grub-pc  grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists
      
  2. PVM01 노드 중지

    • / dev / sda1의 스냅 샷 생성
    • 또는 전체 노드의 AMI 생성
  3. PVM01에서 원래 루트 볼륨의 스냅 샷을 생성하고이 스냅 샷에서 새 볼륨을 생성합니다.
    • PVM01에서 / dev / sda1의 스냅 만들기
    • 이 스냅에서 vol 만들기
    • 그에 따라 각 리소스에 레이블 지정
      • 태그 : 이름; 값 : pvm01 : / dev / sda1 : snapshot-for-conversion-to-hvm : 2019-07-01
      • 기타
  4. create-instance : 새 Ubuntu HVM 인스턴스 "HVM01". 모든 인스턴스 클래스가 작동해야합니다. 그러나 장치 이름은 다를 수 있습니다. 아래 참고 사항을 참조하십시오.
    • Bionic Ubuntu 18.04 HVM AMI ID ami-0a313d6098716f372 및 인스턴스 클래스 C5.XLARGE를 사용했습니다.
  5. PVM01 루트 파티션 (이전 단계의 새 볼륨)을 새 HVM01 / dev / sdf에 연결합니다.

    • 참고 : C3와 같은 이전 인스턴스 클래스는 볼륨 이름을 / dev / xvdf로 변환합니다.
    • 참고 : C5와 같은 최신 인스턴스 클래스는 볼륨 이름을 / dev / nvme1로 변환합니다.
      • 최신 인스턴스 클래스에서 루트 볼륨은 / dev / nvme0-ZERO입니다.
      • 최신 인스턴스 클래스에서 연결된 보조 볼륨은 / dev / nvme1-ONE입니다.
    • 연결된 볼륨 장치 이름을 기록해 둡니다.

    ssh PVM01 sudo fdisk -l

  6. HVM01에서 :

    # For xvdf, e.g. on C3.XLARGE
    DEVNAME=xvdf1
    # For nvme, e.g. on C5.XLARGE
    DEVNAME=nvme1n1
    mkdir -p /mnt/${DEVNAME} && mount /dev/${DEVNAME} /mnt/${DEVNAME}
    rsync -avzXA /boot/ /mnt/${DEVNAME}/boot/
    mount -o bind /dev /mnt/${DEVNAME}/dev && mount -o bind /dev/pts /mnt/${DEVNAME}/dev/pts && mount -o bind /proc /mnt/${DEVNAME}/proc && mount -o bind /sys /mnt/${DEVNAME}/sys
    chroot /mnt/${DEVNAME}
    grub-install --no-floppy --recheck --force /dev/${DEVNAME}
    update-grub2
    
  7. CTRL + D를 사용하여 chroot 종료

  8. HVM01 중지
  9. 두 볼륨 분리
    • / dev / nvme0 PVM01 루트 분리
      • 참고 : 이것은 C3 인스턴스 클래스의 / dev / sda1입니다.
    • 분리 / dev / $ {DEVNAME} (위 스크립트의 DEVNAME)
  10. PVM01 루트 볼륨을 HVM01에 / dev / sda1로 연결합니다.
    • 다시 한 번, / dev / sda1 이름이 콘솔에 있습니다. 이 이름은 인스턴스 클래스가 얼마나 최신인지에 따라 / dev / nvme0 또는 / dev / xvda1로 변환됩니다.
  11. HVM01 시작
  12. 선택 사항 : 현재 실행중인 HVM01에서 새 AMI 이미지를 생성하면 HVM이 가상화됩니다.

이 솔루션은 저에게 효과적이었습니다. 명령 다음에 DEVNAME변수 를 다시 만들어야합니다 chroot.
Justin Lee 19
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.