Next Previous Contents

## 13. Лимит в 65535 цилиндров

Функция `HDIO_GETGEO` ioctl возвращает количество цилиндров в поле длиной 16 бит. Это означает, что если у вас более 65535 цилиндров, то эта цифра будет урезана, и (для обычного случая настройки SCSI с 1 МиБ цилиндрами) 80 ГиБ диск будет выглядеть как диск на 16 ГиБ. Если вы распознали эту проблему, то вы можете легко от неё избавиться.

## 13.1 Проблемы IDE с 34+ ГБ-ми дисками

Диски больше чем 33.8 ГБ не будут работать с ядрами младше 2.3.21. Детали этой проблемы приведены ниже. Предположим, что вы приобрели новый диск - IBM-DPTA-373420, емкостью 66835440 сектора (34.2 ГБ). Ядра более поздних версий , чем 2.3.21, будут сообщать что размер диска равен 769*16*63 = 775152 секторов (0.4 ГБ), что, согласитесь не совсем приятно. Задание параметров в командной строке(например:hdc=4160,255,63) не поможет,они будут игнорироваться. Что происходит? Процедура idedisk_setup() получает сведения о геометрии от диска (16383/16/63) и записывает эти данные поверх данных полученных от пользователя в командной строке,поэтому данные пользователя используются только для BIOS геометрии. Процедура current_capacity() или idedisk_capacity() пересчитывает количество цилиндров как 66835440/(16*63)=66305, но , так как поле имеет длину всего 16 бит,это число превращается в 769. Т.к lba_capacity_is_ok() разрушила id->cyls, каждый следующий её вызов будет возвращать неверные данные, поэтому емкость диска получается равна 769*16*63. Для нескольких версий ядер доступен патч. Патч для 2.0.38 можно взять на ftp.kernel.org. Патч для 2.2.12 на : www.uwsg.indiana.edu. Ядра 2.2.14pre поддерживают такие диски. В серии ядер 2.3.* , поддержка таких дисков есть в версиях начиная с 2.3.21. Решить проблему можно также путем настройки диска с помощью перемычек на емкость 33.8 ГБ. Во многих случаях может помочь Обновление BIOS ,это необходимо если вы хотите загружаться с диска.

Next Previous Contents