2

Я работаю над встроенным проектом. Мне нужно место для хранения некоторой независимой от файловой системы мета-информации на устройстве хранения. Устройство имеет таблицу разделов MSDOS. Устройство также может иметь нераспределенное пространство (в зависимости от его размера), но оно будет TRIMmed (а также может быть снесено новыми разделами в будущем).

Мне нужно местоположение на устройстве, которое не является нераспределенным и имеет низкий риск прикосновения (за исключением полного стирания устройства). Устройство гарантированно имеет MBR только в тот момент, когда метаданные должны быть сначала записаны; Это означает, что я не могу использовать EBR /VBR.

В самом начале устройства доступно 446 байт для кода начальной загрузки MBR. В настоящее время моя единственная идея - хранить данные в конце этого блока. Тем не менее, устройство является загрузочным, и у меня нет возможности узнать, скину ли я загрузочный код или нет.

Размер сектора составляет 512 байт , а MBR является первым сектором, я уверен , что (поправьте меня , если я ошибаюсь) , что это означает , что второй сектор доступен для использования данных раздела, поэтому я не могу использовать , что либо ,

У кого-нибудь есть идеи? Мне нужно 4 байта пространства.

3 ответа3

3

MBR содержит таблицу разделов, а также загрузочный код

Загрузочный код: 446 байт. Первичные разделы: 64 байт. Sig: 2 байт.

Будет ли хранилище использоваться для загрузки? возможно, стоит подумать о "повреждении" загрузочного кода в MBR для хранения этих метаданных. Загрузочный код действительно используется только во время загрузки

1

Windows NT использует 32-битную сигнатуру диска для идентификации отдельных разделенных на MBR дисков и сохраняет ее в виде шести байтов, начиная с 440 [01B8h] (четыре байта, содержащие сигнатуру, и два нулевых байта). Это оставляет 440 байтов для кода начальной загрузки.

Подпись диска была впервые введена в Windows NT 4 (и стала обязательной для MBR-дисков, начиная с Windows Vista). С тех пор также используется аналогично "UUID диска" GPT в системах, отличных от Windows (Linux и GRUB поддерживают его).

Из-за этого многие загрузчики ограничивают свой загрузочный код в MBR 440 байтами, чтобы избежать перезаписи подписи диска. (Я только что проверил, что и GRUB, и Syslinux делают.)

Существует большая вероятность того, что используемый вашим устройством загрузчик также не затрагивает сигнатуру диска. Проверьте, равны ли два байта, начинающиеся с 444 [01BCh], 00 00 - если они есть, то остальные четыре, вероятно, останутся неизменными, если не будет удалена вся таблица разделов или если не установлен новый код начальной загрузки размером более 440 байтов.

1

Единственный действительно безопасный способ хранения ваших данных - это отдельный раздел. Учитывая ваши потребности, раздел может быть крошечным (один сектор). Хранение данных вне раздела может привести к переполнению или перезаписи ваших данных чем-то важным. Учитывая, что это всего четыре байта, взятие серийного номера таблицы разделов, как предполагает grawity, возможно, является самым безопасным из вариантов вне раздела, но я бы не рекомендовал это, особенно без дополнительного контекста, потому что серийный номер используются некоторыми инструментами, поэтому принимать его в течение предположительно может вызвать проблемы , если вы полагаетесь на то , что использует серийный номер.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .