Как изменяется MBR между операционными системами?

#c #operating-system #mbr

#c #операционная система #mbr

Вопрос:

Как изменяется главная загрузочная запись (MBR)? Я не могу понять, существует ли MBR, специфичный для операционных систем на базе Linux, или у каждой операционной системы свой MBR? Как мне сравнить MBR операционных систем? И если я напишу его на C для Ubuntu, будет ли он работать и для других дистрибутивов?

Если MBR всегда является кроссплатформенным, означает ли это, что он будет работать как в Unix-подобных системах, так и, например, в Windows? И если нет, то в чем разница между MBR для Windows и MBR для Unix?

Комментарии:

1. Что вы имеете в виду под «как меняется MBR»? Я чувствую, что вы не понимаете, что такое MBR. Чтобы ОС могла загружаться с MBR-диска, она должна поддерживать MBR, как и все современные операционные системы. Должен сказать, что я совершенно сбит с толку вашим вопросом.

2. @bolov Да, я знаю, но мой вопрос в том, как MBR написан для конкретной операционной системы, и почему нет единого для всех операционных систем?

3. Ваш вопрос слишком расплывчатый, пожалуйста, добавьте тестовый пример, объясните, что именно вы пытаетесь сделать?

4. @DavidGidony Я обновил свой вопрос, посмотрите, пожалуйста

5. @bolov Я обновил свой вопрос, посмотрите, пожалуйста

Ответ №1:

В «идеалистической теории» для сценариев двойной загрузки MBR содержит «Менеджер загрузки», который выполняет такие действия, как определение того, какие разделы являются загрузочными, выбирает один (возможно, предлагая пользователю меню на выбор), загружает первый сектор выбранного раздела (загрузочный сектор выбранной операционной системы) и передает ему управление.

В этом случае MBR (и другой связанный с ним код на первой дорожке диска) принадлежит сторонней утилите, которая не принадлежит ни одной ОС; и ни одной ОС не должно быть разрешено касаться / изменять MBR (или любые другие данные, которые находятся до начала первого раздела).

Однако на практике часто люди устанавливают только одну ОС, и для удобства установщики ОС предоставляют свой собственный MBR (чтобы людям не нужно было беспокоиться об установке сторонней утилиты); и почти у каждой ОС есть неприятные / эгоистичные тенденции «мы заботимся только о себе и / или хотим контролировать любую другую ОС, которую вы устанавливаете». Это привело к тому, что операционные системы игнорировали здравый смысл и уничтожали друг друга и / или предоставляли свои собственные «антиконкурентные» альтернативы для сценариев с двойной загрузкой (GRUB и «boot.ini» в Windows).

Эта неприятная ерунда стала значительно хуже (для пользователей), когда производители / прошивки начали заботиться о безопасности. План состоял в том, чтобы весь код, используемый во время загрузки (включая встроенное ПО, MBR и загрузчик операционной системы), был «измерен» (контрольная сумма с использованием сложной криптографии, встроенной в чип TPM), чтобы ОС (и другое программное обеспечение — например, «удаленная аттестация») могла обнаружить, что вредоносное ПО подделало какой-либо код, от которого зависела операционная система (потому что эта «сложная контрольная сумма» была бы другой).

Это означает, что если вы устанавливаете вторую ОС (повреждая / модифицируя MBR существующей ОС), вы изменяете эту «необычную контрольную сумму» и нарушаете идентификацию исходной операционной системы, поэтому после устранения повреждения и повторной загрузки исходной ОС различные другие вещи (которые зависели от «необычной контрольной суммы») остаются неисправными.

К счастью, UEFI в основном исправил это, взяв на себя роль «менеджера загрузки» (и полностью отказавшись от MBR), где (если установлено несколько операционных систем) прошивка использует «переменные UEFI», чтобы определить, какая из них загружается, и каждая операционная система может иметь свои собственные загрузчики в системном разделе UEFI без конфликтов.

К сожалению, неприятные / эгоистичные тенденции «мы заботимся только о себе и хотим все контролировать» сохраняются, и операционные системы пытаются найти альтернативные способы все испортить (управление ключами безопасной загрузки, использование GRUB в качестве прокладки, чтобы разные операционные системы могли бороться за контроль над конфигурацией GRUB и т.д.).

Как изменяется главная загрузочная запись (MBR)?

MBR не изменяется, пока вы не установите ОС. Когда вы устанавливаете ОС, MBR может меняться или не меняться в зависимости от установщика ОС и (в некоторых случаях) того, что вы говорите установщику ОС делать.

Я не могу понять, существует ли MBR, специфичный для операционных систем на базе Linux, или у каждой операционной системы свой MBR?

Linux (ядро) определяет «протокол загрузки Linux», который позволяет любому пользователю написать совместимый загрузчик. Для загрузки из BIOS; было 3 распространенных загрузчика (LILO, GRUB и SYSLINUX); но большинство операционных систем на базе Linux тяготели к GRUB, и большинство установщиков ОС для операционных систем на базе Linux, как правило, устанавливали GRUB в MBR как «менеджер загрузки плюс загрузчик».

Я хочу знать, всегда ли MBR является кроссплатформенным, означает ли это, что он будет работать как в Unix-подобных системах, так и, например, в Windows. И если нет, я хочу знать, в чем разница между MBR для Windows и MBR для Unix.

К сожалению, нет — MBR должен быть «нейтральным к ОС / кроссплатформенным» (и может быть в некоторых случаях — например, если пользователь не возражает против установки LILO или GRUB в свой собственный раздел и если установщик ОС поддерживает это), но в основном это не так. Если вы хотите написать свой собственный MBR, то вам, вероятно, придется иметь дело с неспособностью конкретной операционной системы взаимодействовать с другими операционными системами.