`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.