Chapter 3. Устранение некоторых проблем

На моём винчестеры есть запорченные блоки!
FreeBSD не распознаёт мой EISA SCSI контроллер Bustek 742a!
Не распознаётся SCSI-контроллер на HP Netserver!
Что не так с IDE-контроллером CMD640?
Выдаются сообщения типа ``ed1: timeout''.
При монтировании компакт-диска, выдаётся сообщение ``Incorrect super block''.
При монтировании компакт-диска выдаётся сообщение ``Device not configured''.
Мой принтер печатает невероятно медленно. Что тут можно сделать?
Программы аварийно завершают работу с ошибкой ``Signal 11''.
При загрузке монитор темнеет и теряет синхронизацию!
У меня 128 МБ ОЗУ, но система используется только 64.
FreeBSD 2.0 аварийно завершает работу с сообщением ``kmem_map too small!''
Сообщение ``CMAP busy panic'' при перезагрузке с новым ядром.
ahc0: brkadrint, Illegal Host Access at seqaddr 0x0
Sendmail говорит, что ``mail loops back to myself''
Полноэкранные приложения на удалённой машине ведут себя неправильно!
Выводятся сообщения "calcru: negative time..."

Q: На моём винчестеры есть запорченные блоки!

A: Если это SCSI-устройство, то винчестер должен иметь возможность автоматической переадресации таких блоков. Однако по непонятным причинам во многих поставляемых дисках эта возможность отключена...

Чтобы её включить, вам нужно изменить режим работы устройства, что во FreeBSD может быть выполнено администратором посредством команды

════════scsi═-f═/dev/rsd0c═-m═1═-e═-P═3
══════

и изменить значения параметров AWRE и ARRE с 0 на 1:-

════════AWRE═(Auto═Write═Reallocation═Enbld):══1
════════ARRE═(Auto═Read═Reallocation═Enbld):══1
══════

Последующие параграфы были предоставлены Тэдом Миттельштадтом (Ted Mittelstaedt):

Для дисков IDE появление запорченных блоков является признаком возможных неприятностей. Все современные IDE-диски поставляются с включенной возможностью переадресации испорченных блоков. Все производители винчестеров в настоящее время предоставляют расширенные гарантии и заменяют диски с запорченными блоками.

Если вы всё же хотите спасти ваш диск IDE с запорченными блоками, вы можете попытаться найти программу диагностики винчестеров от производителя и протестировать ею диск. Иногда эти программы могут заставить электронику винчестера пересканировать диск в поисках испорченных блоков и заблокировать их.

В случае дисков стандартов ESDI, RLL и MFM, наличие испорченных блоков является обычным явлением и не является большой проблемой. В ПК контроллер винчестера и BIOS берут на себя работу по блокировке испорченных блоков. Это прекрасно работает в случае операционных систем типа DOS, которые используют вызовы BIOS для доступа к диску. Однако драйвер диска во FreeBSD не обращается к BIOS, поэтому для обеспечения подобной функциональности существует bad144. bad144 работает только с драйвером wd, её НЕВОЗМОЖНО использовать со SCSI. bad144 помещает все найденные испорченные сектора в специальный файл.

У bad144 имеется особенность - специальный файл с испорченными блоками помещается на последнюю дорожку диска. Так как этот файл может содержать список испорченных секторов, находящихся в начале диска, где может располагаться файл ядра /kernel, он должен быть доступен загрузчику, использующему вызовы BIOS для чтения файла ядра. Это значит, что диск, который использует bad144, не должен иметь размеры, превышающие 1024 дорожки, 16 головок и 63 сектора. Это ограничивает размер диска, обрабатываемого bad144, 500 мегабайтами.

Для использования bad144, просто установите "Bad Block" в положение ON на экране программы fdisk во время начальной установки. Это работает начиная с FreeBSD 2.2.7. Диск должен иметь размер, не превышающий 1024 дорожки. Рекомендуется, чтобы до этого диск проработал не менее 4 часов для перехода в рабочий тепловой режим и стабильный режим работы головок.

