учебники, программирование, основы, введение в,

 

Запуск и останов системы

Запуск и останов: различия между Solaris и другими UNIX
Прежде всего напомним, что Solaris относится к ветви System V, и поэтому процедуры его запуска и останова, а также файлы конфигурации и системные скрипты, используемые для этих процедур, в корне отличаются от таковых в системах BSD. Здесь не рассматриваются системы BSD, для изучения отличия между System V и BSD-системами имеет смысл обратиться к книге  или другой литературе, в том числе к источникам в Интернете.
Solaris отличается также от собратьев по ветви System V наличием специального режима работы системы, который называется s или S. Ниже этот режим описан подробнее. В большинстве систем System V остальные семь режимов работы (0-6) имеют такое же назначение, как и в Solaris. Некоторые системы, например, многие из систем Linux, имеют несколько иную структуру каталогов стартовых системных скриптов. Так, в Solaris скрипты находятся в /etc/rc0.d, /etc/rc1.d и т.д., а в Linux - в /etc/rc.d/rc0/, /etc/rc.d/rc1/ и т.д. Однако для того, чтобы уточнить местоположение этих скриптов в любой из систем System V, достаточно изучить man init.
Кроме того, Solaris обладает самой большой коллекцией программ для изменения режима работы системы: shutdown, reboot, halt, poweroff, init. В других системах не всегда есть полный набор этих программ, однако в системах System V обязательно присутствуют программы init и shutdown. Они всегда имеют одинаковое назначение, независимо от названия и поставщика ОС, хотя их ключи могут несколько отличатьсядруг от друга.
Повторим еще раз: общие принципы загрузки и останова системы очень схожи для всех систем UNIX ветви System V, об особенностях вашей системы всегда можно узнать из man init и man shutdown.
Режимы работы системы
В одной и той же компьютерной системе может понадобиться выполнять совершенно разные типы задач. Например, на большом складе компании-поставщика бытовой техники центральный сервер управляет базой данных клиентов и их заказов. Эта работа ведется круглосуточно, за исключением короткой передышки в пятницу поздно вечером. В рабочее время на сервере запущены приложения, которые необходимы для обслуживания запросов: сервер базы данных, web-сервер, модули ядра, отвечающие за работу с сетью, и тому подобное. Во время короткой передышки в пятницу на сервере выполняется совершенно другая работа: полное резервное копирование базы данных и, если надо, установка нового ПО. Для этой работы важно, чтобы никто не обращался к серверу с запросами во время резервного копирования и модификации ПО, и такие приложения, как сервер базы данных, web-сервер, модули ядра, отвечающие за работу с сетью, следует выключить на время проведения еженедельного техобслуживания системы.
Для того чтобы системе было легче переключаться между разными наборами программ, которые используются для разных типов задач, была придумана концепция режимов работы системы. Любой UNIX ветви System V, в том числе и Solaris, может работать в одном из семи режимов (они нумеруются от 0 до 6). Каждый режим характеризуется своим назначением, которое определяет набор программ, выполняющихся в этом режиме. В Solaris, наряду с упомянутыми семью, используется и восьмой режим - s или S (режимы s и S - это одно и то же).
Режим работы системы (runlevel) иногда также называют состоянием (state) или уровнем выполнения. Набор программ, запускаемых в том или ином режиме, определяется содержимым файла /etc/inittab. В этом файле указываются стартовые скрипты, которые будут автоматически запускаться при переходе к каждому из уровней выполнения. Эти скрипты расположены в каталоге /etc, и из них вызываются другие скрипты, которые лежат в каталогах /etc/rcN.d. (N - число от 0 до 6 или символ S).
При переходе к режиму 0 выполняется /etc/rc0, к режиму 1 - /etc/rc1 и так далее. Ниже даны описания всех возможных режимов работы Solaris.
Режим 0.
Система останавливается, управление переходит к программе из ПЗУ (firmware) для компьютеров архитектуры SPARC, для компьютеров x86 - система останавливается и может быть перезагружена нажатием любой клавиши. В режиме 0 компьютер можно выключить без опасений за сохранность данных.
Режим 1.
Административный режим. Файловые системы, необходимые для многопользовательской работы, смонтированы, и можно использовать регистрационные имена, требующие доступа к многопользовательским файловым системам. Запущены некоторые демоны, однако пользователям не разрешено входить в систему. Режим 1 применяется для установки пакетов ПО.
Режим s, S.
Режим s (или S) называется однопользовательским. При переходе в это состояние все пользовательские процессы останавливаются, а файловые системы, необходимые для многопользовательской работы, демонтируются. После этого доступ к системе возможен только с консоли; регистрационные имена, требующие доступа к пользовательским файловым системам, употреблять нельзя. Этот режим применяется для установки или удаления программного обеспечения, резервного копирования, восстановления или проверки файловых систем. Система переходит в состояние s автоматически, когда файловая система /usr повреждена и не может быть восстановлена без вмешательства администратора. Набор файловых систем, смонтированных при работе системы в состоянии s, не всегда один и тот же; то, какие файловые системы смонтированы, зависит от метода перевода системы в состояние s и настроек системы.
Переход в режим s возможен даже при поврежденном или отсутствующем файле /etc/inittab, что невозможно для любого другого режима работы. При переходе в режим S из других режимов работы, файловые системы, уже смонтированные к этому моменту, остаются смонтированными, даже если предоставляются другими серверами в сети. Все процессы, запущенные ранее в многопользовательских режимах, завершаются. Завершаются также все процессы, имеющие записи в utmpx (т.е. запущенные от имени пользователей). Последнее означает, что процессы типа ttymon и других мониторов портов, запущенные системой SAC, тоже завершаются при переходе в режим S.
Режим 2.
Многопользовательский режим. Все процессы и демоны, необходимые для многопользовательской работы, запущены.
Режим 3.
Многопользовательский режим; кроме того, что разрешено в режиме 2, добавлен доступ к локальным ресурсам через сеть (поддерживается разделение каталогов с помощью NFS).
Режим 4.
Альтернативный многопользовательский режим. Предполагает иную, нежели в режимах 2 и 3, конфигурацию демонов и других программ для работы в многопользовательском режиме. Обычно не используется.
Режим 5.
Режим останова; операционная система останавливается, и, если это возможно, обеспечивается автоматическое выключение питания. Для автоматического выключения питания необходима аппаратная поддержка выполнения этой функции.
Режим 6.
Останавливает и перезагружает операционную систему в состояние, определяемое записью initdefault в файле /etc/inittab. При необходимости конфигурирует перед перезагрузкой новый загружаемый образ ядра операционной системы. Для пересборки ядра после модификации параметров ядра или добавления новых устройств следует выполнить команду
touch /reconfigure
перед перезагрузкой.

