从快照启动aws实例,找不到内核ID

时间:2014-10-07 18:46:41

标签: amazon-web-services amazon-ec2

简短版

对于AWS,您如何从给定的ami id或使用该ami启动的实例中找到内核ID。

LONG VERSION:

我有一个aws实例,其中所有驱动器都是ebs支持的。我正在尝试从驱动器的快照中启动它的精确副本。

此过程的第一步是从根卷快照创建新的ami。当我之前完成此操作时,我只是用谷歌搜索了ami id并找到了一个已经从aws控制台中选择的标准ubuntu ami发布了内核ID的地方,但这次似乎没有用。

很多搜索,阅读文档和aws论坛听起来像应该在实例描述中填充内核文件,但对我(以及论坛中的很多其他人)来说,它是空白的。我尝试启动一个新的(从控制台)实例[Amazon Linux AMI 2014.09(HVM) - ami-08842d60]内核字段也是空白的。

如果我创建一个全新的机器,快照它,然后将内核保留为默认值,ami工作正常,但默认不适用于我尝试的任何旧ami。

任何人都知道现在找到ami的kernek ID的过程是什么?

2 个答案:

答案 0 :(得分:2)

简短版本:

如果您的ami是hvm,那么您似乎根本不需要内核ID,只要您选择正确的选项。

LONG VERSION:

如果您使用boto调用创建ami,请执行以下操作:

    ami_id = conn.register_image(
        name='some_name',
        description='some_description',
        architecture='x86_64',
        root_device_name='/dev/sda1',
        snapshot_id=snapshot_id,
        delete_root_volume_on_termination=True)

如果实例的原始ami是aws控制台中列出的最新hvm ami,它似乎有效。但是一旦aws更新了默认的ami,就停止工作了。我假设它是因为后端的东西选择了正确的内核ID或其他东西。无论哪种方式,这种工作非常令人困惑!

但是,如果将virtualization_type设置为hvm,它似乎始终在没有内核ID的情况下工作。

    ami_id = conn.register_image(
        name='some_name',
        description='some_description',
        architecture='x86_64',
        virtualization_type='hvm',
        root_device_name='/dev/sda1',
        snapshot_id=snapshot_id,
        delete_root_volume_on_termination=True)

另一方面,如果您的实例是半虚拟的,那么只要您指定内核,您就不需要在boto调用中指定virtualization_type。

答案 1 :(得分:1)

从AWS Documentation获取,您可以在正在运行的实例上使用以下命令找到内核ID:

$ ec2-describe-instance-attribute instance_id --kernel --region region

然后您可以从以下位置获取版本信息:

$ ec2-describe-images [kernelID you got from previous command] --region region

编辑:刚刚注意到这是一个HVM;不确定为什么要从快照制作图像。如果您直接从ec2创建图像,它也会为您创建快照,然后您可以转到AMI并从您创建的图像中创建一个新的ec2,它不会要求内核ID。

如果实例消失了,除了快照之外你什么都没有,我可以理解你想要做什么,而不是尝试从你的快照制作一个AMI,而只是改变它的音量。然后启动一个类似的基于HVM的实例,让它启动,然后停止它。将根卷交换出来并重新启动它。