Вопрос или проблема
Я пытаюсь обновить конфигурацию GRUB на виртуальной машине с Debian 11. Я использовал команду update-grub
, но она больше не работает. Также я попробовал команду grub-mkconfig > /boot/grub/grub.cfg
, которая также завершилась неудачей.
Обе команды завершаются ошибкой:
/usr/sbin/grub-mkconfig: 38: /etc/default/grub.d/grub.cfg: function: not found
Файл grub.cfg
находится в /boot/grub/grub.cfg
.
Когда я просматриваю grub-mkconfig
на строке 38, она показывает следующие строки:
grub_mkconfig_dir="${sysconfdir}"/grub.d
Директорией sysconf является /etc/
.
Я проверил страницы man, которые указывают, что grub-mkconfig
должен работать.
В чем проблема?
В моей директории /etc/default/grub.d/
есть только файл-заглушка init-select.cfg
, содержащий несколько комментариев, и все (Debian 11).
В этой директории не должно быть файла grub.cfg
. Возможно, вы по ошибке запустили grub-mkconfig -o /etc/default/grub.d/grub.cfg
?
Если вы удалите этот файл, команда sudo update-grub
должна снова заработать.
Простой способ решить эту проблему — переустановить grub.
Подключите iso-файл Debian к вашей виртуальной машине, затем загрузитесь. После этого войдите в поврежденную систему через chroot и переустановите grub.
Вот как изменить корневой каталог и переустановить grub:
(Замените sdaXY
на ваш корневой раздел.)
mkdir -p /tmp/mychroot
mount -t ext4 /dev/sdaXY /tmp/mychroot
mount --bind /proc /tmp/mychroot/proc
mount --bind /dev /tmp/mychroot/dev
mount --bind /sys /tmp/mychroot/sys
update-grub
grub-install /dev/sdX
exit
Отмонтируйте смонтированные разделы, затем перезагрузитесь.
Ваш файл /boot/grub/grub.cfg
поврежден. В строке 38 этого файла должно быть что-то вроде:
38 function savedefault {
40 if [ -z "${boot_once}" ]; then
41 saved_entry="${chosen}"
42 save_env saved_entry
43 fi
44 }
Из этого ответа на форуме Ubuntu, я понимаю, что ошибка
/usr/sbin/grub-mkconfig: 38: /etc/default/grub.d/grub.cfg: function: not found
сообщает вам, что grub-mkconfig
не нашел функцию в строке 38 файла /etc/default/grub.d/grub.cfg
Я создал виртуальную машину с Debian 11×64 и скопировал /etc/default/grub.d/grub.cfg
. Вы можете сравнить ваш существующий файл с этой копией.
Ответ или решение
Проблема с ошибкой update-grub
на Debian 11 может быть связана с неправильным файлом конфигурации в директории /etc/default/grub.d/
. Ошибка /usr/sbin/grub-mkconfig: 38: /etc/default/grub.d/grub.cfg: function: not found
указывает, что grub-mkconfig
не смог найти функцию на линии 38 в файле /etc/default/grub.d/grub.cfg
.
Анализ проблемы
-
Проверка установленных файлов конфигурации: В системе Debian 11 файл
grub.cfg
не должен находиться в/etc/default/grub.d/
. Этот файл мог быть ошибочно создан с помощью командыgrub-mkconfig -o /etc/default/grub.d/grub.cfg
, что недопустимо. -
Отсутствие необходимых настроек: Убедитесь, что файл в
/boot/grub/grub.cfg
содержит корректные настройки.
Решение проблемы
Удаление ошибочного файла конфигурации
-
Удалите ошибочный файл
grub.cfg
из/etc/default/grub.d/
:sudo rm /etc/default/grub.d/grub.cfg
-
После удаления файла, повторно выполните команду:
sudo update-grub
Это должно устранить ошибку, так как update-grub
будет снова работать корректно без мешающего файла.
Переустановка GRUB
Если проблема не решена удалением файла:
-
Подготовка к chroot:
- Прикрепите ISO-образ Debian к вашей виртуальной машине.
- Загрузитесь с этого образа и выполните следующие команды:
-
Переход в chroot и восстановление GRUB:
mkdir -p /tmp/mychroot mount -t ext4 /dev/sdaXY /tmp/mychroot mount --bind /proc /tmp/mychroot/proc mount --bind /dev /tmp/mychroot/dev mount --bind /sys /tmp/mychroot/sys chroot /tmp/mychroot grub-install /dev/sdX update-grub exit
-
Завершение и перезагрузка:
- Размонтируйте все примонтированные каталоги и перезагрузите систему.
Заключение
Эти действия должны помочь устранить проблему с обновлением GRUB на Debian 11. Убедитесь, что вы правильно указали устройства и разделы, чтобы избежать дополнительных проблем. В случаях, когда исходная проблема связана с ошибками в файлах конфигурации, удаление лишних файлов и переустановка GRUB должны вернуть систему в работоспособное состояние.