Начальная загрузка системы

Загрузка Solaris 9 на компьютерах SPARC

После включения компьютера записанное в ПЗУ программное обеспечение (firmware) запускает процедуру самотестирования компьютера (power-on self-test - POST). То, как проходит эта процедура, зависит от конфигурации и модели компьютера.
Если тест прошел нормально, то программа автозагрузки пытается загрузить систему, используя имя устройства и имя файла ядра, записанные в ПЗУ.
Эти параметры могут быть изменены программой eeprom при интерактивной работе с Solaris из командной строки или после остановки системы - из командной строки ok, которую выдаст firmware по завершении останова системы.
Программа, которая запускается после начального загрузчика, называется ufsboot, если загрузка происходит с диска, или inetboot, если выполняется загрузка по сети.

Загрузка по сети

Загрузка по сети может идти с использованием DHCP или RARP/bootparams, в зависимости от настроек, записанных в ПЗУ, и реальной конфигурации сети (для настройки по DHCP в сети должен быть доступен DHCP-сервер).
Команду boot среды OpenBoot (иначе говоря, командной строки firmware) можно использовать для задания протокола загрузки явным образом:

boot net:rarp
boot net:dhcp

или полагаясь на выбор сценария по умолчанию (тогда сценарий не указывается):

boot net

При этом загрузка осуществляется через тот интерфейс, для которого определен псевдоним net.

Загрузка через сеть с использованием RARP/bootparams

Начальный загрузчик из ПЗУ выполняет ARP-запрос (подробнее об ARP-запросах см. лекцию 12) и, после получения ответа, посылает широковещательный запрос в локальную сеть по протоколу TFTP для загрузки программы inetboot из сети. Загрузив с ответившего TFTP-сервера программу inetboot, загрузчик передает ей управление, а она отправляет еще один ARP-запрос, после чего находит файловую систему в сети, с которой следует произвести загрузку ядра. Для этого inetboot использует протокол bootparams (см. man bootparams для получения детальной информации о протоколе). После того как файловая система найдена, с нее по протоколу NFS загружается ядро и ему передается управление.

Загрузка через сеть с использованием DHCP

При загрузке по сети с использованием DHCP начальный загрузчик из ПЗУ посылает широковещательный запрос, в котором сообщает MAC-адрес своего компьютера и его архитектуру, запрашивая в ответ IP-адрес, параметры загрузки и настройки сети. После получения ответа (детали протокола DHCP см. в лекции 12) начальный загрузчик загружает inetboot через сеть, inetboot загружает ядро, которое, в свою очередь, загружает необходимые ему файлы через сеть, после чего выгружает inetboot. Стартовые скрипты запускают dhcpagent, который выполняет оставшуюся часть настроек по DHCP.

Загрузка с диска

При загрузке с диска разделяют два этапа: начальную загрузку и вторичную. Начальная загрузка заключается в том, что программа загрузки из ПЗУ считывает вторичный загрузчик с загрузочного раздела диска, из блоков с первого по пятнадцатый.
Если имя файла ядра указано не как полное имя файла (начинающееся с символа /), то такое имя расценивается как относительное и вторичный загрузчик ищет ядро в каталоге, соответствующем аппаратной платформе компьютера. Тогда путь к ядру точно будет лежать через каталог /platform/platform-name. Для многих компьютеров SPARC после этого выполняется поиск в каталоге /platform/hardware-class-name. Если указано полное имя файла, загрузчик будет пытаться загрузить в точности тот файл, что указан. После загрузки файла ядра в память загрузчик передает ему управление.
Если имя файла ядра не указано, и из других настороек непонятно, какое ядро следует загружать, загрузчик сам решает, какое ядро требуется, основываясь на том, какое ПО установлено в системе, на известных свойствах аппаратуры и firmware и на записях в файле политики загрузки boot.conf. О местоположении и содержимом этого файла будет сказано ниже, в разделе "Файлы и каталоги, используемые при загрузке".

Среда OpenBoot. Команда boot

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

ok

Здесь мы рассмотрим команду boot среды OpenBoot.
Синтаксис команды boot предполагает возможность указания загрузочного устройства и дополнительных аргументов:

boot [device] [arguments]

Если дать команду boot без параметров, то будет выполнена загрузка с устройства по умолчанию. По умолчанию загрузка производится с того устройства, которое указано в переменной boot-device или diag-device в ПЗУ (NVRAM variable). Если система запускается в режиме диагностики, вместо переменных boot-device и boot-file используются diag-device и diag-file.
Аргументы команды boot могут быть многострочными, они не анализируются загрузчиком OpenBoot, а передаются вторичному загрузчику как есть. Если команде boot переданы какие-нибудь аргументы, содержимое переменных boot-file и diag-file игнорируется. Например, если дана команда

boot -s

то подстрока -s расценивается как аргумент, а переменные boot-file и diag-file не принимаются во внимание.
Если команды

boot net

и

boot cdrom

если они даны без аргументов, то они будут использовать содержимое переменных boot-file и diag-file как путь к файлу ядра. Стало быть, если boot-file содержит имя 64-разрядного ядра, а вы пытаетесь загрузиться с CD-ROM командой boot cdrom, то загрузка не состоится, если на CD-диске имеется только 32-разрядное ядро.
Для загрузки в специфическом режиме следует указывать команде boot соответствующие аргументы, в ответ на приглашение ok вводится команда:

  • boot -as - загрузка ядра, используемого по умолчанию, в однопользовательском режиме;
  • boot kernel/unix -as - принудительная загрузка 32-разрядного ядра в однопользовательском режиме (для принудительной загрузки указывается имя файла явным образом);
  • boot kernel/sparcv9/unix -as - принудительная загрузка 64-разрядного ядра в однопользовательском режиме (для принудительной загрузки указывается имя файла явным образом).

Для более детального изучения команды boot в вашей системе следует использовать man boot; помните, что на некоторых платформах, в зависимости от firmware, могут наблюдаться отклонения от схемы, описанной здесь и в документации.

Загрузка Solaris 9 на компьютерах x86

На компьютерах x86 загрузка состоит из двух разных этапов: начальной загрузки и вторичной загрузки. Начальная загрузка выполняется BIOS системной платы и BIOS контроллеров. После процедуры POST начальный загрузчик пытается прочесть первый сектор с дискеты, компакт-диска или жесткого диска, или, если эта функция поддерживается, загрузить вторичный загрузчик через сеть. После того как вторичный загрузчик записан в оперативную память, ему передается управление. Начальный загрузчик работает в режиме real mode процессора, а вторичный - в защищенном режиме (32-bit protected mode).
Вторичный загрузчик называется boot.bin и способен считать ядро с диска из файловой системы UFS, компакт-диска или через сеть с использованием NFS. Вторичный загрузчик запускает программу DCA (device configuration assistant), которая определяет физические устройства компьютера. При этом системный администратор может вмешаться в процесс определения устройств, если DCA их не может верно определить автоматически.
После возвращения управления от DCA вторичный загрузчик выполняет скрипт /etc/bootrc, который управляет дальнейшим процессом загрузки. Обычный /etc/bootrc предлагает администратору ввести символ b для загрузки с определенными ключами и аргументами, символ i для запуска интерактивного командного интерпретатора, и любой другой символ - для загрузки ядра с установками по умолчанию.

Файлы и каталоги, используемые при загрузке

Для загрузки в специфическом режиме следует указывать команде boot соответствующие аргументы:

  • для x86 платформ в ответ на приглашение > вводится команда

b kernel/unix -as - загрузка ядра, используемого по умолчанию, в однопользовательском режиме.

Замечание о загрузке систем UltraSPARC

Некоторые старые компьютеры SPARC технически способны работать с 64-битной версией Solaris, но им может требоваться обновление firmware для того, чтобы эта работа стала в действительности возможной. Если вы обладаете как раз такой системой и установили 64-битный Solaris, то при загрузке этот факт будет обнаружен и вы получите сообщение о том, что firmware следует обновить. вслед за этим загрузчик выберет 32-разрядное ядро, и загрузка продолжится.
Процессоры UltraSPARC-1 с частотой 200 MГц и меньше имеют ошибку в микрокоде, из-за которой при запуске на компьютерах с такими процессорами 64-битной программы может произойти останов процессора из-за выполнения определеной комбинации команд. Чтобы избежать этой неприятности, при работе на таких компьютерах Solaris при загрузке выбирает 32-битное ядро, так как 64-битное приложение не сможет запуститься при работе с 32-разрядным ядром.
Компания Sun утверждает, что комбинация команд, вызывающая нештатную остановку процессора, не может быть сгенерирована компилятором языка высокого уровня, и более того, даже практически не может встретиться в написанных на ассемблере программах, если только эта программа не написана специально для того, чтобы вызвать эту ошибку.
В тех системах, где вероятность запуска такой "зловредной" программы мала, а пользователи работают только с обычными приложениями, полученными из надежных источников или собранных из исходных текстов языка высокого уровня типа С, администратор может явным образом потребовать у загрузчика выполнять загрузку 64-разрядного ядра при старте системы. Для этого надо изменить файл политики загрузки /platform/platform-name/boot.conf:

ALLOW_64BIT_KERNEL_ON_UltraSPARC_1_CPU=true

Инициализация ядра

