
É possível criar uma AMI de máquina virtual de hardware (HVM) a partir de uma AMI paravirtual (PV) existente.
Meu pensamento inicial foi iniciar uma nova instância PV e usar o ec2-create-image
comando para criar uma nova imagem enquanto especificava HVM como o tipo de virtualização. Porém, 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?
Responder1
Atualizar
A AWS habilitou esse recurso na API EC2. Está disponível como --virtualization-type
opção paraaws ec2 register-image
no novo awscli baseado em Boto.
Resposta original
Sim! Infelizmente, não existe uma maneira direta de fazer isso. Além disso, algumas instâncias PV podem precisar de modificações no kernel e no bootloader.
- Crie um volume a partir do seu PV AMI existente. Se for seu próprio PV AMI, você poderá criar um volume a partir do instantâneo. Se for uma AMI de terceiros, você precisará iniciar uma instância e tirar um snapshot.
- Execute uma instância HVM com qualquer AMI.
- Pare essa instância HVM.
- Desanexe o volume raiz dessa instância.
- Anexe o volume PV como volume raiz (/dev/sda1 ou /dev/sda se tiver sido particionado) à instância HVM.
- Execute
ec2-create-image
na instância HVM. - Inicie outras instâncias com sua nova AMI HVM.
Se isso não funcionar, antes da etapa 5, você precisará anexar esse volume a uma instância em execução, configurar um chroot e instalar um kernel e um gerenciador de inicialização para sua distribuição. Você também pode limpar os logs e qualquer cache de inicialização da nuvem.
Responder2
No meu caso, tive que fazer a conversão manualmente, pois a instância que criei aws ec2 register-image
não inicializou. Minha solução é baseada emesta postagemnoFórum AWS EC2.
Preparação
Certifique-se de que todos os volumes estejam na mesma zona de disponibilidade.
Faça SSH na máquina PV da qual você deseja migrar e aplique todas as atualizações e, em seguida, efetue logout.
Vá para o Console AWS e inicie uma nova instância HVM selecionando a mesma AMI base a partir da qual o sistema fotovoltaico foi criado (no meu caso, a Amazon Linux AMI de 64 bits).
SSH para esta nova instância e aplique todas as atualizações e, em seguida, efetue logout.
Acesse o Console AWS e interrompa a instância PV. Tire um snapshot do dispositivo raiz e crie um novo volume (
SOURCE VOLUME
) a partir desse snapshot.Pare a instância HVM. Tire um snapshot do dispositivo raiz na nova instância e crie um novo volume (
TARGET VOLUME
) a partir desse snapshot. Inicie a (nova) instância HVM novamente.Usando o Console AWS:
- Anexe
SOURCE VOLUME
à nova instância como/dev/xvdf
. - Anexe
TARGET VOLUME
à nova instância como/dev/xvdg
.
Processo de conversão
SSH para a nova instância e obtenha acesso root:
sudo su
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
No meu caso, os dispositivos eram
/dev/xvdf
(fonte) e/dev/xvdg1
(destino). Eles podem mudar na sua configuração com base no número de partições e onde você as anexou (consulte a etapa 6 em Preparação). Usels -al /dev/xvd*
para ver as unidades.Backup
/lib/modules/*
(se o kernel do PV ami for diferente da nova máquina HVM. Este módulo é usado por alguns serviços da AWS.)Exclua tudo, exceto
/boot
o volume de destino:cd /mnt/target && ls | grep -v boot | xargs rm -Rf
Excluir
/boot
no volume de origem:rm -Rf /mnt/source/boot
Copie os dados do volume de origem para o volume de destino preservando todos os atributos:
rsync -aAXHPv /mnt/source/ /mnt/target
Edite
/mnt/target/etc/fstab
a/
partição, para que ela faça referênciaTARGET VOLUME
quando montada em seu local final na etapa (8). Usando um rótulo ou simplesmente algo assim:/dev/xvda1 / ext4 defaults,barrier=0 1 1
Em seguida, restaure /lib/modules/
o backup feito na Etapa 3. (Se o kernel do PV ami for diferente da nova máquina HVM.)
Pare o sistema e desconecte todos os volumes usando o console AWS. Anexe o
TARGET VOLUME
na nova instância como/dev/xvda
.Certifique-se de anotar onde o dispositivo raiz original foi montado. Na maioria dos casos, deveria ser
/dev/xvda
.Inicie sua instância HVM. Agora deve ser uma duplicata exata do seu sistema fotovoltaico. Se tudo parecer bem, agora você pode excluir sua instância PV e também
SOURCE VOLUME
.
Responder3
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 emResposta de Jeff Strunkpara simplificar as etapas e dar um pouco mais de detalhes sobre a imagem do registrador ec2:
Crie uma instância usando imagem PV. Faça/atualize as alterações que desejar.
Crie uma imagem a partir da instância acima.
Encontre o ID do snapshot usado pela AMI acima em EC2 > Elastic Block Store > Snapshot no console do EC2.
ou se você tiver as ferramentas da API ec2 configuradas:
ec2-describe-images ami-id_of_above_created_ami
e encontre o ID do snapshot para o ami
.. Suposições para etapas adicionais: Suas chaves ec2 e ferramentas de API estão configuradas e prontas para uso:
Registre uma nova AMI 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
- --virtualization-type é necessário para torná-lo hvm
- --sriov serve para habilitar redes aprimoradas, embora possa ser redundante, não tenho certeza.
Para maiores informações:
Responder4
Depois de tentar todas as sugestões aqui contidas, nenhuma das quais funcionou para mim, encontrei um excelente post de blog sobre o assunto, emhttps://www.opswat.com/blog/aws-2015-why-you-need-switch-pv-hvm.
Os elementos (detalhes) do procedimento são:
Instale
grub
na instância PV a ser migrada (instância de origem).Faça um snapshot preventivo do volume raiz na instância de origem (volume de origem, SV).
Crie uma instância HVM temporária que migrará o volume.
- Usei uma instância do Amazon Linux
Crie um volume de destino (DV) e anexe este e o SV à instância temporária.
O DV deve ser pelo menos tão grande quanto o SV.
Anexe o SV como
/dev/{sd,xvd}f
e o DV como/dev/{sd,xvd}g
.Particione o DV:
parted /dev/xvdg --script 'mklabel msdos mkpart primary 1M -1s print quit'
partprobe /dev/xvdg
udevadm settle
Redimensione para o tamanho mínimo o FS do SV e use
dd
a imagem no DV.Limpe o FS do volume de origem:
e2fsck -f /dev/xvdf
Minimize o mesmo:
resize2fs -M /dev/xvdf
Observe a saída do resize2fs (por exemplo
Resizing the file system on /dev/xvdf to 269020 (4k) blocks
) e anote-a para a próxima etapa.Duplicar SV 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>
Expanda o FS na nova partição:
resize2fs /dev/xvdg1
Instale
grub
no bloco de inicialização do DVCrie temporariamente arquivos de dispositivo no DV:
mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/
Instale os arquivos grub:
rm -f /mnt/boot/grub/*stage*
cp /mnt/usr/*/grub/*/*stage* /mnt/boot/grub/
rm -f /mnt/boot/grub/device.map
- Instale o grub em um ambiente chroot:
cat << ARNIE | chroot /mnt grub --batch
device (hd0) /dev/xvdg
root (hd0,0)
setup (hd0)
ARNIE
Depois de fazer algumas outras pequenas alterações no volume de destino, ajuste o volume e faça uma AMI a partir dele.
Organize os arquivos temporários do dispositivo:
rm -f /mnt/dev/xvdg /mnt/dev/xvdg1
Em
/mnt/boot/grub/grub.conf
, muderoot (hd0)
pararoot (hd0,0)
, adicione (ou substituaconsole=*
)console=ttyS0
à linha do kernel e, se necessário, substituaroot=*
porroot=LABEL=/
na linha do kernelEm
/mnt/etc/fstab
, certifique-se de que a linha raiz do FS contém uma referência rotulada, por exemplo
LABEL=/ / ext4 defaults,noatime 1 1
Rotule o novo FS raiz com
e2label /dev/xvdg1 /
Desmonte o DV da instância temporária e desconecte o SV e o DV da instância temporária.
Tire o DV e, a partir desse snap, crie uma imagem AMI.
Inicie uma instância HVM a partir dessa IHM. Essa é a sua instância migrada.