Crie uma AMI do AWS HVM Linux a partir de uma AMI Paravirtual existente do Linux

37

É possível criar uma AMI de hardware virtual machine (HVM) a partir de uma AMI paravirtual (PV) existente.

Inicialmente, pensei em iniciar uma nova instância de PV e usar o comando ec2-create-image para criar uma nova imagem ao especificar o HVM como o tipo de virutalização. No entanto, ec2-create-image não possui um parâmetro de linha de comando para especificar o tipo de virtualização.

Existe outra maneira de fazer isso?

    
por javacavaj 18.10.2012 / 22:26

5 respostas

21

Atualizar

A AWS ativou esse recurso na API do EC2. Está disponível como a opção --virtualization-type para aws ec2 register-image em o novo awscli baseado em Boto.

Resposta original

Sim! Infelizmente, não há uma maneira direta de fazer isso. Além disso, algumas instâncias de PV podem precisar de modificações no kernel e no carregador de inicialização.

  1. Crie um volume a partir da sua AMI do PV existente. Se foi sua própria AMI do PV, você pode fazer um volume a partir do instantâneo. Se for uma AMI de terceiros, você precisará iniciar uma instância e tirar uma foto instantânea.
  2. Inicie uma instância do HVM com qualquer AMI.
  3. Pare com essa instância do HVM.
  4. Desanexe o volume raiz dessa instância.
  5. Anexe o volume do PV como o volume raiz (/ dev / sda1 ou / dev / sda, se tiver sido particionado) à instância do HVM.
  6. Execute ec2-create-image na instância do HVM.
  7. Inicie outras instâncias com sua nova AMI do HVM.

Se isso não funcionar, antes do passo 5, você precisará anexar esse volume a uma instância em execução, configurar um chroot e instalar um kernel e um carregador de inicialização para sua distribuição. Você também pode limpar logs e qualquer cache de inicialização de nuvem.

    
por 22.10.2013 / 16:22
13

No meu caso, tive que fazer a conversão manualmente, pois a instância que criei usando aws ec2 register-image não inicializou. Minha solução é baseada na postagem este post no Fórum do AWS EC2 .

Preparação

Make sure that all the volumes are in the same availability zone.

  1. SSH na sua máquina PV da qual você deseja migrar e aplicar todas as atualizações. Em seguida, efetue o logout.

  2. Vá para o AWS Console e ative uma nova instância do HVM selecionando a mesma AMI de base da qual o sistema PV foi criado (no meu caso, o Linux AMI do Linux de 64 bits).

  3. SSH para esta nova instância, aplique todas as atualizações e efetue o logout.

  4. Vá para o AWS Console e pare a instância do PV. Tire um instantâneo do dispositivo raiz e crie um novo volume ( SOURCE VOLUME ) deste instantâneo.

  5. Pare a instância do HVM. Tire um instantâneo do dispositivo raiz na nova instância e crie um novo volume ( TARGET VOLUME ) deste instantâneo.

  6. Usando o Console da AWS:

    • Anexe SOURCE VOLUME à nova instância como /dev/xvdf .
    • Anexe TARGET VOLUME à nova instância como /dev/xvdg .

