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