Итак, после того, как загрузчик Linux найдёт и загрузит ваше ядро, в дело вступает запуск сервисов. Запускается Samba, которая делает ваши директории видимыми по сети (в том числе для пользователей альтернативных систем), CUPS - чтобы вы могли печатать на принтеры, SSHd - чтобы можно было принимать удалённое управление. В общем, всё то, что обеспечивает нам удобную работу, не отвлекая нас от более важных дел.
Однако у дистростроителей представления о том, какие сервисы вам нужны, могут несколько отличаться от ваших. Например, если вы не администратор сети, вам скорее всего не нужны почтовые агенты и службы точного времени. И тем не менее в системе сконфигурированной по умолчанию они продолжают запускаться. Сейчас мы это быстро поправим.
ПРЕДУПРЕЖДЕНИЕ!!!
СДЕЛАЙТЕ РЕЗЕРВНУЮ КОПИЮ ВСЕГО КАТАЛОГА /ETC НА ВСЯКИЙ СЛУЧАЙ!!! В СЛУЧАЕ НЕУДАЧИ ВЫ МОЖЕТЕ ПОЛУЧИТЬ СИСТЕМУ, КОТОРАЯ НЕ ЗАГРУЖАЕТСЯ!!!
СДЕЛАЙТЕ РЕЗЕРВНУЮ КОПИЮ ВСЕГО КАТАЛОГА /ETC НА ВСЯКИЙ СЛУЧАЙ!!! В СЛУЧАЕ НЕУДАЧИ ВЫ МОЖЕТЕ ПОЛУЧИТЬ СИСТЕМУ, КОТОРАЯ НЕ ЗАГРУЖАЕТСЯ!!!
И ещё одно предупреждение
Здесь главное не перестараться и отключать только те сервисы в Linux, назначение которых вы знаете и точно уверены, что они вам не потребуются в ближайшем обозримом будущем. Скорее всего, вам всё-таки потребуются такие сервисы, как login и cron, так что будьте аккуратны.
Управление сервисами
Для того, чтобы долго не елозить напильником по конфигурационным файлам, ставим графический конфигуратор. Поискав по несметным сокровищницам репозиториев Debian GNU/Linux, находим:
# apt-cache search boot up managerСобственно, программа маленькая, ставим:
bum - graphical runlevel editor
aptitude install bumПрограмма при запуске ожидаемо требует рутовых привилегий:
sudo bumПоявится красивая и удобная графическая оболочка, по умолчанию в "простом" варианте:
Удобно, что о каждом сервисе сказано, что он делает. Так же показано текущее состояние сервиса - работает, неактивен или информация о его состоянии недоступна. Включаем или выключаем соответствующие сервисы, и нажимаем "Применить" - изменения вступят в силу после перезагрузки или сразу же.
В "продвинутом" варианте вы получаете не только управление сервисами, но и включением \ отключением самих скриптов конфигурирования отдельных сервисов. Как и прежде, будьте аккуратны - я не несу ответственности за порушенные "ынтырпрайзы" и отказывающиеся загружаться "продакшны" :-)
Если руки тянутся к напильнику...
На всякий случай напомню, что в Debian стартовые скприты аккуратно сложены в директории /etc/init.d/ а в каталогах
/etc/rc0.d
......
/etc/rc6.d
содержатся ссылки на соответствующие скрипты в /etc/init.d/
Соответственно, в Debian GNU/Linux номера runlevels распределены следующим образом:
- 0 System Halt
- 1 Single user
- 2 Full multi-user mode (по умолчанию)
- 3-5 То же что и 2
- 6 System Reboot
И наконец несколько слов об асинхронной загрузке Linux. Это технически можно сделать, поправив конфиг /etc/init.d/rc до такого состояния:
# Specify method used to enable concurrent init.d scripts.Конкретно в моём случае ускорение составило около 2-3 секунд, что в общем меньше ожидаемого. А вариант "startpar" вообще привёл к тому, что система отказалась загружаться. Имея под рукой Knoppix Linux я, конечно, всё быстро поправил, но тем не менее.
# Valid options are 'none', 'shell' and 'startpar'
CONCURRENCY=shell
Есть и более радикальные методы ускорения загрузки, такие как initNG. Но об этом в другой раз.
Ссылки
Как всегда, по теме очень толково пишут аксакалы из IBM здесь. А так же в генту-вики очень хорошее руководство тут (пользуясь случаем, в очередной раз зеленею от зависти к гентушным вики). Описание сервисов на примере Fedora 8 приведено здесь (Tigro, спасибо за ссылку!).
sysvconfig ?
ОтветитьУдалитьrcconf для тех, кто не в иксах.
ОтветитьУдалитьНе, вот тут доступнее всего написано что и зачем, правда с уклоном на Fedora, но в Lenny они явно будут очень похожи.
ОтветитьУдалитьКогда поедем на Линукс-Поинт?
insserv ?
ОтветитьУдалитькстате давненько им пользуюсь, пока особых нареканий нет.
Спасибо за статью! Недавно начал задумываться об ускорении системы, почитал в интернете и выяснилось, что для этого надо отключать сервисы и пересобирать ядро. Сервисы я отключать побоялся, т.к. не знаю, какие за что отвечают (за исключением login, cron и ещё парочки, назначение которых я уже откуда-то знаю), а ядро пересобирать... Вобщем-то, не так уж и страшно (уже пробовал, кстати - но оно не загрузилось) - просто считаю себя не готовым к этому, т.к. в железе своём (да и в не своём тоже :) ) ничего не смыслю, и боюсь отключить в ядре поддержку чего-то важного.
ОтветитьУдалитьНо Ваша статья, virens, воодушевила меня на оптимизацию! Есть у меня какой-то кнопикс, сейчас выясню, как им пользоваться (а то валяется без толку), забекаплю etc и - в бой! :)
2 Анонимный пишет...
ОтветитьУдалитьsysvconfig ?
Да, но народ хочет с графикой :-)
2 Warderer пишет...
rcconf для тех, кто не в иксах.
Спасибо, надо было бы его упомянуть. Сделаю это.
2 Tigro пишет...
Не, вот тут доступнее всего написано
Не сказал бы, что доступно, но определённо полезно. Спасибо, добавил ссылку в пост.
Когда поедем на Линукс-Поинт?
Пока не знаю, у меня конференция в Питере в середине сентября. Думаю, к концу сентября соберёмся.
2 Evgen пишет...
insserv ?
Возможно. Кстати, ещё раз спасибо - я только rcconf пользовал, а тут столько альтернатив. :-)
2 Programmaster пишет...
Спасибо за статью!
Пожалуйста. Приходите к нам ещё :-)
Недавно начал задумываться об
ускорении системы, почитал в интернете и выяснилось, что для этого надо отключать сервисы и пересобирать ядро.
Пересборка ядра на это повлияет слабо - вырубайте всякие ненужные сервисы (я сразу выключаю exim4).
Сервисы я отключать побоялся, т.к. не знаю, какие за что отвечают
В boom всё прокомментировано, собственно, поэтому я про него и написал.
железе своём (да и в не своём тоже :) ) ничего не смыслю, и боюсь отключить в ядре поддержку чего-то важного.
Я, проработав на своёй первой линуксовой машине 4 года, думал, что знаю о её железе всё. Я горько заблуждался :-)
Эти знания набираются только опытом и покорёженными ядрами. :-)
Есть у меня какой-то кнопикс, сейчас выясню, как им пользоваться
Сойдёт любой кноппикс, а как пользоваться - тык! :-)
забекаплю etc и - в бой! :)
И это правильно! Дабы не жалеть о содеянном...
Думаю, что гораздо действеннее будет отключитить все в чем не уверен, что нужно. Тем более все, что не знаешь.
ОтветитьУдалитьИ потом включать назад по мере надобности.
За одно узнаешь много интересного...
> Пересборка ядра на это повлияет слабо - вырубайте всякие ненужные сервисы (я сразу выключаю exim4).
ОтветитьУдалитьПересборку ядра советовали делать для оптимизации по памяти - дабы сэкономить память за счёт вещей, которые у меня использоваться не будут. Да и вообще, это полезно для приобретения познаний о железе. Как Вы очень интересно подметили, "эти знания набираются только опытом и покорёженными ядрами. :-)"
Пока не знаю, у меня конференция в Питере в середине сентября. Думаю, к концу сентября соберёмся.
ОтветитьУдалитьА в каких числах если не секрет?
2 librarian пишет...
ОтветитьУдалитьА в каких числах если не секрет?
15-16 сентября. В принципе, 16 сентября во второй половине можем встретиться и попить вашего замечательного Невского пива. :-)
А нельзя чем-нибудь заменить X-ы? Или пересобрать?
ОтветитьУдалитьДавным-давно ускоряю систему ещё на этапе установки: ставлю "базовую" систему, вырезаю всё, что мне в ней не нужно, а уже после устанавливаю свой любимый набор пакетов.
ОтветитьУдалить> Анонимный пишет...
ОтветитьУдалить> А нельзя чем-нибудь заменить X-ы? Или пересобрать?
> 29.08.2008 0:35:00
Можно заменить DE каким-нибудь лёгковесным WM. Это тоже обеспечивает неслабый прирост в скорости.
> Df_Yz комментирует...
ОтветитьУдалить> Давным-давно ускоряю систему ещё на этапе установки: ставлю "базовую" систему, вырезаю всё, что мне в ней не нужно, а уже после устанавливаю свой любимый набор пакетов.
> 31.08.2008 15:26:00
Долгое время ускоряю всё ещё на этапе установки: ставлю "базовую" систему, вырезаю то, что мне в ней не нужно а уже после устанавливаю свой любимый набор пакетов.
Selffix.
Можно заменить DE каким-нибудь лёгковесным WM. Это тоже обеспечивает неслабый прирост в скорости.
ОтветитьУдалить---------------
Пользую fluxbox, но скорости много не бывает...
Еще немного про напильники. При concurrency=shell вывод скриптов превращается в кашу, и я не знаю простого способа исправить это, поэтому я отказался от режима shell в пользу startpar. Чтобы startpar не выводил "0" в консоль, изменил /etc/init.d/rc следующим образом (строка 157):
ОтветитьУдалить- [ -n "$scripts" ] && startup_progress $debug startpar -a $action $scripts
+ [ -n "$scripts" ] && startup_progress $debug startpar -a $action $scripts > /dev/null
на вывод скриптов это не влияет.
Действительно, при concurrency=startpar система останавливается на загрузке S05keymap.sh, и продолжает при нажатии ctrl-c. Чтобы этого избежать, нужно чтобы на одном уровне с S05keymap.sh больше ничего не запускалось (т.е. не было команд с таким же префиксом SNN). Я назначил этому скрипту уровень S06:
sudo update-rc.d -f keymap.sh remove
sudo update-rc.d keymap.sh start 6 S .
Т.к. при startpar (и shell) параллельно запускаются команды с одинаковым SNN (здесь я называю это уровнем), то для ускорения загрузки также стоит посмотреть, нельзя ли назначить одинаковый уровень как можно бОльшему количеству скриптов.
Кстати некоторые сервисы не обязательно отключать. Их можно просто запускать позже, по мере необходимости. К примеру сервис bluetooth стартовать только тогда, когда подключается соотв. устройство (у меня в etch-е он стартовал сразу при загрузке). Делается это при помощи udev. Я создал файл следующего содержания:
ОтветитьУдалить$cat /usr/local/etc/udev/rules.d/z50_bluez.rules
SUBSYSTEM=="bluetooth", ACTION=="add", RUN+="/etc/init.d/bluetooth start &"
SUBSYSTEM=="bluetooth", ACTION=="remove", RUN+="/etc/init.d/bluetooth stop &"
а затем создал для этого файла симлинк в /etc/udev/rules.d:
$sudo ln -s /usr/local/etc/udev/rules.d/z50_bluez.rules /etc/udev/rules.d/z50_bluez.rules
после этого можно убрать запуск сервиса со 2-го runlevel-а:
$sudo update-rc.d -f bluetooth remove
$sudo update-rc.d bluetooth start 20 3 4 5 . stop 50 0 1 6 .
Кроме того ряд сервисов можно запускать при помощи inetd. Так я отключил запуск своего почтовика (masqmail) и dictd при загрузке ОС, а взамен добавил в /etc/inetd.conf следующее:
ОтветитьУдалить127.0.0.1:25 stream tcp nowait mail /usr/sbin/masqmail masqmail -bd -q -bs
127.0.0.1:2628 stream tcp nowait dictd /usr/sbin/dictd dictd -i
Теперь эти сервисы запускаются только тогда, когда к ним обращаются. И раз уж я написал про inetd.conf, пожалуй следует упомянуть следующее:
$cat /etc/hosts.deny
ALL: ALL
$cat /etc/hosts.allow
25: 127.0.0.1
2628: 127.0.0.1
Пока что все :).
2 Kirill Zabarniuk пишет...
ОтветитьУдалитьКирилл, спасибо за такой развёрнутый комментарий, я постараюсь его включить в пост при следующих правках.
> назначить одинаковый уровень как можно бОльшему количеству скриптов.
ОтветитьУдалитьКстати, интересно сделано в testing-е. Там в начале init-скриптов есть строки такого вида:
### BEGIN INIT INFO
# Provides: networking
# Required-Start: mountkernfs ifupdown $local_fs
# Required-Stop: ifupdown $local_fs
# Default-Start: S
# Default-Stop: 0 6
# Short-Description: Raise network interfaces.
### END INIT INFO
И есть пакет insserv, который на основании этих данных сам перегруппирует скрипты. В тонкости не вдавался, и время не мерял, но факт есть факт
Еще один подход - Поменять BIOS.
ОтветитьУдалитьНапример Linux Bios.
http://ru.wikipedia.org/wiki/Linux_BIOS
Конечно, есть некоторая неуверенность и опасения от такой задумки. Но, думаю, скоро на это решусь.