前段時間遇到開發人員更新glibc版本,把/usr/lib64/libc-2.12.so & libc.so.6 -> libc-2.12.so 這個軟鏈接更改以後致使報錯:linux
ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directoryshell
沒法遠程登陸,終端也沒法登陸,也沒法單用戶登陸,如圖:bash
終端登陸:網絡
單用戶:yii
其實在執行誤操做以後只要不斷開遠程鏈接還有挽回的餘地,但遠程異常斷開鏈接以後不少人就沒有轍了,準備搶救數據&文件,重裝系統,其實這裏我們先不要着急重裝系統,我們來試試rescue !命令行
1、首先準備好系統安裝盤,使用安裝盤啓動:code
2、選擇語言和鍵盤(默認的就好):ip
3、稍等一下子會出現要不要設置網絡,通常來講網絡沒問題就不用設置了,我這裏選擇No:開發
4、這裏就是rescue選項了:
選擇Continue,則救援模式程序會自動查找系統中已有的文件系統,並把他們掛載到/mnt/sysimage目錄下。
選擇Read-Only,則會以只讀的方式掛載已有的文件系統。
手動掛載則Skip。
Advanced ,高級選項就不做說明了。
我們這兒選擇Continue:
5、原系統掛載路徑/mnt/sysimage,若是想得到原系統root環境,執行行命令:chroot /mnt/sysimage 便可。
6、這裏能夠執行fakd診斷,固然咱們這裏直接進入shell 命令行:
7、本次重頭戲來了,由於/usr/lib64/libc-2.12.so & libc.so.6 -> libc-2.12.so 問題,執行chroot /mnt/sysinage會報錯:
8、不要懼怕,執行:
cp /lib64/libc-2.12.so /mnt/sysimage/lib64/libc-2.12.so cp /lib64/libc.so.6 /mnt/sysimage/lib64/libc.so.6
將光盤文件拷貝到系統文件去,再執行chroot /mnt/sysinage 就正常了:
其實到這裏我此次rescue 已經完成了,由於系統缺乏/usr/lib64/libc-2.12.so文件和 libc.so.6 -> libc-2.12.so軟鏈接 ,複製過去就行了 。
9、退出shell & reboot
簡單的另外一個方法:
那就遠程鏈接還未關閉:
# LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6
該命令的含義是:
linux調用so庫文件時,先搜索當前路徑,而後是系統庫目錄,提供LD_PRELOAD系統變量能夠改變這個順序,改變後的搜索順序爲 LD_PRELOAD, 當前路徑, 系統庫目錄。
因而,使用LD_PRELOAD指向正常的glibc庫文件,而後執行ln等命令,就能夠正常執行,執行成功以後, libc.so.6 -> libc-2.12.so就又存在了。
其餘系統文件損壞也能夠參照一樣步驟進行,就不在此贅述了 。
歡迎你們多多指教