83 votes

Amazon EC2 : comment convertir un AMI PV existant en HVM

Question :

Comment utiliser les nouvelles classes AWS EC2 (r3, i2) avec mon AMI existant sans recréer toute la configuration du système ?

Les nouvelles classes EC2 ne supportent que la virtualisation basée sur HVM mais je n'ai que des images AMI PVM.

3 votes

Je viens d'essayer avec CentOS mais je me retrouve avec l'erreur suivante dans la version 10 : /dev/xvdf n'a pas de lecteur BIOS correspondant.

0 votes

Pour faire suite à ce que @ROMANARMY a dit, je pense que la réponse est la suivante devrait être réparti dans une réponse appropriée. Vous pouvez ensuite l'accepter pour que la question n'apparaisse pas comme sans réponse. Voir stackoverflow.com/help/self-answer

0 votes

@Tobias Zander avez-vous réussi à le faire fonctionner avec CentOS ?

77voto

divyenduz Points 35

Réponse :

  1. Démarrer un HVM Ubuntu linux, toute version, nouveau

  2. Démarrer un Ubuntu / avec mon AMI existant / PVM linux, et installer des paquets grub sur eux : apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists

  3. Arrêter PVM linux

  4. Détacher la partition Root (/dev/sda1) à PVM linux

  5. Attachez la partition racine de PVM linux au HVM linux en cours d'exécution quelque part, par exemple : /dev/sdf

  6. Sur 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. quitter le chroot : CTRL+D

  13. arrêter HVM Linux

  14. detach /dev/sda1 original Root AND detach /dev/sdf PVM Root

  15. Attachez la racine PVM au HVM linux comme /dev/sda1.

  16. Démarrez HVM linux, voilà !

  17. Créez une nouvelle image AMI à partir du HVM linux en cours d'exécution, elle sera virtualisée par HVM.

0 votes

Cela a parfaitement fonctionné... une fois que j'ai créé l'instance HVM sur la même zone de disponibilité que le volume PVM.

2 votes

J'obtiens l'avertissement suivant lorsque je lance grub-install : 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. Ensuite, tout semble bon mais il ne démarre pas ou ne me donne aucun indice sur la raison pour laquelle il ne démarre pas.

3 votes

Cela a parfaitement fonctionné pour moi, merci beaucoup ! J'ai reçu les avertissements effrayants de grub que Paulo Neves a signalés ci-dessus, mais ma nouvelle instance a quand même bien démarré.

3voto

JDS Points 192

La réponse de @divyenduz fonctionne mais nécessite un peu de nettoyage et de clarification pour les AWS EC2 modernes (vers 2019). Il est important de noter que les classes d'instance modernes traduisent le nom du périphérique différemment.

Voici mes étapes modifiées.

Pour plus de clarté, les nœuds sont :

  • Le nœud PVM d'origine que vous voulez mettre à niveau vers le HVM est "PVM01".
  • Le nouveau nœud HVM vers lequel vous allez migrer le disque racine de PVM01 est "HVM01".

AVANT DE POURSUIVRE : Sauvegarde du nœud original PVM01

  1. Installer les pré-requis sur le nœud PVM01

    • installer les paquets grub sur PVM01

      apt-get install  grub-pc  grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists
  2. Nœud d'arrêt PVM01

    • Créer un snapshot de /dev/sda1
    • OU créer une AMI de tout le noeud
  3. Créer un snapshot du volume Root original sur PVM01 et créer un nouveau volume à partir de ce snapshot.

    • Créer un snap de /dev/sda1 sur PVM01
    • Créer un vol à partir de ce cliché
    • Étiqueter chaque ressource en conséquence
      • Tag : Nom ; Valeur : pvm01:/dev/sda1:snapshot-for-conversion-to-hvm:2019-07-01
      • Etc
  4. créer une instance : Nouvelle instance HVM Ubuntu "HVM01". N'importe quelle classe d'instance devrait fonctionner ; cependant, le nom du périphérique peut être différent, voir les notes ci-dessous.

    • J'ai utilisé Bionic Ubuntu 18.04 HVM AMI ID ami-0a313d6098716f372 et la classe d'instance C5.XLARGE.
  5. Attachez la partition racine de PVM01 (nouveau volume de l'étape précédente) au nouveau HVM01 /dev/sdf

    • NOTE : Les anciennes classes d'instance telles que C3 traduiront le nom du volume en /dev/xvdf.
    • NOTE : Les classes d'instance plus récentes telles que C5 traduiront le nom du volume en /dev/nvme1
      • Sur les classes d'instance plus récentes, le Vol de racine sera /dev/nvme0 -- ZERO
      • Sur les classes d'instance plus récentes, le attaché, vol secondaire sera /dev/nvme1 -- UN
    • Notez le nom du périphérique de volume attaché

    ssh PVM01 sudo fdisk -l

  6. Sur 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. Quitter le chroot avec CTRL+D

  8. Arrêt HVM01

  9. Détacher les deux volumes

    • detach /dev/nvme0 PVM01 Root
      • NOTE : Ce serait /dev/sda1 sur une classe d'instance C3
    • detach /dev/${DEVNAME} (DEVNAME du script ci-dessus)
  10. attachez le volume racine de PVM01 à HVM01 comme /dev/sda1

    • Une fois encore, le nom /dev/sda1 est dans la console ; ce nom sera traduit en /dev/nvme0 ou /dev/xvda1 selon la modernité de la classe d'instance
  11. Début HVM01

  12. FACULTATIF : Créez une nouvelle image AMI à partir de la HVM01 en cours d'exécution, elle sera virtualisée par HVM.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X