Если диск имеет размер, превышающий 1024 головки (как, например, большой диск ESDI), контроллер ESDI использует особый режим трансляции, чтобы это работало в DOS. Драйвер wd будет знать об этих режимах трансляции, ЕСЛИ вы укажете на использование "преобразованных" параметров в команде "set geometry" программы fdisk. Вы также НЕ должны использовать режим "dangerously dedicated" при выделении раздела для FreeBSD, так как при этом параметры диска не принимаются во внимание. Также, хотя fdisk будет использовать изменённые параметры, он всё же помнит настоящий размер диска, и попытается создать слишком большой раздел FreeBSD. Если параметры диска изменились на транслированные, раздел ДОЛЖЕН быть создан вручную с указанием количества блоков.

Самым быстрым способом является установка большого диска ESDI с контоллером ESDI, загрузка DOS и выделение на нём раздела DOS. Затем запустите инсталляционную программу FreeBSD и в экране программы fdisk найдите и запишите размер блока и их количество раздела DOS. Затем установите параметры в те же значения, которые использует DOS, удалите раздел DOS и создайте "совмещённый" раздел FreeBSD с ранее записанным размером блока. Затем установите загрузку с этого раздела и включите сканирование испорченных блоков. Во время установки сначала, ещё до создания файловых систем, запустится bad144 (вы можете это увидеть по Alt-F2). Если возникнут проблемы при создании файла с запорченными секторами, вы установили слишком большие параметры диска - перезагрузитесь и начните всё сначала (включая повторные разбиение на разделы и форматирование винчестера в DOS).

Если переадресация включена и всё равно на диске присутствуют запорченные блоки, то, по-видимому, остаётся только заменить винчестер. Количество испорченных блоков с течением времени имеет тенденцию только увеличиваться.

Q: FreeBSD не распознаёт мой EISA SCSI контроллер Bustek 742a!

A: Нижеследующая информация специфична для 742a, но может касаться и других адаптеров от Buslogic (Bustek = Buslogic).

Существуют две основных ``версии'' адаптеров 742a. Это аппаратные модификации A-G и модификации H и выше. Буква, обозначающая модификацию, расположена после номера сборки на кромке адаптера. На адаптере 742a установлены две микросхемы ПЗУ, одна содержит BIOS, а другая - микрокод (так называемое firmware). Для FreeBSD не имеет значения используемая версия BIOS, но имеет значение версия микрокода. Buslogic высылает обновления для ПЗУ, если вы позвоните в их отдел технической поддержки. Михросхемы с BIOS и микрокодом поставляются соответствующими парами. В ПЗУ адаптера вы должны иметь самую последнюю версии микрокода для вашей аппаратной модификации.

Адаптерам модификаций A-G может только подойти BIOS/Firmware версий вплоть до 2.41/2.21. Адаптерам модификаций H и старше подходят самые последние версии BIOS/Firmware 4.70/3.37. Отличие между версиями микрокода заключается в том, что версия микрокода 3.37 поддерживает механизм ``round robin''.

На адаптерах Buslogic проставлен серийный номер. Если у вас адаптер старой модификации, вы можете позвонить в подразделение RMA фирмы Buslogic, сказать им серийный номер адаптера и попытаться обменять его на более новую модификацию. Если адаптер достаточно нов, то они его поменяют.

FreeBSD 2.1 поддерживает микрокод модификаций только 2.21 и выше. Если у вас версия микрокода старее, чем эта, то адаптер не будет распознаваться как адаптер Buslogic. Однако он может быть опознан как Adaptec 1540. Ранние версии микрокода от Buslogic содержат режим ``эмуляции'' AHA1540. Однако для EISA-адаптера всё это выглядит как-то некрасиво.

Если у вас адаптер старой модификации и вы получили микрокод 2.21 для него, установите перемычку W1 в положение B-C, по умолчанию она находится в положении A-B.

Адаптеры 742a EISA никогда не имели проблему ``>16MB'', описанную в разделе о машинах с >16 MB ОЗУ. Эта проблема возникает со SCSI-адаптерами Vesa-Local Buslogic.

Q: Не распознаётся SCSI-контроллер на HP Netserver!

A: В общем-то это известная проблема. EISA-контроллеры SCSI, расположенные на материнской плате машин HP Netserver, занимают EISA-слот номер 11, так что все ``настоящие'' слоты EISA будут ему предшествовать. Так как адресное пространство для слотов EISA выше 10 пересекается с адресным пространством, предназначенным для PCI, то автоконфигуратор FreeBSD в настоящее время не может эту проблему нормально обойти.

