Arch-Linux

switch_root: 執行失敗 /sbin/init: 符號連結層級太多

  • November 8, 2021

所以,最近我從頭開始做 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-staticzsh-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。無論哪種方式,使用您的書面筆記、lsblkfdisk -llvs或任何可以幫助您弄清楚根分區是什麼的東西,然後使用mount /dev/… /mnt. 然後修復符號連結:

ln -snf ld-2.33.so /mnt/lib/ld-linux-x86-64.so.2

引用自:https://unix.stackexchange.com/questions/676618