web-dev-qa-db-fra.com

Créer une AMI Linux AWS HVM à partir d'une AMI Linux paravirtuelle existante

Est-il possible de créer une AMI de machine virtuelle matérielle (HVM) à partir d'une AMI paravirtuelle (PV) existante.

Ma pensée initiale était de démarrer une nouvelle instance PV et d'utiliser le ec2-create-image commande pour créer une nouvelle image tout en spécifiant HVM comme type de virutalisation. Cependant, ec2-create-image n'a pas de paramètre de ligne de commande pour spécifier le type de virtualisation.

Y a-t-il une autre façon de procéder?

38
javacavaj

Mise à jour

AWS a activé cette fonctionnalité dans l'API EC2. Il est disponible en tant que --virtualization-type option pour aws ec2 register-image dans le nouvel awscli basé sur Boto.

Réponse originale

Oui! Malheureusement, il n'y a pas de moyen direct de le faire. De plus, certaines instances PV peuvent nécessiter des modifications du noyau et du chargeur de démarrage.

  1. Créez un volume à partir de votre AMI PV existante. S'il s'agissait de votre propre AMI PV, vous pouvez créer un volume à partir de l'instantané. S'il s'agit d'une AMI tierce, vous devrez lancer une instance et prendre un instantané.
  2. Lancez une instance HVM avec n'importe quelle AMI.
  3. Arrêtez cette instance HVM.
  4. Détachez le volume racine de cette instance.
  5. Attachez le volume PV en tant que volume racine (/ dev/sda1 ou/dev/sda s'il était partitionné) à l'instance HVM.
  6. Courir ec2-create-image sur l'instance HVM.
  7. Lancez d'autres instances avec votre nouvelle AMI HVM.

Si cela ne fonctionne pas, avant l'étape 5, vous devrez attacher ce volume à une instance en cours d'exécution, configurer un chroot et installer un noyau et un chargeur de démarrage pour votre distribution. Vous pouvez également vouloir effacer les journaux et tout cache d'initialisation cloud.

22
Jeff Strunk

Dans mon cas, j'ai dû effectuer la conversion manuellement depuis l'instance que je crée à l'aide de aws ec2 register-image n'a pas démarré. Ma solution est basée sur cet article sur le AWS EC2 Forum .

Préparation

Assurez-vous que tous les volumes se trouvent dans la même zone de disponibilité.

  1. SSH sur votre machine PV à partir de laquelle vous souhaitez migrer et appliquer toutes les mises à jour, puis déconnectez-vous.

  2. Accédez à la console AWS et lancez une nouvelle instance HVM en sélectionnant la même AMI de base à partir de laquelle le système PV a été créé (dans mon cas, l'AMI Linux 64 bits d'Amazon).

  3. SSH à cette nouvelle instance et appliquer toutes les mises à jour, puis déconnectez-vous.

  4. Accédez à la console AWS et arrêtez l'instance PV. Prenez un instantané du périphérique racine et créez un nouveau volume (SOURCE VOLUME) à partir de cet instantané.

  5. Arrêtez l'instance HVM. Prenez un instantané du périphérique racine sur la nouvelle instance et créez un nouveau volume (TARGET VOLUME) à partir de cet instantané.

  6. Utilisation de la console AWS:

    • Attacher SOURCE VOLUME à la nouvelle instance en tant que /dev/xvdf.
    • Attacher TARGET VOLUME à la nouvelle instance en tant que /dev/xvdg.

Processus de conversion

  1. SSH à la nouvelle instance et obtenez un accès root:

    Sudo su
    
  2. Montez les lecteurs source et cible.

    mkdir -p /mnt/source && mount /dev/xvdf /mnt/source
    mkdir -p /mnt/target && mount /dev/xvdg1 /mnt/target
    

    Dans mon cas, les appareils étaient /dev/xvdf (source) et /dev/xvdg1 (cible). Celles-ci peuvent changer dans votre configuration en fonction du nombre de partitions et de l'endroit où vous les avez attachées (voir l'étape 6 de la préparation). Utilisation ls -al /dev/xvd* pour voir les lecteurs.

  3. Sauvegarde /lib/modules/* (Si le noyau de l'AMI PV diffère de la nouvelle machine HVM. Ce module est utilisé par certains services d'AWS.)

  4. Supprimez tout sauf /boot sur le volume cible:

    cd /mnt/target && ls | grep -v boot | xargs rm -Rf
    
  5. Supprimer /boot sur le volume source:

    rm -Rf /mnt/source/boot
    
  6. Copiez les données du volume source sur le volume cible en préservant tous les attributs:

    rsync -aAXHPv /mnt/source/ /mnt/target
    
  7. Éditer /mnt/target/etc/fstab pour / partition, afin qu'elle fasse référence à la TARGET VOLUME lorsqu'il est monté sur son emplacement final à l'étape (8). Soit en utilisant une étiquette ou simplement quelque chose le long:

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

Ensuite, restaurez /lib/modules/ qui a été sauvegardé à l'étape 3. (Si le noyau du PV AMI diffère de la nouvelle machine HVM.)

  1. Arrêtez le système et détachez tous les volumes à l'aide de la console AWS. Fixez le TARGET VOLUME sur la nouvelle instance en tant que /dev/xvda.

    Assurez-vous de noter où le périphérique racine d'origine a été monté. Dans la plupart des cas, il doit être /dev/xvda.

  2. Démarrez votre instance HVM. Ce devrait maintenant être un double exact de votre système PV. Si tout semble correct, vous pouvez maintenant supprimer votre instance PV ainsi que SOURCE VOLUME.

13
tolgamorf

TLDR:

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 

Étapes détaillées:

Répondre en fonction de réponse de Jeff Strunk pour simplifier les étapes et donner un peu plus de détails sur l'image du registre ec2:

  1. Créer une instance à l'aide d'une image PV. Apportez/mettez à jour les modifications que vous souhaitez.

  2. Créez une image à partir de l'instance ci-dessus.

  3. Recherchez l'ID d'instantané utilisé par l'AMI ci-dessus sous EC2> Elastic Block Store> Instantané dans la console EC2.

    ou si vous avez la configuration des outils api ec2:

    ec2-décrire-images AMI-id_of_above_created_AMI

    et trouver l'ID d'instantané pour l'AMI

    .. Hypothèses pour les étapes suivantes: Vos clés ec2 et vos outils api sont définis et prêts à l'emploi:

  4. Enregistrez une nouvelle AMI HVM en utilisant l'instantané ci-dessus: exemple:

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

  • -d est la description AMI
  • -n est le nom AMI
  • -s est l'ID d'instantané de l'étape 3.
  • -a est l'architecture
  • --virtualization-type est requis pour le rendre hvm
  • --sriov permet d'activer la mise en réseau améliorée, bien qu'il puisse être redondant, je n'en suis pas sûr.

Pour plus d'informations:

10
Anshu Prateek

Vous pouvez le faire depuis l'intérieur de l'interface Web AWS. Accédez à instantanés, cliquez sur l'instantané souhaité que vous souhaitez convertir en hvm et cliquez sur actions puis créer une image. Dans la liste déroulante de l'assistant de création d'image, sélectionnez HVM .

2
Justin

Après avoir essayé toutes les suggestions ci-dessous, dont aucune n'a fonctionné pour moi, j'ai trouvé une excellente entrée de blog sur le sujet, à https://www.opswat.com/blog/aws-2015-why-you- need-switch-pv-hvm .

Les éléments (détails) de la procédure sont:

  1. Installez grub sur l'instance PV à migrer (instance source).

  2. Faites un instantané de précaution du volume racine sur l'instance source (volume source, SV).

  3. Créez une instance HVM temporaire qui fera migrer le volume.

    1. J'ai utilisé une instance Amazon Linux
  4. Créez un volume de destination (DV) et associez ce volume et le SV à l'instance temporaire.

    1. Le DV doit être au moins aussi grand que le SV.

    2. Fixez le SV comme /dev/{sd,xvd}f Et le DV comme /dev/{sd,xvd}g.

    3. Partitionnez le DV:

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

    partprobe /dev/xvdg

    udevadm settle

  5. Redimensionnez à la taille minimale le FS du SV et utilisez dd l'image sur le DV.

    1. Nettoyez le FS du volume source: e2fsck -f /dev/xvdf

    2. Minimisez la même chose: resize2fs -M /dev/xvdf

    3. Observez la sortie de resize2fs (par exemple Resizing the file system on /dev/xvdf to 269020 (4k) blocks) et notez-la pour l'étape suivante.

    4. Dupliquer SV vers DV: 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. Développez le FS sur la nouvelle partition: resize2fs /dev/xvdg1

  6. Installez grub dans le bloc de démarrage du DV

    1. Créez temporairement des fichiers de périphérique sur le DV: mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/

    2. Installez les fichiers grub:

    rm -f /mnt/boot/grub/*stage*

    cp /mnt/usr/*/grub/*/*stage* /mnt/boot/grub/

    rm -f /mnt/boot/grub/device.map

    1. Installez grub dans un environnement chroot:

    cat << ARNIE | chroot /mnt grub --batch

    device (hd0) /dev/xvdg

    root (hd0,0)

    setup (hd0)

    ARNIE

  7. Après avoir apporté d'autres modifications mineures au volume de destination, prenez le volume et faites-en une AMI.

    1. Ranger les fichiers de périphériques temporaires: rm -f /mnt/dev/xvdg /mnt/dev/xvdg1

    2. Dans /mnt/boot/grub/grub.conf, Remplacez root (hd0) par root (hd0,0), ajoutez (ou remplacez console=*) console=ttyS0 À la ligne du noyau et remplacez si nécessaire root=* Avec root=LABEL=/ Dans la ligne du noyau

    3. Dans /mnt/etc/fstab, Assurez-vous que la ligne de la racine FS contient une référence étiquetée, par exemple

    LABEL=/ / ext4 defaults,noatime 1 1

    1. Étiquetez la nouvelle racine FS avec e2label /dev/xvdg1 /

    2. Démontez DV de l'instance temporaire, détachez SV et DV de l'instance temporaire.

    3. Prenez le DV et à partir de ce cliché, créez une image AMI.

  8. Lancez une instance HVM à partir de cette IHM. Il s'agit de votre instance migrée.

1
MadHatter