Интерфейс Sony CDU-535 (sonycd535)
Синтаксис для этого интерфейса:
sonycd535=iobase[, irq]
Если необходимо прописать значение IRQ, то в качестве адреса ввода/вывода следует указать 0.
sonycd535=iobase[, irq]
Если необходимо прописать значение IRQ, то в качестве адреса ввода/вывода следует указать 0.
Интерфейс GoldStar (gscd)
Синтаксис для интерфейса CD-ROM:
gscd=iobase
gscd=iobase
Интерфейс ISP16 (isp16)
Синтаксис для этого интерфейса:
isp16= [port [, irq[, dma]]] [[,] drive_type]
Использование нуля для IRQ или DMA означает, что они не используются. Допустимые значения ДЛЯ drive_type – noispl6, Sanyo, Panasonic, Sony и Mitsumi. Применение noispie полностью запрещает драйвер.
isp16= [port [, irq[, dma]]] [[,] drive_type]
Использование нуля для IRQ или DMA означает, что они не используются. Допустимые значения ДЛЯ drive_type – noispl6, Sanyo, Panasonic, Sony и Mitsumi. Применение noispie полностью запрещает драйвер.
Интерфейс Mitsumi Standard (mcd)
Синтаксис для этого интерфейса CD-ROM:
mcd=iobase, [irq[,wait_value]]
wait_vaiue используется как значение внутреннего тайм-аута.
mcd=iobase, [irq[,wait_value]]
wait_vaiue используется как значение внутреннего тайм-аута.
Интерфейс Optics Storage (optcd)
Синтаксис для этого типа карт:
optcd=iobase
optcd=iobase
Интерфейс Phillips CM206 (cm206)
Синтаксис для этого типа карт:
cm206=[iobase][,irq]
Драйвер предполагает значения IRQ между 3 и 11, а значения портов ввода/вывода– между 0x300 и 0x370. Также допускается cm206=auto для разрешения автоматического определения параметров.
cm206=[iobase][,irq]
Драйвер предполагает значения IRQ между 3 и 11, а значения портов ввода/вывода– между 0x300 и 0x370. Также допускается cm206=auto для разрешения автоматического определения параметров.
Интерфейс Sanyo (sjcd)
Синтаксис для этого типа карт:
sjcd=iobase[,irq[,dma_channel]]
sjcd=iobase[,irq[,dma_channel]]
Интерфейс SoundBlaster Pro (sbpcd)
Синтаксис для этого типа карт:
sbpcd=iobase,type
где type – один из следующих (чувствителен к регистру) значений: SoundBlaster, LaserMate, или SPEA. iobase – адрес интерфейса CD-ROM, а не звуковой части карты.
sbpcd=iobase,type
где type – один из следующих (чувствителен к регистру) значений: SoundBlaster, LaserMate, или SPEA. iobase – адрес интерфейса CD-ROM, а не звуковой части карты.
Последовательные и ISDN-драйверы
В разделе приведены параметры для некоторых ISDN-карт и так называемых мультипортовых последовательных контроллеров. Как обычно, первоначально единых стандартов не существовало, и из-за этого приходится иногда использовать параметры, передаваемые при загрузке ядра.
Драйвер PCBIT ISDN (pcbit)
Параметры:
pcbit=membase1,irq1[,membase2,irq2]
где membaseN – база разделяемой памяти для::-ой карты, a irqN – установленное прерывание для n-ой карты. По умолчанию IRQ 5 и membase 0xD0000.
pcbit=membase1,irq1[,membase2,irq2]
где membaseN – база разделяемой памяти для::-ой карты, a irqN – установленное прерывание для n-ой карты. По умолчанию IRQ 5 и membase 0xD0000.
Драйвер Teles ISDN (teles)
ISDN-драйвер требует аргументы загрузки в следующем виде:
teles=iobase,irq,membase,protocol,teles_id
где iobase – адрес порта ввода/вывода карты, membase – базовый адрес разделяемой памяти карты, irq – прерывание, используемое картой, teies_id – уникальная строка идентификатора.
teles=iobase,irq,membase,protocol,teles_id
где iobase – адрес порта ввода/вывода карты, membase – базовый адрес разделяемой памяти карты, irq – прерывание, используемое картой, teies_id – уникальная строка идентификатора.
Драйвер DigiBoard (digi)
Драйвер мультипортового последовательного контроллера DigiBoard принимает строку из шести идентификаторов или целых чисел, разделенных запятыми. Значения по порядку:
• Enable/Disable – разрешить/запретить использование контроллера;
• тип карты – PC/Xi(0), РС/Хе(1), PC/Xeve(2), PC/Xem(3);
• Enable/Disable – разрешить/запретить альтернативное расположение контактов;
• количество портов на этой карте;
• порт ввода/вывода, на который сконфигурирована карта;
• база окна памяти. Пример аргумента загрузки:
digi=E,PC/Xi,D,16,200,D0000
Более подробную информацию можно прочитать в файле /usr/src/Linux-2.4.3/Documentation/digiboard.txt.
• Enable/Disable – разрешить/запретить использование контроллера;
• тип карты – PC/Xi(0), РС/Хе(1), PC/Xeve(2), PC/Xem(3);
• Enable/Disable – разрешить/запретить альтернативное расположение контактов;
• количество портов на этой карте;
• порт ввода/вывода, на который сконфигурирована карта;
• база окна памяти. Пример аргумента загрузки:
digi=E,PC/Xi,D,16,200,D0000
Более подробную информацию можно прочитать в файле /usr/src/Linux-2.4.3/Documentation/digiboard.txt.
Последовательный/параллельный радиомодем Baycom (baycom)
Формат аргумента загрузки для этого устройства:
baycom=modem,io,irq,options[,modem,io,irq,options]
Использование modem=i означает, что у вас устройство seri2; modem=2 – устройство рагЭб. Значение options=0 предписывает использование аппаратного DCD, a opton=l – программного DCD. Параметры io и irq – базовый порт ввода/вывода и прерывание.
baycom=modem,io,irq,options[,modem,io,irq,options]
Использование modem=i означает, что у вас устройство seri2; modem=2 – устройство рагЭб. Значение options=0 предписывает использование аппаратного DCD, a opton=l – программного DCD. Параметры io и irq – базовый порт ввода/вывода и прерывание.
Драйверы других устройств
В разделе приведены параметры загрузки других устройств, не вошедших ни в одну из упомянутых выше категорий.
Устройства Ethernet (ether)
Драйверы для различных видов сетевых контроллеров поддерживают разные параметры, но они все используют значения прерывания, базовый адрес порта ввода/вывода и имя. В наиболее универсальной форме это выглядит так:
ether=irq, iobase [, param_1 [, param_2,…]]], name
Первый нецифровой аргумент воспринимается как имя. Обычно значения param_n имеют различные назначения для разных сетевых контроллеров. Чаще всего этот параметр используют для второй сетевой карты, поскольку по умолчанию автоматически определяется только одна сетевая карта. Это можно сделать, указав:
ether=0,0,eth1
Обратите внимание, что нулевые значения IRQ и базы ввода/вывода в примере заставляют драйвер сделать автоопределение параметров сетевой карты.
Данный пример не будет автоматически определять параметры второй сетевой карты, если вместо вкомпилированных в ядро использовать загружаемые модули. Большинство современных дистрибутивов Linux используют ядро операционной системы в комбинации с загружаемыми модулями. Параметр ether= применяется только для драйверов, вкомпилированных непосредственно в ядро.
Полная информация по конфигурации и использованию нескольких сетевых карт и описание особенностей настройки конкретных типов сетевых карт содержится в ETHERNET-HOWTO.
ether=irq, iobase [, param_1 [, param_2,…]]], name
Первый нецифровой аргумент воспринимается как имя. Обычно значения param_n имеют различные назначения для разных сетевых контроллеров. Чаще всего этот параметр используют для второй сетевой карты, поскольку по умолчанию автоматически определяется только одна сетевая карта. Это можно сделать, указав:
ether=0,0,eth1
Обратите внимание, что нулевые значения IRQ и базы ввода/вывода в примере заставляют драйвер сделать автоопределение параметров сетевой карты.
Данный пример не будет автоматически определять параметры второй сетевой карты, если вместо вкомпилированных в ядро использовать загружаемые модули. Большинство современных дистрибутивов Linux используют ядро операционной системы в комбинации с загружаемыми модулями. Параметр ether= применяется только для драйверов, вкомпилированных непосредственно в ядро.
Полная информация по конфигурации и использованию нескольких сетевых карт и описание особенностей настройки конкретных типов сетевых карт содержится в ETHERNET-HOWTO.
Драйвер флоппи-диска (floppy)
Существует большое количество опций драйвера флоппи-диска, и все они перечислены в файле /usr/src/Linux-2.4.3/drivers/block/README.fd. Использование параметров загрузки для дисковода зачастую вызывает откровенное непонимание – казалось бы, более стандартное устройство трудно найти. Однако достаточно много проблем вносят ноутбуки. Почти треть параметров загрузки для дисковода так или иначе касаются только ноутбуков. Ниже приведены только основные опции:
• floppy=0, daring – сообщает драйверу дисковода о необходимости запрета всех рискованных операций;
• floppy=thinkpad – сообщает драйверу дисковода, что у вас ноутбук фирмы IBM;
• floppy=nodma – указывает драйверу дисковода не использовать DMA для передачи данных. Необходима при установке Linux на ноутбук HP Omnibooks, у которого нет работающего DMA-канала для дисковода. Эта опция также необходима, если вы часто получаете сообщения Unable to allocate DMA memory ("He могу распределить память DMA");
• floppy=nofif – полностью запрещает буфер FIFO (First Input First Output, первый вошел – первый вышел) при операциях записи/чтения. Применение этого параметра необходимо, если при доступе к дисководу вы получаете сообщения Bus master arbitration error ("Ошибка разделения шины");
• flорру=broken_dcl – указывает драйверу не использовать сигнал смены диска (Disc Change Line, DCL), однако при этом каждый раз при повторном открытии узла устройства (device node) операционная система предполагает, что диск был заменен. Необходима для компьютеров, где сигнал замены диска поврежден или не поддерживается. В основном касается ноутбуков. Однако, если вдруг возникли проблемы с определением замены дискеты – это первый признак того, что дисковод скоро выйдет из строя;
• floppy=debug – установка этой опции указывает драйверу выводить отладочную информацию;
• floppy=message – указывает драйверу выводить информационные сообщения для некоторых дисковых операций.
• floppy=0, daring – сообщает драйверу дисковода о необходимости запрета всех рискованных операций;
• floppy=thinkpad – сообщает драйверу дисковода, что у вас ноутбук фирмы IBM;
• floppy=nodma – указывает драйверу дисковода не использовать DMA для передачи данных. Необходима при установке Linux на ноутбук HP Omnibooks, у которого нет работающего DMA-канала для дисковода. Эта опция также необходима, если вы часто получаете сообщения Unable to allocate DMA memory ("He могу распределить память DMA");
• floppy=nofif – полностью запрещает буфер FIFO (First Input First Output, первый вошел – первый вышел) при операциях записи/чтения. Применение этого параметра необходимо, если при доступе к дисководу вы получаете сообщения Bus master arbitration error ("Ошибка разделения шины");
• flорру=broken_dcl – указывает драйверу не использовать сигнал смены диска (Disc Change Line, DCL), однако при этом каждый раз при повторном открытии узла устройства (device node) операционная система предполагает, что диск был заменен. Необходима для компьютеров, где сигнал замены диска поврежден или не поддерживается. В основном касается ноутбуков. Однако, если вдруг возникли проблемы с определением замены дискеты – это первый признак того, что дисковод скоро выйдет из строя;
• floppy=debug – установка этой опции указывает драйверу выводить отладочную информацию;
• floppy=message – указывает драйверу выводить информационные сообщения для некоторых дисковых операций.
Драйвер звуковой карты (sound)
Драйвер звуковой карты также может принимать аргументы загрузки для изменения вкомпилированных в ядро значений. Делать этого не рекомендуется, поскольку в связи с отсутствием внятной документации такие действия сильно смахивают на шаманство. Намного надежнее использовать загружаемые модули.
Тем более что за последнее время заметно улучшилось качество драйверов для звуковых карт и заметно увеличился ассортимент поддерживаемых драйверами устройств. Принимается аргумент загрузки в следующем виде:
sound=device1[,device2[,device3…]]
где каждое значение deviceN имеет формат 0xDTaaaId. Расшифруем формат deviceN:
• D – второй канал DMA (ноль не применяется);
• T – тип устройства (список звуковых карт до типа 26 находится в файле /usr/src/Linux-2.4.3/include/linux/soundcard.h, а от 27 до 999 – в файле /usr/src/Linux-2.4.3/drivers/soimd/dev_table.h.):
• 1=FM
• 2=SB
• 3=PAS
• 4=GUS
• 5=MPU401
• 6=SB16
• 7=SB16-MIDI
И т. д.;
• aaa – адрес ввода/вывода в шестнадцатеричном представлении;
• I – номер прерывания в шестнадцатеричном представлении;
• d – первый канал DMA.
Применение параметра загрузки sound=0 полностью запрещает драйвер звуковой карты.
Тем более что за последнее время заметно улучшилось качество драйверов для звуковых карт и заметно увеличился ассортимент поддерживаемых драйверами устройств. Принимается аргумент загрузки в следующем виде:
sound=device1[,device2[,device3…]]
где каждое значение deviceN имеет формат 0xDTaaaId. Расшифруем формат deviceN:
• D – второй канал DMA (ноль не применяется);
• T – тип устройства (список звуковых карт до типа 26 находится в файле /usr/src/Linux-2.4.3/include/linux/soundcard.h, а от 27 до 999 – в файле /usr/src/Linux-2.4.3/drivers/soimd/dev_table.h.):
• 1=FM
• 2=SB
• 3=PAS
• 4=GUS
• 5=MPU401
• 6=SB16
• 7=SB16-MIDI
И т. д.;
• aaa – адрес ввода/вывода в шестнадцатеричном представлении;
• I – номер прерывания в шестнадцатеричном представлении;
• d – первый канал DMA.
Применение параметра загрузки sound=0 полностью запрещает драйвер звуковой карты.
Драйвер Bus Mouse (bmouse)
Этот драйвер поддерживает только один параметр, который является значением используемого аппаратного прерывания.
Драйвер MS Bus Mouse (msmouse)
Этот драйвер поддерживает только один параметр, который является значением используемого аппаратного прерывания.
Драйвер принтера (lp)
Используя этот аргумент загрузки можно сообщить драйверу принтера, какие порты можно использовать, а какие – нет. Этот параметр удобен для запрета захвата драйвером принтера всех доступных параллельных портов.
Формат аргумента – несколько пар адресов ввода/вывода, прерываний. Например,
lр=0х3Ьс,0,0x378,7
Драйвер принтера будет использовать порт на 0x3Ьс без прерывания и порт 0x378 с седьмым прерыванием. Порт 0x278 (если он присутствует в компьютере) не будет использоваться, поскольку автоопределение выполняется при отсутствии аргумента lр=. Для полного отключения драйвера принтера можно использовать параметр lр=о.
Формат аргумента – несколько пар адресов ввода/вывода, прерываний. Например,
lр=0х3Ьс,0,0x378,7
Драйвер принтера будет использовать порт на 0x3Ьс без прерывания и порт 0x378 с седьмым прерыванием. Порт 0x278 (если он присутствует в компьютере) не будет использоваться, поскольку автоопределение выполняется при отсутствии аргумента lр=. Для полного отключения драйвера принтера можно использовать параметр lр=о.
Процесс init
После того как ядро Linux полностью загрузилось, считало конфигурационные параметры и настроило оборудование (по крайней мере то, которое упоминалось в конфигурационных параметрах, и то, драйверы которого присутствуют в ядре), оно приступает к монтированию разделов жесткого диска. Монтирование всегда начинается с корневой файловой системы. Как только корневая файловая система окажется загружена и смонтирована, будет выведено сообщение:
VFS: Mounted root (ext2 filesystem) readonly
В этой точке система находит на корневой файловой системе программу init и выполняет ее.
Процесс init – это программа, ответственная за продолжение процедуры загрузки и перевод операционной системы из начального состояния, возникающего после загрузки ядра, в стандартное состояние. Во время этого процесса init выполняет множество операций, необходимых для нормального функционирования операционной системы: монтирование и проверку файловых систем, запуск различных служб и т. п. Список производимых действий помимо конфигурации системы зависит от так называемого уровня выполнения (run level).
Достаточно простой аналогией уровня выполнения является обычный распорядок дня человека – пробуждение, приведение себя в порядок, завтрак, "выход в свет" – общение с окружающим миром, ужин, приведение себя в порядок, сон. Так изо дня в день, одни и те же операции, в одной и той же последовательности. Не умывшись, вы на работу не пойдете, завтрак обязательно идет перед ужином и т. д.
Точно так же разбиты уровни выполнения. Каждый уровень выполнения однозначно (по крайней мере, в пределах дистрибутива) определяет перечень действий, выполняемых процессом init, и конфигурацию запущенных процессов. К сожалению (а может, и к счастью) четкого разделения на уровни выполнения, их количество, действия, выполняемые на каждом уровне, нет. Так, в некоторых UNIX-системах уровней выполнения всего два. Некоторые дистрибутивы Linux таким же образом конфигурируют свою операционную систему (в дистрибутиве Slackware, например, два уровня выполнения). В других дистрибутивах (Red Hat Linux) уровней выполнения восемь. Поскольку эта книга базируется на дистрибутиве Red Hat, дальнейшее описание на нем и основано.
В операционной системе Linux существует восемь уровней выполнения:
• 0 – останов системы;
• 1 – однопользовательский режим для специальных случаев администрирования. Отсутствует поддержка сети, практически нет сервисов;
• 2 – многопользовательский режим без поддержки сети;
• 3 – многопользовательский режим с поддержкой сети;
• 4 – использование не регламентировано;
• 5 – обычно по умолчанию стартует X Window System;
• 6 – перезагрузка системы;
• S или s – практически то же, что и однопользовательский режим, но уровень выполнения S используется, в основном, в скриптах.
Как можно заметить, существует определенное логическое нарушение в следовании уровней выполнения. Было бы более логично нулевой уровень выполнения вставить перед шестым. Однако здесь проявили себя исторические традиции – как повелось много лет назад в UNIX, так ради совместимости и остается.
К сожалению, не существует единого мнения, как использовать уровни со второго по пятый. По большей части это определяется идеологами дистрибутива или пристрастиями системного администратора. Приведенная выше схема уровней выполнения достаточно оптимальна, и, в конечном итоге, только вы сами решаете, как использовать уровни выполнения.
VFS: Mounted root (ext2 filesystem) readonly
В этой точке система находит на корневой файловой системе программу init и выполняет ее.
Процесс init – это программа, ответственная за продолжение процедуры загрузки и перевод операционной системы из начального состояния, возникающего после загрузки ядра, в стандартное состояние. Во время этого процесса init выполняет множество операций, необходимых для нормального функционирования операционной системы: монтирование и проверку файловых систем, запуск различных служб и т. п. Список производимых действий помимо конфигурации системы зависит от так называемого уровня выполнения (run level).
Достаточно простой аналогией уровня выполнения является обычный распорядок дня человека – пробуждение, приведение себя в порядок, завтрак, "выход в свет" – общение с окружающим миром, ужин, приведение себя в порядок, сон. Так изо дня в день, одни и те же операции, в одной и той же последовательности. Не умывшись, вы на работу не пойдете, завтрак обязательно идет перед ужином и т. д.
Точно так же разбиты уровни выполнения. Каждый уровень выполнения однозначно (по крайней мере, в пределах дистрибутива) определяет перечень действий, выполняемых процессом init, и конфигурацию запущенных процессов. К сожалению (а может, и к счастью) четкого разделения на уровни выполнения, их количество, действия, выполняемые на каждом уровне, нет. Так, в некоторых UNIX-системах уровней выполнения всего два. Некоторые дистрибутивы Linux таким же образом конфигурируют свою операционную систему (в дистрибутиве Slackware, например, два уровня выполнения). В других дистрибутивах (Red Hat Linux) уровней выполнения восемь. Поскольку эта книга базируется на дистрибутиве Red Hat, дальнейшее описание на нем и основано.
В операционной системе Linux существует восемь уровней выполнения:
• 0 – останов системы;
• 1 – однопользовательский режим для специальных случаев администрирования. Отсутствует поддержка сети, практически нет сервисов;
• 2 – многопользовательский режим без поддержки сети;
• 3 – многопользовательский режим с поддержкой сети;
• 4 – использование не регламентировано;
• 5 – обычно по умолчанию стартует X Window System;
• 6 – перезагрузка системы;
• S или s – практически то же, что и однопользовательский режим, но уровень выполнения S используется, в основном, в скриптах.
Как можно заметить, существует определенное логическое нарушение в следовании уровней выполнения. Было бы более логично нулевой уровень выполнения вставить перед шестым. Однако здесь проявили себя исторические традиции – как повелось много лет назад в UNIX, так ради совместимости и остается.
К сожалению, не существует единого мнения, как использовать уровни со второго по пятый. По большей части это определяется идеологами дистрибутива или пристрастиями системного администратора. Приведенная выше схема уровней выполнения достаточно оптимальна, и, в конечном итоге, только вы сами решаете, как использовать уровни выполнения.
Конфигурационный файл init – /etc/inittab
Как всякая программа, после старта init сразу считывает свой конфигурационный файл /etc/inittab. Это обычный текстовый файл, состоящий из отдельных строк. Если строка начинается со знака # (стандартный признак комментария в конфигурационных файлах и скриптах) или пуста, она игнорируется. Все остальные строки состоят из 4 разделенных двоеточиями полей, имеющих вид:
id: runlevels: action: process
где:
• id – идентификатор строки. Выбирается произвольно, но в файле не может быть двух строк с одинаковыми идентификаторами. Если конфигурационный файл модифицируется достаточно часто, имеет смысл использовать неписаное правило нумерации строк в BASIC – номера строкам назначать кратно пяти или десяти;
• runieveis – уровни выполнения, на которых эта строка будет задействована. Уровни задаются цифрами (без разделителей);
• process – команда, которая должна быть запущена;
• action – действие. В этом поле стоит ключевое слово, которое определяет, что должен делать процесс init, пока выполняется (или после выполнения) команда, заданная полем process:
– wait – ожидать завершения процесса. Соответственно, пока не закончится данный процесс, init не запускает никаких других процессов. Как правило, такого типа процессы используются для разнообразных проверочных действий (проверка и восстановление файловых систем), а так же для запуска различных служб (демонов);
– once – выполнять процесс только один раз;
– respawn – перезапустить процесс в случае его «смерти». Актуально для некоторых служб, которые должны постоянно присутствовать в системе;
– off – игнорировать данный элемент. Можно использовать при отладке конфигурационного файла;
– boot – процесс должен быть выполнен при загрузке операционной системы, поле runieveis (уровни выполнения) при этом игнорируется;
– bootwait – то же, что и предыдущая опция, но init должен ожидать окончания работы процесса;
– initdefauit – указывает init, в какой уровень выполнения необходимо перейти системе после загрузки;
– sysinit – процесс должен быть выполнен во время загрузки операционной системы до выполнения любой строки с boot или bootwait;
– powerwait – позволяет процессу init остановить систему при пропадании электроэнергии. Применение этого ключевого слова предполагает, что используется источник бесперебойного питания (UPS), имеющий специальный интерфейс, с помощью которого источник бесперебойного питания может посылать в компьютер и принимать из него различные управляющие сигналы (например "нет питания", "выключить источник бесперебойного питания", "аккумуляторы разряжены" и т. п.), а также программное обеспечение, которое отслеживает состояние источника бесперебойного питания и информирует init о том, что питание отключилось;
– ctriaitdei – разрешает init перезагрузить систему, когда пользователь нажимает комбинацию <Ctrl>+<Alt>+<Del> на клавиатуре. Однако системный администратор может определить действия по <Ctrl>+<Alt>+<Del>, например, игнорировать нажатие этой комбинации.
Этот список не является исчерпывающим. Подробную информацию о файле inittab можно узнать из тап-страниц init, inittab.
В качестве примера приведем файл inittab, который находится в только что установленной системе Red Hat 7.1.
# inittab Этот файл описывает как процесс INIT должен настроить
# операционную систему в соответствующем уровне выполнения
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runieveis used by RHS are:
# 0 – halt (Do NOT set initdefault to this)
# 1 – Single user mode
# 2 – Multiuser, without NFS (The same as 3, if you do not have
# networking)
# 3 – Full multiuser mode
# 4 – unused
# 5 – X11
# 6 – reboot (Do NOT set initdefault to this)
id:3:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
10:0:wait:/etc/rc.d/rc 0
11:1:wait:/etc/rc.d/rc 1
12:2:wait:/etc/rc.d/rc 2
13:3:wait:/etc/rc.d/rc 3
14:4:wait:/etc/rc.d/rc 4
15:5:wait:/etc/rc.d/rc 5
16:6:wait:/etc/rcd/rc. 6
# Things to run in every runlevel.
ud::once:/sbin/update
# Trap CTRL-ALT-DELETE
са::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few
# minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
# Run gettys in standard runieveis
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
# xdm is now a separate service
x:5:respawn:/etc/X11/prefdm -nodaemon
Сразу после запуска процесс init считывает свой конфигурационный файл /etc/inittab и производит его разбор. Сначала он определяет, какой уровень по умолчанию установлен в системе. Как видно из приведенного конфигурационного файла id:3rinitdefault уровень выполнения, в котором будет функционировать операционная система после загрузки, равен трем (то есть предполагается многопользовательский режим с поддержкой сетевых функций). Дистрибутив Red Hat по умолчанию предлагает установить вход в систему в графическом режиме – пятый уровень выполнения.
Затем процесс init принимает к сведению строки, содержащие специальные команды, такие как:
са::ctrlaltdel:/sbin/shutdown -t3 -r now
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -с "Power Restored; Shutdown Cancelled"
После этого процесс init инициирует команду, которую необходимо запустить при старте системы, но перед тем как перейти к какому-нибудь уровню выполнения. Эта команда содержится в строке с ключевым словом sysinit.
si::sysinit:/etc/rc.d/rc.sysinit
После этого процесс init запускает скрипты, которые должны действовать в любом уровне выполнения:
ud::once:/sbin/update
а затем команды, соответствующие уровню, заданному по умолчанию:
13:3:wait:/etc/rc.d/rc 3
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
Как можно заметить, есть несколько строк, запускающих скрипт гс, которые отличаются только уровнем выполнения и аргументом командной строки, передаваемой в скрипт гс. Функции, выполняемые скриптами rc.sysinit и гс, будут рассмотрены в разд. «Основные конфигурационные файлы».
После запуска скрипта гс процесс init выполняет запуск шести виртуальных консолей (процессов mingetty или, в более старом варианте, – gettty), что дает пользователям возможность регистрироваться в системе с терминалов (или виртуальных консолей, поскольку терминал вы вряд ли где-нибудь встретите). Для переключения между виртуальными консолями необходимо нажимать комбинацию одной из русифицированных клавиш верхнего ряда клавиатуры: клавиши <Alt> с номером, соответствующим номеру виртуальной консоли. После инициализации виртуальных консолей можно считать, что система полностью перешла в соответствующий уровень выполнения, загрузка завершилась, операционная система ожидает регистрации пользователя.
После окончания загрузки init продолжает функционировать в фоновом режиме. Поэтому, с помощью команды telinit, которая взаимодействует с процессом init, можно произвести перевод системы с одного уровня выполнения на другой или указать init перечитать свой конфигурационный файл.
Когда пользователь останавливает систему (командой shutdown, halt, poweroff или reboot), процесс init завершает все исполняющиеся процессы, размонтирует все файловые системы и останавливает процессор или производит перезагрузку системы.
id: runlevels: action: process
где:
• id – идентификатор строки. Выбирается произвольно, но в файле не может быть двух строк с одинаковыми идентификаторами. Если конфигурационный файл модифицируется достаточно часто, имеет смысл использовать неписаное правило нумерации строк в BASIC – номера строкам назначать кратно пяти или десяти;
• runieveis – уровни выполнения, на которых эта строка будет задействована. Уровни задаются цифрами (без разделителей);
• process – команда, которая должна быть запущена;
• action – действие. В этом поле стоит ключевое слово, которое определяет, что должен делать процесс init, пока выполняется (или после выполнения) команда, заданная полем process:
– wait – ожидать завершения процесса. Соответственно, пока не закончится данный процесс, init не запускает никаких других процессов. Как правило, такого типа процессы используются для разнообразных проверочных действий (проверка и восстановление файловых систем), а так же для запуска различных служб (демонов);
– once – выполнять процесс только один раз;
– respawn – перезапустить процесс в случае его «смерти». Актуально для некоторых служб, которые должны постоянно присутствовать в системе;
– off – игнорировать данный элемент. Можно использовать при отладке конфигурационного файла;
– boot – процесс должен быть выполнен при загрузке операционной системы, поле runieveis (уровни выполнения) при этом игнорируется;
– bootwait – то же, что и предыдущая опция, но init должен ожидать окончания работы процесса;
– initdefauit – указывает init, в какой уровень выполнения необходимо перейти системе после загрузки;
– sysinit – процесс должен быть выполнен во время загрузки операционной системы до выполнения любой строки с boot или bootwait;
– powerwait – позволяет процессу init остановить систему при пропадании электроэнергии. Применение этого ключевого слова предполагает, что используется источник бесперебойного питания (UPS), имеющий специальный интерфейс, с помощью которого источник бесперебойного питания может посылать в компьютер и принимать из него различные управляющие сигналы (например "нет питания", "выключить источник бесперебойного питания", "аккумуляторы разряжены" и т. п.), а также программное обеспечение, которое отслеживает состояние источника бесперебойного питания и информирует init о том, что питание отключилось;
– ctriaitdei – разрешает init перезагрузить систему, когда пользователь нажимает комбинацию <Ctrl>+<Alt>+<Del> на клавиатуре. Однако системный администратор может определить действия по <Ctrl>+<Alt>+<Del>, например, игнорировать нажатие этой комбинации.
Этот список не является исчерпывающим. Подробную информацию о файле inittab можно узнать из тап-страниц init, inittab.
В качестве примера приведем файл inittab, который находится в только что установленной системе Red Hat 7.1.
# inittab Этот файл описывает как процесс INIT должен настроить
# операционную систему в соответствующем уровне выполнения
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runieveis used by RHS are:
# 0 – halt (Do NOT set initdefault to this)
# 1 – Single user mode
# 2 – Multiuser, without NFS (The same as 3, if you do not have
# networking)
# 3 – Full multiuser mode
# 4 – unused
# 5 – X11
# 6 – reboot (Do NOT set initdefault to this)
id:3:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
10:0:wait:/etc/rc.d/rc 0
11:1:wait:/etc/rc.d/rc 1
12:2:wait:/etc/rc.d/rc 2
13:3:wait:/etc/rc.d/rc 3
14:4:wait:/etc/rc.d/rc 4
15:5:wait:/etc/rc.d/rc 5
16:6:wait:/etc/rcd/rc. 6
# Things to run in every runlevel.
ud::once:/sbin/update
# Trap CTRL-ALT-DELETE
са::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few
# minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
# Run gettys in standard runieveis
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
# xdm is now a separate service
x:5:respawn:/etc/X11/prefdm -nodaemon
Сразу после запуска процесс init считывает свой конфигурационный файл /etc/inittab и производит его разбор. Сначала он определяет, какой уровень по умолчанию установлен в системе. Как видно из приведенного конфигурационного файла id:3rinitdefault уровень выполнения, в котором будет функционировать операционная система после загрузки, равен трем (то есть предполагается многопользовательский режим с поддержкой сетевых функций). Дистрибутив Red Hat по умолчанию предлагает установить вход в систему в графическом режиме – пятый уровень выполнения.
Затем процесс init принимает к сведению строки, содержащие специальные команды, такие как:
са::ctrlaltdel:/sbin/shutdown -t3 -r now
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -с "Power Restored; Shutdown Cancelled"
После этого процесс init инициирует команду, которую необходимо запустить при старте системы, но перед тем как перейти к какому-нибудь уровню выполнения. Эта команда содержится в строке с ключевым словом sysinit.
si::sysinit:/etc/rc.d/rc.sysinit
После этого процесс init запускает скрипты, которые должны действовать в любом уровне выполнения:
ud::once:/sbin/update
а затем команды, соответствующие уровню, заданному по умолчанию:
13:3:wait:/etc/rc.d/rc 3
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
Как можно заметить, есть несколько строк, запускающих скрипт гс, которые отличаются только уровнем выполнения и аргументом командной строки, передаваемой в скрипт гс. Функции, выполняемые скриптами rc.sysinit и гс, будут рассмотрены в разд. «Основные конфигурационные файлы».
После запуска скрипта гс процесс init выполняет запуск шести виртуальных консолей (процессов mingetty или, в более старом варианте, – gettty), что дает пользователям возможность регистрироваться в системе с терминалов (или виртуальных консолей, поскольку терминал вы вряд ли где-нибудь встретите). Для переключения между виртуальными консолями необходимо нажимать комбинацию одной из русифицированных клавиш верхнего ряда клавиатуры: клавиши <Alt> с номером, соответствующим номеру виртуальной консоли. После инициализации виртуальных консолей можно считать, что система полностью перешла в соответствующий уровень выполнения, загрузка завершилась, операционная система ожидает регистрации пользователя.
После окончания загрузки init продолжает функционировать в фоновом режиме. Поэтому, с помощью команды telinit, которая взаимодействует с процессом init, можно произвести перевод системы с одного уровня выполнения на другой или указать init перечитать свой конфигурационный файл.
Когда пользователь останавливает систему (командой shutdown, halt, poweroff или reboot), процесс init завершает все исполняющиеся процессы, размонтирует все файловые системы и останавливает процессор или производит перезагрузку системы.
Основные конфигурационные файлы
Таким образом, в итоге рассмотрения предыдущего раздела мы установили, что процесс init выполняет три основных действия:
• запускает скрипт rc.sysinit из каталога /etc/rc.d;
• запускает скрипт гс из того же каталога /etc/rc.d с опцией, равной уровню выполнения (обычно третий или пятый уровни выполнения);
• запускает процессы getty.
Как следует из материала гл. 5, в каталоге /etc находится каталог rc.d, содержимое которого непосредственно касается процесса загрузки системы. Вот оно:
/init.d
/rc0.d
/rc1.d
/rc2.d
/rc3.d
/rc4.d
/rc5.d
/rc6.d
rc
rc.local
rc.sysinit
Опираясь на предыдущую информацию, нетрудно заметить, что существует семь каталогов для каждого уровня выполнения, какой-то каталог /init.d и три исполняемых файла, два из которых нам уже знакомы – гс и rc.sysinit. Третий файл – rc.local – вызывается по окончании исполнения файла гс и предназначен для команд, добавляемых администратором для запуска в процессе начальной загрузки. Редактировать файл гс не возбраняется, однако вероятность ошибки в файле, содержащем сотню-другую строк, очень велика, поэтому настоятельно рекомендуется использовать только файл rc.local.
Действия скрипта:
• установка путей;
• установка имени хоста;
• чтение конфигурационных данных из /etc/sysconfig/network;
• вывод баннера;
• монтирование файловой системы /proc;
• конфигурирование параметров ядра системы, используя файл /etc/sysctl.conf;
• установка системных часов, используя конфигурацию из /etc/sysconfig/clock;
• установка параметров клавиатуры консоли программой loadkeys в соответствии с файлами /etc/sysconfig/console/default.kmap или /etc/sysconfig/keyboard;
• загрузка системного шрифта из /etc/sysconfig/i18n и файлов с расширением pcf.gz или gz из каталогов /etc/sysconfig/console, /usr/lib/kbd/consolefonts или /lib/kbd/consolefonts;
• активация области подкачки;
• инициализация USB-контроллера;
• запуск программы fsck для корневой системы, при обнаружении серьезных проблем выполняется немедленная перезагрузка;
• старт PNP-устройств в соответствии с /etc/isapnp.conf;
• перемонтирование корневой файловой системы в режим чтения/записи;
• перенастройка таблицы монтирования /etc/mtab;
• проверка квот для корневой файловой системы;
• проверка необходимости загрузки модулей, нахождение зависимостей, загрузка и конфигурирование модулей;
• подключение RAID-устройств;
• запуск fsck для других систем;
• монтирование локальных файловых систем;
• включение механизма квот;
• удаление тригерных файлов загрузки;
• очистка каталогов /var/lock и /var/run;
• очистка файлов /var/run/utmp и /var/run/utmpx;
• удаление файлов-защелок из /tmp;
• включение подкачки;
• инициализация последовательных устройств, используя скрипт /etc/rc.d/rc.serial;
• загрузка модулей для SCSI-стримера;
• генерация файла заголовка для определения загружаемого ядра командой /sbin/mkkerneldoth;
• установка ссылки /boot/System.map;
• проверка использования интерактивного режима загрузки и, в случае необходимости, создание файла /var/run/confirm.
Запуск проверки файловой системы командой fsck может быть принудительно отключен при наличии файла /fastboot, а также включен при наличии /forcefsck. Создать эти файлы можно выполнением команды shutdown с соответствующими ключами. Однако не рекомендуется злоупотреблять этими возможностями.
Sysctl позволяет зафиксировать ряд параметров и обеспечить (через /etc/sysctl.conf) их установку после перезагрузки. Вот как выглядит /etc/sysctl.conf сразу после инсталяции системы:
# Disables packet forwarding
net.ipv4.ip_forward = 0
# Enables source route verification
net.ipv4.conf.all.rp_filter = 1
# Disables the magic-sysrq key
kernel.sysrq = 0
Подкаталог /init.d содержит по одному скрипту для каждой из служб, установленных в системе (sendmail, HTTP, Samba, FTP и т. п.). Этот скрипт отвечает за запуск, остановку или перезагрузку соответствующей службы. В каталоге /rcX.d находятся ссылки на файлы скриптов, как правило расположенные в каталоге /etc/rc.d/init.d. Названия этих ссылок имеют имена, начинающиеся либо с буквы К, либо с буквы S, после которой вдет двухзначное число и имя соответствующей службы. Буквы S и К – первые буквы слов start и kill соответственно. Из этого следует, что файл, начинающийся с буквы S, отвечает за старт соответствующего процесса, а файл, начинающийся с буквы К, отвечает за остановку соответствующего процесса. Цифры, идущие после S или К в именах ссылок, задают порядок запуска скриптов.
• запускает скрипт rc.sysinit из каталога /etc/rc.d;
• запускает скрипт гс из того же каталога /etc/rc.d с опцией, равной уровню выполнения (обычно третий или пятый уровни выполнения);
• запускает процессы getty.
Как следует из материала гл. 5, в каталоге /etc находится каталог rc.d, содержимое которого непосредственно касается процесса загрузки системы. Вот оно:
/init.d
/rc0.d
/rc1.d
/rc2.d
/rc3.d
/rc4.d
/rc5.d
/rc6.d
rc
rc.local
rc.sysinit
Опираясь на предыдущую информацию, нетрудно заметить, что существует семь каталогов для каждого уровня выполнения, какой-то каталог /init.d и три исполняемых файла, два из которых нам уже знакомы – гс и rc.sysinit. Третий файл – rc.local – вызывается по окончании исполнения файла гс и предназначен для команд, добавляемых администратором для запуска в процессе начальной загрузки. Редактировать файл гс не возбраняется, однако вероятность ошибки в файле, содержащем сотню-другую строк, очень велика, поэтому настоятельно рекомендуется использовать только файл rc.local.
rc.sysinit
Вернемся к процессу загрузки. Файл rc.sysinit предназначен для выполнения начальных действий, необходимых для корректного функционирования операционной системы. Ниже приведен список действий, выполняемых скриптом rc.sysinit. Конечно, он зависит от дистрибутива и от конфигурации системы, но в большей части он неизменен.Действия скрипта:
• установка путей;
• установка имени хоста;
• чтение конфигурационных данных из /etc/sysconfig/network;
• вывод баннера;
• монтирование файловой системы /proc;
• конфигурирование параметров ядра системы, используя файл /etc/sysctl.conf;
• установка системных часов, используя конфигурацию из /etc/sysconfig/clock;
• установка параметров клавиатуры консоли программой loadkeys в соответствии с файлами /etc/sysconfig/console/default.kmap или /etc/sysconfig/keyboard;
• загрузка системного шрифта из /etc/sysconfig/i18n и файлов с расширением pcf.gz или gz из каталогов /etc/sysconfig/console, /usr/lib/kbd/consolefonts или /lib/kbd/consolefonts;
• активация области подкачки;
• инициализация USB-контроллера;
• запуск программы fsck для корневой системы, при обнаружении серьезных проблем выполняется немедленная перезагрузка;
• старт PNP-устройств в соответствии с /etc/isapnp.conf;
• перемонтирование корневой файловой системы в режим чтения/записи;
• перенастройка таблицы монтирования /etc/mtab;
• проверка квот для корневой файловой системы;
• проверка необходимости загрузки модулей, нахождение зависимостей, загрузка и конфигурирование модулей;
• подключение RAID-устройств;
• запуск fsck для других систем;
• монтирование локальных файловых систем;
• включение механизма квот;
• удаление тригерных файлов загрузки;
• очистка каталогов /var/lock и /var/run;
• очистка файлов /var/run/utmp и /var/run/utmpx;
• удаление файлов-защелок из /tmp;
• включение подкачки;
• инициализация последовательных устройств, используя скрипт /etc/rc.d/rc.serial;
• загрузка модулей для SCSI-стримера;
• генерация файла заголовка для определения загружаемого ядра командой /sbin/mkkerneldoth;
• установка ссылки /boot/System.map;
• проверка использования интерактивного режима загрузки и, в случае необходимости, создание файла /var/run/confirm.
Запуск проверки файловой системы командой fsck может быть принудительно отключен при наличии файла /fastboot, а также включен при наличии /forcefsck. Создать эти файлы можно выполнением команды shutdown с соответствующими ключами. Однако не рекомендуется злоупотреблять этими возможностями.
Sysctl позволяет зафиксировать ряд параметров и обеспечить (через /etc/sysctl.conf) их установку после перезагрузки. Вот как выглядит /etc/sysctl.conf сразу после инсталяции системы:
# Disables packet forwarding
net.ipv4.ip_forward = 0
# Enables source route verification
net.ipv4.conf.all.rp_filter = 1
# Disables the magic-sysrq key
kernel.sysrq = 0
rc
Прежде чем приступить к разбору скрипта гс, необходимо упомянуть о каталогах /rcX.d и /init.d. Уточним еще раз – иерархия /rcX.d характерна для дистрибутивов Red Hat и базирующихся на нем, в других дистрибутивах и в UNIX-системах их может и не быть. Эти каталоги играют исключительную роль в процессе загрузки, поскольку они содержит основные скрипты, необходимые для организации процесса загрузки.Подкаталог /init.d содержит по одному скрипту для каждой из служб, установленных в системе (sendmail, HTTP, Samba, FTP и т. п.). Этот скрипт отвечает за запуск, остановку или перезагрузку соответствующей службы. В каталоге /rcX.d находятся ссылки на файлы скриптов, как правило расположенные в каталоге /etc/rc.d/init.d. Названия этих ссылок имеют имена, начинающиеся либо с буквы К, либо с буквы S, после которой вдет двухзначное число и имя соответствующей службы. Буквы S и К – первые буквы слов start и kill соответственно. Из этого следует, что файл, начинающийся с буквы S, отвечает за старт соответствующего процесса, а файл, начинающийся с буквы К, отвечает за остановку соответствующего процесса. Цифры, идущие после S или К в именах ссылок, задают порядок запуска скриптов.