Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
使用 GRUB 对 Linux 实例进行故障排查
GNU GRUB(GNU GRand Unified Bootloader [统一引导加载程序] 的缩写,通常称为 GRUB)是大多数 Linux 操作系统的默认引导加载程序。从 GRUB 菜单中,您可以选择要引导到哪个内核,或修改菜单项以更改内核的启动方式。这在对失败的实例进行故障排查时非常有用。
在引导流程中将显示 GRUB 菜单。该菜单无法通过普通 SSH 访问,但您可以通过 EC2 Serial Console 访问。
先决条件
您必须先授予串行控制台访问权限,然后才能配置和使用 GRUB。有关更多信息,请参阅配置对 EC2 Serial Console 的访问。
在通过串行控制台使用 GRUB 之前,您必须将实例配置为通过串行控制台使用 GRUB。
要配置 GRUB,请根据用于启动实例的 AMI 选择以下程序之一。
- Amazon Linux 2
-
在 Amazon Linux 2 实例上配置 GRUB
-
连接到您的实例。
-
在 /etc/default/grub 中添加或更改以下选项:
以下是 /etc/default/grub 的示例。您可能需要根据系统设置更改配置。
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0"
GRUB_TIMEOUT=1
GRUB_DISABLE_RECOVERY="true"
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200"
-
运行以下命令以应用更新后的配置。
[ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
- Ubuntu
-
在 Ubuntu 实例上配置 GRUB
-
连接到您的实例。
-
在 /etc/default/grub.d/50-cloudimg-settings.cfg 中添加或更改以下选项:
-
设置 GRUB_TIMEOUT=1。
-
添加 GRUB_TIMEOUT_STYLE=menu.
-
添加 GRUB_TERMINAL="console serial".
-
删除 GRUB_HIDDEN_TIMEOUT.
-
添加 GRUB_SERIAL_COMMAND="serial --speed=115200".
以下是 /etc/default/grub.d/50-cloudimg-settings.cfg 的示例。您可能需要根据系统设置更改配置。
# Cloud Image specific Grub settings for Generic Cloud Images
# CLOUD_IMG: This file was created/modified by the Cloud Image build process
# Set the recordfail timeout
GRUB_RECORDFAIL_TIMEOUT=0
# Do not wait on grub prompt
GRUB_TIMEOUT=1
GRUB_TIMEOUT_STYLE=menu
# Set the default commandline
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0 nvme_core.io_timeout=4294967295"
# Set the grub console type
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed 115200"
-
运行以下命令以应用更新后的配置。
[ec2-user ~]$ sudo update-grub
- RHEL
-
在 RHEL 实例上配置 GRUB
-
连接到您的实例。
-
在 /etc/default/grub 中添加或更改以下选项:
以下是 /etc/default/grub 的示例。您可能需要根据系统设置更改配置。
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200"
-
运行以下命令以应用更新后的配置。
[ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
- CentOS
-
对于使用 CentOS AMI 启动的实例,默认情况下为串行控制台配置了 GRUB。
以下是 /etc/default/grub 的示例。根据您的系统设置,您的配置可能会有所不同。
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200"
GRUB_CMDLINE_LINUX="console=tty0 crashkernel=auto console=ttyS0,115200"
GRUB_DISABLE_RECOVERY="true"
使用 GRUB
配置 GRUB 后,连接到串行控制台并使用重启命令重启实例。在重新启动过程中,您会看到 GRUB 菜单。出现 GRUB 菜单时按任意键可停止启动流程,从而使您可以与 GRUB 菜单进行交互。
单用户模式
单用户模式将在较低的运行级别启动内核。例如,它可能会挂载文件系统,但不会激活网络,从而使您有机会执行修复实例所需的维护。
启动到单用户模式
-
连接到实例的串行控制台。
-
使用以下命令重新引导实例。
[ec2-user ~]$ sudo reboot
-
在重新启动期间,当 GRUB 菜单出现时,按任意键停止引导流程。
-
在 GRUB 菜单中,使用箭头键选择要引导的内核,然后按键盘上的 e。
-
使用箭头键将光标定位在包含内核的行上。该行以 linux 或 linux16 开头,取决于启动实例所使用的 AMI。对于 Ubuntu,有两行开头为 linux,必须在下一步中修改。
-
在行末添加 single 一词。
以下是 Amazon Linux 2 的示例。
linux /boot/vmlinuz-4.14.193-149.317.amzn2.aarch64 root=UUID=d33f9c9a-\
dadd-4499-938d-ebbf42c3e499 ro console=tty0 console=ttyS0,115200n8 net.ifname\
s=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.she\
ll=0 single
-
按 Ctrl+X 可启动到单用户模式。
-
在 login 提示符下,输入您之前设置的基于密码的用户的用户名,然后按 Enter 键。
-
在 Password 提示符下,输入密码,然后按 Enter 键。
紧急模式
紧急模式与单用户模式类似,只是内核在可达到的最低运行级别运行。
要启动到紧急模式,请按照上一节的 单用户模式 中的步骤操作,但在第 6 步中添加的词是 emergency 而非 single。