Так что пока лучшее, что вы можете предпринять, это попытаться указать, что пересечения диапазонов адресов нет :), установив опцию ядра EISA_SLOTS в значение 12. Отконфигурируйте и откомпилируйте ядро так, как это описано в разделе Руководства о конфигурировании ядра.

Конечно, это даст вам типичную ситуации "курица или яйцо" при установке системы на такой машине. Для обхода этой проблемы внутри UserConfig есть специальный хак. Не используя ``визуального'' интерфейса, а только интерфейс командной строки, просто наберите

════════eisa═12
════════quit
══════

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

Надеемся, что будущие версии будут содержать полное решение этой проблемы.

ЗАМЕЧАНИЕ: Вы не сможете использовать режим dangerously dedicated на машинах HP Netserver. Полное описание причин содержится в этом замечании.

Q: Что не так с IDE-контроллером CMD640?

A: Этот контроллер не рабочий. Он не может отрабатывать команды на обоих каналах одновременно.

Решение этой проблемы существует и включается автоматически, если в вашей системе испольщуется этот контроллер. Подробная информация находится на страницах Справочника по дисковому драйверу (man 4 wd).

Если вы уже работаете с FreeBSD 2.2.1 или 2.2.2 с IDE-контроллером CMD640 и хотите использовать второй канал, постройте новое ядро с включенной опцией options "CMD640". В версии 2.2.6 и выше это включено по умолчанию.

Q: Выдаются сообщения типа ``ed1: timeout''.

A: Обычно это вызвано конфликтом прерываний (например, двух адаптеров, использующих один и тот же IRQ). FreeBSD до версии 2.0.5R была нечувствительна к таким конфликтам, и драйвер сетевого адапетра оставался работоспособен даже при конфликтах IRQ. Однако с версии 2.0.5R и выше, конфликты IRQ больше не считаются безобидными. Загрузитесь с опцией -c и смените строку, описывающую ed0/de0/... на соответствующую вашей системе..

Если вы используете разъём BNC сетевого адаптера, таймауты устройства могут быть вызваны плохим терминированием. Чтобы это проверить, подключите терминатор к адаптеру (без кабеля) и посмотрите, не исчезли ли сообщения об ошибках.

Некоторые NE2000-совместимые адаптеры выдают такую ошибку, если нет связи по UTP-порту или отключен кабель.

Q: При монтировании компакт-диска, выдаётся сообщение ``Incorrect super block''.

A: В параметрах команды mount вам нужно указать тип устройства, который вы собираетесь смонтировать. По умолчанию mount полагает, что монтируемая файловая система имеет тип ``ufs''. При монтировании файловой системы CDROM нужно указать опцию ``-t cd9660'' в команде mount. При этом конечно предполагается, что CDROM содержит файловую систему стандарта ISO 9660, как на большинстве CDROM. С версии 1.1R FreeBSD автоматически распознаёт также расширение Rock Ridge (для длинных имён файлов).

Например, если вы хотите смонтировать устройство CDROM ``/dev/cd0c'', в каталог /mnt, вы должны выполнить следующую команду:

════════mount═-t═cd9660═/dev/cd0c═/mnt
══════

Заметьте, что имя устройства (``/dev/cd0c'' в этом примере) может быть другим, в зависимости от интерфейса вашего CDROM. Отметьте, что опция ``-t cd9660'' всего лишь приводит к вызову команды ``mount_cd9660'', так что пример выше может быть укорочен до такой команды:

════════mount_cd9660═/dev/cd0c═/mnt
══════

Q: При монтировании компакт-диска выдаётся сообщение ``Device not configured''.

A: Обычно это означает, что в приводе CDROM нет компакт-диска либо устройство не было обнаружено на этапе загрузки. Вставьте в привод какой-нибудь диск, и/или проверьте его настройку как ведущего/ведомого устройства, если оно типа IDE (ATAPI). Для привода CDROM может потребоваться несколько секунд для обнаружения, что был вставлен диск, так что будьте терпеливыми.

Иногда SCSI CDROM может отсутствовать в системе из-за недостатка времени на ответ при сбросе шины. Если ваш привод CD-ROM является SCSI-устройством, пожалуйста, попробуйте добавить такой символ в ваш файл конфигурации ядра и перекомпилируйте его.

════════options═"SCSI_DELAY=15"
══════

Q: Мой принтер печатает невероятно медленно. Что тут можно сделать?

