我需要使用 suse 9 恢复服务器,但我遇到了一个非常常见的chroot
无法工作的错误。抱怨/bin/bash
不存在,但它确实存在。
这些是我使用过的命令:
mount /dev/dvg/lv00 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
cd /
chroot /mnt
但由于没有这样的文件或目录,它会失败。
ldd
表明/mnt/bin/bash
每个需要的库都可用。
Strace 根本没有帮助。
/mnt/bin/bash -i
工作没有错误。
有什么帮助吗?
答案1
您应该检查这些库是否可用/mnt
。通常,从列出的每个库中ldd /mnt/bin/bash
都有一个同源的/mnt
?
如果您/mnt/bin/bash
从 shell (ldd
或/mnt/bin/bash -i
) 尝试,仍然可以从/lib
或获取库/lib64
。
当你使用时chroot /mnt
,一切都会从中得到/mnt/*
。
通常(来自 Debian),我有四个库要检查(第一行不算):
linux-vdso.so.1 (0x00007ffcc8783000)
libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f1a1000b000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1a10005000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1a0fe30000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1a1017f000)
您应该检查这四个(根据您的ldd
输出进行调整)是否在/mnt
.请注意,大多数都是符号链接,并且指向的文件也必须可用/mnt
。
我必须承认这strace
没有帮助,因为execve
当缺少库时系统调用会返回错误。