Nach der Konvertierung von Ubuntu 16 PV in Ubuntu 16 HVM kann keine Verbindung zur EC2-Instanz hergestellt werden

Nach der Konvertierung von Ubuntu 16 PV in Ubuntu 16 HVM kann keine Verbindung zur EC2-Instanz hergestellt werden

Es sind also ein paar Tage vergangen und ich kann immer noch keine Verbindung zu meiner neuen HVM-Instanz mit EC2 unter Ubuntu 16 herstellen. Zur Information: Ich versuche, unseren Server von einer M3-Instanz mit Ubuntu 16 auf eine C5-Instanz mit Ubuntu 16 zu aktualisieren. Mit fast jeder Methode, die ich ausprobiert habe, gelange ich an den Punkt, an dem ich meine neue C5-Instanz stoppe, alle Volumes trenne und das neu aktualisierte Quellvolume als anhänge /dev/sda1. Wenn ich dann jedoch versuche, eine Verbindung zur Instanz herzustellen, tritt immer eine Zeitüberschreitung auf. Auch die Statusprüfung von Amazon schlägt fehl, da die Instanz als nicht erreichbar gemeldet wird. Das Systemprotokoll zeigt jedoch beim Start keine Probleme an.

Ich habe alles versucht,dieser Beitrag. Ich habe es versuchtdieser Beitragauch. Ich habe auf anderen Seiten nachgesehen und habeDasUndDasein Versuch. Ich habe sogar sowohl die Methode mit den EC2-Befehlszeilentools als auch die Konvertierung eines AMI von der EC2-Konsole (online) aus ausprobiert, allerdings kann ich mit dem konvertierten AMI entweder keine C5-Instanz starten oder die Instanz wird angehalten und schlägt fehl (im Fall der Konvertierung über die Befehlszeile).

Das einzige, was mir als Ursache einfällt, ist die Namenskonvention für die Partitionen auf der C5-Instanz. Jede einzelne Anleitung, die ich gesehen habe, verwendet xvda/xvdf/xvdg. Ich könnte mich irren, aber ich habe diese Partitionen oder Festplatten nicht, sondern stattdessen nvme0n1, nvme0n1p1, (die neue HVM-Root), nvme1n1, und nvme1n1p1. Als ich die HVM/Quell-/Zielfestplattenmethode ausprobierte, hatte ich nvme0n1/nvme0n1p1, nvme1n1(Ziel – wo alles landen sollte) und nvme2n1/nvme2n1p1(Quelle – woher alles kam, auf m3). Ich fanddieser Amazon-Beitrag über NVMealso ich denke nicht, dass das ein Problem sein sollte, da ich einfach die richtige Festplatte/Partition verwende, wenn ich benutze /mnt/, d. h. ich rufe mkdir -p /mnt/target && mount /dev/nvme1n1 /mnt/targetstatt auf, aber bisher hat nichts funktioniert. Meine Instanz wird unerreichbar, sobald ich das als mkdir -p /mnt/target && mount /dev/xvdf /mnt/targetanhänge .target/dev/sda1

Gibt es also etwas, das ich übersehe, wenn ich dies mit einer Festplatte namens mache nvme*? Gibt es weitere Informationen oder Debug-Elemente, die ich bereitstellen kann, um das Problem besser zu verstehen?

Antwort1

Mir ist klar, dass diese Frage nicht oft gestellt wurde, aber ich hoffe, dass meine Ergebnisse in Zukunft jemandem helfen können (vielleicht sogar mir, wenn ich das nächste Mal versuche). Ich möchte Steve E. vom Amazon-Support dafür danken, dass er mir geholfen hat, meine Instanz zu migrieren <3

Wie auch immer, es gab zwei Probleme beim Migrieren meiner Ubuntu 16.04 M3 (PV)-Instanz zu einer Ubuntu 16.04 C5 (HVM)-Instanz. Das erste Problem war, dass die neuen C5-Instanzen die neuen Namenskonventionen verwenden, sodass andere Tutorials zum Migrieren von PV zu HVM nicht ganz so funktionieren. Das andere Problem war, dass meine M3 (PV)-Instanz Upgrades auf Ubuntu durchlaufen hatte. Ich war im letzten Jahr oder so tatsächlich von Ubuntu 12 -> Ubuntu 14 -> Ubuntu 16 gewechselt. Dies führte zu einem Problem, bei dem keine Cloud-Netzwerkdateien generiert wurden und meine Instanz daher nicht erreicht werden konnte.