A: Если принтер подключен к параллельному порту, и единственной проблемой является его медлительность, попробуйте установить порт в режим ``polled'':

════════lptcontrol═-p
══════

Утверждается, что некоторые новейшие принтеры от HP не работают корректно в режиме прерываний, скорее всего из-за (это ещё не совсем точно выянено) проблем с временными задержками.

Q: Программы аварийно завершают работу с ошибкой ``Signal 11''.

A: Это может быть вызвано сбоями аппаратного обеспечением (память, материнская плата, итд). Попробуйте запустить на вашем ПК программу тестирования памяти. Имейте в виду, что в случае незначительных отклонений в работе возможна ситуация, когда все программы тестирования, которые вы будете пробовать, будут утверждать, что с ОЗУ всё в порядке, а ошибка будет возникать при определённых условиях (таких, как использование DMA при использовании режима управления шиной контроллером SCSI типа Adaptec 1542, интенсивное обращение к ОЗУ при компиляции ядра или значительной нагрузке на систему).

В FAQ по SIG11 (ссылка дана ниже) сказано, что медленная память является самая распространённой причиной возникновения этой проблемы. Увеличьте число тактов ожидания в настройке BIOS или установите более быструю память.

Для меня самой распространённой причиной была сбойная кэш-память или кэш-контроллер. Попробуйте отключить внешний кэш (второго уровня) в BIOS и посмотрите, не решит ли это вашу проблему.

Подробная информация по этому вопросу содержится в FAQ по проблеме SIG11.

Q: При загрузке монитор темнеет и теряет синхронизацию!

A: Это известная проблема с видеоадаптерами ATI Mach 64. Она вызвана тем, что этот адаптер использует адрес 2e8, как и четвёртый последовательный порт. Из-за ошибки (или особенности?) в драйвере sio.c он обращается к порту, даже если если он не существует, и даже если вы отключите sio3 (четвёртый порт), который, как правило, использует этот адрес ввода/вывода.

Пока это не исправлено, используйте следующий метод:

  1. В приглашенни загрузчика наберите -c. (Это переведёт ядро в режим конфигурации).

  2. Отключите устройства sio0, sio1, sio2 и sio3 (все). После этого драйвер sio не будет активизироваться и проблем не будет.

  3. Для продолжения загрузки наберите exit.

Если вам нужно использовать последовательные порты, вм должны построить новое ядро со следующей модификацией: в файле /usr/src/sys/i386/isa/sio.c найдите строчку, содержащую число 0x2e8 и удалите её вместе с предшествующий запятой (оставив следующую). После этого следуйте обычным указаниям по построению ядра.

Даже после этих изменений вы можете обнаружить, что X Window работает ненормально. Если это произошло, удостоверьтесь, что вы используете XFree86 версии не ниже 3.3.3. Этот и последующие релизы имеют встроенную поддержку адаптеров Mach64 и даже отдельный X-сервер для таких адаптеров.

Q: У меня 128 МБ ОЗУ, но система используется только 64.

A: Так как для определения объёма памяти FreeBSD использует информацию BIOS, она ограничена 16 битами, используемыми для выражения размера ОЗУ в килобайтах (65535 КБ = 64МБ) (или меньше... некоторые BIOS ограничивают размеры памяти до 16МБ). Если у вас больше чем 64МБ ОЗУ, FreeBSD будет пытаться обнаружить эту память; однако эта попытка может и не удасться).

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

options "MAXMEM=<n>"

Здесь n - это объём памяти в килобайтах. Для машины со 128 МБ ОЗУ вам нужно использовать значение 131072.

Q: FreeBSD 2.0 аварийно завершает работу с сообщением ``kmem_map too small!''

A: Замечание Сообщение может также выглядеть как ``mb_map too small!''

Такое завершение работы показывает, что системе не хватает виртуальной памяти для сетевых буферов (точнее, структур mbuf). Вы можете увеличить количество виртуальной памяти для структур mbuf, добавив:

options "NMBCLUSTERS=<n>"

в файл конфигурации ядра, где <n> - это число в пределах 512-4096, в зависимости от числа TCP-соединений, которое вам нужно одновременно обслуживать. Я рекомендую попробовать значение 2048 - это должно избавить вас от аварийных остановов. Вы можете отслеживать количество структур mbuf, выделенных/используемых системой командой netstat -m. Значение по умолчанию для NMBCLUSTERS равно 512 + MAXUSERS * 16.

