CentOS 7.2 虛機 ssh 登錄報錯在重啟后無法進入系統

文章目錄

  • 前言
  • 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 落地面臨的核心痛點之一,便是 “數據臟、處理難、知識雜”:預訓練語料…