`install-grub` стверджує, що у мене є кілька міток partiton, і що вставити неможливо


19

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

Я завантажився за допомогою живого USB і спробував перевстановити GRUB за допомогою наступних команд, але зіткнувся з помилкою, яка заважає йому працювати:

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda
Встановлення для i386-ПК платформи.
grub-install: попередження: Спроба встановити GRUB на диск з декількома мітками розділів. Це ще не підтримується.
grub-install: попередження: Вставлення неможливо. GRUB можна встановити лише в цій програмі за допомогою списків блоків. Однак, блокові списки НЕ ПРАВИЛЬНІ, і їх використання не перешкоджає ..
grub-install: error: не буде продовжуватись із блокових списків.

Однак, /dev/sdaздається, відформатовано правильно для встановлення grub:

$ sudo fdisk -l / dev / sda

Диск / dev / sda: 111,8 GiB, 120034123776 байт, 234441648 сектори
Одиниці: сектори 1 * 512 = 512 байт
Розмір сектора (логічний / фізичний): 512 байт / 512 байт
Розмір вводу / виводу (мінімальний / оптимальний): 512 байт / 512 байт
Тип Disklabel: dos
Ідентифікатор диска: 0x8d91017b

Запуск завантажувача пристрою Кінці секторів Розмір Id Тип
/ 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для відновлення конфігураційного файлу:

$ for f in 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
зроблено

Як я можу правильно встановити грубку?

Відповіді:


25

Уникніть розрив між завантажувальним сектором та першим розділом.

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

Це так, якщо перший розділ починається в секторі 2048. Деякі починаються раніше, особливо на дисках, які були розділені Windows. Щоб бути впевненим, бігайте

# fdisk -l /dev/sdX

перед запуском і перевірте, звідки починається перший розділ. Використовуйте count=S-1, де S - початок першого розділу.


Це працювало для мене. Я намагаюся використовувати BTRFS разом з окремим розділом ext4 / boot. Спасибі.
— Фалес Сеолін

Зауважте, що це скине макет GPT. Однак можна відновити після його резервного копіювання.
— CR.

якщо ви використовуєте GPT, тоді вам потрібно витерти розділ BIOS BOOT. Де це залежить від того, як ви виклали свій диск. Я ставлю шахту після GPT, між блоком 34 та 2047, припускаючи, що перший "реальний" розділ починається з блоку 2048. Змінення даного командного рядка для використання seek=34 count=2014працює для мене.
— starfry

працює чудово !!!! grub повинен зробити це автоматично
— brauliobo

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 зараз слід працювати, як очікувалося.


Будь ласка , змініть свій відповідь , щоб виправдати те , що робить цей код, і чому ви вважаєте , що це повинно бути рішенням.
— Мартін Торнтон

Працювали для мене. Відредагував це для наочності
— Nitz

3

У мене була подібна проблема з декількома мітками розділів, хоча я впевнений, що це не так.

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

це те, що я використовував, щоб обійти це. Приєднання до а --forceне є "рекомендованим" рішенням, але у мене до цього часу не виникало проблем = P


1

Ось, що я зробив, щоб він знову працював:

Використовується gdiskдля перетворення розділу MBR в GPT, вставляє розділ у порожній простір (введіть EF02 "BIOS Boot partition"), переніс його запис з моїм оригінальним розділом і позначив його як застарілий завантажувальний BIOS.

Потім побіг

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

Потім він успішно встановився, і я зміг завантажитися на основний диск.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.