Um eine Ubuntu 16.04 PV-Instanz unter Verwendung der neuen NVMe-Benennungskonvention zu einer HVM-Instanz zu migrieren, gehen Sie wie folgt vor:

Zusammenfassung der Voraussetzungen:

  1. Stellen Sie vor dem Start sicher, dass Sie Folgendes auf Ihrer PV-Instance installieren:

    $ sudo apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists
    $ sudo apt-get install linux-aws
    
  2. Stoppen Sie die PV-Instanz undErstellen eines Snapshotsdes Grundvolumens,stelle diesen Schnappschuss wieder herals neues EBS-Volume in derselben Verfügbarkeitszone wie die Quelle (Starten Sie die PV-Instanz direkt nach der Snapshot-Erstellung)
  3. Starten Sie eine neue C5 HVM-Instanz(Ziel) Auswahl des Ubuntu Server 16.04 LTS (HVM) in derselben Verfügbarkeitszone wie die Quellinstanz (Beschränken Sie die Größe des EBS-Stammvolumes dieser neuen Instanz auf 8 GB, da dieses Stammvolume nur vorübergehend verwendet wird)
  4. Nachdem die Instanz gestartet wurde,Befestigen Sie das VolumeSie haben in Schritt 1 wiederhergestellt (das ist das Stammvolume der PV-Instanz) als /dev/sdf(auf dem Ubuntu-System lautet der Name nvme1n1).
  5. Erstellen Sie ein neues (leeres) EBS-Volume(dieselbe Größe wie Ihr „Quell“-PV-Stammvolume) und an die HVM-Instanz anhängen als /dev/sdg(auf dem Ubuntu-System lautet der Name nvme2n1)

Migration:

Sobald Sie sich bei Ihrer Instanz angemeldet haben, führen Sie sudo sualle Befehle als Root-Benutzer aus.

  1. Zeigen Sie Ihre Volumina an

    # lsblk 
    NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    nvme0n1     259:0    0    8G  0 disk 
    └─nvme0n1p1 259:1    0    8G  0 part /
    nvme1n1     259:2    0  100G  0 disk 
    nvme2n1     259:3    0  100G  0 disk 
    

    nvme0n1ist das HVM-Stammverzeichnis, das Sie gerade erstellt haben (diesmal nur zum Booten) nvme1n1ist das wiederhergestellte PV-Stammverzeichnis (wird in HVM konvertiert) nvme2n1ist das leere Volume (erhält die Konvertierung vom PV-Stammverzeichnis als nvme1n1)

  2. Erstellen Sie eine neue Partition auf nvme2n1( nvme2n1p1wird erstellt)

    # parted /dev/nvme2n1 --script 'mklabel msdos mkpart primary 1M -1s print quit'
    # partprobe /dev/nvme2n1
    # udevadm settle
    
  3. Überprüfen Sie das Quellvolume und minimieren Sie die Größe des ursprünglichen Dateisystems, um den Vorgang zu beschleunigen. Wir möchten im nächsten Schritt keinen freien Speicherplatz kopieren.

    # e2fsck -f /dev/nvme1n1 ; resize2fs -M /dev/nvme1n1
    
  4. Duplizieren Sie das Quell- in das Ziel-Volume

    # dd if=/dev/nvme1n1 of=/dev/nvme2n1p1 bs=$(blockdev --getbsz /dev/nvme1n1) conv=sparse count=$(dumpe2fs /dev/nvme1n1 | grep "Block count:" | cut -d : -f2 | tr -d "\\ ")
    
  5. Ändern Sie die Größe des Zielvolumes auf das Maximum:

    # e2fsck -f /dev/nvme2n1p1 && resize2fs /dev/nvme2n1p1
    
  6. Bereiten Sie das Zielvolume vor:

    # mount /dev/nvme2n1p1 /mnt/ && mount -o bind /dev/ /mnt/dev && mount -o bind /sys /mnt/sys && mount -o bind /proc /mnt/proc
    
  7. chrootzum neuen Band

    # chroot /mnt/
    
  8. Installieren Sie Grub neuauf dem chroot-Volume:

    # grub-install --recheck /dev/nvme2n1
    # update-grub
    

    Verlassen Sie denchroot

    # exit
    

    Herunterfahren der Instanz

    # shutdown -h now
    
  9. Nach der Konvertierung müssen Sie nun folgendes tun:

    Trennen Sie die 3 Volumes, die Sie zuvor auf der HVM-Instanz hatten. Verbinden Sie das letzte Volume, das Sie erstellt haben (leer), als /dev/sda1auf der Konsole (es war zuvor als verbunden /dev/nvme2n1) mit der HVM-Instanz. Starten Sie die HVM-Instanz.

