尝试修复启动问题kernel panic not syncing attemped to kill init exitcode=0x00000100
并尝试从 live cd chroot 但出现此错误:
/bin/bash: error while loading shared libraries: __vdso__time: invalid mode for dlopen(): Invalid argument
似乎我搞砸了一些库。有人知道如何解决这个问题吗?谢谢
答案1
似乎你弄乱了“glibc”,它通常会给出这样的错误。我目前能想到的唯一解决方案是尝试重命名你当前的“lib”目录(在你尝试 chroot 到的环境中)并复制(即从 live cd)“clean”。确保保留旧的“libs”,以便以后可以重复使用它们。
为了将来,我建议编译并安装额外的库(特别是默认的不同版本的库)到单独的目录中,然后在执行二进制文件时使用 LD_LIBRARY_PATH 明确指向库路径。
因此,目前我个人会尝试仅替换 /lib64(但这取决于发行版)。我可以看到在 Centos 6 框中,/bin/bash 依赖于:
ldd /bin/bash
linux-vdso.so.1 => (0x00007ffd4db63000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f9f34f54000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f9f34d50000)
libc.so.6 => /lib64/libc.so.6 (0x00007f9f349bb000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9f3517f000
也许可以尝试将 /lib64 重命名为 /lib64_messed 并复制新的 /lib64 - 它应该足以执行 /bin/bash。我写的是与您尝试 chroot 的 Live CD OS 最相似的版本。当然,尝试执行不同的命令时可能会出现新的库依赖性错误,但这样您应该可以解决问题并修复您的操作系统以获得“一点点”可用状态。
我假设您正在使用 x64 live cd 并尝试 chroot 到 x64 环境。
现在,我已经检查了 Ubuntu 16 框,并且路径有点不同:
ldd /bin/bash
linux-vdso.so.1 => (0x00007fffe3567000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f7611065000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7610e61000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7610a96000)
/lib64/ld-linux-x86-64.so.2 (0x000055f0e5734000)
因此您可能需要替换 /lib 和 /lib64 目录,或者仅替换那些特定的库。