Вопрос или проблема
Я пытаюсь установить GRUB с загрузочной USB-флешки на другой диск. Хотя grub-install
работает нормально, grub-mkconfig -o /mnt/boot/grub/grub.cfg
(/mnt
— это точка монтирования диска, на который я устанавливаю) постоянно возвращает ошибку:
/usr/bin/grub-probe: error: failed to get canonical path of `/'.
Советы, которые я нашел в интернете, предлагали запустить update-grub
в chroot, это могло бы помочь, но ошибка появляется снова.
Мой вопрос двухчастный:
- Как исправить эту ошибку? Мне серьезно нужно, чтобы это заработало.
- (и что более важно) Почему это решение исправляет проблему?
Вторая часть важна, потому что было бы полезно для отладки, если бы кто-то здесь объяснил механику, вызывающую эту проблему, что позволило бы проводить более значимую отладку в тех случаях, когда известные решения не работают.
Если вдруг это как-то связано с моей проблемой, система, с которой я устанавливаю, — это live ISO Void Musl, а система, на которую я устанавливаю, — это Void Musl с зашифрованной с помощью LUKS /
и зашифрованным /boot
.
Оказалось, что chroot в Void не распознает блочные устройства внутри chroot. По-видимому, в Void есть отдельная команда xbps-uchroot
, которая обрабатывает это правильно. Решение — использовать xbps-uchroot
вместо обычного chroot
.
Ответ или решение
Теория:
Ошибка “/usr/bin/grub-probe: error: failed to get canonical path of `/'” обычно возникает, когда GRUB не может правильно определить или распознать файловую систему, в которой хранятся файлы загрузчика. Это часто связано с тем, что среда, в которой выполняется команда, некорректно настроена, особенно в случае использования chroot. При этом / (корневая файловая система) и другие важные каталоги могут быть не соответствующим образом примонтированы или разобраны. Проблема также может быть осложнена использованием шифрованных файловых систем, таких как LUKS.
Пример:
В контексте вашего вопроса, вы пытаетесь установить GRUB из живой USB-системы на другой диск, используя Void Musl. Проблема возникает, когда вы работаете с командой grub-mkconfig, связанной с генерированием grub.cfg. Вы упомянули, что используются шифрованные разделы как для корневого каталога, так и для /boot, что добавляет сложность процессу, так как каждое шифрование требует особого подхода для распознавания и работы с файловой системой. В процессе использования стандартного chroot Void Musl может не предоставлять полного доступа к необходимым блок-устройствам, так как они могут быть недоступны в стандартном chroot.
Применение:
Решение вашей проблемы связано с корректным использованием chroot в вашей конкретной ситуации. Void Musl предоставляет специальную утилиту xbps-uchroot, которая правильно обрабатывает доступ к блок-устройствам внутри chroot-среды. Использование этой утилиты вместо обычного chroot позволяет избежать проблем с определением путей и, соответственно, успешно генерировать конфигурацию Grub.
Почему это работает? xbps-uchroot корректно монтирует необходимые псевдофайловые системы, такие как /proc, /sys и /dev, и обеспечивает доступ к блок-устройствам, что позволяет GRUB корректно обнаруживать дисковые разделы и шифрованные тома.
Для устранения ошибки рекомендую следующее:
1. Убедитесь, что все необходимые разделы правильно примонтированы в /mnt.
2. Используйте команду xbps-uchroot, чтобы запустить chroot-среду, в которой GRUB будет правильно изучать файловую систему.
3. После входа в chroot выполните grub-mkconfig для генерации конфигурационного файла.
Таким образом, использование xbps-uchroot эффективно решает проблему, предоставляя GRUB доступ к блок-устройствам и корректно обрабатывая шифрованные файловые системы.