Рассмотрим простой вариант:
Загрузите машину и прервите начальную загрузку (нажав клавишу Del), чтобы войти в секцию конфигурации CMOS. Выберите базовую конфигурацию и посмотрите тип вашего жесткого диска. Тип может называться "user" или "47", именно для диска этого типа вам нужно отыскать информацию о количестве цилиндров, головок и секторов из имеющегося списка.
НЕ ИЗМЕНЯЙТЕ ЧИСЛО СЕКТОРОВ! |
---|
На самом деле диск содержит 1048 цилиндров, 16 головок и 63 сектора на дорожке. Однако цилиндры и головки отображаются таким образом, чтобы соответствовать пониманию мира, специфичного для DOSа, где не может существовать более чем 1024 цилиндра на устройстве (это и понятно, всего 10 бит для адреса, 2^10=1024). Простейший способ - это установить число цилиндров в 1024, головок в 16, но оставив прежнее число секторов, равное 63. Это будет стоить вам 24 цилиндров или
24*(540/1048) = 12Mб,
но при этом вы получите геометрию, не отличающуюся от настоящего диска. Тогда инсталляция будет проста и без ухищрений.
Теперь рассмотрим вариант непростой:
Пусть CMOS определил цилиндров 524, головок 32 и секторов 63.
Загрузитесь с диска boot, который у вас уже сделан.
На ПЕРВУЮ подсказку введите реальную геометрию диска (НЕ то, что определил CMOS!).
В этом случае напечатайте:
ramdisk hd=1048,16,63
вы можете указать геометрию для второго IDE устройства, включая второй параметр после первого, как в этом примере:
ramdisk hd=1048,16,63 hd=xxxxx,yy,zz
(подставьте ваши параметры вместо x,y,z)
Продолжите процесс загрузки.
После того, как вы сообщили эту информацию, замените boot дискету на root. Когда Linux загрузится, зарегистрируйтесь как 'root' и вызовите утилиту fdisk. Предполагая, что IDE диск первый, введите:
fdisk /dev/hda
Затем проделайте следующую процедуру:
- нажмите 'p', чтобы просмотреть существующие разделы;
удалите любой раздел, который вам не нужен (будем надеяться - в этом случае все!);- нажмите 'x', чтобы войти в эксперт-меню;
- нажмите 'c', чтобы изменить число цилиндров на значение в CMOS;
(в нашем примере 524).- нажмите 'h', чтобы проделать аналогичную процедуру для указания числа головок;
(в нашем примере 32).- вернитесь в главное меню fdisk, чтобы определить ваши разделы, как-будто бы вы имеете нормальное число цилиндров и головок;
- нажмите 'w', чтобы сохранить новую таблицу разделов и выйти.
После того, как таблица разделов будет заново создана, продолжите инсталляцию, используя 'setup' и все должно быть прекрасно.
Обратите внимание, что когда вы пожелаете вновь использовать fdisk, вам придется еще раз полностью проделать только что описанную процедуру, чтобы заставить систему поверить в то, что она видит. Cейчас Linux, DOS и CMOS все видят одну и ту же (искаженную) картину реальности!
Пожалуйста, заметьте еще, что вышеописанная техника работает с любым устройством, имеющем более чем 1024 цилиндра. Формула проста: Сократите количество цилиндров на такой коэффициент, чтобы получить число меньшее 1024, а затем умножьте количество головок на этот коэффициент.
НЕ ИЗМЕНЯЙТЕ ЧИСЛО СЕКТОРОВ! |
---|
Для правильной работы LILO вы должны включить предложение "append" в файл конфигурации LILO, '/etc/lilo.conf', чтобы описать для него реальную геометрию диска. Вставьте следующие строки в начало вашего файла конфигурации:append="hd=cccc,hhhh,ssss" linearгде
cccc
= кол-во цилиндров
hhhh
= кол-во головок
ssss
= кол-во секторов
Если у вас два IDE диска, укажите геометрию обоих, как здесь:
append="hd=cccc,hhhh,ssss hd=CCCC,HHHH,SSSS" linearгде
cccc
= кол-во цилиндров для дискаC:
hhhh
= кол-во головок для дискаC:
ssss
= кол-во секторов для дискаC:
CCCC
= кол-во цилиндров для дискаD:
HHHH
= кол-во головок для дискаD:
SSSS
= кол-во секторов для дискаD:
(не забудьте перезапустить '/sbin/lilo', чтобы внести необходимые изменения)
С этими добавленными параметрами LILO будет иметь возможность загружаться с нового, "большого" жесткого диска.
Существует возможность использовать Linux на больших IDE устройствах
без ограничения его местонахождения на диске. Поговорим на примере
DOS и Linux, но это справедливо и для других систем.
Вторым способом адресации является форма "цилиндр-головка-сектор", (Cylinder-Head-Sector, CHS) или физическая форма, в которой адресация каждого сектора происходит триплетом "цилиндр-головка-сектор".
Чтобы преобразовать адреса из логической формы в физическую, необходимо знать, сколько головок приходится на цилиндр и сколько секторов на дорожке. Если общее число цилиндров также известно, можно определить объем диска. Количество цилиндров, головок на цилиндр, секторов на дорожке и называется дисковой геометрией.
Старым контроллерам и BIOS-ам требовалась адресация секторов в физической форме. Linux же везде использует логические адреса, исключая возможно самый нижний уровень, когда он транслирует их в физическую форму для контроллера. Linux не использует BIOS ни в чем, кроме как определения геометрии диска.
Таблица разделов записывает начало и конец каждого раздела в обоих формах, логической и физической. И DOS fdisk и Linux fdisk предполагают, что эти значения соответствуют друг другу. DOS fdisk добывает геометрию диска, запрашивая BIOS; Linux fdisk получает эту информацию, запрашивая ядро.
MS-DOS и интерфейс BIOS используют 10-битовое поле для хранения номера
цилиндра, поэтому они могут предоставить доступ только к цилиндрам 0-1023.
Этого не достаточно для современных устройств, которые имеют тенденцию
к тому, чтобы иметь 63 сектора/дорожке, 16головок/цилиндр и большое
количество цилиндров. Решением может быть следующий ход:
EIDE BIOS будет говорить "неправильные" данные, когда запрашивается
геометрия диска, деля пополам или даже на 4 реальное количество цилиндров
и, соответственно, увеличивая в два или четыре раза количество головок.
Затем всякий раз, когда поступает физически адресованный запрос I/O,
BIOS будет предполагать, что запрос базируется на фиктивной геометрии
диска и будет конвертировать его соответствующим образом для контроллера.
Этот процесс называется "трансляцией адреса".
Затем вы можете перекроить разделы на диске с помощью DOS и/или Linux fdisk, инсталлируя обе операционные системы, и это будет работать, правда, с некоторыми ограничениями.
Проблема заключается в том, что BIOS еще нельзя использовать для доступа
к цилиндрам с номерами большими 1023. Таким образом, все ваши DOS
разделы должны будут размещаться ниже этого предела. Например, LILO
использует BIOS, чтобы сделать всю "грязную" работу; поэтому, если вы
хотите, чтобы LILO загружал Linux, вы должны быть уверены, что ядро
(читай весь корневой раздел) лежит в первых 1023 цилиндрах.
Сам Linux, однако, счастливым образом будет иметь доступ ко всему диску.
Во время загрузки передадим ядру реальную геометрию диска. Это можно сделать в ответ на подсказку LILO, напечатав
<image-name> hd=<cylinders>,<heads>,<sectors>Эту опцию можно передавать автоматически, используя директиву "append" в вашем файле конфигурации LILO.
Сейчас ядро сможет узнать устройство и иметь к нему доступ, но когда пользовательская программа, например, fdisk или инсталлятор LILO, запросят у ядра геометрию диска, ядро вернет реальную, а не фиктивную геометрию. Таким образом, Linux fdisk (запросивший ядро) и DOS fdisk (запросивший BIOS) будут иметь противоречия относительно того, как должна выглядеть таблица разделов. Инсталлятор LILO будет вычислять физические адреса, которые несовместимы с тем, что требует BIOS (а следовательно и LILO во время работы). Эта проблема fdisk имеет простое решение: надо войти в эксперт-меню и установить фиктивные значения для цилиндров и головок (как в BIOS). Затем отредактировать таблицу разделов, записать ее и выйти, уверенно полагая, что сейчас Linux fdisk и DOS fdisk не будут иметь никаких разногласий.
Проблема с LILO также легко решается: добавьте директиву "linear" в ваш файл конфигурации LILO, 'lilo.conf'. Это заставит LILO использовать логические адреса вместо физических, чтобы запоминать свои данные, и вычислять физические адреса во время загрузки, а не во время инсталляции. Таким образом будет использоваться геометрия, которую снабжает BIOS, вместо геометрии, которую снабжает ядро, и все будет правильно работать.
ramdisk hd=2100,16,63Запустили Linux fdisk, посмотрели на кучу ошибок, нажав 'p', вошли в эксперт-меню, нажав 'x' и ввели цилиндров 505, головок 64 и секторов 63, затем вернулись в нормальный режим, нажали еще раз 'p', чтобы увидеть наш DOS раздел и отсутствие ошибок. Создали разделы какие нашей душе угодно. Сохранили таблицу разделов и перезагрузились с диска Slackware.
append="hd=2100,16,63" linear