Grub: установить только части MBR, а не загрузочный каталог?

mplayerможет воспроизводить файлы wavи mp3, и вы можете интерактивно изменять скорость с помощью клавиш [и ], хотя файлы wav не могут воспроизводиться медленнее, чем их исходная скорость. vlcможет делать то же самое и замедлять файлы wav. Чем выше скорость, тем выше частота.

0
17.09.2019, 01:46
1 ответ

Когда GRUB загружается из MBR, количество шагов совместимости с устаревшим BIOS, которое необходимо выполнить в начале процесса загрузки, означает, что код, фактически находящийся в MBR, способен загрузить только один блок диска чей номер LBA вставлен в код MBR во время установки. Этот блок обычно является первым блоком основного образа GRUB . Он содержит код для загрузки большего количества блоков и список номеров блоков, который определяет, где находится остальная часть основного образа GRUB.

На диске с разделами MBR -обычно есть неиспользуемое пространство между MBR и началом первого раздела. В MS -DOS первоначальное соглашение состояло в том, чтобы начинать первый раздел в начале следующей дорожки диска, что обычно означает, что перед первым разделом будет не менее 63 дисковых блоков, включая MBR. В современных системах первый раздел MBR теперь чаще размещается так, чтобы он начинался точно с 1 МБ от начала диска, то есть с блока #2048, чтобы оптимизировать выравнивание данных для дисков, твердотельных накопителей и систем хранения SAN, которые могут внутренне использовать размер блока больше 512 байт.

Итак, на диске с разделами MBR -начало диска обычно устроено так:

  • блок #0 :MBR
  • блок #1 :первый блок основного образа GRUB, содержит список блоков
  • блоков #2... #n :остальная часть основного образа GRUB
  • блок #2048 :начало первого раздела.

Обратите внимание, что загрузка основного образа GRUB работает исключительно с предварительно -определенными номерами блоков :до тех пор, пока основной образ GRUB не будет полностью загружен и извлечен, GRUB не будет знать о таблицах разделов или файловых системах любого типа.

На диске с разделами GPT -блоки сразу после блока #0 заняты таблицей разделов GPT,поэтому образ ядра GRUB вместо этого встроен в «загрузочный раздел BIOS». Это просто означает, что номер блока, встроенного в MBR, будет не 1, а вместо этого будет смещен номер первого блока загрузочного раздела BIOS, а остальные блоки, принадлежащие основному образу, будут сдвинуты аналогичным образом. Таким образом, на диске с разделами GPT -с GRUB в стиле BIOS -физическая структура будет примерно такой, если предположить, что загрузочный раздел BIOS является первым на диске:

  • блок #0 :Защитная MBR GPT со встроенным кодом MBR GRUB
  • блоков #1... #(x -1 ):фактическая таблица разделов GPT
  • блок #x :первый блок загрузочного раздела BIOS, содержит первый блок образа ядра GRUB со списком блоков
  • блоки #(x+1 )... #(x+n ):остальная часть основного образа GRUB

Тот факт, что вы все еще можете перейти в режим восстановления GRUB, указывает на то, что хотя вы сказали, что удалили загрузочный раздел BIOS, вы еще не перезаписали его блоки; хотя пространство, занимаемое загрузочным разделом BIOS, теперь может быть нераспределенным пространством между разделами или неиспользованным пространством в другом разделе с измененным размером, оно все еще имеет свое старое содержимое, и GRUB все еще может загружать эти блоки и находить его основной образ. Но теперь ничто конкретно не защищает эти блоки от перезаписи :, как только это произойдет по какой-либо причине, образ ядра GRUB будет уничтожен, и GRUB не сможет добраться даже до режима восстановления.

Содержимое основного образа GRUB

