誤升級GLIBC導致系統崩潰之後

alalala發表於2021-07-16

伺服器和系統版本

  • 伺服器版本 Dell R410
  • 系統版本 Centos 6.3

出錯原因

執行 mindoc 時,提示依賴需升級

升級之後,大部分的 Linux 基礎命令都無法使用,例如:

執行命令時錯誤

登入伺服器時錯誤

此時,一旦退出當前遠端Shell終端,就再也無法登入系統,只能進 Linux 急救模式,即 Rescue 模式進行搶救。

修復系統

若未退出當前遠端 Shell 終端

如果安裝了 busyBox

busybox wget http://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.3/os/x86_64/Packages/glibc-2.12-1.80.el6.x86_64.rpm

busybox rpm -i glibc-2.12-1.80.el6.x86_64.rpm

若已經退出了當前遠端終端

只能進機房操作了,需要進入 Rescue 模式,進行缺失系統檔案的補全。

製作U啟動盤

要求:系統版本要和壞掉的系統版本一致 (這樣才能實現,缺失系統檔案的完整替換。)

  1. 準備一塊 8G 記憶體的U盤
  2. 下載系統 Centos 6.3
  3. 在 Windows 電腦上 使用 Rufus 軟體,將系統燒入準備好的 U盤中

Rescue 模式 挽救

因為伺服器根本進不去,只能強行按下關機鍵,進行關機。

插好U啟動盤,啟動伺服器。

在啟動頁面, 按 F11 進入 BIOS 設定,選擇啟動方式 為 U啟動盤啟動

Hard Driver C => U268

這裡的 U268 是我的 U 盤名字。

一、 接下來,按Enter鍵進去操作選擇頁面

毫無疑問,選擇第三項 Rescue installed sysytem 回車

二、選擇語言和鍵盤(預設的就好)

三、選擇包含急救映象的介質

注意⚠️:這裡有坑!!!

  • 如果是用的光碟機➕IOS光碟的形式,那麼選擇第一項也就是 Local CD/DVD
  • 如上所述,我們使用的是 U 啟動盤,因此需要選擇 第二項 也就是 Hard Driver

選擇 Hard driver 介質

找到自己的U啟動所在分割槽,我是一個個 的試出來的,一般都是最後一個或者第一個,我這裡選擇最後一個 /dev/sdb1

四、稍等一會兒會出現要不要設定網路,一般來說網路沒問題就不用設定了,我這裡選擇 No

五、接下來,選擇 Rescue 選項,這裡我們選擇 Continue

  1. Continue:救援模式程式會自動查詢系統中已有的檔案系統,並把他們掛載到 /mnt/sysimage 目錄下,也就是將缺失部分系統檔案的壞掉的原系統掛載到 /mnt/sysimage 目錄
  2. Read-Only:則會以只讀的方式掛載已有的檔案系統
  3. Skip: 手動掛載
  4. Advanced:高階選項就不作說明了

六、接下來,會彈出提示頁面

原損壞系統掛載路徑為 /mnt/sysimage ,如果想獲得原損壞系統 root 環境,執行命令:chroot /mnt/sysimage 即可。

上述,提示頁面是系統完整掛載成功的提示, 如果原損壞系統還有別的問題的話,還會導致只能掛載部分系統,所以掛載的損壞系統一直為 readonly 模式,即只讀的情況。

無需在意,後面會解決的,還是選擇 Continue。

七、接下來,進入 Shell

回車

八、重頭戲開始

  1. 檢視 U盤 是哪個
blkid

可以看到裝置符是 /dev/sdb1

  1. 建立 U盤 掛載用的目錄

這裡可以自己定義用於掛載 U盤 的空目錄啊,切記不能是 /mnt/sysimage 目錄,因為原損壞系統在這個目錄下

mkdir /mnt/cdrom
  1. 將 U盤 掛載到 /mnt/cdrom
mount /dev/sdb1 /mnt/cdrom
  1. 刪除更新 glibc 2.14 時,在原損壞系統 /lib64 目錄下的升級生成檔案

  2. 刪除之前先備份

    mkdir /mnt/cdrom/backup_data
    cp /mnt/sysimage/lib64/*2.14*  /mnt/cdrom/backup_data/
  3. 刪除升級殘留檔案

    rm /mnt/sysimage/lib64/*2.14*
  4. 重新安裝系統原生 glibc 依賴

一定要用 –root 指定root,目前的根目錄是U盤的

rpm -ivh /mnt/cdrom/Packages/glibc* --nodeps --root /mnt/sysimage --force 
  1. 將報錯中提及的外掛還原
cp /lib64/libselinux.so.1 /mnt/sysimage/lib64/
cp /lib64/libpam.so.0 /mnt/sysimage/lib64/
  1. 重啟伺服器
reboot

注意⚠️:

1、如果原損壞系統並未成功完整掛載到 /mnt/sysimage 下時,5、6 步驟可能出現不可寫的情況,提示 /mnt/sysimage 下是 readonly 系統

解決方案:

此時,就需要對 /mnt/sysimage 進行重新掛載,並在掛載的同時設定模式為 讀寫模式

mount -o remount,rw /mnt/sysimage # 以讀寫方式重新掛載分割槽 

2、 重啟伺服器時,出現錯誤

  1. 看提示有按CTRL+D繼續,按了CTRL+D會重啟,再次回到這個介面。

  1. 這可能是因為系統損壞時,我們直接通過按鍵來關閉伺服器導致的問題,需要異常磁碟掃描,輸入 root 密碼 進入 修復模式

  1. 在修復模式下,輸入命令
    fsck –y  /dev/mapper/VolGroup-lv_root

/dev/mapper/VolGroup-lv_root 這個路徑就是你上面提示出錯的那個路徑,根據自己的實際情況來,不同人的情況,不同路徑的。

  1. 輸入後,會在檢查硬碟,這個過程看具體的情況而定,比如你的硬碟如果是T級別的話,那可能會需要一段時間,即使達到7-8小時也是正常的。最後在檢查完事後,reboot 重啟下伺服器。

  1. 重啟完,就可以看到正常的登陸介面了,輸入使用者名稱,密碼,就可正常的登入了

附:鳥哥的fsck的命令說明

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章