switch_root: 執行失敗 /sbin/init: 符號連結層級太多
所以,最近我從頭開始做 Linux 項目,我打開了多個終端,所以我繼續製作它,不小心我在另一個終端選項卡(根)中鍵入了該行,它完全弄亂了符號連結!,我無法在 bash 上執行任何命令。
case $(uname -m) in i?86) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3 ;; x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64 ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3 ;; esac
我在arch linux上,當我重新啟動電腦時,核心也發生了恐慌,它說:“switch_root:執行/sbin/init失敗:符號連結級別太多。”
有什麼解決辦法嗎?我希望如果有人幫助。
恢復什麼
當您執行此命令時,該
LFS
變數可能未設置。所以它修改了/lib64/ld-linux-x86-64.so.2
和/lib64/ld-lsb-x86-64.so.3
。你已經破壞了動態載入器。因此,您無法執行任何動態連結的程序。幾乎每個程序都是動態連結的,包括
bash
,init
,ln
等。
/lib64/ld-linux-x86-64.so.2
是重要的。它是 64 位 Arch 程序使用的動態載入器。符號連結由glibc 包提供。從一個正常工作的 Linux 系統,執行ln -snf ld-2.33.so /lib/ld-linux-x86-64.so.2
**注意:數字 2.33 會隨著時間而改變!**檢查
/lib/ld-*.so
系統上存在什麼文件。
/lib64/ld-lsb-x86-64.so.3
是為了與不是為 Arch 建構的程序兼容。它由ld-lsb
包提供。如果安裝了這個包,恢復連結:ln -snf ld-linux-x86-64.so.2 /lib/ld-lsb-x86-64.so.3
如果
ld-lsb
未安裝,請刪除/lib/ld-lsb-x86-64.so.3
.預先計劃的獨立恢復
當動態庫損壞時,您仍然可以執行靜態連結的執行檔。如果您正在執行任何類型的不穩定或滾動發布系統,我建議您使用一組基本的靜態連結實用程序。(不僅僅是一個 shell:例如,靜態連結的 bash 對創建符號連結沒有幫助。)Arch Linux 似乎沒有。您可以從 Debian 的busybox-static或zsh-static複製執行檔:兩者都包括 shell 以及內置的核心實用程序,例如
cp
,ln
等。有了這樣的預先計劃,只要您仍然有一個正在執行的 root shell,您就可以執行
busybox-static
並ln -snf ld-2.33.so /lib/ld-linux-x86-64.so.2
或執行
zsh-static
並zmodload zsh/files ln -snf ld-2.33.so /lib/ld-linux-x86-64.so.2
如果您已重新啟動並且因為
/sbin/init
無法啟動而卡住,請啟動到靜態 shell:按照“有用的調試技術:”下在最近的公司電腦上啟動時崩潰中的步驟,從“按住 Shift”開始。在linux
命令行上,添加init=/bin/busybox-static
(或任何正確的路徑)。從恢復系統修復
如果沒有提前計劃,您將需要執行一個正常工作的 Linux 系統來修復您的系統。Arch wiki建議啟動每月一次的 Arch 鏡像。您也可以使用SysRescueCD。無論哪種方式,使用您的書面筆記、
lsblk
、fdisk -l
、lvs
或任何可以幫助您弄清楚根分區是什麼的東西,然後使用mount /dev/… /mnt
. 然後修復符號連結:ln -snf ld-2.33.so /mnt/lib/ld-linux-x86-64.so.2