在 OCI Linux 实例上配置更改后解决引导失败

简介

本教程将引导您解决定制 Oracle Cloud Infrastructure (OCI) 映像的引导故障,这些映像可能会在配置更改后发生,甚至是由于底层设备映射发生更改而进行的简单重新引导。

在深入了解解决方案之前,让我们先了解自定义图像是什么。

OCI 中的定制映像是实例引导卷的快照,用于捕获操作系统配置、安装的软件和环境设置。定制映像通常用于在多个实例或区域中复制预配置的环境,以确保大规模的一致性。

但是,这些映像可能会带来风险,特别是如果它们与实例的原始硬件紧密耦合。如果设计时不考虑可移植性,则更改配置(例如,从 VM.Standard3 切换到 VM.Standard4 实例)时可能会出现问题,因为底层硬件更改会影响设备的映射方式。

本博客概述了客户使用 Oracle Cloud Marketplace 中的 Rocky Linux 映像遇到的实际引导失败情况。虽然此示例特定于 Rocky Linux,但根本原因和分辨率广泛适用于在配置中使用静态设备名称的任何基于 Linux 的定制映像。

目标

本指南通过更正挂载配置和增强映像可移植性,帮助 OCI 用户识别和解决定制 Linux 映像中因配置更改或重新引导而导致的引导故障。

Prerequisites

任务 1:了解问题

  1. 查看 OCI 配置更改如何影响底层硬件和设备命名。
  2. 识别 /etc/fstab 中的静态设备名称(例如 /dev/sdX)在配置更改后甚至在重新引导后可能会失效。
    • 配置发生更改时,OS 可能会为连接的块存储卷分配新名称。例如,属于 /dev/sdb 的磁盘现在可能显示为 /dev/sdc
    • 如果 /etc/fstab 依赖于这些静态名称,则卷在引导时可能会无法挂载。
    • 为避免这种情况,请在 /etc/fstab 中使用持久性标识符,例如卷的 UUID/dev/disk/by-uuid/ 路径。

任务 2:确定症状和错误

  1. 请查看串行控制台或系统日志 (journalctl -xb),了解以下错误:

    • Welcome to emergency mode! After logging in, type “journalctl -xb”...
    • Failed to mount /mnt/data: No such device
    • Duplicate mount point /mnt/data detected
    • Cannot mount /dev/sdX: No such file or directory
    • systemd[1]: Failed to mount /mnt/data.
    • systemd[1]: Dependency failed for Local File Systems.
    • systemd[1]: Job local-fs.target/start failed with result ‘dependency’.

任务 3:引导至救援/紧急模式

  1. 访问实例的串行控制台。
  2. 引导至救援或紧急模式以执行诊断和更正操作。

任务 4:确定正确的设备名称

  1. 运行 blkidlsblk 命令以列出当前块设备及其 UUID。

任务 5:手动挂载引导卷

  1. 使用正确的设备名称挂载引导卷:

    • mount /dev/sdXn /mnt
    • chroot /mnt

任务 6:编辑 /etc/fstab

  1. 使用编辑器打开 /etc/fstab(例如 vi /etc/fstab

    • 将所有 /dev/sdX 条目替换为从 blkid 找到的对应持久性 UUID 值。
    • 删除所有重复的挂载条目。注意:这是一次性修复,使用持久性标识符后,将来的配置更改不应导致此问题。

任务 7:退出并重新引导

  1. 退出 chroot 环境:exit
  2. 如果需要,卸载卷。
  3. 重新引导实例。

防止在 OCI 配置更改后引导失败的提示

  1. 使用持久性标识符:始终使用 UUID=LABEL=/etc/fstab 中指定磁盘,而不是使用 /dev/sdX 等设备名称。这可确保挂载点在硬件更改时保持一致。
  2. 执行 blkid 审计:在配置更改之前和之后运行 blkid 以验证设备到 UUID 的映射是否保持正确。
  3. 更改前备份:始终在任何配置修改之前备份实例或引导卷,以便在出现问题时启用恢复。
  4. 非生产环境中的测试配置更改:尤其是在使用可能具有硬编码挂载的市场或定制映像时,首先在非生产环境中测试配置更改。

小结

虽然在 Rocky Linux 上观察到此问题,但如果不遵循有关磁盘挂载的最佳做法,则可能会影响任何基于 Linux 的定制映像。好消息是,这是一次性的修正。更新 /etc/fstab 以使用 UUID 或 LABEL 等持久性标识符后,未来的 OCI 配置更改甚至重新引导都不会导致引导失败。主动验证您的配置可确保跨配置平稳、可靠的转换。

确认

更多学习资源

通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心