文章目录

  • 前言
  • 1. 故障描述
  • 2. 故障诊断
  • 3. 故障原因
  • 4. 解决方案
  • 总结


前言

上周帮用户处理了一个 linux 虚拟机在重启后无法正常进入操作系统的故障,觉得比较有意思,在这里分享给大家。


1. 故障描述

事情的起因是一台系统版本为 CentOS 7.2 的 VMware 虚拟机出现了 ssh 登录报错,然后客户就想着通过重启操作系统的方式看看能否解决问题,结果发现重启后操作系统直接就起不来了,卡在如下所示界面:

在这里插入图片描述

故障表现即:不管怎么重启虚拟机,最后都会卡在 Starting Switch Root... 这里,在等待较长时间后会提示 Failed to execute /bin/sh, giving up: No such file or directory


2. 故障诊断

Step1:在接到客户的消息时,我脑海里第一时间想到了如下几种可能性:

  • 系统 Crash 了?
  • 系统 /etc/fstab 文件中某些设置了开机自动挂载的项挂载失败了?
  • 磁盘或者分区出现了坏块?

Step2:联系客户发起远程,由于客户也不清楚系统在发生故障前都做了哪些操作,所以想着还是先进单用户模式做个初步排查,结果在执行 chroot /sysroot 时出现了如下报错:

在这里插入图片描述

到这一步时我开始觉得这个故障的原因和我一开始想象的不一样了,因为之前处理过的一些故障,还从来没有遇到过进单用户模式在切换根环境变量时出现报错。

Step3:既然单用户模式在切换根环境变量时报错,我想着那进救援模式是不是也会报错呢?接下来就让用户挂载了一个 CentOS 7 版本的镜像进救援模式,果然不出所料,在执行 chroot /mnt/sysimage 切换根环境变量时也出现了如下报错:

在这里插入图片描述

Step4:接下来就是要检查 /bin/sh/bin/bash 两个文件是否存在,查询完发现系统提示没有该文件:

在这里插入图片描述

特别说明:这里有个点需要注意下,因为不管是单用户模式还是救援模式,我们其实都没有成功切换到系统的根环境变量下来,所以在查询时一定要注意你查看的是 iso 救援模式系统的信息还是故障主机的系统信息。如上图所示,编号为1的地方我们查看的信息就是 iso 救援模式系统的,而编号为2的地方查看的才是故障主机系统的信息,由此可以判断,原系统里面就是缺少了 /bin/sh/bin/bash 两个文件。

Step5:带着关键报错信息和疑问去网上查了一些资料,类似的故障案例里面有说是因为 /lib64 的软链接异常导致的,后面看到了红帽官网的《Kernel panicked on boot and ‘chroot /mnt/sysimage’ command in rescue mode fails with ‘chroot failed to run command /bin/sh no such file or directory’ error》 这篇 KB 文章。

1)首先我查看了下 /lib64 的软链接信息,发现软链接是正常的(此时我以为是正常的,其实被误导了,后面会说):

sh-4.2# ls -l /mnt/sysimage

在这里插入图片描述

2)紧接着我又查看了下 /bin 目录的信息(此时我还以为是正常的,呵呵):

在这里插入图片描述

3)接着我按照红帽官方 KB 所提供的步骤去做检查:

在这里插入图片描述

敲重点:终于在这一步我发现了问题,因为前面的检查让我认为不管是 /lib64 的软链接还是 /bin 的软链接都是正常的,但是当我在执行 /mnt/sysimage/lib64/ld-linux-x86-64.so.2 命令时发现 ld-linux-x86-64.so.2 居然不能自动补全,此时我开始怀疑:虽然软链接看似存在,但是源文件 /usr/lib64 可能缺少了;再联想到 /bin 目录也从 /usr/bin 软链接过来的,但前面查询时明明提示 /bin/sh/bin/bash 两个文件也是不存在的;基于此,我愈发觉得可能是 /usr 目录有异常。

Step6:检查发现原系统的 /usr 目录下除了一个 local 目录,其余啥也没有,此时终于找到“罪魁祸首”了,就是因为 /usr 目录下的其它文件被删除了,所以即使 /lib64 的软链接和 /bin 的软链接看着都正常,但其实已经失效了。

在这里插入图片描述

故障原因已经定位到,接下来就是该如何解决问题了。


3. 故障原因

系统 /usr 目录下的文件被删除,导致很多从 /usr 目录下的文件创建的软链接失效,如 /usr/lib64/usr/bin 等,从而出现 ssh 登录报错,甚至重启后无法进入操作系统

系统 ssh 服务依赖的关键文件主要位于 /usr/sbin/sshd 和 /usr/lib64,因此系统 /usr 目录下的文件被删除,ssh 肯定会受到影响;其次,登录系统所需的 bashshell 通常位于 /usr/bin/bash,这也是为什么系统在重启后会卡在 Starting Switch Root... 这里进不去,而在单用户以及救援模式下我们也无法切换到根环境变量下。

