---------------------------------------------------------------------------
# автоматический старт (уровень 5).
---------------------------------------------------------------------------
id:5:initdefault:
# Инициализация системы при загрузке
si:S:sysinit:/etc/rc.d/rc.S
# запуск однопользовательского режима
su:S:wait:/etc/rc.d/rc.K
# Инициализация многопользовательского режима
rc:123456:wait:/etc/rc.d/rc.M
# Реакция на комбинацию из трех пальцев
ca::ctrlaltdel:/sbin/shutdown -t3 -rf now
# Реакция на отказ блока питания (разгрузка системы в
# однопользовательском режиме)
pf::powerfail:/sbin/shutdown -f +5 "THE POWER IS FAILING"
# Откат разгрузки системы, если питание восстановлено
pg:0123456:powerokwait:/sbin/shutdown -c "THE POWER IS BACK"
# Если питание восстановлено в однопользовательском режиме -
# запустить многопользовательский режим (он же уровень 5)
ps:S:powerokwait:/sbin/init 5
Формат записей в файле /etc/inittab вы можете получить, обратившись к
системе подсказок man, а я хочу обратить ваше внимание на следующее:
При старте системы запускается конфигурационный файл rc.S (системные
настройки). Затем инициализируется однопользовательский режим - rc.K. При
этом осуществляется проверка целостности файловых систем, подлежащих
монтированию, и, если ошибок нет, инициализируется многопользовательский
режим (rc.M).
---------------------------------------------------------------------------
# /etc/rc/rc.S
---------------------------------------------------------------------------
#
# Системные настройки, выполняемые при загрузке системы
# Вся настройка пользователя должна осуществляться в rc.local
PATH=/sbin:/usr/sbin:/bin:/usr/bin
# разрешаем свопинг
#/sbin/swapon -a # для всех разделов подкачки
swapon /dev/hdb2 # только для конкретного
# Проверяем, не смонтирована ли корневая система как read-only
READWRITE=no
if echo -n >> "Testing filesystem status"; then
rm -f "Testing filesystem status"
READWRITE=yes
fi
# Проверяем целостность всех файловых систем
if [ ! $READWRITE = yes ]; then
/sbin/fsck -A -a
# В случае ошибок переход в однопользовательский режим
# Все сообщения по-английски, поскольку русификаторы пока не
# загружены
if [ $? -gt 0 ] ; then
echo
echo
echo "**************************************"
echo "fsck returned error code - REBOOT NOW!"
echo "**************************************"
echo
echo
/bin/login
fi
# Переключение файловой системы в режим read-write
echo "Remounting root device with read-write enabled."
/sbin/mount -w -n -o remount /
else
#
# При включении ядро системы находилось в режиме read-write, что
# не позволяет проверить целостность системы. Выдаем рекомендации
# по устранению этого дефекта
#
cat << EOF
*** Root partition has already been mounted read-write. Cannot check!
For filesystem checking to work properly, your system must initially mount
the root partition as read only. Please modify your kernel with 'rdev' so that
it does this. If you're booting with LILO, type:
rdev -R /vmlinuz 1
(^^^^^^^^ ... or whatever your kernel name is.)
If you boot from a kernel on a floppy disk, put it in the drive and type:
rdev -R /dev/fd0 1
This will fix the problem *AND* eliminate this annoying message. :^)
EOF
sleep 10
fi
# удаляем блокировочные файлы, которые создаются служебными программами
/bin/rm -f /etc/mtab* /etc/nologin /etc/utmp
# И создаем новые версии.
cat /dev/null >> /etc/utmp
# монтируем файловые системы, приведенные в /etc/fstab
# за исключением NFS, поскольку TCP/IP еще не установлен
/sbin/mount -avt nonfs
# Настройка системных часов
if [ -x /sbin/clock ]; then
/sbin/clock -s
fi
# Установка содержимого файлов /etc/issue и /etc/motd
# Это обычные текстовые файлы, содержащие текущие новости из жизни
# системы (/etc/issue) и так называемую "мысль дня" (/etc/motd)
#
# Вы можете без колебаний заменить приведенные ниже строки на
# собственные варианты. Например, выбор случайной строки из текстового
# файла, содержащего пословицы и поговорки.
echo > /etc/issue echo Welcome to Linux `/bin/uname -a |
/bin/cut -d\ -f3`. >> /etc/issue echo >> /etc/issue
echo "`/bin/uname -a | /bin/cut -d\ -f1,3`. (Posix)." > /etc/motd
# Настройка коммуникационных портов
# Обратите внимание, что строка вызова скрипта настройки
# коммуникационных портов по умолчанию закрыта комментарием. Дело в том,
# что довольно часто загрузка прерывается в тех случаях, когда параметры
# настройки не соответствуют реальной конфигурации компьютера. Поэтому
# рекомендуется вначале отладить этот скрипт и лишь затем
# инициализировать его при загрузке.
#/bin/sh /etc/rc.d/rc.serial
# инициализируем сервер доменных имен
named
# Конец файла rc.S
---------------------------------------------------------------------------
#! /bin/sh
---------------------------------------------------------------------------
#
# Конфигурирование системы для работы в многопользовательском режиме
# Сообщаем пользователю о переходе в многопользовательский режим
echo "Going multiuser..."
# Запуск демона update в фоновом режиме
/sbin/update &
# Установка времени задержки выключения монитора (в минутах)
/bin/setterm -blank 15
# Инициализация сетевой поддержки
if [ -x /etc/rc.d/rc.inet1 ];
then
/bin/hostname vvv # имя хоста
/bin/domainname rinet.ru # и домена
/bin/sh /etc/rc.d/rc.inet1 # запуск конфигурационных скриптов
/bin/sh /etc/rc.d/rc.inet2
else
/sbin/hostname_notcp vvv # если TCP/IP не установлен
/bin/domainname rinet.ru
echo
echo "Since you don't have TCP/IP installed, syslogd will complain when it first"
echo "starts. The warning can be ignored."
echo
/usr/sbin/syslogd
/usr/sbin/klogd
/usr/sbin/lpd
/usr/sbin/crond
fi
# удаление устаревших блокировочных файловв
/bin/rm -f /usr/spool/locks/* /usr/spool/uucp/LCK..* /tmp/.X*lock 1> /dev/null 2> /dev/null
# Отключение зависших сетевых гнезд
if [ -r /tmp/hunt -o -r /tmp/hunt.stats ]; then
echo "Removing your stale hunt sockets from /tmp..."
/bin/rm -f /tmp/hunt*
fi
# Обновление всех связей статических библиотек
/sbin/ldconfig
# И наконец, запуск локальной процедуры настройки
/etc/rc.d/rc.local
# Конец файла rc.M
Кроме того, inittab содержит команды инициализации виртуальных консолей и
коммуникационных портов, которые позволяют подключить к Linux-системе
удаленные терминалы или другие host-машины. Но к этому вопросу мы вернемся
отдельно.
Вполне вероятно, что вам потребуется внести в процесс настройки какие-то
свои дополнения (например, загрузить кириллические знакогенератор и
раскладку клавиатуры) - не изменяйте упоминавшиеся выше файлы! Для этого
существует специальный скрипт-файл - rc.local. А если вы подрабатываете
системным администратором, и один из пользователей требует от вас
какой-либо экзотической настройки, то не стоит портить и rc.local -
достаточно внести необходимые команды в стартовый файл оболочки в
пользовательском каталоге.
Иначе говоря, сила и мощь UNIX-системы основана на узкой специализации
каждого из инициализационных файлов. Поэтому для каждого из режимов
запускаются только те процессы, которые действительно нужны для работы.
Разгрузка операционной системы
Теперь давайте рассмотрим, каким образом протекает обратный процесс -
разгрузка операционной системы. Вы конечно же знаете, что выключить
UNIX-машину гораздо сложнее, чем обычный калькулятор. И соответствующий
ритуал должен быть соблюден до мельчайших деталей. В противном случае вы
можете потерять ряд файлов или развалить всю систему в целом.
Дело в том, что с целью повышения производительности системы Linux работает
с диском через кэш-систему, которая не выполняет физическую запись на диск
по мановению пальца пользователя, а управляется собственным диспетчером,
сносящим буферы записи через определенные интервалы времени (конечно, если
емкость кэша будет исчерпана, снос данных будет осуществлен немеленно, но
такая ситуация бывает довольно редко). В результате значительно сокращаются
потери времени на обслуживание запросов к диску, но при этом возникает
опасность потери данных при внезапном выключении системы - ведь в
кэш-памяти могут оставаться не сохраненные на винчестере данные!
Но и это еще не все! Linux - это многозадачная система, следовательно кроме
пользовательских задач в памяти активно работает несколько фоновых задач,
которые также могут активно взаимодействовать с файловой системой,
коммуникационными портами, сетевыми картами и печатающими устройствами.
Если при этом приходится делить ресурсы между несколькими пользователями,
которые конкурируют за доступ к одной и той же базе данных (например,
MetalBase 5.0) - результат внезапного выключения питания может быть сравним
только со взрывом атомной бомбы внутрикомпьютерного масштаба!
Именно поэтому вам необходимо аккуратно и качественно организовать процесс
разгрузки операционной системы. Для этой цели в Linux предусмотрена
специальная программа /bin/shutdown. Давайте рассмотрим, как ее
использовать?
Прежде всего отметим, что вызов этой программы осуществляется при вводе
клавишной комбинации "из трех пальцев"-Ctrl-Alt-Del. Поэтому изложенный
ниже материал предназначен не для ежедневного использования, а для более
глубокого понимания процесса разгрузки и разработки собственных механизмов.
Если вы являетесь единственным пользователем системы, то для выгрузки
системы вы должны (во всяком случае, с точки зрения теории) остановить все
текущие программы, закрыть виртуальные пользовательские консоли,
зарегистрироваться в системе как root (а если вы уже работаете как root, то
во избежание неприятностей перейдите в каталог /root ), а затем ввведите
команду
---------------------------------------------------------------------------
shutdown -q now
---------------------------------------------------------------------------
Кстати, вместо now вы можете указать интервал времени (в минутах) через
который система осуществит окончательную разгрузку. Необходимо отметить,
что в первоначальных версиях системы (диски Release 2 и Release 3) код
команды shutdown содержит ошибку, в результате которой таймер не работает и
разгрузка осуществляется мгновенно в любом случае, впрочем, если вы
владеете UNIX-машиной в гордом одиночестве, задержка вам вряд ли
понадобится. А вот если вы строите сервер или многопользовательскую систему
- воспользуйтесь дисками Release 4 или более поздними, в которых эта ошибка
исправлена.
Вообще говоря, в многопользовательской системе выдача команды shutdown
обычно сопровождается кратким сообщением о причине, по которой завершается
работа с системой. Впрочем, это можно и не делать, если вы не слишком
уважаете своих пользователей. В конце концов, через определенные промежутки
времени, shutdown все равно будет терроризировать пользователей сообщениями
типа : "до взрыва осталось 8 минут".
Но какие конкретно операции должна выполнить команда shutdown? Ответ на
этот вопрос хранится в файле /etc/shutdown.rc. В любом случае, вне
зависимости от наличия этого скрипт-файла при начале разгрузки системы
демонтируются все файловые системы (кроме root) все оставшиеся "в живых"
пользовательские процессы безжалостно "убиваются" (поэтому и рекомендуется
выходить до разгрузки системы!). После того, как все операции
демонтирования успешно завершены, на консоль выдается соответствующее
сообщение. Вот только после этого вы и можете нажимать клавишу Reset или
выключатель питания.
Если же вы хотите перегрузить компьютер, то можете воспользоваться командой
reboot, которая аналогична команде shutdown, но не останавливает систему
после завершения разгрузки, а автоматически начинает перезагрузку
операционной системы.
Иногда, как это ни прискорбно, система не хочет корректно разгружаться.
Например, в том случае, если система запаниковала (panic mode) и пошла в
разнос. Вы должны отдавать себе отчет, что любое нажатие клавиши может