所以,最近我正在从头开始做 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
。
你已经损坏了动态加载器。因此,您无法运行任何动态链接的程序。几乎每个程序都是动态链接的,包括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-静态或者zsh-静态:都包含 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 镜像。您还可以使用系统救援CD。无论哪种方式,请使用您的书面注释、、、、lsblk
或任何可以帮助您找出根分区的内容,并使用 挂载fdisk -l
它。然后修复符号链接:lvs
mount /dev/… /mnt
ln -snf ld-2.33.so /mnt/lib/ld-linux-x86-64.so.2