除此之外,用户环境配置所需的很多工具如 ls、grep 等命令都在 /usr/bin 下,所以当 /usr 目录下的文件被删除,在使用这些命令时肯定也会报错的(后面我自己复现了故障并进行了验证)。


4. 解决方案

由于客户没有做任何的备份,也没有虚拟机快照,因此只能通过挂载一个和故障主机操作系统版本一致的 iso 镜像,进入救援模式后采用 cp -a 命令,将 iso 救援模式系统里原生的 /usr目录下的所有文件全部拷贝到 /mnt/sysimage/usr 目录下去。

在这里插入图片描述

通过上图不难发现,在拷贝操作完成后,此时可以成功执行 chroot /mnt/sysimage 切换到根环境变量。

后面取消 iso 挂载,重启虚拟机就正常进入系统了。不过值得注意的是,此举只能保证系统可以正常进入,但是如果之前有一些应用程序安装在 /usr 目录下,那么很大可能应用程序会无法正常被执行;又或者用户自己的数据保存在 /usr 目录下,此时也是没有办法恢复的。


总结

虽然这次故障基本上得到了解决,但是也反映出我自己对 linux 文件结构还是不够熟悉,否则在看到 ssh 登录异常、/bin/sh 异常以及 /bin/bash 异常时,就应该第一时间想到去查看 /usr 目录的。

另外,日常工作中还是要建议客户加强备份建设,这样一旦出现故障,保底还有备份集可以进行还原;除此之外,在虚拟化环境中如果要对虚拟机做一些风险不可控的操作,建议先打快照再操作,这样即使出现了问题,恢复快照就可以了。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95785.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95785.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/95785.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《从使用到源码:OkHttp3责任链模式剖析》

一 从使用开始0.依赖引入implementation ("com.squareup.okhttp3:okhttp:3.14.7")1.创建OkHttpClient实例方式一:直接使用默认配置的Builder//从源码可以看出,当我们直接new创建OkHttpClient实例时,会默认给我们配置好一个Builder …

安装3DS MAX 2026后,无法运行,提示缺少.net core的解决方案

今天安装了3DS MAX 2026(俗称3DMAX),安装完毕后死活运行不了。提示如下: 大意是找不到所需的.NET Core 8库文件。后来搜索了下,各种文章说.NET CORE和.NET FRAMEWORK不是一个东西。需要单独下载安装。然后根据提示&…

FastAPI + LangChain 和 Spring AI + LangChain4j

FastAPI+LangChain和Spring AI+LangChain4j这两个技术组合进行详细对比。 核心区别: 特性维度 FastAPI + LangChain (Python栈) Spring AI + LangChain4j (Java栈) 技术栈 Python生态 (FastAPI, LangChain) Java生态 (Spring Boot, Spring AI, LangChain4j) 核心设计哲学 灵活…

Apache 2.0 开源协议详解:自由、责任与商业化的完美平衡-优雅草卓伊凡

Apache 2.0 开源协议详解:自由、责任与商业化的完美平衡-优雅草卓伊凡引言由于我们优雅草要推出收银系统,因此要采用开源代码,卓伊凡目前看好了一个产品是apache 2.0协议,因此我们有必要深刻理解apache 2.0协议避免触犯版权问题。…

自学嵌入式第37天:MQTT协议

一、MQTT(消息队列遥测传输协议Message Queuing Telemetry Transport)1.MQTT是应用层的协议,是一种基于发布/订阅模式的“轻量级”通讯协议,建构于TCP/IP协议上,可以以极少的代码和有限的带宽为连接远程设备提供实时可…

RabbitMQ--延时队列总结

一、延迟队列概念 延迟队列(Delay Queue)是一种特殊类型的队列,队列中的元素需要在指定的时间点被取出和处理。简单来说,延时队列就是存放需要在某个特定时间被处理的消息。它的核心特性在于“延迟”——消息在队列中停留一段时间…

Java 提取 PDF 文件内容:告别手动复制粘贴,拥抱自动化解析!

在日常工作中,我们经常需要处理大量的 PDF 文档,无论是提取报告中的关键数据,还是解析合同中的重要条款,手动复制粘贴不仅效率低下,还极易出错。当面对海量的 PDF 文件时,这种传统方式更是让人望而却步。那…

关键字 const

