Chroot 不能在 suse 9 救援系统上工作吗?

Chroot 不能在 suse 9 救援系统上工作吗?

我需要使用 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当缺少库时系统调用会返回错误。

相关内容