是否可以从现有的准虚拟(PV)AMI创build硬件虚拟机(HVM)AMI。
我最初的想法是启动一个新的PV实例,并使用ec2-create-image
命令创build一个新的映像,同时指定HVM为虚拟化types。 但是, ec2-create-image
没有命令行参数来指定虚拟化types。
还有另一种方式去做这个吗?
AWS在EC2 API中启用了此function。 它可以作为--virtualization-type
选项来在新的基于awscli的boto中使用aws ec2 register-image
。
是! 不幸的是,没有直接的办法。 而且,一些PV实例可能需要内核和引导程序修改。
ec2-create-image
。 如果这不起作用,那么在第5步之前,您需要将该卷附加到正在运行的实例,设置chroot,并为您的发行版安装内核和引导加载程序。 您可能还想要清除日志和任何云初始化caching。
在我的情况下,我不得不手动进行转换,因为我使用aws ec2 register-image
创build的实例没有启动。 我的解决scheme基于AWS EC2论坛上的这篇文章 。
确保所有卷位于相同的可用区域中。
通过SSH连接到要从其迁移的PV机器,并应用所有更新,然后注销。
转到AWS控制台,通过select与创buildPV系统相同的基本AMI(本例中为Amazon 64位Linux AMI)来启动新的HVM实例。
SSH到这个新实例并应用所有更新,然后注销。
转到AWS Console并停止PV实例。 拍摄根设备的快照并从此快照创build一个新卷( SOURCE VOLUME
)。
停止HVM实例。 拍摄新实例上根设备的快照,并从此快照创build一个新卷( 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
(目标)。 这些可能会根据分区的数量和附加位置在您的configuration中发生变化(请参阅准备中的步骤6)。 使用ls -al /dev/xvd*
查看驱动器。
Backup /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
编辑在/etc/fstab
步骤3中备份的/
partition和restore /lib/modules/
/etc/fstab
。(如果PV ami的内核不同于新的HVM机器)
停止系统并使用AWS控制台分离所有卷。 将新实例的TARGET VOLUME
作为/dev/xvda
。
请务必注意原始根设备的安装位置。 在大多数情况下,它应该是
/dev/xvda
。
启动您的HVM实例。 它现在应该是你的光伏系统的一个确切的副本。 如果一切正常,现在可以删除您的PV实例以及SOURCE VOLUME
。
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图像创build实例。 创build/更新所需的任何更改。
从上面的实例创build图像。
在EC2> EC2控制台中的Elastic Block Store> Snapshot下find上述AMI使用的快照ID。
或者如果您有ec2 api工具设置:
ec2-describe-images ami-id_of_above_created_ami
并findami的快照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 –virtualization-type hvm -s snap -b44feb18 –root-device-name / dev / sda1
哪里
了解更多信息:
您可以从AWS Web界面内部执行此操作。 导航到快照 ,单击想要转换为hvm所需的快照,然后单击操作 ,然后创build映像 。 在创build映像向导的下拉列表中selectHVM 。
在尝试了所有这些build议之后,没有一个为我工作,我find了一个关于这个主题的出色博客,在https://www.opswat.com/blog/aws-2015-why-you-need-switch- pv-hvm 。
程序的元素(细节)是:
在要迁移的PV实例上安装grub
(源实例)。
在源实例(源卷,SV)上创build根卷的预警快照。
创build一个将迁移卷的临时HVM实例。
创build一个目标卷(DV),并将这个和SV连接到临时实例。
DV应该至less和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上创build设备文件: mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/
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=*
replaceconsole=*
console=ttyS0
,如有必要,将root=*
replace为root=LABEL=/
在内核行中
在/mnt/etc/fstab
,确保根FS的行包含一个带标签的引用,例如
LABEL=/ / ext4 defaults,noatime 1 1
用e2label /dev/xvdg1 /
标签新的根FS e2label /dev/xvdg1 /
从临时实例卸载DV,将SV和DV从临时实例中分离。
快照DV,然后从该快照中创buildAMI图像。
从该HMI启动HVM实例。 这是你的迁移实例。