AMI 内核 ID 与安装在 EC2 实例中的内核有啥关系?

Posted

技术标签:

【中文标题】AMI 内核 ID 与安装在 EC2 实例中的内核有啥关系?【英文标题】:What is the relationship between AMI kernel ID and the kernel installed in EC2 instance?AMI 内核 ID 与安装在 EC2 实例中的内核有什么关系? 【发布时间】:2014-04-14 18:18:13 【问题描述】:

据我有限了解,AWS EC2 使用 Xen 作为基础技术,Xen 虚拟机加载 EC2 的 AMI 内核来启动实例。

所以在 EC2 实例中,我升级内核版本(例如,从 3.10 到 3.14),然后重新启动并使用 uname -a 确认新内核 (3.14) 正在运行。

尽管已经进行了内核升级,但 EC2 实例仍与内核版本较低的原始 AMI 相关联。

我的问题是:

EC2 的 Xen 基础是否使用新内核来启动实例? 在不操作实例的 AMI 的情况下,是否可以使用升级提供的新内核功能(例如新系统调用)?

【问题讨论】:

【参考方案1】:

这可能会部分回答您的问题。创建实例时,您可以选择内核 ID,如下所示:

如果您没有选择不同的内核,它将选择上面屏幕截图中Use default 指示的默认内核ID。

【讨论】:

【参考方案2】:

EC2 的 Xen 基础是否使用新内核来启动实例?

不,它没有。它引导我们与实例关联的内核,即 aki-xxxxxxxx。它基本上忽略了根卷上 /boot 目录中可能存在的任何内容。这种行为与将内核映像放在单独的分区上并始终从该分区启动内核并没有太大区别。 (例如,我在 Chromebook 上启动 Ubuntu 时会这样做)

如果不操作实例的 AMI,是否可以使用新的 升级提供的内核功能(例如新的系统调用)?

没有。一旦您的内核使用 aki-xxxxxxxx 内核启动,它就可以使用该内核的功能和系统调用。尽管大多数功能和系统调用都将可用,因为特定的 aki-xxxxxxxx 内核需要与您的特定实例兼容。所以说对于 Ubuntu 12.04 LTS,您可能想要使用 3.2 或更高版本的内核,因为 2.6 内核将无法工作。

另外,这也意味着在选择 aki-xxxxxxxx 内核时,您需要小心选择与您的特定操作系统兼容的内核。

如果你想使用自己的内核,你应该看看 PV-GRUB:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html

【讨论】:

谢谢里科。当我升级实例内核时,这让我非常困惑,新内核的错误似乎正在运行。如果 xen 没有使用新内核启动实例,那么新的 bug 是如何运行的? 这是什么错误?系统调用相关?我想您将不得不查看错误的细节

以上是关于AMI 内核 ID 与安装在 EC2 实例中的内核有啥关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用cloudformation模板将两个EC2实例(安装AMI创建的Elasticsearch)作为多节点?

phpmyadmin 无法在亚马逊 ec2 实例上的 linux ami 中的 nginx Web 服务器上工作

新AMI发布时,Terraform重新创建EC2实例

是否可以用不同的 AMI 替换 EC2 实例上的 AMI?

在 Linux AMI EC2 实例上为 phpMyAdmin 5.0.2 安装启用 mysqli

您必须拥有正确的 EC2 AMI ID 吗?