7. Технические подробности

(Главу написал Randall Hopper, )

В этой главе я попытаюсь дать достаточно основной информации, касающейся жёстких дисков и процесса загрузки, так, чтобы при наличии определенных проблем, у вас не возникло трудностей при их разрешении. Глава начинается с довольно простых терминов, так что, при желании вы можете спокойно пропустить часть главы и начать чтение с незнакомой для вас информации.

7.1. Вводная информация по дискам

Существует три фундаментальных термина, определяющих расположение данных на жёстком диске: цилиндры, головки и сектора (Cylindres, Heads, Sectors). Совсем не обязательно знать, что означает в отдельности каждый из этих терминов, главное, что вместе они определяют физическое расположение данных на вашем винчестере.

На диске находится определенное количество цилиндров, головок и секторов на цилиндр-головку (другое название - дорожка (track) ). Вместе данная информация определяет ''физическую геометрию диска''. В одном секторе 512 байт, и 63 сектора на одной дорожке. Количество цилиндров и головок различно у каждого диска. Таким образом можно подсчитать размер вашего диска в байтах:

(# of cylinders) × (# heads) × (63 sectors/track) × (512 bytes/sect)

Возьмем, к примеру, мой жесткий диск 1.6Gb Western Digital AC31600 EIDE:

(3148 cyl) × (16 heads) × (63 sectors/track) × (512 bytes/sect)

Получаю 1,624,670,208 байт, что примерно равно 1.6 гигабайт.

Как вы можете заметить, физическая геометрия диска (количество цилиндров, головок и секторов на дорожку), показываемая в программе ATAID и во многих других не соответствует действительности. Вероятно ваш жёсткий диск тоже характеризуется параметрами, полученными этими программами. Будьте осторожны: если вы используйте BIOS LBA (смотрите Разд. 7.3), вы не можете использовать любую программу для получения данных физической геометрии. Это происходит по причине того, что многие программы (например, MSD.EXE или fdisk от FreeBSD) не работают с физической геометрией, вместо этого они показывают данные измененной геометрии (виртуальные номера, полученные с помощью LBA). Читайте дальше, чтобы узнать что это значит.

Номер цилиндра, номер головки и номер сектора в пределах дорожки характеризуют сектор на диске (блок данных размером в 512B). Цилиндры и головки нумеруются начиная с нуля, а сектора с единицы.

Для тех кто заинтересовался дополнительной информацией, касающейся геометрии диска, загрузочных секторов, BIOS и т.д. могут найти все необходимое в сети. Проверьте Query Lycos, Yahoo и др. по ключевым словам boot sector или master boot record. Среди другой полезной информации, вы найдете архив документов от Hale Landis How It Works. В Разд. 6 находится ссылка на этот архив.

Достаточно терминологии. Давайте поговорим о загрузке.

7.2. Процесс загрузки

В первом секторе вашего диска (0 цилиндр, 0 головка, 1 сектор) находится главная загрузочная запись (Master Boot Record (MBR) ). В ней содержится информация о разделах вашего диска. Там может храниться информация о 4 разделах. Для обозначения разделов во FreeBSD используют термин slices (слайсы), чтобы не возникало путаницы с её собственными разделами, но это не относится к нашей теме. На каждый из разделов можно установить операционную систему.

Каждая запись в MBR состоит из полей Partition ID, Start Cylinder/Head/Sector и End Cylinder/Head/Sector. Partition ID сообщает нам к какому типу файловой системы (к какой ОС) относится данный раздел, а Start/End говорит о местонахождении данного раздела. В таблице Табл. 1 представлено несколько примеров Partition IDs.

Таблица 1. Partition IDs

ID (hex) Description
01 Primary DOS12 (12-bit FAT)
04 Primary DOS16 (16-bit FAT)
05 Extended DOS
06 Primary big DOS (> 32MB)
0A OS/2®
83 Linux (EXT2FS)
A5 FreeBSD, NetBSD, 386BSD (UFS)

Не все разделы могут быть загружаемыми (например, Extended DOS). Некоторые могут—некоторые нет. Настройка загрузочного сектора раздела, присутствующего в начале, позволяет сделать раздел загружаемым.

Когда вы настраиваете ваш любимый загрузчик, он просматривает MBR каждого диска и дает вам возможность присвоить имена найденным разделам. При загрузке из MBR вашего первого диска запускается менеджер загрузки. Он просматривает информацию о выбранном вами разделе и использует значение поля Start Cylinder/Head/Sector для передачи управления загрузочному сектору вашего раздела. В свою очередь этот загрузочный сектор содержит достаточно информации для загрузки операционной системы.

Один немаловажный момент: на каждом диске есть свой MBR, но используется MBR того диска, который определяется BIOS первым. Если у вас только IDE диски, то основным будет первый диск на первом контролёре. Похожая схема и для SCSI дисков. Если у вас имеется и IDE, и SCSI диск, то BIOS первым определит IDE диск. Загрузочный менеджер будет установлен на первый определившийся диск.

7.3. Ограничения при загрузке и предупреждения

Интересная информация, которую стоит прочитать.

7.3.1. Ограничение в 1024 цилиндра и чем может помочь BIOS LBA

Первая часть загрузочного процесса происходит на уровне BIOS (если это термин новый для вас, BIOS это программируемый чип, находящийся на материнской плате, который обеспечивает компьютер загрузочным кодом). И так, первая часть процесса загрузки может подвергаться ограничениям BIOS.

На данном этапе интерфейс BIOS производит чтение диска (INT 13H, 2 подфункция) и выделяет 10 бит на номер цилиндра, 8 бит на номер головки и 6 бит на номер сектора. Это сильно ограничивает пользователей данного интерфейса (менеджеров загрузки, находящихся в MBR, а также загрузчиков ОС, находящихся в загрузочных секторах) следующими значениями:

  • Максимально возможное количество цилиндров - 1024

  • Максимально возможное количество головок - 256

  • Максимально возможное количество секторов на дорожку - 64 (если точнее, то 63, 0 не используется)

В настоящее время у жёстких дисков большое количество цилиндров, но мало головок и, несомненно, что количество цилиндров в современных винчестерах превышает 1024. Учитывая данный факт и интерфейс BIOS мы теперь не можем грузиться с любого места диска. Загрузочный код (менеджеры загрузки и загрузчики ОС, находящиеся на всех загружаемых разделах) должен располагаться до 1024 цилиндра. Если у вас обычный жесткий диск с 16 головками, то он равен:

1024 cyl/disk × 16 heads/disk × 63 sect/(cyl-head) × 512 bytes/sector

Это примерно равно часто упоминаемому лимиту в 528MB.

Вот здесь на помощь приходит режим BIOS LBA (Logical Block Addressing). BIOS LBA предоставляет пользователям вызовов BIOS API доступ к цилиндрам, лежащим выше 1024 цилиндра, посредством переопределения цилиндра. Данный режим переназначает количество цилиндров и количество головок, делая его для BIOS диском, видимым с меньшим количеством цилиндров и большим количеством головок. Другими словами, используется преимущество того факта, что жёсткие диски имеют сравнительно небольшое количество головок и гораздо больше цилиндров. Происходит изменение баланса между количеством цилиндров и головок, так, что теперь оба параметра умещаются в выше упомянутые ограничения (1024 цилиндра, 256 головок).

С BIOS LBA предел объёма жёсткого диска виртуально убирается (переносится на 8Гб). Если у вас поддерживается LBA BIOS, то вы можете установить FreeBSD или любую другую ОС в какое угодно место на диске, не боясь 1024 цилиндра.

Возьмем, к примеру, мой жёсткий диск 1.6 Gig Western Digital. Вот данные его физической геометрии:

(3148 cyl, 16 heads, 63 sectors/track, 512 bytes/sector)

BIOS LBA преобразует их к виду:

(787 cyl, 64 heads, 63 sectors/track, 512 bytes/sector)

В итоге получается тот же размер диска, но с количеством цилиндров и головок, лежащим в пределах значений BIOS API. На одном из моих дисков установленные Linux и FreeBSD находятся за 1024 физическим цилиндром. Благодаря BIOS LBA, обе операционные системы нормально загружаются.

7.3.2. Выделение дополнительного места для менеджерa загрузки

Другой момент, на который следует обратить внимание - выделение пространства для менеджера загрузки. Следует хорошо разбираться в данном вопросе, чтобы избавить себя от повторных переустановок одной или нескольких ОС.

Если вы смотрели Разд. 7.2 и читали про главную загрузочную запись (MBR), загрузочные сектора разделов и процесс загрузки, возможно у вас появился вопрос о том, где ваш менеджер загрузки будет располагаться. Некоторые менеджеры довольно малы и они вместе с таблицей разделов нормально умещаются в Master Boot Sector. Другие требуют дополнительного пространства и обычно используют несколько секторов на дорожке с 0 цилиндром и 0 головкой, находящейся после MBR, так как обычно она свободна…обычно.

В этом и состоит уловка. Некоторые операционные системы, включая FreeBSD, позволяют создавать разделы, начинающиеся сразу после MBR (0 цилиндр, 0 головка, 2 сектор). Если в программе sysinstall вы укажите полностью свободный диск или с свободным пространством в начале, то FreeBSD создаст раздел, начинающийся именно с самого начала диска (так было, когда я в последний раз занимался этим вопросом). Затем, когда вы будете устанавливать менеджер загрузки, требующий несколько дополнительных секторов, то вы затрете начальные данные первого раздела. В случае с FreeBSD, вы потеряете disk label, что приведет к невозможности загрузки с FreeBSD раздела.

Самый простой путь избежать данной проблемы и позже попробовать другие менеджеры загрузки - при разбивке диска всегда оставлять первую дорожку диска вне разделов. Это значит, что надо оставить свободное место, начиная с 0 цилиндра, 0 головки, 2 сектора до 0 цилиндра, 1 головки, 63 сектора и создать первый раздел, начинающийся с 0 цилиндра, 1 головки, 1 сектора. Полезно в начале диска создавать DOS раздел, так как он оставляет данное место свободным (по этой причине менеджеры загрузки предполагают, что начало диска свободно). Я предпочитаю создавать в начале диска DOS раздел размером в 1 мегабайт, так как это также предотвращает изменения букв дисков, представляющих первичные (primary) разделы, при последующем изменении таблицы разделов.

Следующие менеджеры загрузки используют Master Boot Sector для хранения своего кода и данных:

  • OS-BS 1.35

  • Boot Easy

  • LILO

Эти менеджеры загрузки требуют несколько дополнительных секторов после Master Boot Sector:

  • OS-BS 2.0 Beta 8 (сектора со 2 по 5)

  • The OS/2 boot manager

7.3.3. Что делать если компьютер вдруг отказывается загружаться?

В некоторый момент, при установке загрузчиков, ваш MBR может оказаться в таком состоянии, что вы не сможете загрузиться. Это маловероятно, но возможно, например, при повторном разбиении диска с уже установленным загрузчиком.

Если у вас имеется DOS раздел, то вы можете загрузиться с загрузочной DOS дискеты и выполнить команду:

A:\> FDISK /MBR

Это заново установит в MBR загрузочный код DOS. Теперь вы можете загружать DOS и только DOS. Аналогично, просто перезапустите установку вашего менеджера загрузки с загрузочной дискеты.

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.