После того как ядро загружено в память и ему передано управление, оно начинает загрузку модулей. В этот момент ядро еще не умеет читать файлы из файловой системы UFS, так как драйвер файловой системы еще не загружен. Поэтому для чтения модулей ядро использует ufsboot. После того как загружено достаточно модулей для монтирования корневой файловой системы и самостоятельного продолжения загрузки, ядро выгружает ufsboot и выполняет остаток загрузки. Ядро монтирует указанные в /etc/vfstab файловые системы и запускает процесс /sbin/init для перехода к режиму работы системы, который в /etc/inittab обозначен как initdefault. Процесс /sbin/init, в свою очередь, запускает те программы и скрипты, которые перечислены в /etc/inittab.
В Solaris 9 ядро настраивается динамически, т.е. изменить параметры ядра можно как при перезагрузке системы (изменив заранее файл конфигурации /etc/system), так и во время работы, на лету. Поэтому ядро называется динамическим. Оно состоит из небольшой статической части и множества модулей, которые загружаются динамически, по мере необходимости. Многие модули загружаются автоматически при старте системы, в то время как другие, например драйверы устройств, загружаются тогда, когда они понадобятся ядру, т.е. в момент первого обращения к ним. Когда модуль уже не нужен, он может быть выгружен из памяти. Фактически, ядро выгружает модуль тогда, когда он не нужен, а память, которую он занимает, наоборот, нужна.
Чтобы узнать, какие модули загружены в настоящий момент, следует выполнить команду

modinfo

Модули ядра хранятся в каталогах /kernel и /usr/kernel, специфичные для аппаратной платформы модули лежат в каталогах /platform/`uname -m`/kernel и /platform/` uname -i`/kernel (если такие есть).
Специфические указания того, какие модули загружать при старте системы, следует разместить в файле /etc/system, который считывается ядром при загрузке. В этом файле можно также указать дополнительные параметры, которые надо передать модулям при загрузке.
В частности, /etc/system используют, чтобы указать:

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

Стандартный файл /etc/system выглядит примерно так:

  1. Всегда делайте резервную копию любого файла конфигурации перед внесением изменений! Дать команду cp /etc/system /etc/system.bak - дело двух секунд, зато это действие сохранит вам нервы и время - проверено поколениями сисадминов!
  2. Никогда не вносите в файлы конфигурации изменений, если не уверены, что это надо делать, или сомневаетесь в том, что должно получиться в результате.

Если правилом (2) вы пренебрегли вопреки голосу разума, то неверный файл /etc/system может вызвать ошибку при загрузке и система не загрузится. Если это случилось, то:

  • используйте команду загрузчика boot -a для интерактивной загрузки;
  • когда загрузчик спросит имя файла system, укажите имя резервной копии (например, /etc/system.bak);
  • если правило (1) вы тоже проигнорировали (похоже, в этом случае сегодня не ваш день!) и никакой резервной копии не имеете, то в качестве имени файла system указывайте /dev/null - тогда все значения будут приняты по умолчанию.

Как видно из приведенного примера, большинство строк в /etc/system выглядят так:

   
set параметр=значение

Например, параметр ядра MAXUSERS устанавливается в значение 50 следующей командой:

set maxusers = 50

Обратите внимание на то, что параметры статической части ядра (фактически, файла unix) устанавливаются без ссылки на модуль, а параметры, применимые к модулям, - с указанием имени модуля:

set модуль:параметр=значение

Длина команды в файле /etc/system не должна превышать 80 символов, строки, начинающиеся со знака звездочки "*" или решетки "#" интерпретируются как комментарии.
Чтобы проверить, какие значения имеют настраиваемые параметры ядра, следует использовать команду sysdef, которая показывает список обнаруженных устройств, системных устройств, загруженных модулей и значения настраиваемых параметров ядра:

Запуск процесса init

Процесс init запускается ядром сразу после монтирования файловых систем из /etc/vfstab. После этого init осуществляет переход в тот режим выполнения, который ему указан как initdefault в файле /etc/inittab. Переход к этому режиму выполнения фактически означает запуск всех программ, которые перечислены в этом файле для указанного режима выполнения. Вот обычный файл /etc/inittab:

