Последовательные консоли


Любая консоль — вещь сама по себе хорошая, но как быть в случае  появления проблем, когда ваша система FreeBSD находится от вас на большом удалении — на противоположном конце страны или на другом континенте? Клавиатура и монитор тоже штука хорошая, но во многих информационных центрах для них просто нет места. И как  перезагрузить машину, когда она не отвечает на запросы по сети?  Последовательная консоль поможет решить все эти проблемы и не только их.

Последовательная консоль просто направляет ввод с клавиатуры и  вывод видео в последовательный порт, а не на клавиатуру и монитор.  Последовательные консоли присутствуют во всех типах сетевого оборудования, начиная от сетевых маршрутизаторов и коммутаторов Cisco и заканчивая сетевыми мультиплексорами KVM. Многие устройства обеспечения безопасности, такие как дверные замки с клавиатурой, также имеют последовательные консоли. Соединив последовательные порты двух компьютеров стандартным нуль-модемным кабелем  компьютера, вы из одной системы получите доступ к загрузочным сообщениям второй системы. Это особенно удобно, если компьютеры  находятся на большом удалении друг от друга. Чтобы получить доступ к последовательной консоли, ваш компьютер должен иметь  последовательный порт. С каждым годом растет выпуск систем, «неотягощенных наследством», в которых отсутствуют такие основные аппаратные элементы, как последовательные порты и порты PS/2 для подключения клавиатуры и мыши.

Последовательные консоли могут быть как аппаратными, так и  программными.

Аппаратные последовательные консоли

Настоящие аппаратные средства UNIX (такие как Sparc64) имеют аппаратные последовательные консоли. В этих системах можно подключить последовательный кабель к порту последовательной консоли и получить свободный доступ к аппаратным настройкам, загрузочным сообщениям и параметрам запуска. Большинство аппаратных средств х86 не предоставляют такой возможности — необходимо сидеть за клавиатурой и следить за монитором, чтобы зайти в BIOS или нажать пробел для  прерывания загрузки. Такой функциональностью обладает лишь малая часть системных плат х86 и amd64, но все большее и большее число  производителей, таких как Dell или HP предлагают порты  последовательных консолей как дополнительную особенность своих компьютеров — но это специальная функция, которую не сразу найдешь. (Поддержка последовательной консоли в HP RILOE позволяет даже управлять питанием компьютера с помощью последовательной консоли, что приятно.)

