Amazon EC2: So konvertieren Sie einen vorhandenen PV AMI in HVM

82

Frage:

Wie soll ich die neuen AWS EC2-Klassen (r3, i2) mit meinem vorhandenen AMI verwenden, ohne das gesamte System-Setup neu zu erstellen?

Die neuen EC2-Klassen unterstützen nur HVM-basierte Virtualisierung, aber ich habe nur PVM-AMI-Images.

user3760692
quelle
3
Ich habe es gerade mit CentOS versucht, aber am Ende in Schritt 10 mit folgendem Fehler: / dev / xvdf hat kein entsprechendes BIOS-Laufwerk.
Tobias
Nach dem, was @ROMANARMY gesagt hat, sollte die Antwort meiner Meinung nach in eine richtige Antwort aufgeteilt werden. Dann können Sie es akzeptieren, damit die Frage nicht als unbeantwortet angezeigt wird. Siehe stackoverflow.com/help/self-answer
Tim
@Tobias Zander hast du das jemals mit CentOS zum Laufen gebracht?
Dhempler
1
@ dennis.hempler Wir haben nicht viel mehr Zeit investiert und nur neue Instanzen erstellt
Tobias

Antworten:

77

Antworten:

  1. Starten Sie ein Ubuntu HVM Linux, jede Version, neu

  2. Starten Sie ein Ubuntu / mit meinem vorhandenen AMI / PVM-Linux und installieren Sie Grub-Pakete darauf: apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists

  3. Stoppen Sie PVM Linux

  4. Trennen Sie die Root-Partition (/ dev / sda1) unter PVM Linux

  5. Hängen Sie die PVM-Linux-Root-Partition irgendwo an die Ausführung von HVM-Linux an, z. B.: / Dev / sdf

  6. Unter 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 verlassen: STRG + D.

  13. Stoppen Sie HVM Linux

  14. Trennen Sie die ursprüngliche Wurzel von / dev / sda1 UND trennen Sie die PVM-Wurzel von / dev / sdf

  15. Hängen Sie den PVM-Stamm als / dev / sda1 an HVM Linux an

  16. Starten Sie HVM Linux, voilà!

  17. Erstellen Sie ein neues AMI-Image unter dem laufenden HVM-Linux. Es wird HVM-virtualisiert.

divyenduz
quelle
Hat perfekt funktioniert ... nachdem ich die HVM-Instanz in genau derselben Verfügbarkeitszone wie das PVM-Volume erstellt habe.
Cloudsfinfin
2
Beim Ausführen von grub-install wird folgende Warnung angezeigt: 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.Dann sieht alles gut aus, aber es bootet nicht oder gibt mir keinen Hinweis, warum es nicht bootet.
Paulo Neves
3
Das hat perfekt für mich funktioniert, vielen Dank! Ich habe die beängstigenden Grub-Warnungen erhalten, die Paulo Neves oben gemeldet hat, aber meine neue Instanz hat trotzdem gut gebootet.
GaryO
Ich habe eine AMI Linux PVM-Instanz und versuche, sie auf eine neue HVM AMI Linux-Instanz zu migrieren. Ich habe versucht, Ihre Lösungen anzuwenden, stecke aber bei Schritt 10 fest. Könnte jemand bitte erläutern, wie dies für eine neue AMI Linux-Instanz anstelle von Ubuntu gemacht wird? Vielen Dank!
Tolgamorf
1
Die Instanz ist nicht erreichbar, wenn ein neuerer Instanztyp (z. B. C5) verwendet wird. In xvd*diesen Fällen gibt es keine , es gibt nur nvme*Namenskonventionen. Das Ersetzen xvddurch das richtige nvmefunktioniert nicht. :(
Alex
2

Die Antwort von @divyenduz funktioniert, muss jedoch für das moderne (ca. 2019) AWS EC2 bereinigt und geklärt werden. Wichtig ist, dass moderne Instanzklassen den Gerätenamen unterschiedlich übersetzen.

Hier sind meine geänderten Schritte.

Aus Gründen der Übersichtlichkeit sind die Knoten:

  • Der ursprüngliche PVM-Knoten, den Sie auf HVM aktualisieren möchten, ist "PVM01".
  • Der neue HVM-Knoten, auf den Sie die Root-Festplatte von PVM01 migrieren, ist "HVM01".

VOR DEM VERFAHREN: Sichern Sie den Originalknoten PVM01

  1. Installieren Sie die Voraussetzungen auf dem Knoten PVM01

    • Installieren Sie Madenpakete auf PVM01

      apt-get install  grub-pc  grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists
      
  2. Stoppen Sie den Knoten PVM01

    • Erstellen Sie einen Snapshot von / dev / sda1
    • ODER AMI des gesamten Knotens erstellen
  3. Erstellen Sie einen Snapshot des ursprünglichen Root-Volumes auf PVM01 und erstellen Sie aus diesem Snapshot ein neues Volume
    • Erstellen Sie einen Snap von / dev / sda1 auf PVM01
    • Erstellen Sie vol aus diesem Snap
    • Beschriften Sie jede Ressource entsprechend
      • Verlinke den Namen; Wert: pvm01: / dev / sda1: Schnappschuss für die Konvertierung in hvm: 2019-07-01
      • Etc
  4. create-instance: Neue Ubuntu HVM-Instanz "HVM01". Jede Instanzklasse sollte funktionieren. Der Gerätename kann jedoch unterschiedlich sein (siehe Hinweise unten)
    • Ich habe Bionic Ubuntu 18.04 HVM AMI ID ami-0a313d6098716f372 und die Instanzklasse C5.XLARGE verwendet
  5. Hängen Sie die PVM01-Root-Partition (neues Volume aus dem vorherigen Schritt) an die neue HVM01 / dev / sdf an

    • HINWEIS : Ältere Instanzklassen wie C3 übersetzen den Datenträgernamen in / dev / xvdf
    • HINWEIS : Neuere Instanzklassen wie C5 übersetzen den Datenträgernamen in / dev / nvme1
      • In neueren Instanzklassen lautet das Root- Volume / dev / nvme0 - ZERO
      • In neueren Instanzklassen lautet das angehängte sekundäre Volume / dev / nvme1 - ONE
    • Notieren Sie sich den Namen des angeschlossenen Volume-Geräts

    ssh PVM01 sudo fdisk -l

  6. Auf 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. Beenden Sie chroot mit STRG + D.

  8. Stoppen Sie HVM01
  9. Trennen Sie beide Volumes
    • Trennen Sie / dev / nvme0 PVM01 root
      • HINWEIS: Dies wäre / dev / sda1 in einer C3-Instanzklasse
    • trennen Sie / dev / $ {DEVNAME} (DEVNAME vom obigen Skript)
  10. Hängen Sie das PVM01-Root-Volume als / dev / sda1 an HVM01 an
    • Wieder befindet sich der Name / dev / sda1 in der Konsole. Dieser Name wird in / dev / nvme0 oder / dev / xvda1 übersetzt, je nachdem, wie modern die Instanzklasse ist
  11. Starten Sie HVM01
  12. OPTIONAL: Erstellen Sie ein neues AMI-Image aus der jetzt laufenden HVM01, es wird HVM-virtualisiert.
JDS
quelle
Diese Lösung hat bei mir funktioniert. Denken Sie daran, die DEVNAMEVariable nach dem chrootBefehl neu zu erstellen .
Justin Lee