Два слова о /proc в Linux: /proc cpuinfo и другие параметры
Создано: 18-02-2009 19:53:03 изменено: 05-01-2012 13:17:40  Метки: proc
Источник

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

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

Многие программы собирают информацию из файлов в /proc, форматируют их и выводят результат пользователю (top, ps и другие). Также существует специальный подкаталог /proc/sys. Он позволяет вам просматривать параметры ядра и изменять их на лету.


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

Чтобы передать значение fake в файл /proc/your/file, следует дать команду:

echo "fake" > /proc/your/file
Для того, чтобы увидеть значение в файле, используем cat:

cat /proc/your/file

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


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

/proc/scsi/scsi
Позволяет добавить или отключить диск, если он поддерживает горячую замену (SCSI или SATA). Указать ядру на подключение нового диска можно командой:

echo "scsi add-single-device w x y z" > /proc/scsi/scsi
Чтобы эта команда работала правильно, вы должны указать параметры значений w, x, y, и z следующим образом:
Этот трюк можно проворачивать не только с дисками: в своё время это пришлось делать мне для подключения многослотового кардиридера.

Чтобы извлечь диск из системы без перезагрузки, размонтируем его и даём команду:
echo "scsi remove-single-device w x y z" > /proc/scsi/scsi

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


/proc/sys/kernel/acct
Здесь содержатся три конфигурируемых значения, которые управляют подсчётом процессов, основанном на свободном пространстве файловой системы:

  1. Если свободное пространство ниже значения в процентах, то процесс
    подсчета останавливается.
  2. Если свободное пространство выше, то процесс запускается.
  3. Частота в секундах, с которой проверяются предыдущие два значения.
Чтобы изменить значения в этом файле, вам следует использовать разделенный список параметров. Значения по умолчанию: 2 4 30

Для их изменения следует дать команду
echo "3 5 40" > /proc/sys/kernel/acct
Эти значения остановят подсчёт, если в файловой системе менее 3 процентов свободного пространства и начнет опять если появится 5 или более процентов. Проверка производится каждые 40 секунд.


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

  1. Ноль (0) значит, что ctrl+alt+delete принимается и отправляется программе init, что обеспечит правильный останов и перезагрузку как если бы вы ввели команду reboot.
  2. Один (1) значит, что ctrl+alt+delete не принимается и никакого чистого отключения не происходит - перезагрузка как при нажатии на RESET.
Значение по умолчанию - 0.


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


/proc/sys/kernel/sysrq
Включает или выключает возможность использования Волшебной SysRQ-клавишей (Magick System Request Key). Если в ядре она активирована, чаще всего значение в этом файле 1.
Об этой клавише и её возможностях было написано тут.



/proc/sys/vm/swappiness

Этот параметр позволяет регулировать стремление системы сбрасывать данные из памяти в файл подкачки. Чрезмерное значение здесь приведёт к интенсивному использованию своп-файла, что нежелательно в ряде случаев (ноутбуки, lowlatency-системы). Слишком маленькое значение может привести к тому, что при заполнении памяти будет принудительно запущен OOMkiller (процесс, запускающийся при исчерпании памяти и убивающий наиболее ресурсоёмкие задачи).

Значение параметра может быть в пределах от 0 (наименьшее использование подкачки) до 100 (подкачка используется часто). Значение по умолчанию - 60. Есть сообщения, что при большом объёме памяти (от 1Гб) оптимальным значением является 10. Для этого:
echo "10" > /proc/sys/vm/swappiness
Больше об этом говорится здесь.



Как сделать настройки в /proc постоянными
Для того, чтобы изменения в директории /proc/sys стали постоянными, нужно внести изменения в файл конфигурации для sysctl - /etc/sysctl.conf

Формат этого файла требует некоторых пояснений. Так как sysctl может только изменять переменные в директории /proc/sys, то часть имени переменной обозначающая директорию отбрасывается. Другое изменение касается слэшей, которые заменяются на точки. Вот два простых правила для преобразования файлов в /proc/sys и переменных в sysctl:
Эти два правила позволят вам преобразовать любой файл в /proc/sys в любое имя переменной в sysctl. Обычное преобразование имени файла в переменную:
/proc/sys/dir/file --> dir.file
dir1.dir2.file --> /proc/sys/dir1/dir2/file

Вы можете увидеть все переменные, доступные для изменения, используя команду sysctl -a.


От себя добавлю:В современных системах все чаще используется каталог /etc/sysctl.d вместо файла /etc/sysctl.conf

Хотя нижеследующее замечание относится к другой файловой системе, /sys, я считаю полезным привести здесь один пример. Это смена планировщиков ввода-вывода на лету. Чтобы узнать, какой планировщик стоит сейчас, даём команду:

cat /sys/block/sdX/queue/scheduler

Заменяя sdX на интересующее нас устройство. Текущий планировщик отмечен в квадратных скобках:

noop anticipatory deadline [cfq]
То есть сейчас стоит cfq - complete fair queue, полностью честный планировщик. Планировщики для разных дисков могут быть разными. Значения, которые можно передать в этот файл, такие: "as", "cfq", "deadline" или "noop". Об этом в других постах.


Ссылки
В сети много информации по /proc, но некоторые посты хотелось бы отметить особо. Здесь и тут есть много интересного, ну и конечно отличная документация этих седых UNIX-орлов из IBM :-) А здесь просто кладезь параметров, относящихся к работе в сети, которыми можно управлять через /proc (спасибо deimos)

фыТак же можно прочитать о многих параметрах /proc на русском в интересной серии постов.
2046 просмотров комментировать