Flutter 是一个使用 Dart 语言构建的 UI 工具包,因此它完全遵循 Dart 的语法和规则。Dart 中的 const 是语言层面的特性,而 Flutter 因其声明式 UI 和频繁重建的特性,将 const 的效能发挥到了极致。Dart 中的 const(语言层面&…

Ubuntu22.04中使用cmake安装abseil-cpp库

Ubuntu22.04中使用cmake安装abseil-cpp库 关于Abseil库 Abseil 由 Google 的基础 C 和 Python 代码库组成,包括一些正支撑着如 gRPC、Protobuf 和 TensorFlow 等开源项目并一起 “成长” 的库。目前已开源 C 部分,Python 部分将在后续开放。 Abseil …

FreeRTOS项目(序)目录

这章是整个专栏的目录,负责记录这个小项目的开发日志和目录。附带总流程图。 目录 项目简介 专栏目录 开发日志 总流程图 项目简介 本项目基于STM32C8T6核心板和FreeRTOS,实现一些简单的功能。以下为目前已实现的功能。 (1&#xff09…

Python 多任务编程:进程、线程与协程全面解析

目录 一、多任务基础:并发与并行 1. 什么是多任务 2. 两种表现形式 二、进程:操作系统资源分配的最小单位 1. 进程的概念 2. 多进程实现多任务 2.1 基础示例:边听音乐边敲代码 2.2 带参数的进程任务 2.3 进程编号与应用注意点 2.3.…

ADSL技术

<摘要> ADSL&#xff08;非对称数字用户线路&#xff09;是一种利用传统电话线实现宽带上网的技术。其核心原理是频率分割&#xff1a;将一根电话线的频带划分为语音、上行数据&#xff08;慢&#xff09;和下行数据&#xff08;快&#xff09;三个独立频道&#xff0c;从…

信号衰减中的分贝到底是怎么回事

问题&#xff1a;在一个低通滤波中&#xff0c;经常会看到一个值-3dB&#xff08;-3分贝&#xff09;&#xff0c;到底是个什么含义&#xff1f; 今天我就来粗浅的讲解这个问题。 在低通滤波器中&#xff0c;我们说的 “截止频率”&#xff08;或叫 - 3dB 点&#xff09;&…

工具分享--IP与域名提取工具2.0

基于原版的基础上新增了一个功能点:IP-A段过滤&#xff0c;可以快速把内网192、170、10或者其它你想要过滤掉的IP-A段轻松去掉&#xff0c;提高你的干活效率&#xff01;&#xff01;&#xff01; 界面样式预览&#xff1a;<!DOCTYPE html> <html lang"zh-CN&quo…

如何通过日志先行原则保障数据持久化:Redis AOF 和 MySQL redo log 的对比

在分布式系统或数据库管理系统中&#xff0c;日志先行原则&#xff08;Write-Ahead Logging&#xff0c;WAL&#xff09; 是确保数据一致性、持久性和恢复能力的重要机制。通过 WAL&#xff0c;系统能够在发生故障时恢复数据&#xff0c;保证数据的可靠性。在这篇博客中&#x…

临床研究三千问——临床研究体系的3个维度(8)

在上周的文章中&#xff0c;我们共同探讨了1345-10战策的“临床研究的起点——如何提出一个犀利的临床与科学问题”。问题固然是灵魂&#xff0c;但若没有坚实的骨架与血肉&#xff0c;灵魂便无所依归。今天&#xff0c;我们将深入“1345-10战策”中的“3”&#xff0c;即支撑起…

AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年9月7日第172弹

从今天开始&#xff0c;咱们还是暂时基于旧的模型进行预测&#xff0c;好了&#xff0c;废话不多说&#xff0c;按照老办法&#xff0c;重点8-9码定位&#xff0c;配合三胆下1或下2&#xff0c;杀1-2个和尾&#xff0c;再杀4-5个和值&#xff0c;可以做到100-300注左右。(1)定位…

万字详解网络编程之socket

一&#xff0c;socket简介1.什么是socketsocket通常也称作"套接字"&#xff0c;⽤于描述IP地址和端⼝&#xff0c;是⼀个通信链的句柄&#xff0c;应用程序通常通过"套接字"向⽹络发出请求或者应答⽹络请求。⽹络通信就是两个进程间的通信&#xff0c;这两…

维度跃迁:当万物皆成电路,智能将从“拥有”变为“存在”

我们习以为常的电子世界&#xff0c;其本质是一个由电路构成的精密宇宙。而一场从二维到三维的终极变革&#xff0c;正在悄然酝酿&#xff0c;它将彻底颠覆我们创造和交互的方式。一、电子世界的本质&#xff1a;一切都是电路 在深入未来之前&#xff0c;我们首先要理解当下。电…

大语言模型预训练数据采集与清洗技术实践:从语料到知识库的全流程优化

大语言模型(LLM)的性能上限由 “数据质量 数据规模 数据多样性” 共同决定 —— 预训练阶段的海量语料决定模型的泛化能力与语言理解基础,而知识库数据则决定模型的知识准确性与领域专业性。当前 LLM 落地面临的核心痛点之一,便是 “数据脏、处理难、知识杂”:预训练语料…