Q: Сообщение ``CMAP busy panic'' при перезагрузке с новым ядром.

A: Процедура определения устаревших фалов /var/db/kvm_*.db иногда даёт сбой и использует не те файлы, что может вызвать аварийный останов системы.

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

════════rm═/var/db/kvm_*.db
══════

Q: ahc0: brkadrint, Illegal Host Access at seqaddr 0x0

A: Это - результат конфликта со SCSI-адаптером Ultrastor.

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

Q: Sendmail говорит, что ``mail loops back to myself''

A: В FAQ по sendmail на это дан такой ответ:-

════════*═Выдаются═сообщения═"Local═configuration═error",═примерно═такие:

════════553═relay.domain.net═config═error:═mail═loops═back═to═myself
════════554═<user@domain.net>...═Local═configuration═error

════════Как═можно═решить═эту═проблему?

════════Согласно═записям═MX,═почта═для═домена═(скажем,═domain.net)═была
════════перенаправлена═на═указанный═хост═(в═нашем═случае═relay.domain.net),
════════но═он═не═распознаётся═как═domain.net.══Добавьте═строку═domain.net═в
════════файл═/etc/sendmail.cw═(если═вы═используете═FETURE(use_cw_file))═или
════════добавьте═"Cw═domain.net"═в═/etc/sendmail.cf.
══════

Текущая версия FAQ по sendmail больше не поставляется вместе с sendmail. Однако этот документ регулярно помещается в конференции comp.mail.sendmail, comp.mail.misc, comp.mail.smail, comp.answers и news.answers. Вы можете получить копию по электронной почте, послав сообщение, содержащее команду "send usenet/news.answers/mail/sendmail-faq" в теле письма, в адрес mail-server@rtfm.mit.edu.

Q: Полноэкранные приложения на удалённой машине ведут себя неправильно!

A: На удалённой машине тип терминала может быть устанавлен в значение, отличное от типа терминала cons25, требуемом при использовании консоли FreeBSD.

Есть несколько возможных способов решения этой проблемы:

  • После входа на другую машину установите значение переменной окружения TERM равным ansi или sco, если эта машина знает об этих типах терминалов.

  • Используйте эмулятор VT100 типа screen на консоли FreeBSD. screen даёт вам возможность открывать несколько рабочих сеансов на одном терминале, и она имеет ещё ряд полезных особенностей. Каждое окно программы screen ведёт себя как терминал VT100, так что переменная TERM на удалённой машине должна быть установлена в значение vt100.

  • Опишите терминал cons25 в базе данных характеристик терминалов на удалённой машине. Способ описания зависит от используемой на этой машине операционной системе. Вам может помочь чтение руководств по администрированию удалённой системы.

  • Запустите X-сервер на стороне FreeBSD и войдите на удалённую систему с помощью какого-либо эмулятора терминала, работающего в X Window, такого, как xterm или rxvt. Переменная окружения TERM на удалённой машине должна быть установлена в значение xterm или vt100.

Q: Выводятся сообщения "calcru: negative time..."

A: Это может быть вызвано различными аппаратными или программными проблемами, связанными с прерываниями. Это может быть связано как с ошибками при программировании, так и с природой самих устройств. Например, работа с TCP/IP по параллельному порту с использованием большого MTU приводит к этой проблеме, также как использование графических акселераторов; в последнем случае вы должны проверить настройку прерываний на графическом адаптере.

Одним из проявлений этой проблемы является прерывание работы процессов с диагностическим сообщением "SIGXCPU exceeded cpu time limit".

Если эта проблема не может быть решена, для FreeBSD 3.0 от 29 ноября 1998 и выше измените значение системной переменной:

═══════════════sysctl═-w═kern.timecounter.method=1

Это коснётся производительности системы, но принимая во внимание источник этой проблемы, это будет незаметно. Если проблема всё ещё даёт знать о себе, оставьте значение этой переменной равным единичке и увеличьте значение параметра "NTIMECOUNTER" в файле конфигурации вашего ядра. Если в конце концов вы достигнете значения "NTIMECOUNTER=20", то вам эту проблему решить не удастся, прерывания дают слишком большую нагрузку на процессор, чтобы обеспечить отслеживание времени.



Banner.Novgorod.Ru