Erstellen Sie ein AWS HVM Linux AMI aus einem vorhandenen paravirtuellen Linux AMI.

Erstellen Sie ein AWS HVM Linux AMI aus einem vorhandenen paravirtuellen Linux AMI.

Ist es möglich, aus einem vorhandenen paravirtuell basierten AMI (PV) eine Hardware-Virtual-Machine (HVM) zu erstellen?

Mein erster Gedanke war, eine neue PV-Instanz zu starten und den ec2-create-imageBefehl zum Erstellen eines neuen Images zu verwenden, während ich HVM als Virtualisierungstyp angebe. ec2-create-imageEs gibt jedoch keinen Befehlszeilenparameter zum Angeben des Virtualisierungstyps.

Gibt es eine andere Möglichkeit, dies zu tun?

Antwort1

Aktualisieren

AWS hat diese Funktion in der EC2-API aktiviert. Sie ist als --virtualization-typeOption verfügbar, umaws ec2 register-imageim neuen Boto-basierten awscli.

Ursprüngliche Antwort

Ja! Leider gibt es dafür keinen direkten Weg. Außerdem können bei einigen PV-Instanzen Kernel- und Bootloader-Änderungen erforderlich sein.

  1. Erstellen Sie ein Volume aus Ihrem vorhandenen PV AMI. Wenn es Ihr eigenes PV AMI war, können Sie aus dem Snapshot ein Volume erstellen. Wenn es ein AMI eines Drittanbieters ist, 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 Stammvolume von dieser Instanz.
  5. Fügen Sie das PV-Volume als Stammvolume (/dev/sda1 oder /dev/sda, wenn es partitioniert wurde) zur HVM-Instanz hinzu.
  6. Auf der HVM-Instanz ausführen ec2-create-image.
  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, ein Chroot einrichten und einen Kernel und einen Bootloader für Ihre Distribution installieren. Möglicherweise möchten Sie auch Protokolle und den gesamten Cloud-Init-Cache löschen.

Antwort2

In meinem Fall musste ich die Konvertierung manuell durchführen, da die von mir erstellte Instanz aws ec2 register-imagenicht bootete. Meine Lösung basiert aufdieser Beitragauf derAWS EC2 Forum.

Vorbereitung

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

  1. Stellen Sie per SSH eine Verbindung zu der PV-Maschine her, von der Sie migrieren möchten, und wenden Sie alle Aktualisierungen an. Melden Sie sich anschließend ab.

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

  3. Stellen Sie per SSH eine Verbindung zu dieser neuen Instanz her, wenden Sie alle Aktualisierungen an und melden Sie sich anschließend ab.

  4. Gehen Sie zur AWS-Konsole und stoppen Sie die PV-Instanz. Machen Sie einen Snapshot des Root-Geräts und erstellen Sie SOURCE VOLUMEaus diesem Snapshot ein neues Volume ( ).

  5. Stoppen Sie die HVM-Instanz. Erstellen Sie einen Snapshot des Root-Geräts auf der neuen Instanz und erstellen Sie TARGET VOLUMEaus diesem Snapshot ein neues Volume ( ). Starten Sie die (neue) HVM-Instanz erneut.

  6. Verwenden der AWS-Konsole:

  • SOURCE VOLUMEAn die neue Instanz anhängen als /dev/xvdf.
  • TARGET VOLUMEAn die neue Instanz anhängen als /dev/xvdg.

Umwandlungsprozess

  1. Stellen Sie per SSH eine Verbindung zur neuen Instanz her und erhalten Sie 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 je nach Anzahl der Partitionen und der Stelle, an der Sie sie angeschlossen haben, ändern (siehe Schritt 6 in Vorbereitung). Verwenden Sie , ls -al /dev/xvd*um die Laufwerke anzuzeigen.

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

  4. Löschen Sie alles außer /bootdem Zielvolume:

     cd /mnt/target && ls | grep -v boot | xargs rm -Rf
    
  5. /bootAuf dem Quellvolume löschen :

     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 Sie /mnt/target/etc/fstabdie /Partition so, dass sie TARGET VOLUMEbeim Einhängen an ihren endgültigen Speicherort in Schritt (8) auf die Partition verweist. Verwenden Sie dazu entweder ein Label oder einfach etwas in der Art:

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