Если ваш компьютер не имеет последовательной консоли, ни одна операционная система не предоставит вам доступ к PC-совместимым сообщениям BIOS через последовательный порт. Такие сообщения  появляются до запуска операционной системы и обращения к жестким дискам. Для преодоления этих трудностей есть аппаратные решения. Самое лучшее из тех, что я видел, это PC Weasel (http://www.realweasel.com). Это видеоплата с последовательным портом вместо видеопорта.  Подсоединив последовательный кабель к Weasel, можно манипулировать BIOS удаленно, прерывать загрузку для перехода в  однопользовательский режим и выполнять любые операции в системе, как будто вы  находитесь за консолью.

Аппаратные консоли не требуют обеспечения поддержки со стороны операционной системы.

Программные последовательные консоли

Если вам нужен доступ не к ранним сообщениям BIOS, а только к  сообщениям загрузчика, то вполне достаточно будет программной  последовательной консоли, реализованной в системе FreeBSD. При загрузке система FreeBSD решает, куда выводить сообщения и откуда принимать ввод. По умолчанию это монитор и клавиатура. Однако с  помощью несложных манипуляций можно настроить консоль на  последовательном порте, который должен быть в системе. Вы не сможете получить доступ к BIOS, но эта последовательная консоль даст вам  возможность влиять на процесс загрузки. FreeBSD позволяет настраивать последовательную консоль в двух различных местах. Для обычных  рабочих систем лучше всего поместить настройки последовательной  консоли в файл /boot/config. Это обеспечит вам доступ к самым ранним стадиям процесса загрузки. У вас есть три варианта: использовать в  качестве консоли стандартные клавиатуру/монитор/мышь,  использовать в качестве консоли последовательный порт или использовать двойную консоль. Стандартный вариант настройки консоли  используется по умолчанию, поэтому его не нужно настраивать отдельно. Чтобы принудить FreeBSD использовать последовательную консоль,  введите -h в файл /boot/config.

Двойные консоли позволяют использовать как стандартные, так и  последовательные консоли, в зависимости от потребностей. Однако при этом вам нужно указать, какая из этих консолей будет являться первичной. Дело в том, что существуют низкоуровневые задачи, такие как загрузка с помощью альтернативного загрузчика или вызов  отладчика, которые доступны только с первичной консоли, но во всем  остальном по своим возможностям консоли совершенно идентичны.  Введите -D в файл /boot/config, чтобы разрешить использование консолей обоих типов и назначить первичной стандартную консоль. Введите -Dh в файл /boot/config, чтобы разрешить использование консолей обоих типов и назначить первичной последовательную консоль. Я  рекомендую использовать двойную консоль.

Управлять настройками консолей можно также из файла /boot/loader.conf. Действие записей в этом файле проявляется немного позднее, на заключительной стадии загрузки и запуска ядра. Чтобы  использовать только последовательную консоль, добавьте в /boot/loader.conf следующую запись:

console="comconsole"

Чтобы переключиться обратно к видеоконсоли, удалите или  закомментируйте эту строку. Кроме того, в /boot/loader.conf можно задать такую строку:

console="vidconsole"

Вы можете указать необходимость использования обеих консолей, перечислив в значении переменной comconsole и vidconsole, поместив  предпочтительную консоль первой. Ниже приводится вариант настройки с предпочтительной последовательной консолью:

console="comconsole vidconsole"

В серверной комнате вам может понадобиться переключаться от  стандартной консоли к последовательной и обратно. Как правило, я  управляю большим количеством машин FreeBSD через последовательную консоль.

Автоматическое обнаружение клавиатуры

В некоторых описаниях FreeBSD, которые можно найти в  Интернете, вам могут встретиться сведения об использовании автоматического обнаружения клавиатуры при выборе консоли. Суть идеи состоит в том, что если к компьютеру не подключена  клавиатура, это означает, что вы скорее всего используете  последовательную консоль. Такой подход замечательно работает, если  используются клавиатуры AT или PS/2, но автоматическое обнаружение клавиатуры, подключенной к порту USB, обычно терпит неудачу. Поэтому лучше выполнить настройку двойной консоли и не полагаться на автоматическое обнаружение клавиатуры.

Физическая настройка программной последовательной консоли

Независимо от типа имеющейся у вас последовательной консоли, вам необходимо правильно подключиться к ней. Для этого вам  потребуется нуль-модемный кабель (его можно приобрести в любом  компьютерном магазине или в интернет-магазине). Позолоченные кабели не  стоят тех денег, которые за них просят, но не стоит покупать и самую дешевую модель из имеющихся; когда в чрезвычайных обстоятельствах вам понадобится последовательная консоль, помехи в линии передачи будут совершенно некстати.

Подключите один конец нуль-модемного кабеля к порту  последовательной консоли на сервере FreeBSD — по умолчанию это первый  последовательный порт (СОМ1 или sio0, в зависимости от того, к какой операционной системе вы привыкли). Это значение можно изменить с помощью перекомпиляции ядра, но обычно проще использовать  значение по умолчанию.

Другой конец нуль-модемного кабеля подключите к открытому  последовательному порту другой системы. Я рекомендую либо другую  систему FreeBSD (либо иную систему UNIX), либо терминальный сервер. Можно задействовать систему Windows, если это все, что у вас имеется.

Если у вас есть две удаленные машины FreeBSD и вы хотите применять на них последовательные консоли, убедитесь, что каждый из компьютеров имеет два последовательных порта. Возьмите два нуль-модемных кабеля и соедините первый последовательный порт каждого компьютера со вторым последовательным портом другого компьютера. Таким способом вы сможете использовать любой компьютер в качестве  консольного клиента другого компьютера. При наличии трех машин  можно объединить их в замкнутую кольцевую цепочку. Комбинируя  группы по две и три машины, вы сможете разместить последовательные консоли на любом количестве систем FreeBSD. Я работал с 30-40 машинами FreeBSD в одной комнате, где установка мониторов была бы просто непрактична, а последовательные консоли приносили  большую пользу. Однако, как только у вас появится стойка из двух серверов, совершенно нелишним будет вложить деньги в приобретение терминального сервера.* Довольно недорого их можно купить на eBay.

Другой вариант заключается в использовании переходников DB9-RJ45 — это позволит подключаться к вашим консолям с помощью  кабеля САТ5. Если вы работаете в информационном центре, где доступ людей в машинный зал запрещен, кабели последовательных консолей могут выходить рядом с вашим рабочим столом или в другом  доступном месте, на панели с разъемами Ethernet. Большинство  современных информационных центров лучше оснащено сетями Ethernet, чем последовательными кабелями.

Использование последовательной консоли

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

  • Скорость 9600 бод
  • 8 бит
  • Без контроля четности
  • 1 стоповый бит

Введите эти значения в любом эмуляторе терминала на клиентском компьютере, и последовательная консоль «просто начнет работать». Эмуляторы терминала можно найти, например, в Windows (HyperTerm — пожалуй, самый известный), Macintosh и в любых других  операционных системах. Несколько лет тому назад я часто использовал карманный компьютер Palm с последовательным кабелем для доступа к последовательным консолям.

FreeBSD обращается к линиям последовательной передачи данных с помощью программы tip(1), позволяющей подключаться к  удаленной системе, аналогично telnet. Для запуска tip наберите следующую команду, обладая правами пользователя root:

# tip portname

Имя порта (portname) — это сокращение для указания номера  последовательного порта и скорости, на которой он работает. Файл /etc/remote содержит список имен портов. Большинство записей в этом файле  являются пережитком тех дней, когда протокол UUCP был основным протоколом передачи данных, а последовательные терминалы были нормой, а не исключением из правил.* Однако в конце этого файла есть несколько таких записей:

Названия sio соответствуют стандартным именам устройств в UNIX, тогда как имена com добавлены для удобства тех, кто вырос на аппаратном обеспечении х86. Предположим, что у вас есть две машины FreeBSD, подсоединенные друг к другу. С помощью нуль-модемного  кабеля последовательный порт 1 одной машины соединен с  последовательным портом 2 другой. Пусть вы хотите обратиться к локальному  последовательному порту 2 для взаимодействия с последовательной консолью другой системы:

# tip sio1
connected

Что бы вы ни набрали, ничего другого вы не увидите.

Если вы зарегистрируетесь на другой системе и перезагрузите ее, то в окне tip вдруг появится следующее:

Далее при загрузке системы наступит долгая пауза. Если вы  находитесь рядом с системой, то сможете увидеть пробегающие стандартные сообщения BIOS. Наконец, вы увидите примерно следующее:

Это говорит о том, что загрузчик отыскал и загрузил файлы ядра, прежде чем вывести загрузочное меню. Поздравляю! Вы пользуетесь  последовательной консолью. Нажмите клавишу пробела, чтобы  прервать процесс загрузки. Неважно, как далеко система находится от вас, вы можете изменить загружаемое ядро, получить подробный  отчет о загрузке, перейти в однопользовательский режим или вручную проверить файловые системы с помощью fsck, одним словом — сделать все, что угодно. Программная последовательная консоль может не обеспечивать доступ к BIOS, но к этому моменту BIOS уже  загрузилась. Когда вы обладаете определенным опытом пользования  последовательной консолью, вам совершенно неважно, где находится управляемая система — в противоположном углу комнаты или на другом краю мира, и вам скорее покажется тяжелой работой подняться со  стула только для того, чтобы подойти к обычной консоли.

Если продолжить загрузку системы, то через некоторое время поток сообщений остановится и последовательная консоль прекратит свое функционирование. Это происходит потому, что последовательная консоль не предназначена для входа в систему. (Возможность входить в систему с помощью последовательной консоли иногда бывает  полезной — подробнее об этом рассказывается в главе 20.)

Если удаленная система полностью заблокирована, вы можете  подключить к ней свою последовательную консоль и «протянуть руки» к  выключателю, управляющему электропитанием системы. Это может иметь нежелательные последствия для компьютера, но находиться в  заблокированном состоянии тоже не очень хорошо. С помощью последовательной консоли можно выполнить загрузку в однопользовательском режиме и определить источник проблемы, покопавшись в файлах  протоколов или где-либо еще, что может иметь отношение к неисправности. Подробнее об устранении неисправностей будет говориться в главе 21.

Выключение последовательной консоли

В качестве управляющего символа программа tip(1) использует  тильду (~). Чтобы выключить последовательную консоль, можно в любой момент ввести последовательность выключения «тильда-точка»:

~.

Вы грациозно отключитесь.

Комментарии запрещены.