Задался вопросом - как отличить бут-сектор от мбр, и как выделить их их остальной массы секторов? Ну перво-наперво, понятное дело, 0x55 0xAA в конце, а вот дальше то что? Например, Runtime Disk Explorer каким то образом определяет, нормальный ли бут-сектор, или invalid, значит есть какие-то признаки все-таки... На сайте мелкософта попадался алгоритм определения типа FAT, может есть такое же и для мбр с бут-сектором?
MBR от бутсектора отличить просто по положению. MBR - физически самый первый сектор на харде, а bootsector - на разделе харда. Ну есть набор правил для полей бутсекторов различных файловых систем. Например, для FAT для поля BytesPerSector допустимы только значения 512, 1024, 2048 или 4096. Ну и так далее
Не, вот это не катит. Мне попадались флэш-карточки, на которых MBR отсутствовал, а первым сектором был сразу бутсектор. Т.е., один логический раздел на всю карточку и все, безо всяких partition table. Отсюда и встал вопрос, как понять, что же является первым сектором. Вообще, я на данный момент вижу три варианта: 1. Вначале идет MBR, за ним бут-сектор. 2. Вначале идет бут-сектор, MBR отсутствует. 3. вначале идет мусор, и вообще все плохо, диск битый или нестантартный. Надо грамотно обрабатывать все ситуации, в первых двух определять параметры носителя, а в третьем ругаться и не зависать. Я пробовал смотреть сигнатуру в конце, а потом анализировать смещения вначале сектора, но запутался. А насчет полей идея хорошая, приму к сведению.
Я что-то не видел жестких дисков без MBR, а карточки - это уже отдельная песня, на них действительно может не быть таблицы разделов afaik. Тут от типа носителя зависит. Ну это ты загнул, после MBR еще идет несколько свободных секторов (или даже десятков), потому что новый раздел обычно начинается с границы цилиндра.
Бегом читать расшифровку MBR. MBR- Main Boot Record. Главная загрузочная запись она находиться в нуливом секторе. Главная потому что ее первым делом загружают. А ни по каким либо еще признакам. Есть еще стандарт для резервной копии MBR.
Ну а я и не говорил, что речь о жестких дисках. Правильнее сказать, носитель с файловой системой FAT(12, 16, 32). Мне могут попадаться как жесткие диски, так и карточки, и усб-флэшки. Ну это я не в том смысле, что непосредственно за ним, а в том смысле, что на диске присутствуют и MBR, и boot-sector.
Не совсем тебя понял. Никто никого не загружает, просто втыкается флэшка, читается нулевой сектор этой флэшки. Все, в нем может быть как MBR, из которого нам нужен partition table, так и Boot-sector. Вопрос в том, как отличить, что именно находится в нулевом секторе. Пока мне нравится предложение насчет ограничения на поля структуры бут-сектора.
видимо, я недостаточно просветлен, дабы постичь смысл сей фразы. Буду медитировать и совершенствоваться.
r90, абсолютно согласен с тобой. Но ключевая фраза - разбиваемом на разделы. А ведь такого разбиения может и не быть. Пример: берем новую sd-карту, вскрываем упаковку, вставляем в ридер. Читаем нулевой сектор, проверяем 55 аа в конце, читаем таблицу разделов, находим первый и единственный раздел, читаем его бут-сектор, разбираем, и далее по обстоятельствам. все отлично работает. теперь берем эту же карточку, открываем в Runtime disk explorer.
делаем select all, fill. вся карта заполнена нулями теперь. щелкаем в проводнике по карте, говорим -форматировать. карта форматируется. теперь в нулевом секторе не mbr, а бут-сектор. в нем нет таблицы разделов, в нем сразу начинается раздел. и при попытке ее там найти возникает глюк. потому и вопрос - как отличить mbr от бут-сектора.
Поковырялся у себя в папках на винте, нашел покрывшуюся пылью библиотеку системного программиста, товарищей Фроловых. В частности, "MS-DOS для программиста" Том 19, часть 2, М.: Диалог-МИФИ, 1995, 253 стр. Глава 2. Логическая структура диска в MS-DOS. Приводятся форматы таблиц, их отличия в разных версиях и все такое. Если накопитель является хардом, то он может содержать несколько разделов, поэтому в первом секторе содержится MBR с их таблицей. Сменный носитель, аля дискета, содержит только один логический раздел, поэтому в первом секторе сразу содержится бут-сектор, таблица разделов тут не нужна. Я просмотрел по диагонали указанную доку, кажется, НМД от НГМД отличить можно по полям в структуре этой записи. Я понимаю, что дока датирована прошлым тысячелетием, но идеологии порой долго не меняются. Советую сделать дампы первых секторов разных накопителей, сравнить, собрать статистику, сделать выводы. И еще, сигнатура в последних двух байтах не единственный признак валидности инфы в этой секторе.
r90 Википедия это не источник достоверной информации. Главная загрузочная запись это та, которая первой грузиться. А то что в ней есть это уже дополнение. Фроловы. Как мы видим ни окаких разделах сдесь речь не идет. Дальше уже идет уточнение что у жосткого диска есть таблица разделов. На самом деле такая таблица может быть и у флешки и у диска и воовсе отстствовать. И вообще ее тип и ее наличие определяет операционная система или загрузочная программа. Собственно что вы и делаете путаете Master Boot Record и Boot Record. Boot Record болнее широкое понятие чем Master Boot Record. Но MBR всегда первая загрузочная запись если не первая значит не главная. Чтобы определить есть таблица разднлов или ее нет не достаточно определить мягкий диск жесткй, флешка. Таблица разделов может быть на любом насителе Наличие Partition Table проверять советую путем чтения ее и проверки ее полей, к примеру размеров на соответствие диску и проверка разделов на их тип. Также должен быть активный раздел который кодируется определенным символом.
Pavia Фроловы говорили не про флешку. Да-да. Но жёсткий диск у фроловых -- это DOS-compatible жёсткий диск. А без таблицы разделов он не-compatible. Собственно то, что уточнение было уточнением, говорит лишь о том, что фроловы не представляли себе жёсткого диска без таблицы разделов. Если это не убедило, то я готов убедиться сам, но при одном условии: ты приведёшь цитату из фроловых, где они загрузочный сектор дискеты называют главной загрузочной записью. Я путаю!? У меня огромнейший опыт заполнения всевозможных загрузочных записей разнообразными данными: начиная от стандартных загрузчиков (ms-dos, freedos, winnt, lilo, grub, syslinux, etherboot), продолжая загрузчиками самодельными и заканчивая содержимым /dev/urandom. У меня есть немалый опыт ковыряния в коде загрузчиков типа lilo/grub/syslinux. Есть некоторый опыт и ручного редактирования содержимого /dev/[fhs]d[a-d][1-9]. И весь этот опыт, сводит вероятность того, что путаю я практически к нулю.
Полагаю, это не так просто, как кажется. Да и ненужно. Возможно, я ошибаюсь, но активный раздел нужен для загрузки. Если же с девайса не предполагается грузиться, то и помечать какой-либо раздел как активный необязательно. Любопытно было бы проверить, завтра попробую (нет дисковода под рукой сейчас)