MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Ускорение загрузки системы
12.06.2012
13:56
Раздел: linux

Ускорение загрузки системы

УБИРАЕМ ЗАДЕРЖКУ ЗАГРУЗЧИКА



Первое, что нужно сделать – это определить используемый загрузчик. Поищите файлы с именами /etc/grub.conf, /boot/grub/grub.conf или /boot/grub/menu.lst – если вы нашли один из них, то вы используете Grub и можете изменить конфигурационные файлы, от лица суперпользователя (root). Откройте найденный файл в текстовом редакторе и поищите строку timeout, что-то вроде

## timeout sec

# Set a timeout, in SEC seconds, before automatically booting the default entry

# (normally the first entry defined).

timeout 30


Здесь установлена задержка 30 секунд перед стартом операционный системы по умолчанию (указана в строке default, которая расположена прямо под рассматриваемой). Измените это значение на, скажем, 5 секунд – вполне достаточно, чтобы, сидя за компьютером, увидеть меню и выбрать ОС, и не слишком задерживает неконтролируемую загрузку.


ОТКЛЮЧАЕМ НЕНУЖНЫЕ СЛУЖБЫ

. Все скрипты обычно хранятся в каталоге /etc/init.d – заглянув в него, вы увидите наборы исполняемых скриптов Bash. Ниже перечислены службы, без которых многие могут обойтись:


• mountnfs, nfs и portmap Они используются для сетевой файловой системы (NFS) вместе с утилитой поддержки Portmap. Если вы не монтируете каталоги с других Linux/Unix машин, расположенных в сети, или используете Samba для доступа к Windows-машинам, можете их отключить.


• pcmcia Эта служба тратит время на поиск несуществующих устройств. Если вы работаете не на ноутбуке, то она вам не нужна.


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


• lvm Система управления логическими томами (Logical Volume Manager), для организации разделов диска. Большинство пользователей настольных компьютеров запускают ее разве что в процессе установки дистрибутива, на этапе создания разделов.


• joystick/gpm Службы джойстика и мыши в текстовом режиме.


• mdadm/mdadm-raid Скрипты администрирования составных устройств. Если вы не используете RAID-массив (для настольных машин это редкость), отключите его.


• sshd Для удаленных подключений. При отсутствии удаленного доступа к вашей машине службу можно выключить.


• mysql Сервер баз данных. Некоторые дистрибутивы по умолчанию включают его, но коли вы не администратор базы данных и не разработчик – зачем он вам?


• apache, sendmail или postfix Интернет-службы для web и почты. Если они вам не нужны, то их отключение может быть очень эффективным.


Следует также просмотреть и другие скрипты (откройте их при помощи less или текстового редактора) и почитать комментарии в самом их начале, чтобы понять, что они делают. Если становится ясно, что вы не используете ни одну из возможностей скрипта, то его можно отключить. Отметим, что файлы rc и rcS [или аналогичные – rc.single, rc.sysinit и т.п. – прим.ред.] критичны для правильного включения и выключения машины, и их трогать не нужно!


Приняв решение, что вам нужно, а что нет, можно приступить к отключению сервисов. Выполнение этой операции зависит от дистрибутива. В SUSE откройте утилиту конфигурирования Yast, перейдите в System > System Services и отключите выбранное в списке служб (services). В Mandriva запустите Центр Управления Mandriva, перейдите в Службы (Services) и снимите выделение с тех служб, которые вам не нужны. Fedora Core и ее производные содержат утилиту Службы (Services) в меню Рабочий стол > Системные утилиты > Настройки сервера (Desktop > System Tools > Server Settings).


Если вы работаете в Debian или одной из его производных (Ubuntu, Knoppix и иже с ними), запустите терминал, войдите как суперпользователь (root) и наберите:

update-rc.d -f <имя службы> remove


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

mv /etc/init.d/<имя скрипта> ~


где <имя скрипта> – имя службы, которую вы хотите отключить (например, pcmcia).


Команда перенесет скрипт в ваш домашний каталог, и он не будет запускаться при загрузке; метод несложный, но может сопровождаться ошибкой ‘доступ запрещен’ (‘permission denied’) во время загрузки, означающей только то, что дистрибутив не может найти скрипты – не опасно, но нудно. Так что уж лучше пользоваться инструментами вашего дистрибутива.

СНИЖАЕМ ПАУЗЫ ЗАСЫПАНИЯ


Сложность совета: средний


Жизнь инициализационных скриптов дистрибутива тяжела: они должны обеспечить работу огромного количества оборудования, различных типов пользователей и всевозможных программ, которые должны быть запущены во время загрузки. Поэтому при исследовании стартового скрипта вы найдете несколько хитростей и уловок. Из них наиболее распространены «спячки» (sleeps). Да, во время загрузки дистрибутив несколько раз фактически засыпает на пару секунд, чтобы убедиться, что оборудование инициализировано и другие программы определенно заработали.


