Ubuntu 16 PV を Ubuntu 16 HVM に変換した後、EC2 インスタンスに接続できない

Ubuntu 16 PV を Ubuntu 16 HVM に変換した後、EC2 インスタンスに接続できない

数日経ちましたが、Ubuntu 16 を実行している EC2 の新しい HVM インスタンスにまだ接続できません。参考までに、Ubuntu 16 を実行している m3 インスタンスから、Ubuntu 16 を実行している C5 インスタンスにサーバーをアップグレードしようとしています。試したほぼすべての方法で、新しい C5 インスタンスを停止し、すべてのボリュームをデタッチし、新しく更新されたソース ボリュームを としてアタッチするまではできますが/dev/sda1、その後インスタンスに接続しようとすると、常にタイムアウトしてしまいます。Amazon のステータス チェックも失敗し、インスタンスに到達できないと表示されます。ただし、起動時にシステム ログに問題は表示されません。

私はあらゆることを試してきましたこの郵便受け。 私はもう試したこの郵便受け他のサイトも見てみましたが、これそしてこれ試してみてください。ec2 コマンドラインツールの方法と、ec2 コンソール (オンライン) からの AMI の変換の両方を試しましたが、変換された AMI で C5 インスタンスを起動できないか、インスタンスが停止して失敗します (コマンドライン経由の変換の場合)。

原因として考えられるのは、C5 インスタンスのパーティションの命名規則だけです。私が見たすべてのガイドでは を使用しています。xvda/xvdf/xvdg間違っているかもしれませんが、これらのパーティションやディスクはなく、代わりに 、 、 (新しい HVM ルート)、 、 がありますnvme0n1。HVM nvme0n1p1/nvme1n1ソースnvme1n1p1/ ターゲット ディスク メソッドを試したとき、nvme0n1/nvme0n1p1nvme1n1(ターゲット - すべてが最終的に配置される場所)、およびnvme2n1/nvme2n1p1(ソース - すべての元の場所、m3) がありました。NVMEに関するAmazonの投稿したがって、 を使用するときは正しいディスク/パーティションを使用しているだけなので、これは問題にならないと思います。つまり、の代わりに/mnt/を呼び出していますが、これまでのところ何も機能していません。を としてアタッチした瞬間にインスタンスにアクセスできなくなります。mkdir -p /mnt/target && mount /dev/nvme1n1 /mnt/targetmkdir -p /mnt/target && mount /dev/xvdf /mnt/targettarget/dev/sda1

では、 という名前のディスクでこれらを実行するときに、何か見落としていることがあるのでしょうかnvme*? 問題を理解するために提供できる他の情報やデバッグ項目はありますか?

答え1

この質問はあまり見られなかったと思いますが、念のため、私の結果が将来誰かの役に立つことを願っています (次にこれを試したときには私自身も役に立つかもしれません)。インスタンスの移行を手伝ってくれた Amazon サポートの Steve E. に感謝します <3

とにかく、Ubuntu 16.04 M3 (PV) インスタンスを Ubuntu 16.04 C5 (HVM) インスタンスに移行するときに 2 つの問題がありました。最初の問題は、新しい C5 インスタンスが新しい命名規則を使用しているため、PV から HVM への移行に関する他のチュートリアルがまったく同じように機能しないことです。もう 1 つの問題は、M3 (PV) インスタンスが Ubuntu にアップグレードされていたことです。実際、過去 1 年ほどの間に、Ubuntu 12 -> Ubuntu 14 -> Ubuntu 16 に移行していました。これにより、クラウド ネットワーク ファイルが生成されず、インスタンスにアクセスできないという問題が発生しました。

とにかく、新しい nvme 命名規則を使用して Ubuntu 16.04 PV インスタンスを HVM インスタンスに移行するには、次の手順を実行します。

前提条件の概要:

  1. 開始する前に、PV インスタンスに以下がインストールされていることを確認してください。

    $ sudo apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists
    $ sudo apt-get install linux-aws
    
  2. PVインスタンスを停止し、スナップショットを作成するそのルートボリュームのこのスナップショットを復元するソースと同じアベイラビリティゾーン上の新しい EBS ボリュームとして (スナップショットの作成後すぐに PV インスタンスを起動します)
  3. 新しいC5 HVMインスタンスを起動する(宛先) ソースインスタンスと同じアベイラビリティゾーンにある Ubuntu Server 16.04 LTS (HVM) を選択します (このルートボリュームは一時的にのみ使用されるため、この新しいインスタンスの EBS ルートボリュームのサイズは 8 GB にしてください)
  4. インスタンスが起動したら、ボリュームを添付するステップ 1 で復元した (PV インスタンスのルート ボリューム)を/dev/sdf(Ubuntu システムでは、名前は になりますnvme1n1)。
  5. 新しい(空の)EBSボリュームを作成する(「ソース」PVルートボリュームと同じサイズ) としてHVMインスタンスに接続します/dev/sdg(Ubuntuシステムでは、名前は になりますnvme2n1)

