Info Guide
#07
31 мая 2005 |
|
Ликбез - Расположение разделов на винчестере.
Расположение разделов на винчестере ZET-9 12.03.2005 Last edit 22.05.2005 Информация получена опытным путем и ча─ стично из книг по MS-DOS. Касается стандартных пц-винтов,т.е.вин─ тов,разделы на которых создавались на пц с помощью программ fdisk, Partition magic и подобных им. Лирическое отступление Стандартное создание разделов на пц программой fdisk. fdisk.exe - это стандартная программа, она есть на загрузочной дискете MS-DOS. После работы этой программы на винте ВСЯ ИНФОРМАЦИЯ БУДЕТ УНИЧТОЖЕНА! 1) Создаём основной раздел (он называет─ ся "первый"). Если он будет единственным, отводим под него весь винт. Если нужны ещё разделы, то отводим под него часть винта - например, 20%. В программе fdisk можно создать только один основной раздел. Поэтому, если нужны ещё разделы, переходим к созданию дополни─ тельных. 2) Создаём дополнительный раздел - под него обычно отводится вся оставшаяся часть винта. Теперь начинаем создавать ещё разделы - они будут созданы как бы внутри дополните─ льного раздела. В программе fdisk они на─ зываются логическими дисками. 3) Создаём логические диски в любом ко─ личестве (по одному), главное,чтобы их об─ щий объём не превышал объём дополнительно─ го раздела (программа всё равно это не по─ зволит сделать). В итоге получаем на винте один основной раздел и несколько дополнительных разде─ лов. С помощью программы Partition Magic мо─ жно делать много всякого, при этом в неко─ торых случаях инфа на винте остаётся - это главное отличие её от fdisk. И ещё одно отличие: можно создать несколько основных разделов - максимум 4 (если не создавать дополнительных разделов),или на уже сущес─ твующем винте (на котором есть 1 основной раздел и несколько дополнительных) создать ещё 2 основных раздела (например, за счёт уменьшения длины первого основного разде─ ла) - тогда на винте будет 3 основных и несколько дополнительных разделов. Основные разделы Самый первый сектор на винте - это MBR (главная загрузочная запись - Master Boot Record ). В самом начале сектора может быть ка─ който пц-шный загрузчик длиной #01BE байт. По смещению #01BE от начала этого (пер─ вого) сектора располагается таблица разде─ лов длиной 64 байта. Последние 2 байта в секторе - #55,#AA. Если их нет,значит,этот винт "нестандартный" (для пц), и определи─ ть,какие есть разделы на винте,скорее все─ го, не получится, но можно попробовать. Таблица разделов Её длина 64 байта.Всего в ней отводятся записи для четырех разделов.На каждый раз─ дел - по 16 байт. Запись содержит в себе несколько полей с данными. Смещение Длина Название поля от начала поля, таблицы байт 0 1 Признак активности раздела - флаг. ;Принимает значения 0 (неактивный) или #80 (активный).Активным может быть только один из разделов. BIOS на пц будет производить загрузку кода из этого раздела. 1 3 Начало раздела в формате CHS. ;Эти 3 байта содержат значения для регист─ ров цилиндра,головки и сектора (Cyl, Head, Sec - сокращенно CHS),которые надо заслать на винт для чтения первого сектора этого раздела: - 1-й байт - это номер головки (использу─ ется 4 младших бита); - 2-й байт: младшие 6 бит - номер сектора; биты 6, 7 - это биты 8, 9 номера цилиндра для регистров цилиндра (они соответствуют битам 0, 1 в регистре Cylinder Hi ); - 3-й байт - это биты 0..7 номера цилинд─ ра для регистров цилиндра (этот байт зано─ сится в регистр Cylinder Low ). Смещение Длина Название поля от начала поля, таблицы байт 4 1 Системный байт. ;Байт указывает на тип раздела. Значения: 0 - необычный раздел; 1 - первичный раздел DOS(FAT12)(основной) размером 0..15 Мбайт; 4 - первичный раздел DOS(FAT16)(основной) размером 16..32 Мбайт; 5 - расширенный разд.DOS (дополнительный) размером 0..2 Гбайт; 6 - "огромный" разд.DOS(>32Мb) (основной) размером 32 Мбайт..2 Гбайт (FAT16); #0B - основной (FAT32), размер 512 Мбайт..2 Терабайта (это значение использовалось в OS/2); #0C - основной (FAT32), размер 512 Мбайт..2 Терабайта (это значение используется сейчас во всех Windows для больших винтов); #0E - основной (FAT16),размер 32 Мб..2Г; #0F - расширенный (дополнительный),0..2Г; #83 - так обозначается основной раздел при разбивке винта в системе Linux; #85 - так обозначается раздел для свопа при разбивке винта в системе Linux. Смещение Длина Название поля от начала поля, таблицы байт 5 3 Конец раздела в формате CHS. ;Эти 3 байта значения для регистров голов─ ки, сектора и цилиндра указывают на конец раздела: - 1-й байт - это номер головки (использу─ ется 4 младших бита); - 2-й байт: младшие 6 бит - номер сектора; биты 6, 7 - это биты 8, 9 номера цилиндра для регистров цилиндра (они соответствуют битам 0, 1 в регистре Cylinder Hi ); - 3-й байт - это биты 0..7 номера цилинд─ ра для регистров цилиндра (этот байт зано─ сится в регистр Cilinder Low ). Смещение Длина Название поля от начала поля, таблицы байт 8 4 Число секторов до начала раздела. ;Число секторов по 512 байт, которое надо пропустить до начала этого раздела.Это по─ ле используется в режиме LBA вместо знач-й из поля "начало раздела в формате CHS". Фактически это номер блока в режиме LBA- адресации (блоки нумеруются от нуля). 12 4 Количество секторов в данном разделе. ;Длина раздела в секторах по 512 байт. Вот такие 16 байт в каждой записи для каждого из существующих разделов. Разделы можно определять по системному байту: если он равен 0 - значит, раздела нет; если он равен 5 - значит,это дополни─ тельный раздел; другое значение - основной раздел. По координатам начала раздела (CHS или LBA) нужно загрузить сектор - это первый сектор раздела, называется он Boot Record (загрузочная запись) или Boot Sector (заг─ рузочный сектор). Формат Boot-сектора рас─ смотрен в конце статьи. Дополнительные разделы Для работы с дополнительными разделами необходимо: 1) В MBR,в таблице разделов найти раздел со значением системного байта, равным 5 (или #0C, или #0F ) - это байт по смещению 4 от начала записи об этом разделе; 2) Взять информацию о начале раздела из поля "начало раздела" (в формате CHS или LBA). Эта информация для дополнительного раздела указывает не на начало дополните─ льного раздела, а на сектор,который содер─ жит SBR (Secondary Boot Record). При работе в режиме LBA нужно запомнить это значение, оно понадобится нам позже. Назовём его ADRES_LBA; 3) Загрузить сектор SBR.Этот сектор име─ ет структуру почти такую же,как MBR, но не содержит загрузчика, и в таблице разделов (расположенной по смещению #01BE от начала этого сектора) используются только первые две записи (в отличие от MBR, где исполь─ зуются 4 записи) по 16 байт каждая. Последние 2 байта сектора SBR равны #55,#AA. Записи содержат поля, аналогичные полям в MBR. При этом первая запись содер─ жит информацию об этом дополнительном раз─ деле, а вторая запись указывает на следую─ щую SBR (при наличии нескольких дополните─ льных разделов).В SBR для последнего допо─ лнительного раздела используется только первая запись; 4) Если это тот дополнительный раздел, который нам нужен, переходим к пункту 5. Иначе: ищем следующий дополнительный раздел; берём из 2-й записи в таблице разделов значение "начало раздела" из соответствую─ щего поля, причём,если режим CHS, то сразу загружаем следующую SBR. В режиме LBA надо сложить это значение со значением ADRES_LBA и присвоить полученный результат переменной ADRES_LBA - и только после это─ го загрузить SBR. Далее переход на началo этого пункта; 5) Берём из 1-й записи в таблице разде─ лов начало этого раздела из соответствую─ щих полей и загружаем Boot-сектор этого раздела. Внимание! Поле "начало раздела в фор─ мате CHS" (по смещению 1 от начала записи) указывает на первый сектор этого дополни─ тельного раздела.Просто используем его для загрузки Boot-сектора. Поле "начало раздела в формате LBA" (по смещению 8 от начала записи) содержит чис─ ло секторов до начала дополнительного раз─ дела, но не от начала винчестера (!), а от значения ADRES_LBA. Поэтому,чтобы получить реальное количество секторов до начала до─ полнительного раздела, складываем эти два значения и потом загружаем Boot-сектор. Теперь, когда загружен Boot-сектор нуж─ ного нам раздела, из него берём всю инфор─ мацию о файловой системе FAT на этом раз─ деле. Структура раздела такая. - 1-й сектор раздела - это Boot-сектор; - Несколько неиспользуемых секторов (они могут отсутствовать - их кол-во узнаем из двух байт по смещению 14 от начала в Boot- секторе); - 1-я копия FAT; - 2-я копия FAT; - Корневой каталог; - Данные. Примечание: При использовании винчестера с другой файловой системой (не FAT) необходимо в драйвере винчестера запомнить значение ко─ личества секторов до начала раздела (если используется формат CHS, то надо пересчи─ тать начало раздела в CHS в формат LBA), и при обращении к разделу драйвер будет при─ бавлять это значение к номеру сектора, ко─ торый необходимо загрузить/записать. Точно так же делать это при работе с дополните─ льными разделами FAT (см.примечание к сме─ щению #1C в Boot-секторе). Формат Boot-сектора Внимание! Формат этого сектора справед─ лив для файловых систем FAT12 и FAT16. Здесь длина сектора - 512 байт. Boot-сектор - это первый сектор на дис─ кете с файловой системой FAT12 (дискета MS-DOS). На винчестере с файловой системой FAT12 или FAT16 это первый сектор раздела (не путать с первый сектором винчестера, в котором расположена MBR). Содержит следующие данные: Смещение Длина Hазначение 0 3 Команда перехода на код загрузчика. 3 8 Идентификатор системы (имя программы - форматера). ;Обычно "MSWIN4.1". #0B 2 Длина сектора в байтах. ;Обычно 512. #0D 1 Количество секторов в кластере. ;Для дискеты =1; ;Для HDD (FAT12) =8; ;Для HDD (FAT16) может быть 4,8,16,32,64. #0E 2 Количество зарезервирован─ ных секторов. ;Это число секторов до 1-й копии FAT (на дискете это фактически номер сектора, где FAT; на винчестере - количество секторов от начала раздела).Не может быть равным 0. #10 1 Количество FAT. ;Обычно 2. #11 2 Максимально возможное количество файлов в корневом каталоге. ;Для дискеты обычно 56; ;Для HDD обычно 512. #13 2 Общее количество секторов на диске. ;Для дискеты и для винчестера объёмом до 32 Мбайт; если >32 Мбайт,то это поле соде─ ржит 0, 0 ). #15 1 Код формата (байт-описатель типа диска) ────────────────────────────────────────── Значение этого байта такое: #F0 - Гибкий диск,2 стороны,18 секторов на дорожке; #F8 - Жёсткий диск; #F9 - Гибкий диск,2 стороны,15 секторов на дорожке; #FC - Гибкий диск,1 сторона,9 секторов на дорожке; #FD - Гибкий диск,2 стороны,9 секторов на дорожке; #FE - Гибкий диск,1 сторона,8 секторов на дорожке; #FF - Гибкий диск,2 стороны,8 секторов на дорожке. ────────────────────────────────────────── #16 2 Число секторов в одной FAT. #18 2 Количество секторов на одной дорожке. ;Для дискеты =9; ;Для HDD - это параметр Sec. #1A 2 Количество головок на диске. ;Для HDD - это параметр Head. #1C 4 Количество специальных (скрытых) секторов. ;Очень важный параметр для винчестера - это количество секторов до начала раздела. Внимание! Для основных разделов это реаль─ ное число секторов от начала винчестера до этого раздела. Для дополнительных разделов это число совпадает со значением поля "Ко─ личество секторов до начала раздела", взя─ тым из таблицы разделов в SBR. #20 4 Кол-во секторов на диске. ;Используется,если размер винчестера >32M. #24 1 ID накопителя (номер диска для винчестера в BIOS). ;первый =#80. #25 1 Резерв. #26 1 Сигнатура расширенного сектора, т.е. только то, что пишет DOS 4.0 и выше, содержит здесь #29. #27 4 Порядковый номер тома. ;Серийный номер - пишется при форматирова─ нии диска, содержит индивидуальный номер и дату. #26 11 Имя диска. #36 8 Содержит "FAT12 " или "FAT16 ". Дополнение: Было замечено, что винчестеры,поддержи─ вающие режим LBA, при создании на них раз─ делов получают следующий параметр. Начало первого основного раздела ВСЕГДА имеет значение #3F (в поле "количество се─ кторов до начала раздела") и цилиндр 0, головка 1,сектор 1 (в поле "начало раздела в формате CHS"). Такое наблюдалось на следующих винтах: DHAA-2270 (258 Mb); IBM-DB0A-2540 (541 Mb); IBM-20 (20 Gb); Maxtor (40 Gb); Western Digital (160 Gb). Как следствие - на некоторых винтах (маленьких - 200-500 метров) нельзя в ре─ жиме CHS использовать поле "начало раздела в формате CHS", так как на самом деле на─ чало раздела не там, но можно использовать поле "количество секторов до начала разде─ ла", но только в том случае,если винт под─ держивает режим LBA (т.е. работать с ним в режиме LBA). Ещё про Boot-сектор Под Boot-сектором буду понимать все се─ ктора до начала первого основного раздела. На винтах с FAT16 используется только самый первый сектор, остальные сектора до начала раздела свободны. На винтах с FAT32, кроме самого первого сектора, ещё используется сектор 6 - там хранится копия самого первого сектора (ко─ пия таблицы разделов),а в секторе 2 содер─ жится дополнительная информация от количе─ стве свободного места на диске, о первом свободном кластере на диске. Содержимое 2-го сектора (считая сектора с первого): Смещение Длина Значение 0 4 #41,#61,#52,#52 ;Идентификатор доп.сектора. 4 480 ;Поле зарезервировано (нули). #01E4 4 #61,#41,#72,#72 ;Идентификатор доп.сектора. #01E8 4 ;Свободно кластеров на диске.Если это поле имеет значение #FFFFFFFF - надо вычислять. #01EC 4 ;Номер кластера на диске, с которого начи─ нать поиск свободного кластера. Если это поле имеет значение #FFFFFFFF - значит, надо вычислять. #01F0 12 ;Поле зарезервировано (нули). #01FC 4 #00,#00,#55,#AA ;Идентификатор доп.сектора.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября