Опубликован: 04.07.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Европейский Университет в Санкт-Петербурге
Лекция 2:

Настройка ядра, добавление оборудования, установка программ и обновлений

< Лекция 1 || Лекция 2: 1234 || Лекция 3 >

Что настраивать в ядре?

Ядро состоит из статической части и динамической части (модулей). Кроме этого, в ядре располагаются многочисленные таблицы, размер которых задается параметрами ядра. Фактически настройка ядра сводится к следующим задачам:

  1. определение (или переопределение) параметров ядра;
  2. принудительное добавление указанных модулей в ядро;
  3. принудительное запрещение загрузки указанных модулей.

Частным случаем задачи (2) является добавление и настройка драйверов устройств.

Для того, чтобы узнать значения параметров исполняющегося ядра, надо использовать программу sysdef.

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

Изменение файла /etc/system

Конфигурация ядра Solaris, которая определяет технические параметры системы, может быть изменена в файле /etc/system. Файл содержит настройки ядра, отличные от принятых по умолчанию. Этот файл используется при загрузке системы. Изменения, внесенные в /etc/system, оказывают действие на конфигурацию ядра после перезагрузки.

Помните, что перед внесением изменений в любой файл конфигурации следует сделать его резервную копию – про запас.

Файл /etc/system содержит команды, которые представляют собой список пар имя=значение. Длина команды не должна превышать 80 символов. Строки комментариев начинаются с символа * (звездочка) или # (решетка). Все команды, кроме специально оговариваемых исключений, можно давать в любом регистре, как маленькими, так и большими буквами.

В командах set в /etc/system имена параметров статической части ядра (т.е. файла unix) указываются без названия модуля, а все остальные – с указанием модуля, к которому относится параметр:

set maxusers = 50
set strmod:strmsgsz = 262144

Для более детального изучения настроек ядра и работы с полным списком настроек имеет смысл обратиться к руководству "Solaris Tunable Parameters Reference Manual" по адресу http://docs.sun.com/app/docs/ doc/817-0404.

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

sysdef | grep stream
65536 maximum stream message size (STRMSGSZ)

Можно проверить значения параметров и другим способом, с помощью отладчика mdb, напрямую запросив значение соответствующей переменной в ядре:

mdb -kw
Loading modules: [ unix genunix specfs dtrace cpu.generic cpu_
ms.AuthenticAMD.15 uppc pcplusmp scsi_vhci ufs ip hook neti sctp
arp usba s1394 fctl nca lofs zfs random audiosup md cpc crypto
smbsrv fcip fcp logindmux ptm nsctl sdbc sv ii sppp rdc ipc ]
> strmsgsz/D
strmsgsz:
strmsgsz: 65536

Следующие пространства имен являются общими для всех платформ под Solaris:

  • drv – драйвера устройств;
  • Exec – модули поддержки разных форматов исполняемых файлов, а именно:
    • aoutexec – модуль только для SPARC;
    • coffexec – модуль только для Intel;

      для обеих платформ:

      • elfexec
      • intpexec
      • javaexec
  • fs – модули этого пространства имен – драйверы файловых систем;
  • sched – реализация алгоритма планировщика задач;
  • strmod – модули STREAMS;
  • sys – модули исполнения системных вызовов;
  • misc – другие модули, не попавшие в указанные выше категории.

Только для платформы SPARC реализованы модули:

  • dacf – модули автонастройки устройств;
  • cpu – модули процедур ядра, связанных с конкретными процессорами.

Фактически каждое пространство имен представляет собой каталог, в котором находится тот или иной модуль, например, модуль ipc находится в пространстве имен misc и располагается в каталоге /kernel/misc.

Загрузка такого модуля выполняется командой

modload misc/ipc

В файле /etc/system допустимы следующие команды:

  • exclude: <namespace>/<modulename> – запрет загрузки модуля;
  • include: <namespace>/<modulename> – разрешение загрузки модуля; любые модули по умолчанию разрешено загружать;
  • forceload: <namespace>/<modulename> – требовать загрузки модуля при инициализации ядра, в отличие от принятой по умолчанию загрузки по мере необходимости;
  • rootdev: <device name> – установить иное устройство для загрузки, чтобы изменить принятое по умолчанию при загрузке или установленное командой boot среды OpenBoot;
  • rootfs: <root filesystem type> – указать тип файловой системы загрузочного устройства;
  • moddir: <first module path>[[{:, }<second ...>]...] – установить список каталогов, в которых следует искать модули для загрузки;
  • set [<module>:]<symbol> {=, |, &} [~][-]<value> – установить параметр ядра в указанное значение; если параметр относится к конкретному модулю, в команде следует указать явно этот модуль (см. выше пример с установкой параметров семафоров в ядре).

Предположим, мы хотим исключить возможность запуска приложениями пользователей того кода, который находится в пространстве пользовательского стека. Это позволяет избежать запуска нежелательного кода при эксплуатации уязвимостей типа "переполнение буфера". В 64-разрядном ядре Solaris эта настройка включена по умолчанию для всех 64-разрядных приложений, в то время как в 32-разрядном ядре – выключена. Также она выключена в 64-разрядном ядре для 32-разрядных приложений.

Для включения настройки следует в /etc/system указать

set noexec_user_stack = 1

По состоянию на начало 2008 года эта настройка эффективна только для 64-разрядных архитектур SPARC и AMD в системах Solaris 2.6, 7, 8, 9, и 10. В других архитектурах она не повлияет на поведение приложений.

Некоторые настраиваемые параметры ядра

Здесь мы рассмотрим параметры, влияющие на максимальное количество процессов, которые можно запустить в системе, и на максимальное количество процессов, которые может запустить один пользователь.

Основным параметром является maxusers, который влияет на значения параметров max_nprocs и maxuprc.

Параметр maxusers в прошлом определял максимальное разрешенное количество одновременно работающих в системе пользователей.

Размер многих таблиц в ядре вычислялся с использованием этого параметра. В настоящее время старое значение этого параметра утратило смысл, но некоторые параметры ядра продолжают базироваться на maxusers. Это максимально допустимое количество процессов в системе, размер структур квотирования в системе и размер кэша имен каталогов (directory name lookup cache – DNLC). По умолчанию maxusers равно меньшему из двух чисел – объему памяти системы в мегабайтах или 2048. Может принимать любое значение от 1 до 2048, при явной установке в /etc/system – от 1 до 4096, но следует указывать разумные значения. Значение maxusers явно мало, если система выдает сообщения

out of processes

Значение maxusers по умолчанию, скорее всего, будет велико для систем с малым количеством запущенных процессов и большим объемом памяти – серверов баз данных, вычислительных серверов и т.п.

Еще одним важным параметром является max_nprocs: он ограничивает максимальное количество процессов, которые можно одновременно запустить в системе, и влияет на вычисление значения maxuprc, а также на:

  • вычисление размеров кэша имен каталогов (DNLC);
  • резервирование структур, обеспечивающих квотирование дискового пространства (если не указано явно значение ndquot );
  • проверку того, что объем памяти, занятый под семафоры, не превышает системных ограничений;
  • настройку подсистемы Hardware Address Translation для систем x86 и sun4m.

Значение max_nprocs по умолчанию – 10 + (16 x maxusers), диапазон значений – от 266 до максимально возможного идентификатора процесса ( maxpid ). Изменение этого параметра понадобится, если потребуется запускать более 30 000 процессов одновременно.

Кроме ограничения на общее количество одновременно запущенных процессов, существует ограничение на количество процессов, запускаемых одним пользователем. Это количество контролируется параметром maxuprc.

По умолчанию этот параметр равен разности max_nprocs и reserved_procs, где reserved_procs – это параметр, отвечающий за резервирование некоторого количества идентификаторов процессов для пользователя root (даже если вся таблица процессов заполнена процессами пользователей, для процессов root оставляется резерв строк в этой таблице). По умолчанию reserved_procs устанавливается равным 5.

Количество процессов, которое имеет право запустить один пользователь, можно только уменьшить; сделать его большим, чем max_nprocs - reserved_procs, нельзя.

Превышение пользователем ограничения, установленного параметром maxuprc, приводит к выдаче сообщения

out of per-user processes for uid N

Для более детального изучения параметров ядра, доступных для настройки, имеет смысл ознакомиться с Solaris Tunable Reference Manual, доступным на docs.sun.com.

< Лекция 1 || Лекция 2: 1234 || Лекция 3 >
Александр Тагильцев
Александр Тагильцев

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

Александр Гордеев
Александр Гордеев
Казахстан, Алматы, ТУРАН
Александр Даниленко
Александр Даниленко
Россия, Москва, 797, 1993