Рейтинг@Mail.ru

Наши друзья и партнеры

UnixForum
купить дешевый 
компьютер родом из Dhgate.com



  • Штабелер купить
  • Надежные ручные гидравлические штабелеры по доступным ценам
  • proflifter.ru
  • Ремонт iPad
  • Дизайн интерьеров и ремонт помещений
  • masterovik-sotovik.ru
Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Процесс начальной загрузки системы

Обратная прокрутка текста в консоли Линукс

Оригинал: Linux Console Scrollback
Дата: октябрь 2007
Автор: Anonymous
Свободный перевод: Алексей Дмитриев
Дата перевода 19 ноября 2007

Мы говорим здесь о GNU/Linux текстовой консоли - а не о том, что появляется в окне терминала, или X-window менеджера, или рабочего стола. По этому поводу столько всякой неразберихи, что я вынужден тривиально сказать: - "Если вы, находясь в графическом режиме, нажимаете 'Alt-Ctrl-F1' (или 'F2'и т.д.), то вы попадаете в текстовую консоль".

0. О чем идет речь?

Происходит загрузка компьютера. Вы в текстовой консоли, наблюдаете за быстро проплывающим вниз текстом. Вы хотите просмотреть уже промелькнувший кусок этого текста. Вы нажимаете 'Shift-PgUp' или 'Shift-PgDn', а если раньше уже изменяли сочетания клавиш по умолчанию (нет-нет, не раскладку клавиатуры в Иксах), то какие-либо другие клавиши. Этими клавишами вы заставляете текст перемещаться вверх-вниз по экрану. В данный момент вы используете буфер обратной прокрутки (назовем его буфер прокрутки для краткости).

Когда начинаешь вовсю пользоваться этим буфером, то очень скоро выясняются две вещи:
Только часть текста, сопровождавшего загрузку, может быть возвращена.
Файл '/var/log/messages' фиксирует гораздо меньше того, что вы хотели увидеть.

Вы начинаете прочесывать Интернет, и вскоре предварительные результаты появляются: публикации по обратной прокрутке в Линуксе весьма древние и прослеживаются до ранних 90х годов. Однако обо всем, что было до ядра версии 2.6.x следует забыть.

В самом деле, следует быть избирательным в том, что читаешь: большинство советов, относящихся к версиям прежде 2.6.x, скорее всего запутают вас и уведут по ложному пути. Поверьте мне - я убил на это дело много времени. Поведение обратной прокрутки определяется в файле 'vc.c', противном маленьком файлике в исходниках ядра, причем 'vc' обозначает 'virtual console' (виртуальная консоль).

Заметьте, что при переключении консолей, буфер прокрутки теряется - таким образом, в текущей консоли доступен полный объем этого буфера. (Здесь особенно много завалов информационного мусора со времен до ядра 2.6.x ).

По умолчанию, размер буфера равен 32K. Этого хватает на 4 нажатия клавиш обратной прокрутки - каждое нажатие прокручивает половину экрана, 25 строчек на экран. Выходит около 50 строк. И больше вы не получите, даже еcли у вас 30 или 50 строк на экран. Нужно сказать, что 50 строк - это малая толика того, что пролетает по экрану за время загрузки. В связи с вышеизложенным, встают два вопроса:

Как увеличить буфер прокрутки?

Почему логи не фиксируют некоторые сообщения, которые вы видели во время загрузки?

1. Как увеличить буфер обратной прокрутки?

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

И такое средство есть, а называется оно 'framebuffer console', для краткости 'fbcon'. Это устройство имеет файл документации 'fbcon.txt'; если вы устанавливали документацию к ядру, то он у вас есть. Выискивайте его где-то в районе '/usr/share' ветви (я не могу указать точный путь из-за разницы в дистрибутивах). Всегда можно скачать его как одиночный файл здесь.

На этом месте прошу прощения: мы должны сделать небольшое отступление и немного поговорить о видеобуфере (framebuffer).

Видеобуфер - это буфер между дисплеем и видеоадаптером. Его прелесть в том, что им можно манипулировать: он позволяет трюки, которые не прошли бы, будь адаптер связан напрямую с дисплеем.

Один из таких трюков связан с буфером прокрутки; оказывается, вы можете "попросить" видеобуфер выделить больше памяти буферу прокрутки. Достигается это через загрузочные параметры ядра. Сначала вы требуете framebuffer (видеобуфер); Затем запрашиваете больший буфер прокрутки.