Die neue HVM-Instanz sollte nun erfolgreich booten und eine exakte Kopie der alten Quell-PV-Instanz sein (sofern Sie das richtige Quellvolume verwendet haben). Sobald Sie bestätigt haben, dass alles funktioniert, kann die Quellinstanz beendet werden.


Aktualisieren der Netzwerkkonfiguration (optional)

Die oben genannten Schritte werden für die meisten Leute hier funktionieren. Allerdings wurde mein Instanzstatus immer noch nicht erreicht. Der Grund war, dass ich Ubuntu auf meiner Instanz aktualisiert habe, anstatt mit einem neuen Image zu beginnen. Dadurch blieb die Konfiguration aktiviert, eine Konfigurationsdatei eth0fehlt .50-cloud-init.cfg

Wenn Sie die Datei bereits haben /etc/network/interfaces.d/50-cloud-init.cfg, können Sie fortfahren und die Datei aktualisieren, anstatt eine neue zu erstellen. Gehen Sie außerdem davon aus, dass alle Befehle über ausgeführt werden sudo su.

  1. Fahren Sie die Instanz herunter, trennen Sie die Volumes und geben Sie dieselbe Konfiguration wie zuvor ein. Fügen Sie das 8-GB-Volume als /dev/sda1/und Ihr endgültiges Zielvolume als /dev/sdf/ein. Starten Sie die Instanz und melden Sie sich an.

  2. Mounten Sie , was jetzt wie folgt /dev/sdferfolgen sollte :nvme1n1p1

    # mount /dev/nvme1n1p1 /mnt/ && mount -o bind /dev/ /mnt/dev && mount -o bind /sys /mnt/sys && mount -o bind /proc /mnt/proc
    
  3. Erstellen oder aktualisieren Sie die Datei:

    /etc/network/interfaces.d/50-cloud-init.cfg
    

    Mit den folgenden:

    # This file is generated from information provided by
    # the datasource.  Changes to it will not persist across an instance.
    # To disable cloud-init's network configuration capabilities, write a file
    # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
    # network: {config: disabled}
    auto lo
    iface lo inet loopback
    
    auto ens5
    iface ens5 inet dhcp
    
  4. Beenden chroot( exit), Instanz beenden ( shutdown -h now).

  5. Befolgen Sie Schritt 9 von zuvor!

Sie sollten fertig sein!


Antwort2

Danke, der Hinweis zur Netzwerkkonfiguration hat im Upgrade-Fall (Ubuntu 14.04 PV auf Ubuntu 18.04 PV) funktioniert. Das aktualisierte Ubuntu 18.04 PV wurde mit einer leichten Anpassung der Netzwerkkonfiguration auf Ubuntu 18.04 HVM konvertiert. Eine neue /etc/netplan/50-cloud-init.config mit folgender Konfiguration wurde erstellt

network:
    version: 2
    ethernets:
        all-en:
            match:
                name: "en*"
            dhcp4: true
        all-eth:
            match:
                name: "eth*"
            dhcp4: true

verwandte Informationen