администрирование Linux на лету

Файловая система /proc - это одна из величайших особенностей Linux и эта статья проведет вас по наиболее полезным ее аспектам. С ней вы сможете администрировать многие детали вашей системы без необходимости перезагрузки машины.

Любой, кто администрировал систему коммерческой важности, знаком с головной болью из-за падения системы. Одной из основных причин, по которой компании запускают UNIX-серверы, является их стабильность. При аккуратном администрировании такой сервер не приходится перезапускать в течение очень долгого времени. Более того, выполнение администраторских задач, даже на уровне ядра, может выполняться на лету, сохраняя стабильность сервера. Вам может понадобиться перезапустить сервер при апгрейде оборудования или если кто-нибудь оборвет питающий провод, однако большую часть администрирования можно выполнять без этого. Эта статья включает подсказки и советы для выполнения различных административных задач и изменения вашей системы без перезагрузки.

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

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

изменение параметров работающего ядра


Linux имеет отличный способ изменять параметры ядра во время работы системы и без необходимости перезагрузки. Это делается при помощи виртуальной файловой системы /proc. Linux Gazette дает один из простейших и легчайших объяснений /proc, которые я когда-либо видел. Вкратце, файловая система /proc дает вам возможность заглянуть в работающее ядро, что может быть полезно для мониторинга производительности, проверки системной информации, конфигурирования системы и изменения конфигурации. Эта файловая система называется виртуальной, потому что это в действительности не файловая система. Это карта, создаваемая ядром и присоединяемая к вашей обычной файловой системе, чтобы обеспечить доступ. Тот факт, что мы можем разными способами внести изменения в ядро во время работы системы дает системному администратору огромную мощь и гибкость при изменении параметров. Но может быть слишком много власти это плохо? Иногда. Если вы собираетесь внести изменения в файловую систему /proc, вы должны быть уверены, что вы знаете, что вы делаете и какой эффект произведут на систему ваши действия. Это очень полезная техника, но одно неверное движение может вызвать неожиданные последствия. Если вы не уверены и новичок в таких делах, попрактикуйтесь на тестовой машине.
как вносить изменения?

Сначала, подумайте о том, как не вносить изменения в ядро. Есть две отличных причины, почему вам не стоит просто перейти в /proc, открыть файл в текстовом редакторе, сделать несколько изменений и сохранить файл. Вот они.

Целостность данных. Все эти файлы представляют работающую систему, а поскольку ядро может внести изменения в эти файлы в любое время, то если вы откроете файл и попытаетесь внести изменения в то время, когда туда вносит изменения система, то вы можете сохранить не то, что ожидает увидеть ядро.

Виртуальные файлы. Все эти файлы в действительности не существуют. Как же тогда синхронизировать сохраненные данные?

Ответом на это является не использование текстового редактора для внесения изменений. Поэтому для внесения изменения в что-либо в файловой системе /proc вам следует использовать команду echo и перенаправлять вывод команды в выбранный файл в /proc. Например:

echo "Your-New-Kernel-Value" > /proc/your/file

Аналогично, если вы хотите увидеть информацию из /proc, вам следует использовать либо команду, которая предназначена для этого, либо команду cat.

что изменять?

Вам не нужно быть разработчиком ядра, чтобы пользоваться /proc, а базовое понимание этой структуры отлично вам поможет. Файловая система /proc помогает администратору в этом через свою структуру и атрибуты файлов.

Каждый файл в /proc имеет особый набор атрибутов и может принадлежать конкретному пользователю. Сделано это очень аккуратно, так что правильная работа обеспечена и администратору, и пользователям. Следующий список обобщает, какие атрибуты могут быть у файлов:

- read-only - файл не может быть изменен ни одним пользователем; используется для представления системной информации;

- root-write - если файл может быть изменен, то изменения может вносить только пользователь root;

- root-read - некоторые файлы могут быть не читаемы для обычных пользователей системы, только для root;

- other - вы можете найти и другие комбинации, кроме перечисленных выше.

В основном в /proc вы найдете файлы read-only за исключением /proc/sys, которая содержит большинство параметров ядра и предназначена для внесения изменений во время работы системы. Поэтому в статье рассматривается, в основном, эта директория.

Последнее, что вам нужно знать о изменении файлов в /proc - это то, что нужно записывать в эти файлы. Вы заметите, что некоторые из файлов могут быть легко прочитаны человеком, а некоторые являются файлами данных и могут быть прочитаны только при помощи специальных утилит, таких как top, lspci и free. Вы также заметите, что эти легко читаемые файлы имеют два различных формата: некоторые являются бинарными ключами, а другие содержат больше информации. Файлы с бинарными ключами содержат только 0 (выключено) или 1 (включено) для некоторых функций ядра.

внесение изменений

Детальная информация об использовании каждого файла в /proc выходит за рамки этой статьи. За дополнительной информацией о любом файле /proc стоит непосредственно обратиться в исходники ядра, которые содержат очень хорошую документацию. Следующие файлы в /proc наиболее полезны для системного администратора. Они не являются исчерпывающими, но полезны для повседневного использования.

/proc/scsi

/proc/scsi/scsi


Одна из наиболее полезных вещей, которые нужно знать администратору - как добавить дисковое пространство, если у вас есть диски горячей замены без перезагрузки системы. Без использования /proc, вы должны вставить ваш диск, но затем вам придется перезагружать систему для того, чтобы дать ей возможность распознать новый диск. Вы можете позволить системе распознать новый диск с помощью следующей команды:

echo "scsi add-single-device w x y z" > /proc/scsi/scsi

Чтобы эта команда работала правильно, вы должны указать параметры значений w, x, y, и z следующим образом:

- w - это ID хост-адаптера, где первый адаптер имеет ID ноль ;

- x - это канал SCSI на хост-адаптере, где первый канал ноль;

- y - это SCSI ID устройства;

- z - это номер LUN, где первый LUN ноль.

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

echo "scsi remove-single-device w x y z" > /proc/scsi/scsi

Перед тем, как ввести эту команду и удалить SCSI-диск, убедитесь, что вы отмонтировали файловые системы на этом диске.

/proc/sys/fs/

/proc/sys/fs/file-max

Здесь указывается максимальное количество заголовков файлов, которое может быть одновременно открыто. Вам может понадобиться увеличить это число, если пользователи получают сообщение об ошибке, потому что достигнуто максимальное количество открытых файлов. Можно указать любое числовое значение в этом файле. Значение по умолчанию – 4096.

/proc/sys/fs/file-nr
Этот файл связан с file-max и содержит три значения:

- количество назначенных заголовков файлов;
- количество используемых заголовков;
- максимальное число заголовков.

Этот файл только для чтения.

/proc/sys/fs/inode-*
Любые файлы, начинающиеся с inode, будут выполнять те же функции, что и файлы с именем file выше, но выполняются эти операции относительно inodes, а не заголовков файлов.

/proc/sys/fs/super-max
Здесь указывается максимальное количество заголовков суперблоков. Любая файловая система, которую вы монтируете, должна использовать суперблоки, так что вам, возможно, придется использовать этот файл, если вы монтируете много файловых систем.

Значение по умолчанию – 256.

/proc/sys/fs/super-nr
Здесь указано текущее значение количества суперблоков. Этот файл только для чтения и используется для информирования.

/proc/sys/kernel

/proc/sys/kernel/acct

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

Если свободное пространство ниже установленного значения, то процесс подсчета останавливается. Если свободное пространство выше, то процес запускается. Третий параметр - частота в секундах, с которой проверяются предыдущие два значения.

Чтобы изменить значения в этом файле вам следует использовать разделенный список параметров. Значения по умолчанию - 2 4 30.
Эти значения остановят подсчет, если в файловой системе менее 2% свободного пространства и начнет опять, если появится 4 или более процентов. Проверка производится каждые 30 секунд.

/proc/sys/kernel/ctrl-alt-del
Этот файл содержит двоичное значение, которое управляет тем, как система реагирует на комбинацию ctrl+alt+delete. Возможны два значения. Ноль (0) значит, что ctrl+alt+delete принимается и отправляется программе init. Это позволит выполнить системе мягкую остановку и перезагрузку, как если бы вы ввели команду shutdown.

Один (1) значит, что ctrl+alt+delete не принимается и никакого чистого отключения не происходит (отключение, как если бы вы просто выключили питание).

Значение по умолчанию – 0.

/proc/sys/kernel/domainname
Здесь вы можете сконфигурировать ваше сетевое доменное имя. Значения по умолчанию нет и оно может быть, а может и не быть установлено.

/proc/sys/kernel/hostname
Здесь вы можете сконфигурировать ваше сетевое имя хоста. Значения по умолчанию нет и оно может быть, а может и не быть установлено.

/proc/sys/kernel/msgmax
Здесь определяется максимальный размер сообщения, которое может быть отправлено от одного процесса другому. Сообщения между процессами в памяти ядра не копируются на диск, так что если вы увеличите это значение, то вы увеличите количество памяти, используемой операционной системой. По умолчанию – 8192.

/proc/sys/kernel/msgmnb
Здесь указывается максимальное количество байт в одном сообщении. По умолчанию – 16384.

/proc/sys/kernel/msgmni
Здесь указывается максимальное количество идентификаторов сообщений в очереди. Значение по умолчанию – 16.

/proc/sys/kernel/panic
Здесь установлено время в секундах, которое ядро будет ждать перед перезагрузкой если произойдет kernel panic. Установка в ноль секунд отключит возможность перезагрузки при kernel panic. Оно же – значение по умолчанию.

/proc/sys/kernel/printk
Здесь четыре числовых значения, которые определяют, куда будут отправлены сообщения логов в зависимости от их важности. За более подробной информацией о различных уровнях логов отправляейтесь в man syslog(2). Четыре значения - это:

- Console Log Level - сообщения с высшим приоритетом, чем это, будут выведены на консоль;

- Default Message Log Level - сообщения без приоритета будут напечатаны с этим приоритетом;

- Minimum Console Log Level - минимальное (высочайший приоритет) значение, в которое может быть установлен Console Log Level;

- Default Console Log Level - значение по умолчанию для Console Log Level.

По умолчанию выставлено так: 6 4 1 7.

/proc/sys/kernel/shmall
Это общее количество разделяемой памяти (в байтах), которое может быть использовано в системе. По умолчанию – 2097152.

/proc/sys/kernel/shmax
Здесь указывается наибольший размер сегмента памяти (в байтах), позволяемый ядром. По умолчанию – 33554432.

/proc/sys/kernel/shmmni
Этот файл связан с максимальным числом сегментов раздляемой памяти всей системы. По умолчанию – 4096.

/proc/sys/kernel/sysrq
Активирует System Request Key, если не равно нулю. По умолчанию равно :)

/proc/sys/kernel/threads-max
Максимальное число потоков, которое может быть использовано ядром. По умолчанию – 2048.

/proc/sys/net

/proc/sys/net/core/message_burst

Это время (в десятых долях секунды) необходимое для записи нового предупреждения; другие предупреждения, полученные в это время будут пропущены. Это используется для предотвращения атаки Denial of Service, которая может быть выполнена при заваливании вашей системы сообщениями. Значение по умолчанию - 50 (5 секунд).

/proc/sys/net/core/message_cost
Здесь указывается значимость каждого предупреждения. Чем выше значение, тем больше предупреждений будет проигнорировано. По умолчанию – 5.

/proc/sys/net/core/netdev_max_backlog
Здесь указывается максимальное количество пакетов в очередь на обработку, если интерфейс получает пакеты быстрее, чем ядро может их обработать. По умолчанию – 300.

/proc/sys/net/core/optmem_max
Здесь указан максимальный размер буфера для одного сокета.

/proc/sys/net/core/rmem_default
Здесь размер буфера для принимающего сокета по умолчанию (в байтах).

/proc/sys/net/core/rmem_max
Это максимальный размер буфера для принимающего сокета (в байтах).

/proc/sys/net/core/wmem_default
Это размер буфера отправляемого сокета по умолчанию (в байтах).

/proc/sys/net/core/wmem_max
Это максимальный размер буфера отправляемого сокета (в байтах).

/proc/sys/net/ipv4
/proc/sys/net/ipv6

Все параметры IPv4 и IPv6 полностью описаны в документации к ядру. Смотри файл /usr/src/linux/Documentation/networking/ip-sysctl.txt. /* Мы также подробно рассматривали их в прошлых номерах «Сетевых решений». – прим. ред. */

/proc/sys/vm

/proc/sys/vm/buffermem

Здесь происходит управление количеством общей системной памяти (в процентах), которая будет использована как буферная память. Файл содержит три значения, которые могут быть указаны в виде списка через пробел:

- минимальный процент памяти, которая будет использована для буфера;

- система будет пытаться установить это количество памяти для буфера, если количество доступной памяти будет уменьшено;

- максимальный процент памяти, которая будет использована для буферов. Строка по умолчанию - 2 10 60.

/proc/sys/vm/freepages
Этот файл управляет как система реагирует на различные уровни свободной памяти. Содержит три значения, которые могут быть установлены в виде списка, разделенного пробелами:

- если количество свободных страниц в системе достигнет этого минимального предела, только ядро будет иметь доступ к любому дополнительному количеству памяти;

- если количество свободных страниц в системе упадет ниже этого предела, то ядро начнет более агрессивно свопировать для освобождения памяти и поддержания системной производительности;

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

По умолчанию - 512 768 1024.

/proc/sys/vm/kswapd
Этот файл указывает, как ядро будет свопировать память. Он содержит три значения в виде списка, разделенные пробелами.

- максимальное количество страниц, которое ядро пытается освободить за один раз. Если вы хотите увеличить величину свопирования, вам нужно увеличить это значение;

- минимальное количество раз, которое ядро пытается освободить страницу в время своппинга;

