Utwórz AWS HVM Linux AMI z istniejącego parawirtualnego AMI Linux

38

Czy możliwe jest utworzenie sprzętowej maszyny wirtualnej AMI (HVM) z istniejącej AMI parawirtualnej (PV).

Początkowo myślałem, aby uruchomić nową instancję PV i użyć ec2-create-imagepolecenia, aby utworzyć nowy obraz, określając HVM jako typ wirutalizacji. Jednak ec2-create-imagenie ma parametru wiersza polecenia, który określa typ wirtualizacji.

Czy istnieje inny sposób na zrobienie tego?

javacavaj
źródło

Odpowiedzi:

22

Aktualizacja

AWS włączył tę funkcję w interfejsie API EC2. Jest dostępny jako --virtualization-typeopcja aws ec2 register-imagew nowym awscli opartym na Boto.

Oryginalna odpowiedź

Tak! Niestety nie ma na to bezpośredniego sposobu. Ponadto niektóre instancje PV mogą wymagać modyfikacji jądra i bootloadera.

  1. Utwórz wolumin z istniejącego PV AMI. Jeśli był to Twój własny PV AMI, możesz zrobić wolumin z migawki. Jeśli jest to interfejs AMI innej firmy, musisz uruchomić instancję i zrobić migawkę.
  2. Uruchom instancję HVM z dowolnym interfejsem AMI.
  3. Zatrzymaj to wystąpienie HVM.
  4. Odłącz wolumin główny od tego wystąpienia.
  5. Dołącz wolumin PV jako wolumin główny (/ dev / sda1 lub / dev / sda, jeśli został podzielony na partycje) do instancji HVM.
  6. Uruchom ec2-create-imagena instancji HVM.
  7. Uruchom inne instancje za pomocą nowego HVM AMI.

Jeśli to nie zadziała, to przed krokiem 5 musisz dołączyć ten wolumin do działającej instancji, skonfigurować chroot i zainstalować jądro i bootloader dla swojej dystrybucji. Możesz także wyczyścić dzienniki i każdą pamięć podręczną inicjującą chmurę.

Jeff Strunk
źródło
2
Próbowałem kroków 1-5 i nie działało to dla mnie, ponieważ instancja zatrzymuje się po kilku sekundach. Czy ktoś mógłby wyjaśnić, jak skonfigurować chroot i zainstalować jądro i bootloader? Zarówno stare, jak i nowe wystąpienia to AMI Linux. Dzięki.
tolgamorf
Jeśli masz działającą instancję PV, możesz przekonwertować ją na HVM, uruchamiając aws ec2 register-imageflagę --virtualization-type na migawce obrazu PV. Zobacz aws ec2 register-image helpszczegóły.
Jeff Strunk
2
Utworzyłem obraz HVM z mojej instancji PV za pomocą aws ec2 register-image. Następnie uruchomiłem nową instancję HVM z tego obrazu. Jednak system nie chce się uruchomić.
tolgamorf
Po przejrzeniu forum aws ec2 wymyśliłem rozwiązanie, w którym konwersja odbywa się poprzez ręczne zastępowanie plików. Wkrótce napiszę odpowiedź.
tolgamorf
@tolgamorf, czy w ogóle pamiętasz, co zrobiłeś? Mam ten sam problem.
Dmitrij Minkowski
13

W moim przypadku musiałem wykonać konwersję ręcznie, ponieważ instancja, którą utworzyłem, aws ec2 register-imagenie uruchomiła się. Moje rozwiązanie oparte jest na tym poście na forum AWS EC2 .

Przygotowanie

Upewnij się, że wszystkie woluminy znajdują się w tej samej strefie dostępności.

  1. SSH na maszynę fotowoltaiczną, z której chcesz przeprowadzić migrację, i zastosuj wszystkie aktualizacje, a następnie wyloguj się.

  2. Przejdź do konsoli AWS i uruchom nową instancję HVM, wybierając ten sam podstawowy AMI, z którego utworzono system PV (w moim przypadku 64-bitowy Amazon AMI dla systemu Linux).

  3. SSH do tego nowego wystąpienia i zastosuj wszystkie aktualizacje, a następnie wyloguj się.

  4. Przejdź do konsoli AWS i zatrzymaj instancję PV. Zrób migawkę urządzenia głównego i utwórz nowy wolumin ( SOURCE VOLUME) z tej migawki.

  5. Zatrzymaj instancję HVM. Zrób migawkę urządzenia głównego w nowej instancji i utwórz nowy wolumin ( TARGET VOLUME) z tej migawki.

  6. Korzystanie z konsoli AWS:

    • Dołącz SOURCE VOLUMEdo nowej instancji jako /dev/xvdf.
    • Dołącz TARGET VOLUMEdo nowej instancji jako /dev/xvdg.

Proces konwersji

  1. SSH do nowej instancji i uzyskaj dostęp do konta root:

    sudo su
    
  2. Zamontuj dyski źródłowy i docelowy.

    mkdir -p /mnt/source && mount /dev/xvdf /mnt/source
    mkdir -p /mnt/target && mount /dev/xvdg1 /mnt/target
    

    W moim przypadku urządzeniami były /dev/xvdf(źródło) i /dev/xvdg1(cel). Mogą się one zmieniać w konfiguracji w zależności od liczby partycji i miejsca ich podłączenia (patrz krok 6 w Przygotowaniu). Użyj, ls -al /dev/xvd*aby zobaczyć dyski.

  3. Kopia zapasowa /lib/modules/*(jeśli jądro PV ami różni się od nowej maszyny HVM. Z tego modułu korzystają niektóre usługi AWS.)

  4. Usuń wszystko oprócz /bootwoluminu docelowego:

    cd /mnt/target && ls | grep -v boot | xargs rm -Rf
    
  5. Usuń /bootz woluminu źródłowego:

    rm -Rf /mnt/source/boot
    
  6. Skopiuj dane woluminu źródłowego do woluminu docelowego, zachowując wszystkie atrybuty:

    rsync -aAXHPv /mnt/source/ /mnt/target
    
  7. Edytuj /mnt/target/etc/fstabdla /partycji, tak aby odwoływała się do TARGET VOLUMEzamontowanej w jej ostatecznej lokalizacji w kroku (8). Albo używając etykiety, albo po prostu czegoś innego:

    /dev/xvda1 /     ext4    defaults,barrier=0 1 1
    

Następnie przywróć /lib/modules/kopię zapasową z kroku 3. (Jeśli jądro PV ami różni się od nowej maszyny HVM).

  1. Zatrzymaj system i odłącz wszystkie woluminy za pomocą konsoli AWS. Dołącz w TARGET VOLUMEnowej instancji jako /dev/xvda.

    Należy pamiętać, gdzie zamontowano oryginalne urządzenie root. W większości przypadków tak powinno być /dev/xvda.

  2. Uruchom instancję HVM. Powinien być teraz dokładną kopią twojego systemu PV. Jeśli wszystko wygląda dobrze, możesz teraz usunąć również instancję PV SOURCE VOLUME.

tolgamorf
źródło
1
Dlaczego po prostu nie zrobisz rm -f /booti cp -a /mnt/source/boot /mnt/target?
michelem
@Michelem, jeśli dobrze pamiętam, próbowałem to zrobić w pierwszej kolejności. Maszyna nie uruchomiła się.
tolgamorf,
1
@tolgamorf Czy jest jakaś szansa na zaktualizowanie odpowiedzi w celu odzwierciedlenia tego?
Dan Tenenbaum
2
Te instrukcje były bardzo pomocne (i działały dla mnie !!), ale mam jedną ostatnią sugestię. Ponieważ pierwotne pytanie dotyczyło utworzenia interfejsu HVM AMI, nie pozostawiaj tego kroku domyślnie, dodaj ostatni etap zatrzymania instancji i utworzenia z niej interfejsu AMI (a następnie zakończenia instancji). Ponadto miałem te same problemy, co @DanGravell i nie używam pamięci magnetycznej, więc mogą to być typowe pułapki, które można rozwiązać w odpowiedzi.
Dan Tenenbaum,
1
Wielkie dzięki! Oszczędzało mi to dużo czasu, edytowałem je, aby wyczyścić część fstab, która trochę mnie pomieszała. Uwaga na etapie (4), w jakiś sposób usunąłem katalog główny woluminu tymczasowego, a nie obiekty docelowe, przerywając ten wolumin i musiałem ponownie uruchomić proces.
Zar
10

TLDR:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI'  --sriov simple --virtualization-type hvm -s snap-b44feb18 --root-device-name /dev/sda1 

Szczegółowe kroki:

Odpowiedzi na dalsze pytania w oparciu o odpowiedź Jeffa Strunksa w celu uproszczenia czynności i podania nieco więcej szczegółów na temat obrazu rejestru ec2:

  1. Utwórz instancję za pomocą obrazu PV. Wprowadź / zaktualizuj dowolne zmiany.

  2. Utwórz obraz z powyższej instancji.

  3. Znajdź identyfikator migawki używany przez powyższy AMI w EC2> Sklep z elastycznymi blokami> Migawka w konsoli EC2.

    lub jeśli masz konfigurację narzędzi interfejsu API ec2:

    ec2-opisz-obrazy ami-id_of_above_created_ami

    i znajdź identyfikator migawki dla ami

    .. Założenia do dalszych kroków: Twoje klucze ec2 i narzędzia API są ustawione i gotowe do użycia:

  4. Zarejestruj nowy interfejs HVM AMI, korzystając z powyższej migawki: przykład:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI' - sriov prosty - wirtualizacja typu hvm -s snap-b44feb18 --root-device-name / dev / sda1

gdzie

  • -d jest opisem AMI
  • -n to nazwa AMI
  • -s to identyfikator migawki z kroku 3.
  • -a to architektura
  • - typ wirtualizacji jest wymagany do utworzenia hvm
  • --sriov służy do włączania rozszerzonej sieci, choć może nie być pewna.

Po więcej informacji:

Anshu Prateek
źródło
2
O ile nie zrobię czegoś złego, nie będzie to działać w przypadku interfejsów AMI na rynku, które ograniczają typy instancji. Próbowałem przekonwertować oficjalny parawirtualny AMI MongoDB na HVM i chociaż mógłbym utworzyć HVM AMI, nie uruchomiłby z nim instancji HVM.
Matt Beckman,
@MattBeckman Myślę, że chodzi raczej o wsparcie jądra / bootloadera niż o ograniczenie AMI. Powyżej działa dla Fedory, ale nie dla Amazon Linux. Tam musisz iść zgodnie z sugestią oryginalnego Jeff Strunk.
Anshu Prateek
1
Działa @AnshuPrateek
Atmesh Mishra
2

Możesz to zrobić z poziomu interfejsu internetowego AWS. Przejdź do migawek , kliknij żądaną migawkę, którą chcesz przekonwertować na hvm, kliknij działania, a następnie utwórz obraz . Z rozwijanego menu w kreatorze tworzenia obrazów wybierz HVM .

Justin
źródło
9
Właśnie próbowałem tego, ale luki takie jak instancja nie uruchamiają się poprawnie. Po prostu sam się zatrzymuje, kilka chwil po uruchomieniu.
ovi
1

Po wypróbowaniu wszystkich podanych tutaj sugestii, z których żadna nie działała dla mnie, znalazłem doskonały wpis na ten temat na stronie https://www.opswat.com/blog/aws-2015-why-you-need-switch- pv-hvm .

Elementy (szczegóły) procedury to:

  1. Zainstaluj grubna instancji PV do migracji (instancja źródłowa).

  2. Wykonaj zapobiegawczą migawkę woluminu głównego w instancji źródłowej (wolumin źródłowy, SV).

  3. Utwórz tymczasową instancję HVM, która przeprowadzi migrację woluminu.

    1. Użyłem instancji Amazon Linux
  4. Utwórz wolumin docelowy (DV) i dołącz zarówno ten, jak i SV do instancji tymczasowej.

    1. DV powinno być co najmniej tak duże jak SV.

    2. Załącz SV as /dev/{sd,xvd}fi DV as /dev/{sd,xvd}g.

    3. Podziel DV na partycje:

    parted /dev/xvdg --script 'mklabel msdos mkpart primary 1M -1s print quit'

    partprobe /dev/xvdg

    udevadm settle

  5. Zmień rozmiar do minimalnej wielkości FS FS i używając ddobrazu na DV.

    1. Wyczyść FS woluminu źródłowego: e2fsck -f /dev/xvdf

    2. Minimalizuj to samo: resize2fs -M /dev/xvdf

    3. Obserwuj dane wyjściowe resize2fs (np. Resizing the file system on /dev/xvdf to 269020 (4k) blocks) I zanotuj je w następnym kroku.

    4. Duplikat SV na DV: dd if=/dev/xvdf of=/dev/xvdg1 bs=<block size from previous step, here 4k> count=<use block count from last step, here 269020>

    5. Rozwiń FS na nowej partycji: resize2fs /dev/xvdg1

  6. Zainstaluj grubw bloku rozruchowym DV

    1. Tymczasowo utwórz pliki urządzenia na DV: mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/

    2. Zainstaluj pliki grub:

    rm -f /mnt/boot/grub/*stage*

    cp /mnt/usr/*/grub/*/*stage* /mnt/boot/grub/

    rm -f /mnt/boot/grub/device.map

    1. Zainstaluj gruba w środowisku chroot:

    cat << ARNIE | chroot /mnt grub --batch

    device (hd0) /dev/xvdg

    root (hd0,0)

    setup (hd0)

    ARNIE

  7. Po wprowadzeniu innych drobnych zmian w woluminie docelowym, zrób wolumin i utwórz z niego AMI.

    1. Porządkuj tymczasowe pliki urządzeń: rm -f /mnt/dev/xvdg /mnt/dev/xvdg1

    2. W /mnt/boot/grub/grub.conf, zmiany root (hd0)do root (hd0,0), dodać (lub wymienić console=*) console=ttyS0do linii kernel, a jeśli to konieczne, wymienić root=*się root=LABEL=/w linii kernel

    3. W /mnt/etc/fstabupewnij się, że wiersz głównego systemu FS zawiera odniesienie oznaczone etykietą, np

    LABEL=/ / ext4 defaults,noatime 1 1

    1. Oznacz nowy root FS za pomocą e2label /dev/xvdg1 /

    2. Odłącz DV od instancji tymczasowej, odłącz SV i DV od instancji tymczasowej.

    3. Zrób zdjęcie DV i na podstawie tego zdjęcia utwórz obraz AMI.

  8. Uruchom instancję HVM z tego HMI. To jest Twoja migrowana instancja.

MadHatter obsługuje Monikę
źródło