switch_root:无法执行/sbin/init:符号链接级别太多

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:符号链接级别太多。”

有什么解决办法吗?我希望如果有人帮忙。

答案1

要恢复什么

当您运行此命令时,该LFS变量可能未设置。所以它修改了/lib64/ld-linux-x86-64.so.2/lib64/ld-lsb-x86-64.so.3

你已经损坏了动态加载器。因此,您无法运行任何动态链接的程序。几乎每个程序都是动态链接的,包括bashinitln等。

/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-静态或者zsh-静态:都包含 shell 以及内置的核心实用程序,例如cpln等。

有了这样的提前规划,只要您仍然有一个正在运行的 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 镜像。您还可以使用系统救援CD。无论哪种方式,请使用您的书面注释、、、、lsblk或任何可以帮助您找出根分区的内容,并使用 挂载fdisk -l它。然后修复符号链接:lvsmount /dev/… /mnt

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

相关内容