Stellen Sie dann /lib/modules/das in Schritt 3 gesicherte System wieder her. (Wenn sich der Kernel des PV-AMI vom Kernel der neuen HVM-Maschine unterscheidet.)

  1. Stoppen Sie das System und trennen Sie alle Volumes mithilfe der AWS-Konsole. Hängen Sie das TARGET VOLUMEan die neue Instanz als an /dev/xvda.

    Notieren Sie sich unbedingt, wo das ursprüngliche Root-Gerät gemountet wurde. In den meisten Fällen sollte dies der Fall sein /dev/xvda.

  2. Starten Sie Ihre HVM-Instanz. Sie sollte jetzt eine exakte Kopie Ihres PV-Systems sein. Wenn alles in Ordnung ist, können Sie jetzt Ihre PV-Instanz löschen und auch SOURCE VOLUME.

Antwort3

Kurz zusammengefasst:

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:

Weitere Antworten basierend aufJeff Strunks Antwortum die Schritte zu vereinfachen und ein paar mehr Details zum EC2-Registerabbild zu geben:

  1. Erstellen Sie eine Instanz mit PV Image. Nehmen Sie alle gewünschten Änderungen vor bzw. aktualisieren Sie sie.

  2. Erstellen Sie ein Image aus der obigen Instanz.

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

    oder wenn Sie die EC2-API-Tools eingerichtet haben:

    ec2-describe-images ami-id_des_oben_erstellten_ami

    und finde die Snapshot-ID für den AMI

    .. Annahmen für weitere Schritte: Ihre EC2-Schlüssel und API-Tools sind festgelegt 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 einfach --virtualisierungstyp hvm -s snap-b44feb18 --root-gerätename /dev/sda1

Wo

  • -d ist die AMI-Beschreibung
  • -n ist der AMI-Name
  • -s ist die Snapshot-ID aus Schritt 3.
  • -a ist Architektur
  • --virtualization-type ist erforderlich, um es zu hvm zu machen
  • --sriov dient zum Aktivieren der erweiterten Netzwerkfunktion, ist aber möglicherweise überflüssig, ich bin nicht sicher.

Für mehr Informationen:

Antwort4

Nachdem ich alle hier aufgeführten Vorschläge ausprobiert hatte, von denen keiner für mich funktionierte, fand ich einen ausgezeichneten Blogeintrag zu diesem Thema unterhttps://www.opswat.com/blog/aws-2015-why-you-need-switch-pv-hvm.

Die Elemente (Details) des Verfahrens sind:

  1. Installieren Sie es grubauf der zu migrierenden PV-Instanz (Quellinstanz).

  2. Erstellen Sie vorsorglich einen Snapshot des Root-Volumes auf der Quellinstanz (Quellvolume, 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 sowohl dieses als auch das SV an die temporäre Instanz an.

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

    2. Fügen Sie den SV als /dev/{sd,xvd}fund den DV als an /dev/{sd,xvd}g.

    3. Partitionieren Sie die Festplatte:

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

    partprobe /dev/xvdg

    udevadm settle

  5. Passen Sie die FS-Größe des SVs auf die Mindestgröße an und kopieren Sie ddes mithilfe des Images auf das DV.

    1. Bereinigen Sie das FS des Quellvolumes:e2fsck -f /dev/xvdf

    2. Minimieren Sie dasselbe: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 sie für den nächsten Schritt.

    4. SV auf DV duplizieren: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 das FS auf der neuen Partition:resize2fs /dev/xvdg1

  6. grubIn den Bootblock des DV installieren

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

    2. Installieren Sie Grub-Dateien:

    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 andere kleinere Änderungen am Zielvolume vorgenommen haben, erstellen Sie ein Snapshot des Volumes und ein AMI daraus.

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

    2. /mnt/boot/grub/grub.confÄndern Sie in in , fügen Sie zur Kernelzeile hinzu (oder ersetzen Sie ) und ersetzen Sie bei root (hd0)Bedarf root (hd0,0)in console=*der Kernelzeile durchconsole=ttyS0root=*root=LABEL=/

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

    LABEL=/ / ext4 defaults,noatime 1 1

    1. Beschriften Sie das neue Stamm-FS mite2label /dev/xvdg1 /

    2. Hängen Sie DV von der temporären Instanz ab und trennen Sie sowohl SV als auch DV von der temporären Instanz.

    3. Machen Sie einen Snap des DV und erstellen Sie daraus ein AMI-Image.

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

verwandte Informationen