Нижеследующий пример касается GRUB, но может быть легко адаптирован к LILO. В файле настройки GRUB - 'menu.lst'- найдите соответствующую ядру строчку, и затем:
Удалите опцию 'vga=xxx', если таковая присутствует.
Добавьте опцию 'video=vesabf' или то, что соответствует вашему "железу".
Добавьте опцию 'fbcon=scrollback:128'.
После этой процедуры, строка параметров ядра должна выглядеть приблизительно так:
'kernel /vmlinuz root=/dev/sdb5 video=radeonfb fbcon=scrollback:128'.

Спрашивается, зачем удалять опцию 'vga=xxx'? Из-за возможных конфликтов с видео-опцией. На своем ATI адаптере, я не могу изменить буфер прокрутки, если 'vga=xxx' присутствует в списке. Возможно в вашем случае это не так. Если вышеперечисленные опции работают - хорошо; но что, если вы хотите увеличить число строк, или установить более мелкий шрифт на экране? Вы всегда делали это при помощи опции 'vga=xxx' - а она-то и исчезла. Не переживайте - то же самое может быть достигнуто изменением параметров fbcon, как описано в файле 'fbcon.txt' (но не описано в данной статье). В Ubuntu и Debian есть более удобный способ: 'dpkg-reconfigure console-setup'. Эту команду стоит использовать также и потому, что она еще и корректирует 'initrd' на ваши новые настройки.

2. Расширение пределов

Опция 'fbcon=scrollback:128' дает вам возможность перемещения по буферу прокрутки на 12-13 экранов. Это приблизительно 150 строк - вполне неплохо, Но, возможно, еще недостаточно для просмотра всех загрузочных сообщений. Можно ли поставить больше 128, скажем, 256? Предел 128 заложен в 'vc.c'. Если хотите больше, редактируйте и компилируйте. Для себя я решил, что игра не стоит свеч.

Когда я уже совсем решил, что достиг наивысшего предела - я цитирую из 'fbcon.txt':
fbcon=scrollback:<value>[k]
...
The 'k' suffix is optional, and will multiply the 'value' by 1024.
(Суффикс 'k' является опциональным, и умножит значение 'value' в 1024 раза).

Я бросился проверять,.. и, что бы ни думал по этому поводу автор, убедился, что 128 и 128k дают абсолютно одинаковый результат. Предел по умолчанию равен 128KB памяти, вот и весь сказ.

Напоследок заметьте, что применение расширенного буфера прокрутки использует как память графического адаптера, так и буфер в оперативной памяти. Если вы довольствуетесь умолчальными 32KB, вы используете только память видеоадаптера. На практике, однако, я не заметил ни малейшего замедления.

3. Что отсутствует в логах?

В Ubuntu и Debian и других дистрибутивах все системные сообщения сохраняются в файле '/var/log/messages'. Это применимо, даже если сервис (daemon) протоколирования не старый 'syslog', а 'syslog-ng' ('ng': "new generation" /новое поколение/).

В обоих случаях, вы можете просмотреть сообщения, набрав 'dmesg' в командной строке. Это не помогает: вы ясно видели во время загрузки сообщения, которых нет в выводе команды 'dmesg'. Как же так?

Это свойство, а не ошибка! Сообщения, протоколируемые в файле, приходят от различных субсистем ОС. Субсистемы, выдающие сообщения в файл протокола, в терминологии syslog обозначаются как 'facilities' ("средства" или "услуги"), их всего 8 штук. В процессе загрузки работают программы и скрипты, которые могут и не принадлежать ни к одному из 8 "средств". Мы видим их сообщения, пробегающими по экрану, но ничего не будет зафиксировано в лог-файле!

Например вы не увидите сообщений от программ 'loadkeys' (openSUSE) или 'consolechars' (Ubuntu и Debian), когда происходит загрузка раскладки клавиатуры во время загрузки системы. Другой пример: когда пользуетесь консольным текстовым редактором, вы можете прокручивать дисплей назад (включая цвета), пользуясь при этом буфером прокрутки. Но то, что производит редактор, никогда не попадет ни в один системный протокол. Причина, разумеется, в том, что ни 'loadkeys', ни 'consolechars', ни редактор, не принадлежат ни к одному из 8 "средств".

Можно ли изменить ситуацию? Конечно - "просто" переделайте и перекомпилируйте те приложения, которые вы хотите протоколировать. Допишите или перепишите загрузочные скрипты. Или заставьте систему фиксировать сообщения извне 8 системных "средств".

Держу пари, что вы не станете этим заниматься. И даже знаю ваш вероятный ответ:
- "Из моих логов ничего не пропадает". Да-да, конечно...

Если вам понравилась статья, поделитесь ею с друзьями:


Средняя оценка 5 при 1 голосовавших