Основной образ GRUB содержит несколько вещей:

  • ядро ​​GRUB :это единственная часть, технически необходимая для перехода в режим спасения GRUB.
  • встроенный начальный корневой путь GRUB, чтобы указать, какой диск, раздел и каталог внутри него содержат файл конфигурации GRUB и каталог модулей GRUB. В Linux,обычно они отображаются как /boot/grub/grub.cfgи /boot/grub/i386-pcсоответственно, когда система Linux работает нормально.
  • набор встроенных модулей GRUB, содержащий как минимум код для чтения и понимания таблицы разделов и типа файловой системы, используемого в разделе, указанном в начальном корневом пути GRUB. Поскольку образ ядра может занимать менее 63 дисковых блоков, этот набор модулей в системах MBR обычно поддерживается минимальным.
  • необязательно, встроенный файл конфигурации GRUB с одной или несколькими командами GRUB
  • опционально встроенный образ диска, подобный тем, которые используются инструментом memdiskсемейства загрузчиков SYSLINUX
  • необязательно, открытый ключ GPG, используемый для подписи других модулей GRUB и ядра ОС в целях безопасности (и для удовлетворения требований безопасной загрузки в версиях GRUB с UEFI)

Все это сжато LZMA, чтобы минимизировать его размер, поэтому его нельзя легко прочитать или изменить вручную.

Поскольку теперь вы переходите в режим восстановления и не можете перечислить свои разделы, это указывает на то, что основной образ GRUB содержит модуль разметки для GPT (part_gpt.mod), но не для MBR(part_msdos.mod). Без модуля разбиения MBR он не может получить доступ к разделу, содержащему каталог /boot/grub/i386-pc, даже если основной образ GRUB будет содержать применимый к нему модуль драйвера файловой системы... и поэтому GRUB не может загрузить normal.mod, что позволит вам продолжить спасательный режим.

Что теперь делать?

  • Возможно, потребуется перезаписать образ ядра GRUB в безопасное место, возможно, в пространство между MBR и началом первого раздела, которое ранее было занято структурами таблицы разделов GPT. Поскольку загрузочный раздел BIOS был удален, текущее расположение небезопасно :, оно может быть перераспределено на другой раздел и в будущем будет перезаписано без предупреждения.
  • при переписывании основного образа GRUB,встроенный в него модуль разметки GPT необходимо заменить модулем разметки MBR. Поскольку предполагается, что все компоненты находятся под рукой в ​​несжатом виде (в /usr/lib/grub/i386-pcили подобном каталоге ), самый простой способ сделать это — просто взять все подходящие несжатые компоненты, собрать из них новый образ ядра. и сжать его. Распаковывать старый и модифицировать его просто не стоит :зачем писать еще один фрагмент кода, если повторное использование кода, используемого при первоначальной установке GRUB с нуля, работает отлично?
  • Поскольку расположение основного образа GRUB, скорее всего, изменится, код MBR также необходимо переписать.
  • Команда grub-installдолжна каким-то образом убедиться, что normal.modи другие модули GRUB, расположенные в /boot/grub/i386-pc, имеют ту же версию, что и новый основной образ GRUB. Конечно, он может сравнить существующие файлы с набором файлов, которые он использовал для перестроения основного образа, но опять же... зачем писать и отлаживать код для другого особого случая, если просто перезаписать существующее содержимое /boot/grub/i386-pcуже -] существующая процедура установки GRUB работает нормально?

Общий несжатый размер всех i386-pcкомпонентов GRUB определенно меньше 4 МБ. Это ничего. Попытка избежать перезаписи этого, если он уже существует, просто не стоит проблем, если только вы не работаете с чем-то особенным, например, со старыми твердотельными накопителями PATA первого поколения -с очень ограниченным количеством доступных циклов записи.

Как это будет делать собственный UEFI?

Поскольку прошивка UEFI включает в себя стандартную поддержку файловой системы FAT32, собственную версию UEFI загрузчика GRUB можно упаковать в виде одного grubx64.efiфайла, содержащего все необходимые модули, включая normal.mod, если хотите. Он загружается как обычный файл :, не нужно возиться с номерами блоков или встроенным кодом в фиксированных местах на диске.

3
28.01.2020, 02:39

Теги

Похожие вопросы