В скриптах это обозначено в виде вызовов sleep(1), утилиты командной строки, которая ничего не делает, кроме задержки выполнения на указанное время. (Откройте терминал и введите sleep 5 ; ls – список файлов будет выведен после пятисекундной паузы). Например, перед настройкой сети стартовый скрипт должен сначала убедиться, что сетевой адаптер PCMCIA/Cardbus инициализирован, и он засыпает на пару секунд, чтобы не обгонять события.


Многие из этих задержек являются излишней предосторожностью – если ваша система хорошо справляется со стандартным оборудованием, вы можете без опаски убрать их. Чтобы их найти, откройте терминал, войдите как суперпользователь (su или sudo bash) и введите

cd /etc/init.d

grep sleep *


Мы входим в каталог стартовых скриптов (/etc/init.d) перечисляем файлы, содержащие вызовы sleep (вместе с временем задержки).


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


Если у вас есть время, я бы рекомендовал делать изменения в пакетном режиме, чтобы облегчить возврат к предыдущим значениям, если что-то стартует некорректно. В больших дистрибутивах, имеющих множество стартовых скриптов, сокращение задержек может привести к уменьшению времени загрузки на 10–15 секунд. И ваш дистрибутив не потребует снотворного взамен!

ТОНКАЯ НАСТРОЙКА СТАРТОВЫХ СКРИПТОВ


Сложность совета: продвинутый


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


Выполните команду top в терминале после загрузки системы и отметьте все процессы, которые вам явно не нужны. Затем в каталоге /etc/init.d при помощи grep вы можете найти строки, их запускающие, и превратить эти строки в комментарии.


Довольно трудно определить, что происходит во время загрузки и какое время отнимает каждая часть этого процесса, особенно если показана только графическая заставка или некоторые строки в текстовом режиме мелькают слишком быстро. В каталоге /var/log найдите файлы messages, syslog и daemon.log с подробным описанием происшедшего во время загрузки (каждая запись в файле имеет отметку времени, которая поможет определить виновников задержки).


Если ваша система в полной гармонии с вами и вы не планируете подключение нового оборудования или драйверов ядра, ликвидация стадии загрузки depmod сбережет еще пару секунд. Это утилита, которая генерирует зависимости модулей ядра; ее незачем запускать при каждой загрузке, если вы не добавляете драйвера. Выполните поиск depmod в /etc/init.d (например, grep depmod /etc/init.d/) и закомментируйте строки, где она запускается, проставив символ ‘#’ в самом начале.


Отследите перекрытия функций в скриптах. Например, в Ubuntu скрипт checkroot.sh содержит секции, связанные с управлением питанием (особенно заметные, если система работает от блока питания). Но если у вас отключены APM/ACPI, то и не нужно выполнять проверки, связанные с питанием, можете их закомментировать. Здорово! Такие пересечения часто встречаются в стартовых скриптах дистрибутива, так что полезно пройтись по ним, определяя назначение всего запускаемого и оценивая его необходимость.


Вы можете обнаружить, что некоторые части скрипта или служба замедляют загрузку, но их функциональность важна и вы не хотите отключать их навсегда. Например, загрузка тормозится, пока сетевая карта пытается получить DHCP-отклик от сервера – но не отказываться же напрочь от сети! Для решения подобных проблем просмотрите каталоги /etc/init.d и /etc/dhcp3 и определите, где вызывается DHCP; затем попробуйте добавить амперсанд (&) после строки его вызова, чтобы запускать его в фоновом режиме. Перезагрузитесь, и, надеюсь, ваша карта будет сконфигурирована в фоновом режиме и позволит другим стартовым скриптам выполняться беспрепятственно!

ЗАМЕНА СТАРТОВЫХ СКРИПТОВ


Сложность совета: продвинутый


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


Но это же жутко неэффективно: почему бы не выполнять несколько скриптов сразу? К примеру, пока сетевой скрипт ожидает ответа DHCP, можно заняться звуковой картой.


Этот подход называется параллельной инициализацией, в противовес последовательному запуску инициализационных скриптов, используемому практически в каждом дистрибутиве. При запуске служб все еще нужен порядок – но он предусматривается таким, чтобы ЦП и жесткий диск подолгу не простаивали. Распараллеливание может сократить время загрузки больше чем вдвое.