- количество страниц, которое ядро может записать в один своп. Оказывает сильное влияние на производительность системы. Чем больше это значение, тем больше данных будет свопировано и тем меньше времени будет потрачено на поиск на диске. Однако, слишком большое значение окажет обратных эффект на производительность системы из-за увеличения очереди запросов.

Значение по умолчанию - 512 32 8.

/proc/sys/vm/pagecache
Этот файл выполняет ту же работу, что и /proc/sys/vm/buffermem, но он делает ее для карты памяти и общего кэширования файлов.

выполнение постоянных установок ядра

Полезная утилита для внесения изменений в любые параметры ядра находится в директории /proc/sys. Она позволяет вам вносить изменения в работающее ядро (подобно echo и методу перенаправления, описанным выше), и имеет файл конфигурации, который выполняется при загрузке. Это позволяет внесенным изменениям оставаться в ядре после перезагрузки системы. Утилита называется sysctl и она полностью документирована в man sysctl(8).

Файл конфигурации для sysctl - /etc/sysctl.conf, который может быть редактирован, синтаксис файла описан в man sysctl.conf(8). Sysctl использует файлы в /proc/sys как индивидуальные переменные, которые могут быть изменены. Например, файл в /proc/sys, который представляет максимальное количество заголовков файлов в системе, /proc/sys/fs/file-max, представлен как fs.file-max. Этот пример требует некоторых дополнительных пояснений в записи sysctl. Так как sysctl может только изменять переменные в директории /proc/sys, то часть имени переменной обозначающая директорию отбрасывается. Другое изменение касается слэшей, которые заменяются на точки. Вот два простых правила для преобразования файлов в /proc/sys и переменных в sysctl:

- отбросьте /proc/sys от начала;

- замените слэши на точки в имени файла.

Вы можете увидеть все переменные, доступные для изменения, используя команду sysctl -a. Переменные могут также быть изменены с помощью sysctl, которая выполняет ту же работу, что и echo. В общем виде синтаксис такой:

sysctl -w dir.file="value"

Используя пример с file-max, мы можем изменить это значение на 16384, используя один из двух методов:

sysctl -w fs.file-max="16384"

или

echo "16384" > /proc/sys/fs/file-max

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

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

команды для настройки системы

Есть возможность изменять другие параметры (не ядра) во время работы системы и сделать, чтобы эти изменения оказали эффект без перезагрузки системы. В основном это сервисы, демоны и серверы, которые прописаны в директории /etc/init.d. Поскольку в этой директории находится широкий спектр скриптов, то нет возможности рассмотреть их все здесь. Однако, ниже будут приведены несколько примеров того, как можно манипулировать этими скриптами в различных дистрибутивах Linux. Примеры изменения демона и перезагрузки конфигурации без перезагрузки системы могут быть полезны при:

- изменении конфигурации веб-сервера и его перезагрузки;

- удаления загружаемого в inetd сервиса, которым вы не пользуетесь;

- манипулирования настройками вашей сети;

- экспортирования новой файловой системы через NFS;

- запуска/остановки вашего файерволла.

Сначала приведем основной способ манипулирования системными сервисами через скрипты в /etc/init.d. Эти скрипты используют параметры для управления своими сервисами. Вы можете ввести в командной строке имя сервиса без параметров чтобы увидеть допустимые параметры. Общие параметры таковы:

- start - запускает остановленный сервис;

- stop - останавливает запущенный сервис;

- restart - останавливает и затем запускает сервис; запускает остановленный сервис;

- reload - перезагружает конфигурацию сервиса без прерывания его соединения;

- status - выводит информацию о том, запущен сервис или нет.

В качестве примера следующая команда перезагрузит конфигурацию вашего xinetd без прерывания сессий пользователей (полезно, если вы вносите изменения в ваш /etc/xinetd.conf):

/etc/init.d/xinetd reload

Red Hat предоставляет комнанду service, которая будет управлять сервисом. Команда service выполняет те же действия, что и ввод имени скрипта. Синтаксис команды:

service script-name [parameter]

Пример:

service xinetd reload

SuSE также предоставляет команду rc. Она похожа на service, но не имеет пробела между командой и именем скрипта. Синтаксис команды:
rc{script-name} parameter

Пример:

rcapache start

заключение

Конфигурирование ядра на лету с использованием файловой системы /proc – дело не самое простое, но поняв один раз структуру /proc и то, как манипулировать различными параметрами и файлами, вы получите мощную утилиту для управления вашими сервисами в любое время.



Грэхем Уайт (Graham White), специалист по системному управлению, IBM. Хочу сказать спасибо Mr. Adrian Fewings за редакцию этой статьи


Сетевые решения. Статья была опубликована в номере 05 за 2007 год в рубрике sysadmin

©1999-2024 Сетевые решения