5.1. | Почему FreeBSD определяет неправильное количество памяти на аппаратуре i386TM? |
Наиболее вероятная причина заключается в различии между адресами физической и виртуальной памяти. Существующее соглашение для большинства оборудования ПК заключается в использовании пространства памяти, лежащей в диапазоне между 3.5 ГБ и 4 ГБ для специальных нужд (обычно для нужд PCI). Это пространство адресов используется для доступа к PCI оборудованию. Как результат, реальная физическая память не может быть получена в данном адресном пространстве. Какие действия выполняются с памятью в данном регионе зависит от вашего оборудования. К сожалению, некоторое оборудование ничего не выполняет и возможность использовать эти 500 МБ ОЗУ полностью потеряна. К счастью, большинство оборудования перераспределяет память к более верхней позиции, так что она всё ещё может использоваться. Тем не менее, это может вызвать некоторое замешательство, если вы посмотрите сообщения, выдаваемые при загрузке. На 32-битной версии FreeBSD кажется, что эта память потерялась. На самом деле она перераспределится в промежуток, лежащий за 4 ГБ, который не видим для 32 битного ядра. В данном случае, решение заключается в сборке ядра, с включенной опцией PAE. За дополнительной информацией обращайтесь к статье об ограничениях памяти и о различных ограничениях памяти на различных платформах. На 64nbsp;битной версии FreeBSD или в случае использования ядра с включённым PAE FreeBSD корректно определит и перераспределит память, так, что она станет годной к использованию. Тем не менее, во время загрузки может показаться, что FreeBSD определяет больше памяти, чем реально имеется в системе из-за описанного перераспределения. Это нормально, и информация о доступной памяти будет скорректирована по окончанию процесса загрузки. | |
5.2. | На моём винчестеры есть запорченные блоки! |
Если это SCSI-устройство, то винчестер должен иметь возможность автоматической переадресации таких блоков. Однако во многих поставляемых дисках эта возможность отключена. Для включения переадресации запорченных блоков, измените
режим работы устройства, что может быть выполнено пользователем
и изменить значения параметров AWRE и ARRE с 0 на 1: AWRE (Auto Write Reallocation Enbld): 1 ARRE (Auto Read Reallocation Enbld): 1 Контроллеры современных IDE-дисков имеют встроенную функцию переадресации запорченных блоков, которая на момент продажи включена. Если вы увидите предупреждения о запорченных блоках (на любом типе устройства), это значит, что пришло время подумать над заменой диска. Вы можете воспользоваться диагностической программой производителя диска для поиска этих запорченных блоков, и в лучшем случае это только отнимет ваше время. | |
5.3. | Почему FreeBSD не распознаёт SCSI-контроллер на машине HP Netserver? |
В общем-то это известная проблема. EISA-контроллеры SCSI, расположенные на материнской плате машин HP Netserver, занимают EISA-слот номер 11, так что все <<настоящие>> слоты EISA будут ему предшествовать. Так как адресное пространство для слотов EISA выше 10 пересекается с адресным пространством, предназначенным для PCI, то автоконфигуратор FreeBSD в настоящее время не может эту проблему нормально обойти. Так что пока лучшее, что вы можете предпринять, это попытаться
указать, что пересечения диапазонов адресов нет :), установив опцию
ядра Конечно, это даст вам типичную ситуации "курица или яйцо" при установке системы на такой машине. Для обхода этой проблемы внутри UserConfig есть специальный хак. Не используя <<визуального>> интерфейса, а только интерфейс командной строки, просто наберите следующую команду в приглашении и установите систему как обычно. eisa 12 quit В любом случае рекомендуется, что вы отконфигурируете и установите собственное ядро. Надеемся, что будущие версии будут содержать полное решение этой проблемы. Примечание:Вы не сможете использовать режим | |
5.4. | Выдаются сообщения типа ed1: timeout. |
Обычно это вызвано конфликтом прерываний (например, двух
адаптеров, использующих один и тот же IRQ). Загрузите систему с
опцией Если вы используете разъём BNC сетевого адаптера, таймауты устройства могут быть вызваны плохим терминированием. Чтобы это проверить, подключите терминатор к адаптеру (без кабеля) и посмотрите, не исчезли ли сообщения об ошибках. Некоторые NE2000-совместимые адаптеры выдают такую ошибку, если нет связи по UTP-порту или отключен кабель. | |
5.5. | Почему мой адаптер 3Com(R) 3C509 перестал работать без всякой видимой причины? |
Этот адаптер имеет странную привычку терять информацию о своих
настройках. Обновите настройки вашего адаптера при помощи утилиты
| |
5.6. | Мой параллельный принтер печатает невероятно медленно. Что тут можно сделать? |
Если проблема только в том, что принтер работает ужасно медленно, попробуйте сменить режим работы порта принтера так, как это описано в разделе Настройка принтера Руководства. | |
5.7. | Программы аварийно завершают работу с ошибкой Signal 11. |
Ошибки выполнения, связанные с сигналом 11, происходят, когда ваш процесс пытается обратиться к области памяти, доступ к которой ему не был дан операционной системой. Если что-то подобное происходит в случайные, на первый взгляд, промежутки времени, то вам нужно попытаться выяснить подробности происходящих событий более детально. Эти проблемы могут быть классифицированы следующим образом:
В частности, достоверно не ошибка FreeBSD, если вы сталкиваетесь с проблемой при компиляции программы, но при работе компилятора место сбоя каждый раз изменяется. Например, положим, что вы запускаете команду Что вы должны сделать: В первом случае вы должны воспользоваться отладчиком, к примеру, gdb(1), для нахождения точки программы, в которой делается попытка доступа к неверному адресу и затем исправить эту ошибку. Во втором случае вам нужно проверить, что ваше оборудование исправно. Среди часто приводящих к этому причин:
Вы также должны прочитать FAQ по SIG11 (ссылка дана ниже), в котором даны прекрасные описания всех этих проблем, хотя и с точки зрения Linux(R). Также обсуждается, как аппаратура или программное обеспечение для тестирования памяти могут пропускать сбойную память. Наконец, если ничего из этого не помогает, то возможно, что просто вы нашли ошибку во FreeBSD и должны следовать инструкциям по посылке сообщений о проблемах. Подробная информация по этому вопросу содержится в FAQ по проблеме SIG11. | |
5.8. | Моя система аварийно завершает работу с сообщениями Fatal trap 12: page fault in kernel mode либо panic:, и выдаёт много дополнительной информации. Что мне делать? |
Разработчики FreeBSD очень интересуются такими ошибками, но им нужно несколько больше информации, чем просто факт возникновения этой ошибки. Полностью скопируйте сообщение. Затем обратитесь к разделу FAQ об аварийных завершениях работы ядра, постройте отладочное ядро и получите трассу вызовов. Это может звучать трудной задачей, но вам не нужны никакие знания программирования; просто следуйте указаниям. | |
5.9. | При загрузке монитор темнеет и теряет синхронизацию! |
Это известная проблема с видеоадаптерами ATI Mach64. Она
вызвана тем, что этот адаптер использует адрес
Пока это не исправлено, используйте следующий метод:
Если вам нужно использовать последовательные порты, вы должны
построить новое ядро со следующей модификацией: в файле
| |
5.10. | Почему FreeBSD использует только 64 Мбайт ОЗУ, тогда как установлено все 128 Мбайт? |
Так как для определения объёма памяти FreeBSD использует информацию BIOS, она ограничена 16 битами, используемыми для выражения размера ОЗУ в килобайтах (65535 Кбайт = 64 Мбайт) (или меньше... некоторые BIOS ограничивают размеры памяти до 16 Мбайт). Если у вас больше чем 64 Мбайт ОЗУ, FreeBSD будет пытаться обнаружить эту память; однако эта попытка может и не удаться). Для решения этой проблемы вам нужно использовать опцию ядра, указанную ниже. Способ выяснения полной информации о памяти из BIOS существует, но у нас нет места в загрузочном блоке, чтобы это делать. Когда проблема нехватки места в загрузочных блоках будет решена, мы будем использовать расширенные функции BIOS для получения полной информации о памяти... но пока мы остановились на опции ядра. options MAXMEM= Здесь | |
5.11. | Объём оперативной памяти моей системы превышает 1 Гбайт, работа завершается аварийно с выдачей сообщения kmem_map too small messages. Что не так? |
Как правило, FreeBSD определяет параметры ядра, в частности, максимальное количество одновременно открытых файлов, исходя из объёма памяти, установленного в системе. В системах, имеющих 1 Гбайт или больший объём оперативной памяти, этот механизм <<автоматического определения параметров>> может выбрать слишком большие значения: при запуске ядро выделяет пространство под различные таблицы и другие структуры, которые заполняют основной объём доступной ядру памяти. В дальнейшем при работе системы у ядра не остаётся пространства для динамического распределения памяти, и оно завершает работу аварийно. Скомпилируйте новое ядро, добавив параметр
| |
5.12. | В моей системе нет 1 Гбайта оперативной памяти, однако FreeBSD аварийно завершает работу, выдавая сообщение kmem_map too small! |
Такое завершение работы показывает, что системе не хватает виртуальной памяти для сетевых буферов (точнее, структур mbuf). Вы можете увеличить количество виртуальной памяти для структур mbuf, если будете действовать в соответствии с инструкциями раздела Ограничения сети Руководства. | |
5.13. | Почему я получаю сообщение об ошибке kernel: proc: table is full? |
Ядро FreeBSD позволяет существовать одновременно ограниченному
числу процессов. Оно зависит от значения переменной
sysctl(8) Для корректировки значения Если ваша машина загружена слабо, и просто у вас
слишком много процессов, то вы можете настроить это через sysctl
Чтобы сохранить значения sysctl, задайте
их в | |
5.14. | При перезагрузке с новым ядром выдаётся сообщение
|
Процедура определения устаревших файлов
Если это случилось, загрузитесь в однопользовательский режим и выполните команду:
| |
5.15. | Что означает сообщение ahc0: brkadrint, Illegal Host Access at seqaddr 0x0 |
Это - результат конфликта со SCSI-адаптером Ultrastor. Во время загрузки войдите в меню конфигурации ядра и выключите
устройство | |
5.16. | При загрузке моей системы выдается сообщение об ошибке ahc0: illegal cable configuration. С подключением кабеля все в порядке. Что происходит? |
На вашей материнской плате отсутствует внешняя логика поддержки автоматического терминирования. Установите в вашем SCSI BIOS правильное терминирование для вашей конфигурации вместо автоматического терминирования. Драйвер ahc(4) не может определить, есть ли внешняя логика для распознавания кабеля (и, соответственно, автоматического терминирования). Драйвер просто полагает, что эта поддержка должна быть, если конфигурация, содержащаяся в EEPROM, установлена в <<automatic termination>>. Без внешней логики распознавания кабеля драйвер часто будет ошибаться при настройке терминирования, что может сказаться на надежности шины SCSI. | |
5.17. | Sendmail сообщает, что mail loops back to myself |
Подробный ответ вы можете получить в Руководстве. | |
5.18. | Полноэкранные приложения на удалённой машине ведут себя неправильно! |
На удалённой машине тип терминала может быть установлен
в значение, отличное от типа терминала Есть несколько возможных способов решения этой проблемы:
| |
5.19. | Почему мой PnP-адаптер
не обнаруживается (или определяется
как |
Причины такого поведения объясняются в следующем сообщении
электронной почты, опубликованном в Список рассылки, посвящённый вопросам и ответам пользователей FreeBSD
Peter Wemm Примечание:Содержание этой цитаты по сравнению с оригинальным текстом было изменено.
Чтобы заставить устройство работать снова, требуется определить его PnP-идентификатор и добавить его в список, который используется процедурой распознавания ISA для идентификации устройств PnP. Этот идентификатор можно получить при помощи программы pnpinfo(8), найдя устройство в её выдаче, вот, например, вывод команды pnpinfo(8) в случае внутреннего модема:
[лишние строки TAG исключены] TAG End DF End Tag Successfully got 31 resources, 1 logical fdevs -- card select # 0x0001 CSN PMC2430 (0x3024a341), Serial Number 0xffffffff Logical device #0 IO: 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 IRQ 5 0 DMA 4 0 IO range check 0x00 activate 0x01 Информация, которая вам нужна, находится в строке
Либо, если в списке, выдаваемом pnpinfo(8), адаптера нет,
можно воспользоваться утилитой pciconf(8). Вот часть выдачи
команды
В данном случае вам нужно использовать значение для
Эту информацию (ID производителя или номер микросхемы) нужно
добавить в файл Сначала вы должны сделать резервную копию файла
static struct isa_pnp_id sio_ids[] = { Затем переместитесь ниже и найдите подходящее место, чтобы добавить строчку для вашего устройства. Записи имеют примерно такой вид, и они отсортированы по ASCII-строкам Vendor ID, которые должны быть помещены в поле комментария справа от строки кода вместе с полным описанием устройства (если оно поместится) или частью из Device Description вывода программы pnpinfo(8): {0x0f804f3f, NULL}, /* OZO800f - Zoom 2812 (56k Modem) */ {0x39804f3f, NULL}, /* OZO8039 - Zoom 56k flex */ {0x3024a341, NULL}, /* PMC2430 - Pace 56 Voice Internal Modem */ {0x1000eb49, NULL}, /* ROK0010 - Rockwell ? */ {0x5002734a, NULL}, /* RSS0250 - 5614Jx3(G) Internal Modem */ Добавьте шестнадцатеричный идентификатор Vendor ID вашего
устройства в соответствующее место, сохраните файл, перестройте
ядро и выполните перезагрузку. Ваше устройство должно теперь быть
найдено в виде устройства | |
5.20. | Почему при запуске некоторых программ, например,
|
Проблема в том, что приложение, которое вы пытаетесь запустить, ищет специфические ссылки в ядре, но по каким-либо причинам не может их найти; эта ошибка происходит от одной из следующих проблем:
| |
5.21. | Почему подключение через |
Симптом: между моментом установления TCP-соединения и выдачей клиентским программным обеспечением запроса на ввод пароля (или, в случае использования telnet(1), выдачей приглашения на вход) проходит большой промежуток времени. Проблема: скорее всего, задержка вызвана программным обеспечением на стороне сервера, которое пытается преобразовать IP-адрес клиента в имя хоста. Многие серверы, включая Telnet и SSH, поставляемые с FreeBSD, делают это для того, чтобы, кроме всего прочего, записать имя хоста в файле журнала для справки администратора. Лечение: Если проблема возникает вне зависимости от того, к какому серверу вы подключаетесь с вашего компьютера (клиента), то причина в клиенте; или же, если проблема возникает только при чьей-либо попытке подключиться к вашему компьютеру (серверу), то проблема с сервером. Если проблема с клиентом, то единственным методом ее решения является исправление DNS, чтобы сервер смог распознать вашу машину. Если это происходит в локальной сети, то предположите, что это проблема с сервером и продолжайте чтение; обратно, если это происходит в глобальной сети Интернет, то в большинстве случаев вам нужно обратиться к вашему провайдеру и попросить исправить положение. Если проблема с сервером, и это происходит в локальной
сети, то вам нужно настроить сервер для разрешения запросов на
преобразование адреса в имя хоста в диапазоне ваших локальных
адресов. Обратитесь к страницам Справочника по hosts(5)
и named(8) для получения более подробной информации.
Если это происходит в глобальной сети Интернет, то проблема
может заключаться в некорректной работе ресолвера вашего сервера.
Для проверки попробуйте найти другой хост, скажем,
Из-за свежей установки FreeBSD, также возможно, что
информация о домене и сервере имён отсутствует в
| |
5.22. | Что означает сообщение stray IRQ? |
Потерянные IRQ являются признаком странностей в работе аппаратных IRQ, в основном оборудования, которое удаляет свои запросы на прерывание посреди цикла подтверждения запроса на прерывание. Имеется три варианта работы с такими ситуациями:
| |
5.23. | Почему в dmesg(8) регулярно выводятся сообщения file: table is full? |
Такое сообщение об ошибке сигнализирует о том, что в вашей системе исчерпано количество доступных файловых дескрипторов. Пожалуйста, обратитесь к разделу kern.maxfiles главы о Настройке ограничений ядра Руководства для выяснения всех подробностей и устранения этой проблемы. | |
5.24. | Почему выводятся сообщения calcru: negative runtime или calcru: runtime went backwards? |
При включении в BIOS Intel(R) Enhanced SpeedStep может возникнуть проблема, при которой ядро начинает выводить сообщения calcru как показано ниже: calcru: runtime went backwards from 6 usec to 3 usec for pid 37 (pagezero) calcru: runtime went backwards from 6 usec to 3 usec for pid 36 (vmdaemon) calcru: runtime went backwards from 170 usec to 138 usec for pid 35 (pagedaemon) calcru: runtime went backwards from 553 usec to 291 usec for pid 15 (swi6: task queue) calcru: runtime went backwards from 15521 usec to 10366 usec for pid 2 (g_event) calcru: runtime went backwards from 25 usec to 12 usec for pid 11 (swi1: net) calcru: runtime went backwards from 4417 usec to 3960 usec for pid 1 (init) calcru: runtime went backwards from 2084385 usec to 1793542 usec for pid 1 (init) calcru: runtime went backwards from 408 usec to 204 usec for pid 0 (swapper) Причиной является то, что Intel(R) SpeedStep (EIST) не совместим с некоторыми системными платами. Обходной путь: отключить EIST в BIOS. При этом у вас сохраняется возможность управлять частотой ACPI-совместимого процессора, используя powerd(8). | |
5.25. | Почему часы на моем компьютере показывают неправильное время? |
На вашем компьютере установлены двое или большее количество таймеров, а FreeBSD выбрала не тот. Запустите dmesg(8) и посмотрите строки, содержащие слово
Вы можете удостовериться в этом, проверив
sysctl(3)-переменную
Это может быть неработающий таймер ACPI. Самым простым
решением будет отключить таймер ACPI в
debug.acpi.disabled="timer" Либо же BIOS может изменить частоту TSC-может, для изменения скорости работы процессора при работе от батареек или переводя в режим пониженного электропитания, но FreeBSD не отслеживает это и в результате часы начинают спешить или отставать. В этом примере имеется также и таймер
Теперь ваш компьютер будет аккуратнее следить за временем. Чтобы это изменение вступало в силу во время загрузки системы,
добавьте в файл kern.timecounter.hardware=i8254 | |
5.26. | Почему мой лэптоп некорректно распознаёт PC-карты? |
Эта проблема часто встречается на лэптопах, которые работают более чем с одной операционной системой. Некоторые не-BSD операционные системы оставляют аппаратную часть PC-карт в неустойчивом состоянии. pccardd(8) распознает карту как "(null)""(null)", а не как реально используемую модель. Вы должны убрать всё питание со слота PC-карты для полного сброса аппаратуры. Полностью выключите лэптоп. (Не переводите его ни в спящий, ни в ждущий режим; питание должно быть выключено полностью.) Подождите несколько секунд и выполните перезагрузку. Теперь ваша PC-карта должна заработать. В некоторых лэптопах аппаратная часть неверно сообщает о своём выключении. Если описанное выше не работает, остановите работу, выньте батарею, подождите несколько секунд, вставьте батарею и выполните перезагрузку. | |
5.27. | Сразу после экрана BIOS начальный загрузчик FreeBSD выводит сообщение Read error и останавливается. |
Начальный загрузчик FreeBSD неверно определяет параметры винчестера. Их можно установить вручную утилитой fdisk(8) при создании или изменении параметров слайса FreeBSD. Правильные значения параметров диска можно посмотреть в BIOS. Обратите внимание на число дорожек, головок и секторов для этого диска. В подпрограмме fdisk утилиты sysinstall(8) нажмите G для установки параметров диска (disk geometry). Появится диалоговое окно, запрашивающее количество дорожек,
головок и секторов. Задайте значения, взятые из BIOS и разделяемые
символами слэша. Например, 5000 дорожек, 250 головок и 60 секторов
будут введены как Нажмите Enter для установки этих значений, а затем клавишу W для того, чтобы записать новую таблицу разделов на диск. | |
5.28. | Другая операционная система уничтожила мой менеджер загрузки, как мне его восстановить? |
Запустите утилиту sysinstall(8) и выберите пункт , а затем . Выберите диск, на котором ранее находился менеджер загрузки, при помощи клавиши Пробел. Нажмите W для записи изменений на диск. Появится диалоговое окно для выбора устанавливаемого начального загрузчика. Выберите нужный, и он будет восстановлен. | |
5.29. | Что означает сообщение swap_pager: indefinite wait buffer:? |
Это значит, что процесс пытается сбросить страницу памяти на
диск, и попытка сделать это оканчивается неудачно вот уже в течение
более чем 20 секунд. Это может быть вызвано испорченными блоками
на диске, кабелями, подключением или другим оборудованием
ввода/вывода. Если диск сам по себе на самом деле испорчен, вы
также увидите ошибки работы с диском в
| |
5.30. | Что означают ошибки UDMA ICRC, и как их исправить? |
Драйвер ata(4) сообщает об ошибках UDMA ICRC, когда нарушается передача в или с диска в режиме DMA. Драйвер будет повторять передачу несколько раз. Если повторные попытки окончатся неудачей, он переключится из режима DMA в более медленный режим PIO взаимодействия с устройством. Проблема может возникать по многим причинам, хотя самым распространённой является неправильное или сбоящее подключение кабелей. Проверьте кабели ATA на наличие повреждений и соответствие используемому режиму Ultra DMA. Если вы используете диски на съёмных салазках, они также должны быть совместимыми с этим режимом. Удостоверьтесь, что все соединения подключены хорошо. Проблемы также наблюдались, когда старый диск устанавливался на тот же самый канал ATA, что и Ultra DMA 66 (или более быстрый) диск. Наконец, такие ошибки могут указывать на сбойность самого диска. Большинство производителей дисков предоставляют программное обеспечение для тестирования своих дисков, так что проверьте свой диск, и, если это необходимо, сделайте резервную копию данных и замените его. Для просмотра и выбора режимов DMA или PIO для каждого
устройства ATA можно использовать утилиту atacontrol(8). В
частности, команда | |
5.31. | Что означают сообщения lock order reversal? |
Ответ на этот вопрос можно найти в глоссарии FreeBSD, смотрите LOR. | |
5.32. | Что означают сообщения Called ... with the following non-sleepable locks held? |
Это означает, что функция, которая может находиться в <<спящем>> состоянии была вызвана во время использования мьютекс (или другого не <<засыпающего>>) блокирования. Причина этого - ошибка, потому что мьютексы не предполагают находиться в удерживаемом состоянии длительные промежутки времени, а блокировать только на короткие периоды синхронизации. Это правило позволяет драйверам устройств использовать мьютексы для синхронизации с остальной частью ядра во время прерываний. Прерывания (во FreeBSD) могут находиться не в <<спящем состоянии>>. Следовательно необходимо, чтобы не было подсистем в ядре, которые бы занимались блокировкой длительный период, используя мьютекс. Для ловли таких ошибок, в ядро могут быть добавлены assertions, которые будут взаимодействовать с подсистемой witness(4) для генерирования предупреждения или фатальной ошибки (в зависимости от системной конфигурации) в случаях когда производится потенциально блокирующий вызов с удержанием мьютекса. В общем, такие предупреждения не критичны, но тем не менее, с неудачной синхронизацией (timing) они могут вызвать нежелательные эффекты, начиная от незначительной задержки в ответной реакции системы до полной блокировки системы. | |
5.33. | Почему процесс
|
Эта ошибка не означает, что не найдена утилита touch(1).
Ошибка наверняка появляется из-за того, что даты модификации файлов
установлены в будущем. Если ваши CMOS часы установлены на локальное
время, то вам надо отрегулировать часовой механизм ядра, запустив
команду |
Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.