Во время попытки chroot я получил следующую ошибку: «chroot: не удалось выполнить команду '/bin/bash': ошибка формата Exec»

Во время попытки chroot я получил следующую ошибку: «chroot: не удалось выполнить команду '/bin/bash': ошибка формата Exec»

Я следовал инструкциям этого урока.ПРАКТИЧЕСКОЕ ОБСЛУЖИВАНИЕ: Очистка и переустановка Grub 2 с Live CD, когда я столкнулся с ошибкой на шаге 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 или не содержит библиотеки, необходимые для запуска оболочки bash.

Если вы создали свою тюрьму, используя что-то вроде этого:

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, после чего вы сможете заняться другими делами.

Однако есть около миллиона неправильных вещей, которые можно сделать, и почти наверняка вы не хотите этого делать. Используйте minbase при создании своей клетки или установите Ubuntu на пустую цель (например, виртуальную машину) и создайте архив tar всей системы, который затем распакуйте в /mnt/temp.

решение4

На самом деле это несовместимость 64-битной и 32-битной систем.

Хотя с

cp /bin/bash /mount/temp/tmp

(копирует 32-битный exec в новый корень в tmpкаталоге

chroot /mount/temp /tmp/bash

chrootвсе в порядке, все команды все равно не срабатывают. Вам придется скопировать их все.

Связанный контент