Amazon EC2: jak przekonwertować istniejący PV AMI na HVM

82

Pytanie:

Jak używać nowych klas AWS EC2 (r3, i2) z moim istniejącym AMI bez odtwarzania całej konfiguracji systemu?

Nowe klasy EC2 obsługują tylko wirtualizację opartą na HVM, ale mam tylko obrazy PVM AMI.

user3760692
źródło
3
Właśnie wypróbowałem to z CentOS, ale skończyło się na tep 10 z następującym błędem: / dev / xvdf nie ma odpowiedniego dysku BIOS.
Tobias
W związku z tym, co powiedział @ROMANARMY, uważam, że odpowiedź powinna zostać podzielona na właściwą odpowiedź. Następnie możesz to zaakceptować, aby pytanie nie pojawiło się jako bez odpowiedzi. Zobacz stackoverflow.com/help/self-answer
Tim
@Tobias Zander, czy kiedykolwiek pracowałeś z tym systemem CentOS?
dhempler
1
@ dennis.hempler Nie zainwestowaliśmy dużo więcej czasu i właśnie utworzyliśmy nowe instancje
Tobias

Odpowiedzi:

77

Odpowiedź:

  1. Uruchom Linuksa Ubuntu HVM, dowolna wersja, nowa

  2. Uruchom Ubuntu / z moim istniejącym systemem Linux AMI / PVM i zainstaluj na nich pakiety GRUB: apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists

  3. Zatrzymaj PVM Linux

  4. Odłącz partycję root (/ dev / sda1) w systemie PVM linux

  5. Dołącz gdzieś główną partycję PVM linux do uruchomionego HVM linux, np .: / dev / sdf

  6. W systemie 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. wyjdź z chroot: CTRL + D

  13. zatrzymać HVM Linux

  14. odłącz / dev / sda1 oryginalny root ORAZ odłącz / dev / sdf PVM root

  15. dołącz katalog główny PVM do HVM linux jako / dev / sda1

  16. Uruchom HVM linux, voilà!

  17. Utwórz nowy obraz AMI z działającego systemu HVM linux, będzie on zwirtualizowany HVM.

divyenduz
źródło
Działało idealnie ... kiedy utworzyłem instancję HVM dokładnie w tej samej strefie dostępności, co wolumen PVM.
cloudsurfin
2
Podczas uruchamiania grub-install pojawia się następujące ostrzeżenie: 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.Wszystko wygląda dobrze, ale nie uruchamia się ani nie daje mi wskazówki, dlaczego się nie uruchamia.
Paulo Neves,
3
To działało idealnie dla mnie, dziękuję bardzo! Otrzymałem przerażające ostrzeżenia o grubach, które zgłosił Paulo Neves powyżej, ale moja nowa instancja i tak uruchomiła się dobrze.
GaryO
Mam instancję AMI Linux PVM i próbuję ją zmigrować do nowej instancji HVM AMI Linux. Próbowałem zastosować twoje rozwiązania, ale utknąłem na kroku 10. Czy ktoś mógłby wyjaśnić, jak to zrobić dla nowej instancji AMI Linux zamiast Ubuntu? Dzięki!
tolgamorf
1
Wystąpienie jest nieosiągalne w przypadku korzystania z nowszego typu wystąpienia (na przykład C5). W xvd*tych przypadkach nie ma, są tylko nvme*konwencje nazewnictwa. Wymiana xvdna właściwą nvmenie działa. :(
Alex
2

Odpowiedź od @divyenduz działa, ale wymaga uporządkowania i wyjaśnienia dla nowoczesnego (około 2019) AWS EC2. Co ważne, nowoczesne klasy instancji tłumaczą nazwę urządzenia inaczej.

Oto moje zmodyfikowane kroki.

Dla jasności węzły to:

  • Oryginalny węzeł PVM, który chcesz zaktualizować do HVM, to „PVM01”
  • Nowy węzeł HVM, do którego zostanie przeniesiony dysk główny PVM01, to „HVM01”

PRZED ROZPOCZĘCIEM: Utwórz kopię zapasową oryginalnego węzła PVM01

  1. Zainstaluj wymagania wstępne na Node PVM01

    • zainstaluj pakiety GRUB na PVM01

      apt-get install  grub-pc  grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists
      
  2. Zatrzymaj węzeł PVM01

    • Utwórz migawkę / dev / sda1
    • LUB utwórz AMI całego węzła
  3. Utwórz migawkę oryginalnego woluminu głównego na PVM01 i utwórz nowy wolumin z tej migawki
    • Utwórz przystawkę / dev / sda1 na PVM01
    • Utwórz vol z tego przystawki
    • Oznacz odpowiednio każdy zasób
      • Nazwa znacznika; Wartość: pvm01: / dev / sda1: migawka-do-konwersji-na-hvm: 2019-07-01
      • Itp
  4. create-instance: Nowa instancja Ubuntu HVM „HVM01”. Każda klasa instancji powinna działać; jednak nazwa urządzenia może być inna, zobacz uwagi poniżej
    • Użyłem Bionic Ubuntu 18.04 HVM AMI ID ami-0a313d6098716f372 i klasy instancji C5.XLARGE
  5. Dołącz partycję główną PVM01 (nowy wolumin z poprzedniego kroku) do nowego HVM01 / dev / sdf

    • UWAGA : Starsze klasy instancji, takie jak C3, będą tłumaczyć nazwę woluminu na / dev / xvdf
    • UWAGA : Nowsze klasy instancji, takie jak C5, przetłumaczą nazwę woluminu na / dev / nvme1
      • W nowszych klasach instancji volt root będzie / dev / nvme0 - ZERO
      • W nowszych klasach instancji dołączonym drugorzędnym woluminem będzie / dev / nvme1 - ONE
    • Zanotuj nazwę podłączonego urządzenia woluminu

    ssh PVM01 sudo fdisk -l

  6. Na 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. Wyjdź z chroot za pomocą CTRL + D

  8. Zatrzymaj HVM01
  9. Odłącz oba woluminy
    • odłącz / dev / nvme0 PVM01 root
      • UWAGA: Byłby to / dev / sda1 w klasie instancji C3
    • odłącz / dev / $ {DEVNAME} (DEVNAME z powyższego skryptu)
  10. dołącz wolumin główny PVM01 do HVM01 jako / dev / sda1
    • Ponownie, nazwa / dev / sda1 znajduje się w konsoli; ta nazwa zostanie przetłumaczona na / dev / nvme0 lub / dev / xvda1 w zależności od tego, jak nowoczesna jest klasa instancji
  11. Uruchom HVM01
  12. OPCJONALNIE: utwórz nowy obraz AMI z obecnie działającego HVM01, będzie on zwirtualizowany HVM.
JDS
źródło
To rozwiązanie zadziałało dla mnie. Pamiętaj, aby odtworzyć DEVNAMEzmienną po chrootpoleceniu.
Justin Lee