Сценарии запуска системы
В каталогах /etc/rcN.d лежат скрипты запуска системы, то есть те скрипты, которые запускают и останавливают отдельные приложения. Имена файлов в каталогах имеют вид KnnNAME или SnnNAME, где nn - это целое положительное число, а NAME - имя приложения (обычно - демона).
Файлы, начинающиеся с буквы S (start), - это скрипты для запуска приложения, файлы, начинающиеся с K (kill) - для завершения работы приложения. Номер nn определяет порядок запуска скриптов - вначале запускаются те, что имеют меньший порядковый номер.
При переходе в тот или иной режим работы системы сначала выполняются скрипты останова приложений, а затем - скрипты запуска приложений того режима, в который происходит переход. При старте системы, естественно, выполняются скрипты запуска приложений режима initdefault.
То, какие именно скрипты запускать, описано в файле /etc/rcN (N может принимать значения от 0 до 6 и s), который, собственно, и вызывается процессом init. Файлы /etc/rcN являются символическими ссылками на файлы /sbin/rcN (см. файл /etc/inittab выше).
Так, если initdefault =3, а каталог /etc/rc3.d содержит нижеуказанные скрипты, то первым выполнится S13kdc.master, затем S14kdc, и так все по порядку (последним будет S90samba):
README
S13kdc.master
S14kdc
S15nfs.server
S16boot.server
S34dhcp
S50apache
S76snmpdx
S77dmi
S80mipagent
S81volmgt
S89sshd
S90samba
Программы shutdown, init, poweroff, halt, reboot
Для перевода системы из одного режима в другой, в том числе и для ее остановки, следует использовать специально предназначенные для этого программы.
В Solaris есть несколько таких программ:
/usr/sbin/shutdown
/sbin/init
/usr/sbin/halt
/usr/sbin/reboot
/usr/sbin/poweroff
Stop+A или L1+A
Программы /usr/sbin/shutdown, /sbin/init, /usr/sbin/halt выполняют завершение всех процессов в системе, записывают несохраненные данные на диск, и переводят систему в новый режим работы (в том числе и в состояние остановки).
Программа /usr/sbin/reboot выполняет все вышеперечисленное и затем переводит систему в режим, определенный как initdefault в /etc/inittab.
Команда /usr/sbin/poweroff обеспечивает переход в режим номер 5, т.е. она эквивалентна команде init 5.
Последняя команда (комбинация клавиш) доступна только в SPARC-системах, где соответствующие клавиши есть на клавиатуре, и посылаемый ими код отрабатывается как аварийный останов. Аварийный останов следует выполнять только в крайнем случае, так как при таком завершении работы системы все процессы прерываются немедленно, без всякой записи данных на диск, и последствия могут быть незавидными для тех, чьи данные не были сохранены.
Программа shutdown
Самый общий способ остановки системы - программа shutdown, она есть в любом варианте UNIX. В Solaris эта программа имеет следующий синтаксис вызова:
shutdown [-y] [-gпериод_ожидания] [-iрежим]
например
shutdown -y -g0
Эта команда выполняется только привилегированным пользователем для изменения режима работы системы. Обычно она применяется для перехода из многопользовательского режима (3) в другой режим.
По умолчанию, команда переводит систему в режим 0, то есть состояние, в котором безопасно отключать питание. Это состояние называется состоянием останова (shutdown state).
Команда посылает всем интерактивно работающим с системой пользователям предупреждающее сообщение о том, что система готовится к переходу в другой режим работы, и еще одно, окончательное сообщение, перед началом реальных действий по останову. Пользователи обязаны быстро завершить свои задачи после получения предупреждающего сообщения - на это у них по умолчанию есть одна минута. Если они проигнорируют предупреждение, их процессы будут принудительно завершены, а несохраненные данные потеряются. Программа shutdown берет стандартное значение периода ожидания после каждого из этих сообщений из файла /etc/default/shutdown, если он существует. Если shutdown не может найти файл или не может прочитать значение, она выдает предупреждение и устанавливает период ожидания в 60 секунд. По умолчанию, программа запрашивает подтверждение у запустившего ее администратора, прежде чем начинать остановку демонов и прекращение процессов. Ключи команды используются следующим образом:

  • -y - автоматически отвечает утвердительно на все запросы о желании перезагрузить систему, чтобы программа shutdown могла работать без вмешательства администратора;
  • -gпериод_ожидания - позволяет администратору явно указать период_ожидания (в секундах);
  • -iрежим - задает режим, в который будет переведена система после предупреждений, если они выдаются.

