Answers:
AWS已在EC2 API中启用了此功能。它是新的基于Boto的awscli中的--virtualization-type
选项aws ec2 register-image
。
是! 不幸的是,没有直接的方法可以做到这一点。另外,某些PV实例可能需要修改内核和引导程序。
ec2-create-image
在HVM实例上运行。如果这不起作用,则在步骤5之前,您需要将该卷附加到正在运行的实例,设置chroot,并为您的发行版安装内核和引导程序。您可能还希望清除日志和所有cloud-init缓存。
aws ec2 register-image
在PV映像的快照上运行--virtualization-type标志来将其转换为HVM 。有关aws ec2 register-image help
详细信息,请参见。
aws ec2 register-image
。然后,我从该映像启动了一个新的HVM实例。但是,系统无法启动。
就我而言,由于创建的实例aws ec2 register-image
无法启动,因此我必须手动进行转换。我的解决方案是基于这篇文章的AWS EC2论坛。
确保所有卷都在同一可用区中。
SSH到要从其迁移的PV机器并应用所有更新,然后注销。
转到AWS控制台,然后选择与创建PV系统相同的基本AMI(在我的情况下为Amazon 64位Linux AMI),以启动新的HVM实例。
SSH到该新实例并应用所有更新,然后注销。
转到AWS控制台并停止PV实例。为根设备创建快照,然后SOURCE VOLUME
从该快照创建新的卷()。
停止HVM实例。为新实例上的根设备创建快照,并TARGET VOLUME
从该快照创建新卷()。
使用AWS控制台:
SOURCE VOLUME
到新实例/dev/xvdf
。TARGET VOLUME
到新实例/dev/xvdg
。SSH到新实例并获得root访问权限:
sudo su
挂载源驱动器和目标驱动器。
mkdir -p /mnt/source && mount /dev/xvdf /mnt/source
mkdir -p /mnt/target && mount /dev/xvdg1 /mnt/target
就我而言,设备是
/dev/xvdf
(源)和/dev/xvdg1
(目标)。这些配置可能会根据分区的数量以及连接分区的位置而改变(请参阅“准备工作”中的步骤6)。用ls -al /dev/xvd*
看的驱动器。
备份/lib/modules/*
(如果PV ami的内核不同于新的HVM计算机。AWS的某些服务使用此模块。)
删除/boot
除目标卷上的所有内容:
cd /mnt/target && ls | grep -v boot | xargs rm -Rf
/boot
在源卷上删除:
rm -Rf /mnt/source/boot
保留所有属性,将源卷的数据复制到目标卷:
rsync -aAXHPv /mnt/source/ /mnt/target
编辑/mnt/target/etc/fstab
为/
分区,以便它引用的TARGET VOLUME
安装在在步骤(8)其最终位置时。使用标签或仅使用以下内容:
/dev/xvda1 / ext4 defaults,barrier=0 1 1
然后还原/lib/modules/
在步骤3中备份的内容。(如果PV ami的内核与新的HVM计算机不同)。
停止系统并使用AWS控制台分离所有卷。将附加到TARGET VOLUME
的新实例上/dev/xvda
。
确保记下原始根设备的安装位置。在大多数情况下,应该为
/dev/xvda
。
启动您的HVM实例。现在,它应该与您的光伏系统完全相同。如果一切正常,您现在可以删除PV实例,也可以删除SOURCE VOLUME
。
rm -f /boot
和cp -a /mnt/source/boot /mnt/target
?
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
详细步骤:
根据Jeff Strunk的回答进一步回答,以简化步骤并提供有关ec2寄存器映像的更多详细信息:
使用PV映像创建实例。进行/更新所需的任何更改。
从上述实例创建图像。
在EC2控制台的EC2>弹性块存储>快照中找到上述AMI使用的快照ID。
或者,如果您有ec2 api工具设置:
ec2-describe-images ami-id_of_above_created_ami
并找到AMI的快照ID
..进一步步骤的假设:您的ec2密钥和api工具已设置好并可以使用:
使用上面的快照注册新的HVM AMI:示例:
ec2-register -a x86_64 -d'3.15.7-200.fc20.x86_64'-n'Fedora_20_HVM_AMI'--sriov simple-虚拟化类型hvm -s snap-b44feb18 --root-device-name / dev / sda1
哪里
欲获得更多信息:
尝试了本文中的所有建议(对我来说都没有用)之后,我在https://www.opswat.com/blog/aws-2015-why-you-need-switch- pv-hvm。
该过程的要素(细节)是:
安装grub
上要迁移的PV实例(源实例)。
对源实例上的根卷(源卷,SV)进行预防性快照。
创建一个临时HVM实例,该实例将迁移该卷。
创建目标卷(DV),并将该卷和SV都附加到临时实例。
DV至少应与SV一样大。
将SV附加为/dev/{sd,xvd}f
,将DV 附加为/dev/{sd,xvd}g
。
分割DV:
parted /dev/xvdg --script 'mklabel msdos mkpart primary 1M -1s print quit'
partprobe /dev/xvdg
udevadm settle
将SV的FS调整为最小尺寸,然后将其dd
镜像到DV上。
清理源卷的FS: e2fsck -f /dev/xvdf
最小化相同: resize2fs -M /dev/xvdf
观察resize2fs的输出(例如Resizing the file system on /dev/xvdf to 269020 (4k) blocks
),并记下下一步。
将SV复制到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>
在新分区上展开FS: resize2fs /dev/xvdg1
安装grub
到DV的启动块中
在DV上临时创建设备文件: mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/
安装grub文件:
rm -f /mnt/boot/grub/*stage*
cp /mnt/usr/*/grub/*/*stage* /mnt/boot/grub/
rm -f /mnt/boot/grub/device.map
cat << ARNIE | chroot /mnt grub --batch
device (hd0) /dev/xvdg
root (hd0,0)
setup (hd0)
ARNIE
在目标卷上进行了其他一些较小的更改后,请对该卷进行快照并从中进行AMI。
整理临时设备文件: rm -f /mnt/dev/xvdg /mnt/dev/xvdg1
在中/mnt/boot/grub/grub.conf
,更改root (hd0)
为root (hd0,0)
,在内核行中添加(或替换console=*
)console=ttyS0
,并在必要root=*
时root=LABEL=/
在内核行中替换为
在中/mnt/etc/fstab
,确保根FS的行包含标记的引用,例如
LABEL=/ / ext4 defaults,noatime 1 1
将新的根FS标记为 e2label /dev/xvdg1 /
从临时实例中卸载DV,从临时实例中分离SV和DV。
捕捉DV,然后从该捕捉创建AMI图像。
从该HMI启动HVM实例。那就是您迁移的实例。