Не удается установить grub на USB – предупреждение grub-install: Файловая система ext2 не поддерживает встраивание.

Вопрос или проблема

Я пытаюсь установить GRUB на USB исключительно для того, чтобы поэкспериментировать с фиктивным меню загрузки на своем ноутбуке.

То есть эта установка GRUB не должна ссылаться на какие-либо рабочие файлы ядра/initrd или мою текущую ОС.

Я использую (GRUB) 2.06

Проблема в том, что я постоянно получаю ошибку grub ext2, несмотря на использование файловой системы ext4.

sudo dd if=/dev/zero of=/dev/sda bs=1024k 

sudo mkfs.ext4 /dev/sda

mkdr /mnt/usb

sudo mount /dev/sda /mnt/usb

sudo grub-install --target=i386-pc --boot-directory=/mnt/usb /dev/sda

Выдает ошибку

Installing for i386-pc platform.
grub-install: warning: File system `ext2` doesnt support embedding
grub-install: warning: Embedding is not possible. Grub can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.
grub-install: error: will not proceed with blocklists.

Как можно это решить? Я попытался сделать это более 5 раз, и ошибка сохраняется.

Может ли это быть связано с тем, что моя текущая конфигурация /etc/default/grub мешает установке grub-install?

Я не хочу, чтобы моя текущая Linux ОС каким-либо образом влияла на установку grub-install, кроме того факта, что я ее использую для установки…

Ошибка возникает, потому что GRUB нуждается в пространстве после MBR для своего основного образа, которое недоступно при использовании файловых систем ext2/3/4 непосредственно на сыром устройстве (без раздела). Вот как это исправить:

Шаг за шагом:

  1. Создайте таблицу разделов (вместо использования сырого устройства):

sudo parted /dev/sda mklabel msdos sudo parted /dev/sda mkpart primary ext4 1MiB 100% sudo parted /dev/sda set 1 bios_grub on # Создает раздел загрузки BIOS sudo partprobe /dev/sda

  1. Отформатируйте раздел (а не весь диск):

sudo mkfs.ext4 /dev/sda1

  1. Смонтируйте раздел:

    sudo mkdir /mnt/usb sudo mount /dev/sda1 /mnt/usb

  2. Установите GRUB с явными флагами:

    sudo grub-install \ --target=i386-pc \ --boot-directory=/mnt/usb/boot \ --no-nvram \ # Предотвращает взаимодействие с NVRAM вашей основной ОС --force \ # Игнорирует предупреждения о блоклистах /dev/sda # Установить на устройство (не на раздел)

Ключевые исправления:

  • Флаг bios_grub создает выделенное пространство для основного образа GRUB.
  • Использование раздела (/dev/sda1) вместо сырого устройства (/dev/sda).
  • --no-nvram гарантирует, что конфигурация загрузки вашей хостовой ОС останется незатронутой.

После установки:

Теперь вы можете создать фиктивный grub.cfg в /mnt/usb/boot/grub/grub.cfg с тестовыми элементами меню. Эта настройка не повлияет на вашу существующую ОС.

Ответ или решение

Установка загрузчика GRUB на USB для тестирования меню загрузки может оказаться проблематичной, особенно когда возникает ошибка "File system ext2 doesn’t support embedding". Подобная ошибка связана с архитектурой установки GRUB и файловыми системами, которые вы используете для вашего устройства. Остановимся подробно на решении данной проблемы, следуя методике TEA (Theory, Example, Application).

Теория (Theory)

GRUB, или Grand Unified Bootloader, служит загрузчиком операционных систем, предоставляя пользователю возможность выбирать ОС для загрузки при старте системы. Когда GRUB устанавливается на устройство, ему требуется пространство для размещения его основных компонентов, таких как загрузчик второго уровня. Этот компонент обычно располагается в начале диска, после главной загрузочной записи (MBR) и перед началом раздела, поскольку в этом месте не занятые системой блоки могут быть использованы под это пространство.

Когда вы пытаетесь установить GRUB на устройство без использования разделов (на "сырой" диск), может возникнуть проблема с отсутствием достаточного неразмеченного пространства, необходимого для встраивания (embedding) компонентов GRUB. Ошибка "File system ext2 doesn’t support embedding" указывает на то, что используемая вами файловая система (в данном случае попробованная ext4) создана без правильного раздела, что не оставляет место для загрузчика второго уровня.

Пример (Example)

Рассмотрим страницу с примером установки, которая вызывает ошибку:

  1. Очистка и форматирование устройства:

    sudo dd if=/dev/zero of=/dev/sda bs=1024k
    sudo mkfs.ext4 /dev/sda

    Здесь создаётся единое файловое пространство, которое занимает все устройство. GRUB не может встроиться должным образом в такую разметку.

  2. Монтаж и установка GRUB:

    mkdr /mnt/usb
    sudo mount /dev/sda /mnt/usb
    sudo grub-install --target=i386-pc --boot-directory=/mnt/usb /dev/sda

    На этом этапе система пытается установить GRUB на устройство, но не находит достаточного свободного пространства для встраивания.

Применение (Application)

Для успешной установки GRUB на USB с правильной структурой необходимо создать и использовать таблицу разделов, которая обеспечит необходимое пространство для GRUB:

  1. Создание таблицы разделов:

    • Начните с создания новой таблицы разделов msdos:

      sudo parted /dev/sda mklabel msdos
    • Создайте основной раздел, оставляя место для GRUB:

      sudo parted /dev/sda mkpart primary ext4 1MiB 100%
    • Установите флаг bios_grub на созданный раздел, чтобы зарезервировать пространство для GRUB:

      sudo parted /dev/sda set 1 bios_grub on
    • Обновите таблицу разделов:

      sudo partprobe /dev/sda
  2. Форматирование раздела и монтирование:

    sudo mkfs.ext4 /dev/sda1
    sudo mkdir /mnt/usb
    sudo mount /dev/sda1 /mnt/usb
  3. Установка GRUB:

    sudo grub-install --target=i386-pc --boot-directory=/mnt/usb/boot --no-nvram --force /dev/sda
    • Здесь важно отдельно указать корневую директорию загрузочных файлов (--boot-directory=/mnt/usb/boot) и использовать параметр --force для принудительного игнорирования предупреждений о блочных списках.

Вывод

Следуя вышеописанному методу, вы решаете проблему с установкой GRUB на USB, создавая правильную структуру разделов, которая позволяет GRUB правильно встраивать свои базовые компоненты. После успешной установки вы сможете создать и настроить файл grub.cfg в директории /mnt/usb/boot/grub/, чтобы тестировать загрузочные меню без влияния на основную операционную систему, установленную на ноутбуке.

Оцените материал
Добавить комментарий

Капча загружается...