移行:

インスタンスにログインしたら、 を使用してsudo suすべてのコマンドを root ユーザーとして実行します。

  1. ボリュームを表示する

    # 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 
    

    nvme0n1は、先ほど作成した HVM ルートです (今回は起動するためだけに使用します) は、 nvme1n1復元された PV ルートです (HVM に変換されます) nvme2n1は、空のボリュームです (PV ルートからの変換を受け取りますnvme1n1)

  2. 新しいパーティションを作成しますnvme2n1nvme2n1p1作成されます)

    # parted /dev/nvme2n1 --script 'mklabel msdos mkpart primary 1M -1s print quit'
    # partprobe /dev/nvme2n1
    # udevadm settle
    
  3. プロセスを高速化するために、「ソース」ボリュームを確認し、元のファイルシステムのサイズを最小化します。次の手順では、空きディスク領域をコピーしません。

    # e2fsck -f /dev/nvme1n1 ; resize2fs -M /dev/nvme1n1
    
  4. 「ソース」ボリュームを「宛先」ボリュームに複製する

    # 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. 「宛先」ボリュームのサイズを最大に変更します。

    # e2fsck -f /dev/nvme2n1p1 && resize2fs /dev/nvme2n1p1
    
  6. 宛先ボリュームを準備します。

    # mount /dev/nvme2n1p1 /mnt/ && mount -o bind /dev/ /mnt/dev && mount -o bind /sys /mnt/sys && mount -o bind /proc /mnt/proc
    
  7. chroot新しい巻へ

    # chroot /mnt/
    
  8. grubを再インストールするchroot されたボリューム上:

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

    終了chroot

    # exit
    

    インスタンスをシャットダウンする

    # shutdown -h now
    
  9. 変換後、次の操作を行う必要があります。

    /dev/sda1HVM インスタンスに以前あった 3 つのボリュームをデタッチします。コンソールで最後に作成したボリューム (空白) を として/dev/nvme2n1HVM インスタンスに接続します (以前は として接続されていました)。HVM インスタンスを起動します。

新しい HVM インスタンスは正常に起動し、古いソース PV インスタンスの正確なコピーになります (正しいソース ボリュームを使用した場合)。すべてが機能していることを確認したら、ソース インスタンスを終了できます。


ネットワーク構成の更新(オプション)

さて、上記の手順は、ここにいる大多数の人にとっては有効です。ただし、私のインスタンスのステータスはまだ達成されていませんでした。その理由は、新しいイメージから開始するのではなく、インスタンスで Ubuntu をアップグレードしたためです。これにより、eth0構成がアクティブ化され、50-cloud-init.cfg構成ファイルがなくなりました。

すでにファイル がある場合は/etc/network/interfaces.d/50-cloud-init.cfg、新しいファイルを作成する代わりに、手順に従ってファイルを更新できます。また、すべてのコマンドは 経由で実行されるものとしますsudo su

  1. インスタンスをシャットダウンし、ボリュームをデタッチして、以前と同じ構成を入力します。8GB ボリュームを としてアタッチし/dev/sda1/、最終的な宛先ボリュームを としてアタッチします/dev/sdf/。インスタンスを起動してログインします。

  2. マウントする/dev/sdfには、nvme1n1p1次の操作を実行します。

    # mount /dev/nvme1n1p1 /mnt/ && mount -o bind /dev/ /mnt/dev && mount -o bind /sys /mnt/sys && mount -o bind /proc /mnt/proc
    
  3. ファイルを作成または更新します:

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

    以下の通りです:

    # 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. 終了chrootexit)、インスタンスをシャットダウンします(shutdown -h now)。

  5. 前の手順9に従ってください。

これで完了です!


答え2

ありがとうございます。ネットワーク設定のヒントは、アップグレードの場合(Ubuntu 14.04 PV から Ubuntu 18.04 PV へ)に機能しました。ネットワーク設定を少し調整して、アップグレードした Ubuntu 18.04 PV を Ubuntu 18.04 HVM に変換しました。次の設定で新しい /etc/netplan/50-cloud-init.config を作成しました。

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

関連情報