InitNG предоставляет такую возможность. Этот проект описан в рубрике HotPicks, и хотя он все еще находится в срединной стадии развития, многие давние пользователи Linux говорят, что он действительно помогает. InitNG заменяет ваши стартовые скрипты параллельными эквивалентами, чтобы ресурсы не оставались праздными, и это приводит к умопомрачительно быстрой загрузке. Вы можете обнаружить это приложение в разделе Система на нашем диске или найти последнюю версию по адресу http://InitNG.thinktux.net. Скачайте tar-архив и установите, как показано ниже (понадобится перезагрузка):

tar xfvz InitNG-0.5.5.tar.gz

./configure && make install


Отредактируйте конфигурационный файл загрузчика (т.е. /boot/ grub/menu.lst или /etc/lilo.conf), добавив init=/sbin/InitNG к строке образа ядра. Это обеспечит старт вашего дистрибутива со специальной InitNG версией init (основной процесс Linux), который в свою очередь начнет загружать службы. Строка в настройках вашего загрузчика должна походить на


kernel /boot/vmlinuz-2.6.10-5-686 root=/dev/hda1 ro


init=/sbin/InitNG


(Если вы используете Lilo, после изменений запустите /sbin/lilo, для обновления загрузчика). Теперь, перекреститесь и перезагрузитесь; если все верно, то появится сообщение о загрузке.Внимательно следите за всеми сообщениями об ошибках и предупреждениями: InitNG с каждым выпуском становится все более гибким, но пока не справляется с особо трудными службами. Если вы обнаружите, что что-то не запустилось, введите ngc -s и посмотрите, что предположительно запущено и работает. Чтобы служба запускалась при каждой загрузке, используйте

ng-update add type/service


За подробной информацией обратитесь к документации на прилагаемом диске. Утилита InitNG имеет много опций для конфигурирования и администрирования, так что она заслуживает опробования всех ее возможностей. Если при старте возникают проблемы, вы можете удалить строку init=/sbin/InitNG в файле настройке загрузчика (см. выше), а также задать вопросы на полезном форуме InitNG по адресу http:// forum.InitNG.thinktux.net.


Теперь ваш ПК должен быть быстрее ниндзя – ура!


ДРУГИЕ РЕСУРСЫ


Вы можете оценить эффект от применения описанных шагов при помощи простого секундомера, но он не покажет вам, где остались узкие места. Полезной утилитой, позволяющей получить больше информации о процессах загрузки, является Bootchart (www.bootchart.org), генерирующая графики ваших загрузочных процессов, где показана степень использования процессора и жесткого диска. После установки Bootchart вы сможете отследить провалы и паузы в ваших стартовых скриптах, сравнивая графики при каждой загрузке. На web-сайте или в разделе Системы/ Диаграммы загрузки на нашем диске-приложении имеются исходные тексты и документация.


Ну вот, все закончилось! Вы нашли другие пути снижения времени загрузки? Или придумали хитрый трюк, экономящий еще несколько секунд? А может, зашли в тупик, и из-за сделанных изменений время загрузки на самом деле увеличилось? Присоединяйтесь к нашему форуму по адресу http://www.unixforum.org


РЕЗЕРВИРУЕМ!


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

cp -R /etc /old-etc


Конфигурационные файлы вашей системы скопируются из каталога /etc в каталог /old-etc. Если что-то пойдет не так, вы сможете перекинуть содержимое /old-etc обратно в ваш каталог /etc, перезагрузиться, и все придет в норму. Если вы предприняли шаги, описанные в данном учебнике, и все работает корректно, каталог /old-etc можно смело удалять.


Не паникуйте, если вы допустили ошибку и появились проблемы при загрузке – вы можете можете запустить Live-дистрибутив вроде Damn Small Linux (присутствующий на DVD-приложении), подмонтировать ваш жесткий диск и скопировать /old-etc из-под него.


ИСПРАВЛЯЕМ ПРОБЛЕМЫ


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


А вдруг вы понаделаете такого, что система вообще не загрузится? Не бойтесь: вам помогут Live-дистрибутивы! Для восстановления вашего исходного каталога /etc вы можете взять практически любой Live-дистрибутив, предоставляющий доступ к терминалу или командной строке – даже Games Knoppix с дискаприложения к этому номеру. Загрузите Live-дистрибутив с вашего DVD, откройте терминал и смонтируйте ваш жесткий диск командами

mkdir /mydrive

mount -t ext3 /dev/hda1 /mydrive


Ваш диск станет доступен в каталоге /mydrive. (Возможно, придется заменить ‘ext3’ на ‘reiserfs’ если вы используете файловую систему Reiser, а ‘hda1’ может стать ‘hda2’, если вы установили Linux во второй раздел, ‘hda3’ – если в третий, и т.д.) Затем введите

mv /mydrive/etc /mydrive/broken-etc

mv /mydrive/old-etc /mydrive-etc

umount /mydrive


Так же в этом разделе:
← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования