我按照本教程的说明进行操作如何从 Live CD 中清除并重新安装 Grub 2,当我在步骤 1 启动命令时遇到错误
sudo chroot /mnt/temp
错误如下:
chroot: failed to run command `/bin/bash': Exec format error
这是从哪里来的?我该如何通过?
答案1
验证您使用的是正确的 Live CD。例如,验证您使用的不是 32 位 CD,而是 64 位 CD。您需要 64 位内核才能运行 64 位代码,因此请检查您的架构。
假设你安装了 chroot 系统/媒体/sda1,要确定架构,您可以:
ls /media/sda1/*
如果你在输出中看到 lib64,那么它可能是一个 64 位系统
答案2
我在为 armhf arch 制作图像时遇到了同样的问题。我必须安装qemu-user-static
然后将其复制到 chroot bin 文件夹。
sudo cp /usr/bin/qemu-arm-static /path/to/mount/usr/bin
你可能得跑
systemctl restart systemd-binfmt.service
然后你就可以 chroot 进入环境了
答案3
该错误意味着你的jail(/mnt/temp
)不包含bash shell,或者不包含运行bash shell所需的库。
如果你使用类似下面的方法创建了你的监狱:
debootstrap --variant=buildd --arch i386 lucid /mnt/temp \
http://archive.ubuntu.com/ubuntu/
你可能想这样做:
debootstrap --variant=minbase --arch i386 lucid /mnt/temp \
http://archive.ubuntu.com/ubuntu/
但是,作为您的问题的技术答案,请尝试:
cp -r /bin /lib /mnt/temp
这应该允许您成功 chroot,此时您可以做其他事情。
但是这样做有上百万个错误,而且你几乎肯定不想这样做。创建 jail 时使用 minbase,或者在空白目标(例如虚拟机)上安装 ubuntu,然后创建整个系统的 tar 存档,然后将其解压到/mnt/temp
。
答案4
确实,这是 64 位与 32 位的不兼容。
尽管
cp /bin/bash /mount/temp/tmp
(将 32 位 exec 复制到tmp
目录中的新根
chroot /mount/temp /tmp/bash
chroot
没问题,但所有命令仍然失败。您必须将它们全部复制过来。