Processo de Conversão

  1. SSH para a nova instância e obtenha acesso root:

    sudo su
    
  2. Monte as unidades de origem e de destino.

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

    In my case, the devices were /dev/xvdf (source) and /dev/xvdg1 (target). These may change in your configuration based on the number of partitions and where you attached them (see step 6 in Preparation). Use ls -al /dev/xvd* to see the drives.

  3. Backup /lib/modules/* (Se o kernel do PV ami diferir da nova máquina HVM. Este módulo é usado por alguns serviços da AWS.)

  4. Exclua tudo, menos /boot no volume de destino:

    cd /mnt/target && ls | grep -v boot | xargs rm -Rf
    
  5. Apague /boot no volume de origem:

    rm -Rf /mnt/source/boot
    
  6. Copie os dados do volume de origem para o volume de destino, preservando todos os atributos:

    rsync -aAXHPv /mnt/source/ /mnt/target
    
  7. Edite a partição /mnt/target/etc/fstab para / , de modo que ela faça referência ao TARGET VOLUME quando montado em sua localização final na etapa (8). Usando um rótulo ou simplesmente algo:

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

Em seguida, restaure /lib/modules/ cujo backup foi feito na Etapa 3. (Se o kernel do ami do PV for diferente da nova máquina do HVM.)

  1. Pare o sistema e desconecte todos os volumes usando o console da AWS. Anexe o TARGET VOLUME na nova instância como /dev/xvda .

    Be sure to note where the original root device was mounted. In most cases, it should be /dev/xvda.

  2. Inicie sua instância do HVM. Agora deve ser uma cópia exata do seu sistema fotovoltaico. Se tudo estiver OK, você pode excluir sua instância do PV e também SOURCE VOLUME .

por 27.03.2015 / 22:17
10

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 

etapas detalhadas:

Respondendo ainda mais com base na resposta de Jeff Strunk para simplificar as etapas e fornecer mais detalhes sobre a imagem de registro do ec2:

  1. Crie uma instância usando a imagem PV. Faça / atualize as alterações desejadas.

  2. Crie uma imagem da instância acima.

  3. Encontre o ID de instantâneo usado pela AMI acima em EC2 > Elastic Block Store > Instantâneo no Console do EC2.

    ou se você tiver a configuração das ferramentas ec2 api:

    ec2-describe-images ami-id_of_above_created_ami

    e encontre o ID do instantâneo para o ami

    .. Suposições para etapas adicionais: Suas chaves ec2 e ferramentas de API estão definidas e prontas para uso:

  4. Registre uma nova AMI do HVM usando o instantâneo acima: exemplo:

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

onde

  • -d é a descrição da AMI
  • -n é o nome da AMI
  • -s é o ID do instantâneo da etapa 3.
  • -a é arquitetura
  • - o tipo de virtualização é necessário para torná-lo hvm
  • - sriov é para ativar a rede avançada, embora possa ser redundante, não tenho certeza.

Para mais informações:

por 02.08.2014 / 06:16
2

Você pode fazer isso de dentro da interface da web da AWS. Navegue para instantâneos , clique no instantâneo desejado que deseja converter em hvm e clique em ações e, em seguida, em criar imagem . No menu suspenso no assistente de criação de imagem, selecione HVM .

    
por 24.07.2015 / 20:31
1

Tendo tentado todas as sugestões aqui, nenhuma delas funcionou para mim, encontrei uma excelente entrada no blog sobre o assunto, em link .

Os elementos (detalhes) do procedimento são:

  1. Instale grub na instância do PV a ser migrada (instância de origem).

  2. Faça um instantâneo de precaução do volume raiz na instância de origem (volume de origem, SV).

  3. Crie uma instância temporária do HVM que irá migrar o volume.

    1. usei uma instância do Amazon Linux
  4. Crie um volume de destino (DV) e anexe este e o SV à instância temporária.

    1. O DV deve ser pelo menos tão grande quanto o SV.

    2. Anexe o SV como /dev/{sd,xvd}f e o DV como /dev/{sd,xvd}g .

    3. Particione o DV:

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

    partprobe /dev/xvdg

    udevadm settle

  5. Redimensione para o tamanho mínimo o FS do SV e use dd para o DV.

    1. Limpe o FS do volume de origem: e2fsck -f /dev/xvdf

    2. Minimize o mesmo: resize2fs -M /dev/xvdf

    3. Observe a saída do resize2fs (por exemplo, Resizing the file system on /dev/xvdf to 269020 (4k) blocks ) e anote-o para a próxima etapa.

    4. SV copiado para 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. Expanda o FS na nova partição: resize2fs /dev/xvdg1

  6. Instale grub no bloco de inicialização do DV

    1. Crie temporariamente arquivos de dispositivo no DV: mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/

    2. Instalar arquivos grub:

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

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

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

    1. Instale o grub em um ambiente chroot:

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

    device (hd0) /dev/xvdg

    root (hd0,0)

    setup (hd0)

    ARNIE

  7. Depois de fazer algumas outras pequenas alterações no volume de destino, clique no botão volume, e faça um AMI dele.

    1. Arrume os arquivos temporários do dispositivo: rm -f /mnt/dev/xvdg /mnt/dev/xvdg1

    2. Em /mnt/boot/grub/grub.conf , altere root (hd0) para root (hd0,0) , adicione (ou substitua console=* ) console=ttyS0 à linha do kernel e, se necessário, substitua root=* por root=LABEL=/ na linha do kernel

    3. Em /mnt/etc/fstab , certifique-se de que a linha do FS raiz contenha uma referência rotulada, por exemplo,

    LABEL=/ / ext4 defaults,noatime 1 1

    1. Identifique o novo FS raiz com e2label /dev/xvdg1 /

    2. Desmontar DV da instância temporária, desanexe SV e DV da instância temporária.

    3. Encaixe o DV e, a partir desse snap, crie uma imagem AMI.

  8. Ative uma instância do HVM dessa IHM. Essa é a sua instância migrada.

por 18.09.2015 / 21:35