我有一个运行 Ubuntu 12.04 32 位 AMI 的 EC2 实例(可在启动新实例的 Classic 向导的第一页中找到)。根设备是 EBS 卷。然后我按照以下步骤操作:
- 停止服务器
- 在“卷”选项卡中右键单击卷 -> 创建快照
- 在“快照”选项卡中右键单击所述快照 -> 从此快照创建图像
- 在 AMI 选项卡中,我右键单击新创建的 AMI 并选择“启动实例”
在向导的第三步中,我注意到“存储设备配置”这一行
Root /dev/sda1 snap-xxxxxx 8GiB standard true
这似乎表明它正在使用快照作为新实例的根卷(事实上,它是唯一的卷)。
然后我启动实例。但是,它在“初始化”步骤中未通过“状态检查”。如果我右键单击实例并“获取系统日志”,则这是日志的结尾:
Using IPI No-Shortcut mode
XENBUS: Timeout connecting to devices!
md: Autodetecting RAID arrays.
md: autorun ...
md: ... autorun DONE.
EXT3-fs: sda1: couldn't mount because of unsupported optional features (240).
EXT2-fs: sda1: couldn't mount because of unsupported optional features (244).
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,1)
我在这里做错了什么?我担心的是两个方面:
- 如果我无法从快照启动,这将使快照实用程序变得没那么有用
- 如果我无法从快照创建 AMI 来创建新实例,这不仅会降低快照的实用性,而且让我们想知道如何轻松地“复制”实例。
答案1
您收到的错误表明您的文件系统比内核支持的文件系统更新(很可能是仅支持 ext2/3 的内核上的 ext4)。某些 AMI 依赖非标准 AKI(Amazon 内核映像)来提供某些功能。
在这种情况下,您遵循的过程似乎是正确的,因此,结合您收到的错误,AKI 很可能不匹配。检查原始实例使用的 AKI,并将其与新实例的 AKI 进行比较。如果它们不匹配,请在启动时明确指定 AKI。(您也可以手动创建 AMI,并在创建时指定 AKI,以便在启动时指定它)。
另外,更好的 AMI 设计将使用 PV-GRUB 作为引导加载程序,从 AMI 本身加载内核(而不需要特定的外部 AKI),这简化了保持内核更新的过程。AWS 文档如果您想在 AMI 中实现此功能,则值得阅读有关用户提供的内核的文章。
答案2
因为您特别提到了 Ubuntu,所以这个工具可能会对您有帮助:
我遇到了同样的事情,使用上述工具为操作系统版本和架构选择正确的 AKI 非常有效。
答案3
我遇到了类似的问题,事实证明,AWS EC2 在启动实例和创建 AMI 时的默认设置不同:硬件虚拟化 (HVM) 是第一种情况下的默认选择,但半虚拟化 (PV) 是映像创建的默认选择。
当我尝试通过快照其 EBS 卷并创建新的 AMI 在可用区之间移动 EC2 实例时偶然发现了这一点,并且这种设置差异(我没有注意到)浪费了我一个小时。
因此,tl;dr:只需在从定制的 AMI 启动时选择 HVM,您的实例就应该可以正常启动。