Европейский Университет в Санкт-Петербурге
Опубликован: 04.07.2008 | Доступ: свободный | Студентов: 1309 / 258 | Оценка: 4.34 / 3.65 | Длительность: 21:13:00
Лекция 11:

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

< Лекция 10 || Лекция 11: 12345 || Лекция 12 >

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

/platform/platform-name/ufsboot вторичный загрузчик для загрузки с диска
/etc/inittab файл, в котором указано, какие программы init должен запустить при старте; здесь же определено, какой режим работы системы следует выбирать по умолчанию (параметр "initdefault")
/sbin/init программа, которая переводит систему в тот или иной режим работы; init является родительским процессом для большинства демонов
/platform/platform-name/boot.conf, /platform/hardware-class-name/boot.conf основной и альтернативный файл политики загрузки системы, этот файл есть не на всех платформах.
/platform/platform-name/kernel/unix файл ядра (по умолчанию) на 32-битных системах SPARC и х86
/platform/platform-name/kernel/sparcv9/unix файл ядра (по умолчанию) на 64-битных системах SPARC

Только для компьютеров x86 (до Solaris 10 1/06 включительно):

/etc/bootrc скрипт, управляющий загрузкой
/platform/platform-name/boot/solaris/boot.bin вторичный загрузчик, который используется в системах на платформе x86 вместо ufsboot
/platform/platform-name/boot каталог с файлами, используемыми при загрузке

Замечание о загрузке систем 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 для перехода к рабочему режиму системы. Процесс /sbin/init, в свою очередь, запускает те программы и скрипты, которые перечислены в /etc/inittab, и передает управление службе svc.startd.

До Solaris 9 включительно режим работы по умолчанию указывался в /etc/inittab с меткой initdefault. Начиная с Solaris 10 рабочий режим определяется установками подсистемы SMF, а именно тем, какой этап системы требуется загрузить. По умолчанию происходит загрузка этапа milestone/multi-user-server. Конкретный набор служб, запускаемых для перехода к этому этапу, указан в профиле /var/svc/profile/generic.xml, или, если этот файл существует, в /var/svc/profile/generic_open.xml. Более подробно о профилях SMF рассказано в лекции 13 курса "Системное администрирование ОС Solaris 10".

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

Чтобы узнать, какие модули загружены в настоящий момент, следует выполнить команду

modinfo

Модули ядра хранятся в каталогах /kernel и /usr/kernel, специфичные для аппаратной платформы модули лежат в каталогах /platform/`uname –m`/kernel и /platform/` uname –i`/kernel (если такие есть).

Специфические указания, какие модули загружать при старте системы, следует разместить в файле /etc/system, который считывается ядром при загрузке. В этом файле можно также указать дополнительные параметры, которые надо передать модулям при загрузке.

В частности, /etc/system используют, чтобы указать:

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

Стандартный файл /etc/system в Solaris 10 выглядит примерно так (незначимые для данного примера строки не показаны):

* SYSTEM SPECIFICATION FILE
*
* moddir:
*
*     Set the search path for modules. This has a format similar
*     to the csh path variable. If the module isn't found in the
*     first directory it tries the second and so on. The default
*     is /kernel /usr/kernel
*
*     Example:
*           moddir: /kernel /usr/kernel /other/modules
*
* root device and root filesystem configuration:
*
*     The following may be used to override the defaults provided
*           by the boot program:
*
*     rootfs:           Set the filesystem type of the root.
*
*     rootdev:          Set the root device. This should be a
*                       fully expanded physical pathname. The
*                       default is the physical pathname of the
*                       device where the boot program resides.
*                       The physical pathname is highly platform
*                       and configuration dependent.
*
*     Example:
*           rootfs:ufs
*           rootdev:/sbus@1,f8000000/esp@0,800000/sd@3,0:a
*
*     (Swap device configuration should be specified in /etc/vfstab.)
*
* exclude:
*
*     Modules appearing in the moddir path which are NOT to be
*     loaded, even if referenced. Note that `exclude' accepts
*     either a module name, or a filename which includes the
*     directory.
*
*     Examples:
*           exclude: win
*           exclude: sys/shmsys
* forceload:
*
*     Cause these modules to be loaded at boot time, (just before
*     mounting the root filesystem) rather than at first
*     reference. Note that forceload expects a filename which
*     includes the directory. Also note that loading a module
*     does not necessarily imply that it will be installed.
*
*     Example:
*           forceload: drv/foo
*
* set:
*
*     Set an integer variable in the kernel or a module to a new
*     value. This facility should be used with caution. See
*     system(4).
*
*     Examples:
*
*     To set variables in 'unix':
*
*           set nautopush=32
*           set maxusers=40
*
*     To set a variable named 'debug' in the module named
*     'test_module'
*
*                set test_module:debug = 0x13

Важно!

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

Никогда не вносите в файлы конфигурации изменений, если не уверены, что это надо делать или сомневаетесь в том, что должно получиться в результате.

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

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

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

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

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

set maxusers = 50

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

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

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

Чтобы проверить, какие значения имеют настраиваемые параметры ядра, следует использовать команду sysdef, которая показывает список обнаруженных устройств, системных устройств, загруженных модулей и значения настраиваемых параметров ядра (вывод программы сокращен, так как это очень подробная информация – более 20 страниц):

sysdef
*
* Hostid
*
  0930edc1
*
* i86pc Configuration
*
*
* Devices
*
scsi_vhci, instance #0
isa, instance #0
   i8042, instance #0
      keyboard, instance #0
      mouse, instance #0
   motherboard (driver not attached)
   asy, instance #0
   lp, instance #0
   asy, instance #1
   pit_beep, instance #0
pci, instance #0
   pci1025,10a (driver not attached)
   pci1002,5a34, instance #0
      display, instance #0
   pci1002,5a36 (driver not attached)
   pci1002,5a37 (driver not attached)
   pci1002,5a38 (driver not attached)
   pci1002,5a39, instance #4
   pci1468,422, instance #0
   pci-ide, instance #0
      ide, instance #0
         cmdk, instance #0
      ide (driver not attached)
   pci1025,10a, instance #0
   pci1025,10a, instance #1
      mouse, instance #2
   pci1025,10a, instance #0
      device, instance #0
   pci1025,10a (driver not attached)
<...>
*
* Loadable Objects
*
* Loadable Object Path = /platform/i86pc/kernel
*
kmdb/amd64/cpu.generic
kmdb/amd64/cpu_ms.AuthenticAMD.15
kmdb/amd64/pcplusmp
kmdb/amd64/unix
kmdb/amd64/uppc
kmdb/cpu.generic
kmdb/cpu_ms.AuthenticAMD.15
kmdb/pcplusmp
kmdb/unix
kmdb/uppc
drv/amd64/xsvc
drv/xsvc
drv/amd64/cpc
   hard link: sys/amd64/cpc
drv/cpc
   hard link: sys/cpc
misc/amd64/cpr
misc/cpr
drv/amd64/nxge
drv/nxge
drv/amd64/pci-ide
drv/pci-ide
amd64/unix
cpu/amd64/cpu.generic
cpu/amd64/cpu_ms.AuthenticAMD
cpu/amd64/cpu_ms.AuthenticAMD.15
cpu/amd64/cpu_ms.GenuineIntel
<...>
*
* Loadable Object Path = /usr/kernel
*
drv/ncall
drv/nsctl
drv/nskern
drv/sdbc
drv/amd64/sv
drv/sv
drv/amd64/pool
drv/pool
drv/amd64/zcons
drv/zcons
drv/amd64/winlock
drv/winlock
drv/amd64/ii
drv/ii
drv/amd64/ipf
drv/ipf
misc/spuni
misc/amd64/spuni
drv/amd64/pm
drv/pm
<...>
*
* System Configuration
*
  swap files
swapfile             dev      swaplo    blocks      free
/dev/dsk/c0d0s1      102,1    8         4209016  4036480
*
* Tunable Parameters
*
32006144   maximum memory allowed in buffer cache (bufhwm)
   24426   maximum number of processes (v.v_proc)
      99   maximum global priority in sys class (MAXCLSYSPRI)
   24421   maximum processes per user id (v.v_maxup)
      30   auto update time limit in seconds (NAUTOUP)
      25   page stealing low water mark (GPGSLO)
       1   fsflush run rate (FSFLUSHR)
      25   minimum resident memory for avoiding deadlock (MINARMEM)
      25   minimum swapable memory for avoiding deadlock (MINASMEM)
*
* Utsname Tunables
*
    5.11  release (REL)
 solaris  node name (NODE)
   SunOS  system name (SYS)
 snv_79a  version (VER)
*
* Process Resource Limit Tunables (Current:Maximum)
*
0x0000000000000100:0x0000000000010000  file descriptors
*
* Streams Tunables
*
     9  maximum number of pushes allowed (NSTRPUSH)
 65536  maximum stream message size (STRMSGSZ)
  1024  max size of ctl part of message (STRCTLSZ)
*
* IPC Messages module is not loaded
*
*
* IPC Semaphores module is not loaded
*
*
* IPC Shared Memory
*
* The IPC Shared Memory module no longer has system-wide limits.
* Please see the "Solaris Tunable Parameters Reference Manual" for
* information on how the old limits map to resource controls and
* the prctl(1) and getrctl(2) manual pages for information on
* observing the new limits.
*
*
* Time Sharing Scheduler Tunables
*
60 maximum time sharing user priority (TSMAXUPRI)
SYS system class name (SYS_NAME)
< Лекция 10 || Лекция 11: 12345 || Лекция 12 >
Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Александр Васильченко
Александр Васильченко
Россия
Денис Гайдуль
Денис Гайдуль
Россия, Подольск