使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

为什么我无法启动 Amazon EC2 Linux 实例?

2 分钟阅读
0

我收到一条错误消息“Failed to load SELinux policy, freezing”(加载 SELinux 策略失败,正在冻结),我无法启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例。

简短描述

Amazon EC2 Linux 实例无法启动,然后在 Amazon EC2 Linux 控制台中显示错误消息。此错误表示该实例无法加载安全增强型 Linux (SELinux) 策略。错误的原因包括配置错误的 SELinux 设置以及 SELinux 策略文件损坏或缺失。

解决方法

要从 SELinux 策略冻结中恢复实例,请选择以下选项之一:

  • 从最近的快照恢复实例的根卷。
  • 使用救援实例重新创建或修改 SELinux 策略配置。

从最近的快照恢复实例的根卷

如果您有 Amazon Elastic Block Store (Amazon EBS) 根卷快照,则可以将根卷恢复到以前的工作状态。有关详细信息,请参阅在不停止的情况下替换 Amazon EC2 实例的根卷。**注意:**在此方法中,您将丢失在创建快照后添加的数据。

使用救援实例重新创建或修改 SELinux 策略配置

要使用救援实例重新创建或修改 SELinux 配置,请完成以下步骤:

  1. 启动救援或临时实例。使用无法运行的实例的亚马逊机器映像 (AMI) 在您的虚拟私有云 (VPC) 中启动新的 EC2 Linux 实例。确保您的新实例与无法运行的实例位于同一个可用区内。该新实例将成为您的救援实例。您也可以使用与无法运行的实例位于同一可用区内的现有实例。
  2. 从无法运行的实例中分离 Amazon Elastic Block Store (Amazon EBS) 根卷。记下设备名称(/dev/xvda 或 **/dev/sda1)**和卷 ID(以 vol- 开头)以备后续使用。
  3. 将 EBS 卷作为辅助设备连接到救援实例,例如 /dev/sdf
  4. 使用 Secure Shell (SSH)AWS Systems Manager (SSM) 会话管理器连接到救援实例。要识别根分区设备名称,请运行 lsblk 命令:
    sudo -i
    lsblk -o +PARTLABEL,LABEL,SERIAL | sed 's/vol/vol-/'
    **注意:**根分区包含标签 / 和分区标签 Linux。如果有多个条目,则使用卷 ID 来区分问题实例的根卷。

挂载根文件系统

创建临时挂载点(例如,/mnt/rescue)。要从附加的卷挂载根文件系统,请运行以下命令:

mkdir -p /mnt/rescue
mount -o nouuid /dev/device-name /mnt/rescue

**注意:**将 device-name 替换为您在上一步中确定的根分区的设备名称。

要使用 chroot 更改根目录,请运行以下命令:

for i in proc sys dev run; do mount --bind /$i /mnt/rescue/$i; done
chroot /mnt/rescue

注意:在此示例中,/dev/proc/sys/run 目录是从原始根文件系统绑定挂载的。此配置允许在 chroot 环境中运行的进程访问这些系统目录。

解决 SELinux 策略配置

要重新创建 SELinux 策略,请运行以下命令:

semodule -B

要停用 SELinux,请运行以下命令:

sed -i -E 's/^SELINUX=(permissive|enforcing)/SELINUX=disabled/' /etc/selinux/config

从救援实例上卸载并重新连接卷

  1. 要退出 chroot 环境并卸载该卷,请运行以下命令:
    exit
    umount /mnt/rescue/{proc,sys,dev,run,}
    **注意:**如果 /mnt/rescue: 目标正忙,则使用 -l 选项(例如 umount -l /mnt/rescue)强制分离。
  2. 将卷与救援实例分离。然后,将该卷作为根卷重新连接到原始实例(设备名称为 /dev/xvda/dev/sda1)。
  3. 启动原始实例,然后验证启动问题是否已解决。

备份并测试您的 SELinux 策略
您的 SELinux 策略文件的最佳做法是完成以下步骤:

  1. 修改有效的 SELinux 策略之前,对其进行备份。
    要备份您的策略,请运行以下 tar 命令:

     tar -czvf selinux-policy-store-backup.tar.gz /etc/selinux/targeted/policy/
  2. 在非生产环境中测试更改。

相关信息

系统无法启动: 加载 SELinux 策略失败,正在冻结(Red Hat 网站上)

SELinux 用户和管理员指南 Red Hat 文档(Red Hat 网站上)

AWS 官方
AWS 官方已更新 2 个月前