Настройка и работа в Linux
adb5321d

Проблемы с большими дисками


В MS-DOS и ранних версиях Windows доступ к дискам был организован через прерывание 13 BIOS. При этом использовалась адресация секторов на диске на основе указания номеров цилиндра, головки и сектора на дорожке (нумерацию физических цилиндров и дорожек принято начинать с нуля, а сектора на дорожке с единицы). Однако практически головок было не более 16, а число секторов на дорожке не более 63, и, хотя для указания цилиндра использовалось 10 разрядов, BIOS не мог работать с дисками емкостью более 1024X63X16X512 = 528 Мбайт. Чтобы преодолеть это ограничение, применяются разные приемы. Так, Extended CHS или Large disk support (его иногда называют просто Large) использует незанятые разряды номера головки и номера сектора на дорожке для увеличения числа адресуемых цилиндров. Но на данный момент и DOS, и Windows 95 не поддерживают 256 считывающих головок, поэтому можно использовать только в 1024 цилиндра, 128 считывающих головок и 63 сектора/дорожку. Преобразование Extended CHS в реальный CHS-адрес (который может иметь до 8192 цилиндров) осуществляет BIOS. Это позволяет работать с дисками емкостью до 8192X16X63X512 =

4227858432 байт или 4,2 Гбайт.

Однако плотность записи, число пластин и дорожек все увеличивались, изобретались другие способы увеличения емкости дисков. В результате формула C/H/S уже перестала правильно отражать , а старые версии BIOS перестали обеспечивать доступ ко всему дисковому пространству. Тогда придумали еще один прием для работы с большими дисками через Int 13h - линейную адресацию блоков (Linear Block Addressing - LBA). Не вдаваясь в подробности, можно сказать, что все сектора на диске нумеруются последовательно, начиная с нулевого сектора на первой дорожке нулевого цилиндра. Вместо CHS-адреса каждый сектор получает логический адрес, которым выступает просто его порядковый номер в общем массиве секторов. Нумерация логических секторов начинается с нуля, причем нулевой сектор содержит MBR. В Setup BIOS поддержка преобразования линейного номера в CHS-адрес обозначается как . Таким образом, в новых версиях BIOS обычно имеется выбор из трех вариантов: Large, LBA и Normal (последнее означает, что преобразование не производится).


Но и в режиме LBA обращение к физическому диску все равно осуществляется через функции Int 13h, которые используют нотацию C/H/S. В силу этого возникает ограничение на возможный объем диска: BIOS не может адресовать все сектора на дисках объемом более 8,5 Гбайт. Надо заметить, что это ограничение относится только к дискам с интерфейсом IDE. В контроллерах SCSI-дисков номер сектора переводится в команды SCSI, а далее сам диск находит нужную позицию, поэтому такого ограничения на объем диска не возникает.

Linux и последние версии Windows при работе с дисками уже не используют прерывание 13 BIOS, а работают с собственными драйверами дисков. Но прежде чем система сможет использовать такой драйвер, она должна как минимум его загрузить, поэтому на этапе начальной загрузки любая система вынуждена опираться на BIOS. Это вызывает ограничения на размещение многих систем за пределами 8 Гбайт: они не способны оттуда загружаться, хотя после успешной загрузки могут работать с дисками гораздо большего объема. Чтобы понять, как можно обойти эти ограничения, рассмотрим процесс загрузки ОС Linux.


Содержание раздела