`install-grub` утверждает, что у меня несколько меток разделов, и что встраивание невозможно

19

Я пытаюсь установить GRUB на своем настольном компьютере без загрузки, но я сталкиваюсь с несколькими ошибками. Другие источники, обсуждающие эти ошибки, связывают их либо с недостатком свободного места на диске перед первым разделом (у меня есть необходимое свободное место), либо с проблемой /boot/grub/grub.cfg(проблема сохраняется даже после правильной регенерации этого файла).

Я загрузился с живого USB и попытался переустановить GRUB, используя следующие команды, но я сталкиваюсь с ошибкой, которая мешает его работе:

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda
Установка для платформы i386-pc.
grub-install: warning: Попытка установить GRUB на диск с несколькими метками разделов. Это еще не поддерживается ..
grub-install: предупреждение: встраивание невозможно. GRUB может быть установлен только в этой настройке с помощью списков заблокированных. Тем не менее, списки блоков являются ненадежными, и их использование не рекомендуется ..
grub-install: error: не будет работать с блочными списками.

Тем не менее, /dev/sdaкажется, правильно отформатирован для установки grub:

$ sudo fdisk -l / dev / sda

Диск / dev / sda: 111,8 ГБ, 120034123776 байт, 234441648 секторов
Единицы: секторы 1 * 512 = 512 байт
Размер сектора (логический / физический): 512 байт / 512 байт
Размер ввода / вывода (минимальный / оптимальный): 512 байт / 512 байт
Тип метки диска: DOS
Идентификатор диска: 0x8d91017b

Тип начальной загрузки конца загрузочного сектора устройства Тип идентификатора
/ dev / sda1 * 2048 234440703 234438656 111,8G 83 Linux

$ blkid / dev / sda1
/ dev / sda1: UUID = "84e9ff65-c4ba-42eb-8a6d-ebc703fae1f7" TYPE = "ext4" PARTUUID = "8d91017b-01"

В начале он имеет стандартное свободное пространство 1 МБ и /dev/sda1правильно отформатирован. Я попытался с помощью grub-mkconfigвосстановить файл конфигурации:

$ для f в proc sys dev dev / pts; do sudo mount --bind / $ f / mnt / $ f; сделано
$ sudo chroot / mnt
# grub-mkconfig -o /boot/grub/grub.cfg
Создание файла конфигурации grub ...
Найденное изображение linux: /boot/vmlinuz-3.19.0-26-generic
Найденное изображение initrd: /boot/initrd.img-3.19.0-26-generic
Найденное изображение linux: /boot/vmlinuz-3.19.0-23-generic
Найденное изображение initrd: /boot/initrd.img-3.19.0-23-generic
Добавление пункта меню загрузки для конфигурации прошивки EFI
сделано

Тем не менее, я по-прежнему получаю одно и то же сообщение об ошибке при работе grub-install, будь то в chrootсреде или вне ее .

При загрузке живого USB в устаревшем режиме я получаю ту же ошибку; единственное отличие - это результат работы grub-mkconfigв chrootсреде:

# grub-mkconfig -o /boot/grub/grub.cfg
Создание файла конфигурации grub ...
Найденное изображение linux: /boot/vmlinuz-3.19.0-26-generic
Найденное изображение initrd: /boot/initrd.img-3.19.0-26-generic
Найденное изображение linux: /boot/vmlinuz-3.19.0-23-generic
Найденное изображение initrd: /boot/initrd.img-3.19.0-23-generic
Найдено memtest86 + изображение: /boot/memtest86+.elf
Найдено memtest86 + изображение: /boot/memtest86+.bin
Нашел Windows 7 (загрузчик) на / dev / sdc1
сделано

Как правильно установить grub?

AJMansfield
источник

Ответы:

25

Сбросьте разрыв между загрузочным сектором и первым разделом.

# dd if=/dev/zero of=/dev/sdX seek=1 count=2047

Это если первый раздел начинается в секторе 2048. Некоторые запускаются раньше, особенно на дисках, которые были разделены Windows. Чтобы быть уверенным, запустить

# fdisk -l /dev/sdX

перед началом и проверьте, где начинается первый раздел. Используйте count=S-1, где S - начало первого раздела.

enigmaticPhysicist
источник
Это сработало для меня. Я пытаюсь использовать BTRFS вдоль отдельного раздела ext4 / boot. Благодарю.
Фалес Цеолин
Обратите внимание, что это уничтожит макет GPT. Можно восстановить из его резервной копии, хотя.
кр.
Если вы используете GPT, вам нужно стереть BIOS BOOT PARTITION. Где это зависит от того, как вы выложили свой диск. Я поставил мой после GPT, между блоком 34 и 2047, предполагая, что первый «реальный» раздел начинается в блоке 2048. Изменение данной командной строки для использования seek=34 count=2014работает для меня.
звездный день
работает отлично !!!! Граб должен делать это автоматически, хотя
Браулиобо
1
Да, вы бы так подумали, @brauliobo, но GRUB - это полный мусор. Я даже не использую это больше. В настоящее время я использую syslinux для mbr и systemd-boot для gpt.
загадочный
3

Можно создать новый раздел, где находится запись GPT, а затем стереть его, используя dd. Таким образом, останется только запись MBR.

Предполагая, что проблемное устройство /dev/sda:

Создайте новый раздел в начальной 1 МиБ

$ parted /dev/sda
$ mkpart primary ext4 0MiB 1MiB
$ quit

Затем обнулите только что созданный раздел

$ dd if=/dev/zero of=/dev/sda2

Затем удалите раздел

$ parted /dev/sda
$ rm 2
$ quit

grub-install теперь должен работать как положено.

Swaroop
источник
Пожалуйста, отредактируйте свой ответ, чтобы обосновать, что делает этот код и почему вы считаете его решением.
Мартин Торнтон
Работал на меня. Отредактировал это для ясности
Nitz
3

У меня была похожая проблема с несколькими метками разделов, хотя я совершенно уверен, что это не так.

sudo grub-install target=i386-pc /dev/sda --force

это то, что я использовал, чтобы обойти это. Захват --forceне является "рекомендуемым" решением, но у меня до сих пор не было проблем = P

krum85
источник
1

Вот что я сделал, чтобы это снова заработало:

Используется gdiskдля преобразования раздела MBR в GPT, вставки раздела в пустое пространство (тип EF02 «Раздел загрузки BIOS»), транспонирования его записи в мой исходный раздел и пометки его как устаревшего загрузочного BIOS.

Потом побежал

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda

Затем он успешно установлен, и я смог загрузиться с основного диска.

AJMansfield
источник