Файл /etc/default/shutdown используется для задания значений, специфичных для вашей системы.
Программа shutdown ведет себя по-разному в зависимости от количества интерактивно работающих пользователей. Если в системе работает несколько пользователей, выдаются предупреждающее и окончательное сообщение, а также запрос на подтверждение остановки системы тому, кто запустил программу shutdown. Если зарегистрирован только пользователь, запустивший команду shutdown, или если период ожидания задан равным нулю, предупреждающее сообщение не выдается.
Если указать ключ -y, то запрос на подтверждение не выводится, так как предполагается положительный ответ на него.
Помните, что систему всегда следует останавливать перед выключением компьютера, а пользователи должны завершить свои сеансы работы с файлами. В противном случае неизбежны потери данных.
При запуске Solaris автоматически начинают работать различные системные службы (демоны), и перед завершением работы системы они должны корректно закончить свою деятельность. Команда shutdown требует от демонов завершения, а также инициирует запись на диск всех данных из файлового кэша и демонтирование всех файловых систем.
Стоит отметить, что кроме неукоснительно корректного завершения работы системы с помощью shutdown или аналогичной по смыслу команды, есть еще один момент, о котором системный администратор должен помнить: стабильное электропитание. Если пьяный сантехник, ретивая уборщица или безмозглый помощник научены никогда не выдирать провода из розеток и всегда выполнять shutdown, это значит, что осталось установить надежную систему бесперебойного питания. При подключении UPS к компьютеру убедитесь, что он настроен так, чтобы выдавать сигнал бедствия компьютеру при отключении электропитания; получив такой сигнал, система немедленно запустит shutdown и ее работа завершится безболезненно. Конечно, для систем круглосуточной работы надо иметь UPS с запасом энергии батарей, достаточным для работы в течение всего времени восстановления питания.

Программа init
С помощью программы init систему можно перевести в любой режим работы, часто эта программа используется для перехода в однопользовательский режим или перехода из него в многопользовательский. Для этого дается команда
init режим_работы
Кроме описанных выше режимов работы, можно указать режимы a, b, c и q. Режимы a, b, c - это псевдорежимы, они существуют только для того, чтобы можно было с помощью init запустить отдельные программы, которые отмечены в /etc/inittab как соответствующие данным режимам. Команда
init q
вызывает перечитывание процессом init файла /etc/inittab. Следовательно, если вы изменили этот файл и хотите, чтобы изменения оказали немедленное влияние на систему, следует дать команду init q.
Программа telinit является символической ссылкой на init, и ее используют для передачи команд запущенной в данный момент программе init.
В ответ на команду init 1 вы увидите нечто вроде:
INIT: New run level: 1
Changing to state 1.
Unmounting remote filesystems: /vol nfs done.
System services are now being stopped.
May 14 13:13:22 unknown /usr/sbin/vold[475]:
problem unmounting /vol;
Interrupted system call
<тут что-то еще....>
Killing user processes: done.
Change to state 1 has been completed.
Type control-d to proceed with normal startup,
(or give root password for system maintenance):
Вывод, сопровождающий выполнение команды, приведен не полностью. Обратите внимание на последние две строки; здесь требуется либо указать пароль привилегированного пользователя root, либо нажать Ctrl-D, в последнем случае произойдет обычная загрузка в состояние initdefault.
Команда haltДля немедленной остановки системы (подобно shutdown -y -g0) можно использовать команду

