Frage Erstellen Sie ein AWS HVM Linux AMI von einem vorhandenen paravirtuellen Linux AMI


Ist es möglich, eine Hardware Virtual Machine (HVM) AMI aus einem bestehenden paravirtuellen (PV) AMI zu erstellen.

Mein ursprünglicher Gedanke war, eine neue PV - Instanz zu starten und die ec2-create-image Befehl zum Erstellen eines neuen Images, während HVM als Virutalisierungstyp angegeben wird. Jedoch, ec2-create-image hat keinen Befehlszeilenparameter, um den Virtualisierungstyp anzugeben.

Gibt es einen anderen Weg, dies zu tun?


37
2017-10-18 20:26


Ursprung




Antworten:


Aktualisieren

AWS hat diese Funktion in der EC2-API aktiviert. Es ist als verfügbar --virtualization-type Option zu aws ec2 register-image in der neuen Botos basierten awscli.

Ursprüngliche Antwort

Ja! Leider gibt es keinen direkten Weg dazu. Außerdem benötigen einige PV-Instanzen möglicherweise Änderungen am Kernel und am Bootloader.

  1. Erstellen Sie ein Volume von Ihrem vorhandenen PV AMI. Wenn es sich um Ihr eigenes PV-AMI handelt, können Sie ein Volume aus dem Snapshot erstellen. Wenn es sich um eine Drittanbieter-AMI handelt, müssen Sie eine Instanz starten und einen Snapshot erstellen.
  2. Starten Sie eine HVM-Instanz mit einem beliebigen AMI.
  3. Stoppen Sie diese HVM-Instanz.
  4. Trennen Sie das Root-Volume von dieser Instanz.
  5. Hängen Sie das PV-Volume als Root-Volume (/ dev / sda1 oder / dev / sda, falls es partitioniert wurde) an die HVM-Instanz an.
  6. Lauf ec2-create-image auf der HVM-Instanz.
  7. Starten Sie andere Instanzen mit Ihrem neuen HVM AMI.

Wenn das nicht funktioniert, müssen Sie vor Schritt 5 dieses Volume an eine laufende Instanz anhängen, eine Chroot einrichten und einen Kernel und Bootloader für Ihre Distribution installieren. Sie können auch Protokolle und jeden Cloud-Init-Cache löschen.


21
2017-10-22 14:22



Ich habe die Schritte 1-5 ausprobiert und es hat nicht funktioniert, da die Instanz nach ein paar Sekunden aufhört. Könnte jemand herausfinden, wie man eine Chroot aufbaut und einen Kernel und einen Bootloader installiert? Sowohl die alten als auch die neuen Instanzen sind AMI Linux. Vielen Dank. - tolgamorf
Wenn Sie eine funktionierende PV-Instanz haben, können Sie sie in HVM umwandeln, indem Sie sie ausführen aws ec2 register-image mit dem Flag --virtualization-type auf dem Snapshot des PV-Images. Sehen aws ec2 register-image help für Details. - Jeff Strunk
Ich habe ein HVM-Bild von meiner PV-Instanz mit erstellt aws ec2 register-image. Dann startete ich eine neue HVM-Instanz von diesem Bild. Das System wird jedoch nicht gestartet. - tolgamorf
Nach dem Durchforsten des aws ec2 forums habe ich eine Lösung gefunden, bei der die Konvertierung manuell durch Ersetzen der Dateien erfolgt. Ich werde bald eine Antwort schreiben. - tolgamorf
@tolgamorf erinnerst du dich überhaupt an was du getan hast? Ich habe das gleiche Problem. - Dmitry Minkovsky


In meinem Fall musste ich die Konvertierung seit der Instanz, die ich erstellte, manuell durchführen aws ec2 register-image bootet nicht. Meine Lösung basiert auf dieser Beitrag auf der AWS EC2 Forum.

Vorbereitung

Stellen Sie sicher, dass sich alle Volumes in derselben Verfügbarkeitszone befinden.

  1. SSH an Ihre PV-Maschine, von der Sie migrieren und alle Updates anwenden möchten, und melden Sie sich dann ab.

  2. Wechseln Sie zur AWS Console und starten Sie eine neue HVM-Instanz, indem Sie das gleiche Basis-AMI auswählen, aus dem das PV-System erstellt wurde (in meinem Fall das Amazon 64-Bit Linux AMI).

  3. SSH zu dieser neuen Instanz und alle Updates anwenden, dann abmelden.

  4. Wechseln Sie zur AWS Console und stoppen Sie die PV-Instanz. Erstellen Sie einen Snapshot des Root-Geräts und erstellen Sie ein neues Volume (SOURCE VOLUME) aus diesem Schnappschuss.

  5. Stoppen Sie die HVM-Instanz. Erstellen Sie einen Snapshot des Root-Geräts für die neue Instanz und erstellen Sie ein neues Volume (TARGET VOLUME) aus diesem Schnappschuss.

  6. Verwenden der AWS-Konsole:

    • Anfügen SOURCE VOLUME zur neuen Instanz als /dev/xvdf.
    • Anfügen TARGET VOLUME zur neuen Instanz als /dev/xvdg.

Umwandlungsprozess

  1. SSH an die neue Instanz und bekomme Root-Zugriff:

    sudo su
    
  2. Mounten Sie die Quell- und Ziellaufwerke.

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

    In meinem Fall waren die Geräte /dev/xvdf (Quelle) und /dev/xvdg1 (Ziel). Diese können sich in Ihrer Konfiguration ändern, basierend auf der Anzahl der Partitionen und wo Sie sie angehängt haben (siehe Schritt 6 in Vorbereitung). Benutzen ls -al /dev/xvd* um die Laufwerke zu sehen.

  3. Backup /lib/modules/* (Wenn der Kernel der PV-Ami sich von der neuen HVM-Maschine unterscheidet. Dieses Modul wird von einigen Diensten von AWS verwendet.)

  4. Alles löschen aber /boot auf dem Zielvolumen:

    cd /mnt/target && ls | grep -v boot | xargs rm -Rf
    
  5. Löschen /boot auf dem Quell-Volume:

    rm -Rf /mnt/source/boot
    
  6. Kopieren Sie die Daten des Quellvolumes unter Beibehaltung aller Attribute auf das Zielvolume:

    rsync -aAXHPv /mnt/source/ /mnt/target
    
  7. Bearbeiten /mnt/target/etc/fstab zum / Partition, so dass es die verweist TARGET VOLUME wenn sie an ihrem endgültigen Ort in Schritt (8) montiert ist. Entweder mit einem Label oder einfach mit etwas:

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

Dann wiederherstellen /lib/modules/ das wurde in Schritt 3 gesichert. (Wenn der Kernel des PV-Ami von dem neuen HVM-Gerät abweicht.)

  1. Stoppen Sie das System und trennen Sie alle Volumes mithilfe der AWS-Konsole. Hänge an TARGET VOLUME auf der neuen Instanz als /dev/xvda.

    Notieren Sie sich, wo das ursprüngliche Root-Gerät installiert wurde. In den meisten Fällen sollte es sein /dev/xvda.

  2. Starten Sie Ihre HVM-Instanz. Es sollte jetzt ein exaktes Duplikat Ihrer PV-Anlage sein. Wenn alles in Ordnung ist, können Sie jetzt Ihre PV-Instanz löschen und auch SOURCE VOLUME.


13
2018-03-27 21:17



Warum tust du nicht einfach ein? rm -f /boot und cp -a /mnt/source/boot /mnt/target? - michelem
@Michelem wenn ich mich richtig erinnere, versuchte ich das überhaupt erst. Der Computer wurde nicht gestartet. - tolgamorf
@tolgamorf Gibt es eine Chance, die Antwort zu aktualisieren, um dies zu reflektieren? - Dan Tenenbaum
Diese Anleitung war wirklich hilfreich (und funktionierte für mich !!), aber ich habe einen letzten Vorschlag. Da es sich bei der ursprünglichen Frage um ein HVM-AMI handelte, lassen Sie diesen Schritt nicht implizit, fügen Sie einen letzten Schritt hinzu, um die Instanz zu stoppen und daraus ein AMI zu erstellen (und dann die Instanz zu beenden). Außerdem hatte ich die gleichen Probleme wie @DanGravell und ich verwende keinen magnetischen Speicher, so dass dies häufige Fallstricke sein könnten, die in der Antwort angesprochen werden könnten. - Dan Tenenbaum
Danke vielmals! Das hat mir eine Menge Zeit erspart, ich habe es bearbeitet, um den fstab-Teil zu klären, der mich ein wenig verwirrt hat. Vorsicht bei Schritt (4), ich löschte irgendwie den Root des temporären Volumes und nicht die Ziele, brach dieses Volume und musste den Prozess neu starten. - Zar


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 

Detaillierte Schritte:

Antworten weiter basierend auf Jeff Strunks Antwort um die Schritte zu vereinfachen und ein wenig mehr Details zum ec2-Registerbild zu geben:

  1. Erstellen Sie die Instanz mit PV Image. Nehmen Sie Änderungen vor, die Sie möchten.

  2. Erstellen Sie ein Bild von der obigen Instanz.

  3. Suchen Sie die Snapshot-ID, die vom obigen AMI unter EC2> Elastic Block Store> Snapshot in der EC2-Konsole verwendet wird.

    oder wenn Sie die ec2 api-Tools eingerichtet haben:

    ec2-describe-images ami-id_of_above_created_ami

    und finde die Snapshot-ID für das AMI

    .. Annahmen für weitere Schritte: Ihre ec2-Schlüssel und api-Werkzeuge sind eingestellt und einsatzbereit:

  4. Registrieren Sie ein neues HVM AMI mit dem obigen Snapshot: Beispiel:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n   'Fedora_20_HVM_AMI' --sriov simple --virtualisierungstyp hvm -s   snap-b44feb18 --root-Gerätename / dev / sda1

woher

  • -d ist AMI-Beschreibung
  • -n ist AMI-Name
  • -s ist die Snapshot-ID aus Schritt 3.
  • -a ist Architektur
  • --virtualization-type ist erforderlich, um es hvm zu machen
  • --sriov dient zur Ermöglichung erweiterter Netzwerke, obwohl es redundant sein könnte, nicht sicher.

Für mehr Informationen:


10
2017-08-02 04:16



Sofern ich nicht etwas falsch mache, funktioniert dies nicht für Marktplatz-AMIs, die Instanztypen einschränken. Versucht, das offizielle MongoDB paravirtuelle AMI in HVM umzuwandeln, und während ich das HVM AMI erstellen konnte, würde es keine HVM-Instanz damit starten. - Matt Beckman
@MattBeckman Ich denke es ist eher die zugrunde liegende Kernel / Bootloader-Unterstützung als AMI-Beschränkung. Oben funktioniert für Fedora aber nicht für Amazon Linux. Dort muss man den Weg gehen, den Jeff Strunk ursprünglich vorgeschlagen hat. - Anshu Prateek
Es hat @AnshuPrateek funktioniert - Atmesh Mishra


Sie können dies von der AWS-Weboberfläche aus tun. Navigieren Sie zu SchnappschüsseKlicken Sie auf den gewünschten Schnappschuss, den Sie in hvm konvertieren möchten, und klicken Sie auf Aktionen und dann Bild erstellen. Wählen Sie im Drop-down-Menü des Assistenten zum Erstellen von Bildern HVM.


2
2017-07-24 18:31



Ich habe es gerade versucht, aber es ist so, als würde die Instanz nicht richtig booten. Es wird nur für kurze Zeit in den gestoppten Zustand versetzt, nur wenige Augenblicke nachdem ich es begonnen habe. - ovi


Nachdem ich alle Vorschläge ausprobiert habe, von denen keiner für mich funktioniert hat, fand ich einen exzellenten Blogeintrag zu diesem Thema https://www.opswat.com/blog/aws-2015-why-you-need-switch-pv-hvm .

Die Elemente (Einzelheiten) des Verfahrens sind:

  1. Installieren grub auf der zu migrierenden PV-Instanz (Quellinstanz).

  2. Machen Sie eine vorsorgliche Momentaufnahme des Root-Volumes auf der Quellinstanz (Quell-Volume, SV).

  3. Erstellen Sie eine temporäre HVM-Instanz, die das Volume migriert.

    1. Ich habe eine Amazon Linux-Instanz verwendet
  4. Erstellen Sie ein Zielvolume (DV) und hängen Sie dieses und das SV an die temporäre Instanz an.

    1. Der DV sollte mindestens so groß sein wie der SV.

    2. Befestigen Sie den SV als /dev/{sd,xvd}fund der DV als /dev/{sd,xvd}g.

    3. Partitioniere das DV:

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

    partprobe /dev/xvdg

    udevadm settle

  5. Ändern Sie die Größe des FS des SV und verwenden Sie dd Image es auf dem DV.

    1. Reinigen Sie den FS des Quellvolumes: e2fsck -f /dev/xvdf

    2. Minimiere das Gleiche: resize2fs -M /dev/xvdf

    3. Beobachten Sie die Ausgabe von resize2fs (z. B. Resizing the file system on /dev/xvdf to 269020 (4k) blocks) und notieren Sie es für den nächsten Schritt.

    4. Doppelte SV zu 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. Erweitern Sie den FS auf der neuen Partition: resize2fs /dev/xvdg1

  6. Installieren grub in den Bootblock des DV

    1. Vorübergehend Gerätedateien auf dem DV erstellen: mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/

    2. Grub-Dateien installieren:

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

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

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

    1. Installieren Sie grub in einer Chroot-Umgebung:

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

    device (hd0) /dev/xvdg

    root (hd0,0)

    setup (hd0)

    ARNIE

  7. Nachdem Sie einige kleinere Änderungen am Zielvolume vorgenommen haben, klicken Sie auf Lautstärke und mache daraus ein AMI.

    1. Ordnen Sie die temporären Gerätedateien auf: rm -f /mnt/dev/xvdg /mnt/dev/xvdg1

    2. Im /mnt/boot/grub/grub.conf, Veränderung root (hd0) zu root (hd0,0), hinzufügen (oder ersetzen console=*) console=ttyS0 zur Kernel-Zeile und ggf. ersetzen root=* mit root=LABEL=/ in der Kernel-Zeile

    3. Im /mnt/etc/fstabStellen Sie sicher, dass die Zeile des Stamm-FS eine beschriftete Referenz enthält, z

    LABEL=/ / ext4 defaults,noatime 1 1

    1. Beschriften Sie den neuen Stamm FS mit e2label /dev/xvdg1 /

    2. Unmounten Sie DV von der temporären Instanz, trennen Sie SV und DV von der temporären Instanz.

    3. Rasten Sie den DV ein und erstellen Sie von diesem Snap ein AMI-Bild.

  8. Starten Sie eine HVM-Instanz von diesem HMI. Das ist Ihre migrierte Instanz.


1
2017-09-18 19:35