halt. От shutdown она отличается тем, что не предупреждает интерактивно работающих пользователей о скорой остановке системы. Эту команду можно смело давать в однопользовательском режиме или для остановки сервера, на котором никто, кроме администратора, не работает интерактивно.
Команда halt перед остановкой выполняет запись кэшируемых данных на диск.
Команда reboot
Команда reboot обычно используется для завершения работы в однопользовательском режиме и перехода к многопользовательскому. Эта команда выполняется быстрее, чем shutdown, потому что она не выполняет скрипты останова (/etc/rcN.d/K*) и не посылает никаких сообщений пользователям. Команда reboot выполняет запись кэшируемых данных на диск, так же, как и halt.
С помощью reboot можно передать ключи загрузчику среды OpenBoot, например, для изменения конфигурации таблицы устройств следует дать команду
reboot -- -rs
Как видно из примера, чтобы отделить ключи самой reboot от тех, что будут переданы загрузчику, перед ключами последнего ставятся два дефиса подряд.
Команда poweroff
Команда poweroff переводит систему в режим выполнения 5 и эквивалентна init 5. Пользователи не оповещаются об изменении режима работы, скрипты завершения K* не выполняются, и в случае, если аппаратура компьютера поддерживает программное выключение питания, питание компьютера выключается.
Последняя функция на компьютерах x86 доступна не всегда (или недоступна вовсе), по крайней мере, ноутбук IBM ThinkPad 390X, который я использовал для эксперимента, без проблем выключался, работая под Windows XP и, даже не пытаясь выключаться под Solaris 9, выдавал такие же надписи об останове, что и по команде halt:
... syncing file systems... done
Type any key to continue
Аварийная остановка системы
В некоторых случаях операционная система перестает отвечать на запросы и не откликается даже на команду reboot. В таком случае говорят, что система "зависла". Это явление, надо признать, более знакомо пользователям Windows 98, нежели администраторам Solaris, но тем не менее и с последним такое случается.
Рекомендуют такую "зависшую" систему перезапустить, нажав Stop+A или L1+A (для платформы SPARC). Это должно вызвать передачу управления к firmware. На физических терминалах, подключенных к последовательным портам, для этой цели возможно использовать клавишу Break.
Некоторые версии OpenBoot поддерживают ряд клавиатурных команд (они вводятся нажатием комбинаций клавиш), которые изменяют поведение OpenBoot при загрузке. Эти клавиши надо нажимать сразу после включения системного блока и держать их несколько секунд до того, как мигнет светодиод на клавиатуре.
К этим клавиатурным командам (keyboard chords) относятся:

  • Stop - пропустить исполнение процедуры начальной инициализации компьютера POST (Power-on self test); некоторые системы SPARC по умолчанию и так пропускают исполнение POST, тогда для того, чтобы выполнить POST, следует нажать Stop+D;
  • Stop+A - прерывание всех запущенных в настоящее время процессов и предоставление командной строки в среде OpenBoot;
  • Stop+D - включение режима диагностики (эквивалентно установке переменной diag-switch среды OpenBoot в значение true);
  • Stop+F - включение интерпретатора Forth на первом последовательном порту; для продолжения инициализации системы дайте команду exit; используется при нарушениях работы оборудования;
  • Stop+N - переустановка всех переменных NVRAM в значения по умолчанию.

Для изменения комбинаций клавиш, назначенных клавиатурным командам, надо отредактировать файл /etc/default/kbd. В нем также можно разрешить или запретить клавиатурные команды. После модификации файла следует дать команду kbd -i для замены стандартных назначений на новые.
Следует отметить, что в зависимости от установок безопасности компьютера, изменение клавиатурных команд и доступ к командной строке OpenBoot могут быть запрещены, либо доступ к командной строке может предоставляться по паролю.
Ручная работа по включению и выключению системы
Как перезапустить зависшую систему
Если система безнадежно зависла, следует:

  • нажать Stop+A или L1+A (или другую комбинацию клавиш, если вы переопределили стандартные установки в /etc/default/kbd);
  • дождавшись приглашения ok, дать команду sync для синхронизации файловых систем (записи кэшированных данных на диски);
  • дождавшись сообщения syncing file systems... done, нажать Stop+A или L1+A еще раз;
  • дать команду reset в ответ на приглашение ok;
  • после перезагрузки нелишне проверить, в какой режим работы загрузилась система:
  • # who -r
  • run-level 3 May 9 05:29 3 0 S

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

  • вначале включить периферийные устройства (принтеры, внешние диски и т.п.);
  • включить монитор;
  • включить системный блок (бывает, что он включается одной кнопкой с монитором, это допустимо).
 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г.Яндекс.Метрика