Журнал LinuxFormat - перейти на главную

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

Материал из Linuxformat
Версия от 13:50, 1 марта 2010; Yaleks (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

УЧЕБНИК Ускорение загрузки

НАСТРОЙКА СИСТЕМЫ

Содержание

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

Поковырявшись в настройках, вы сможете вдвое уменьшить время загрузки вашей машины, утверждает Майк Сондерс.

Одна из популярнейших жалоб пользователей Linux – жалоба на мучительно долгую загрузку. На современной машине обычно приходится ждать 45–60 секунд, а если вы используете не самое новое оборудование, это время может возрасти до двух и более минут. Правда, препятствие невелико – благодаря абсолютной надежности Linux сбои возникают редко и нет нужды перезагружаться так часто, как под другими ОС. Но медленность загрузки досаждает пользователям машин в стиле «включил и работаю», вроде ноутбуков; и если вы хотели поберечь энергию и не держать машину все время включенной, то за время ожидания вы сильно усомнитесь в своей экологической добродетели.

Скорость загрузки не является специфичной проблемой индивидуальных компьютеров – для web-сервера, если вы хотите уменьшить время недоступности после обновления ядра, это тоже чрезвычайно важный фактор. Недоступность, например, сайта по продаже товаров в течение 30 секунд запросто разгонит покупателей и превратит потенциальные дензнаки в нахмуренные брови. К счастью, причину медленной загрузки обычно легко определить: дело в том, что многие дистрибутивы пытаются выполнять всё. Коробочная версия дистрибутива вроде Fedora охватывает пользователей всех мыслимых типов, но если вы знаете, чего хотите, то лишние службы нетрудно отсечь.

На этом уроке мы займемся специальными настройками и улучшениями, которые вы сможете приложить к своей системе Linux для сокращения времени загрузки, чтобы приступать к работе с наивозможной быстротой. Приведенные советы работают независимо; вам не обязательно следовать всем, и если какой-то покажется сложным, можете его пропустить. Каждый совет также помечен степенью сложности.

Даже если вы замахнетесь на мероприятия для особо продвинутых, при наличии резервной копии стартовых скриптов вам ничего не грозит (как сделать такую копию, показано ниже во врезке «Резервируем»!). Приступим...

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

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

Если у вас мультизагрузочная система, и вы не покинули компьютер, едва нажав кнопку пуска, вы, скорее всего, коршуном бросаетесь на клавишу Enter, как только появится меню выбора ОС. Но если, включив компьютер, вы идёте попить чайку (обычный способ употребить ожидание с пользой), ваша машина будет простаивать, пока загрузчик не выберет ОС автоматически. Многие дистрибутивы по умолчанию устанавливают задержку в 20–30 секунд перед загрузкой ОС, и если загрузка происходит в ваше отсутствие, лучше убрать эту задержку.

Первое, что нужно сделать – это определить используемый загрузчик. Поищите файлы с именами /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 секунд – вполне достаточно, чтобы, сидя за компьютером, увидеть меню и выбрать ОС, и не слишком задерживает неконтролируемую загрузку.

Между тем, некоторые дистрибутивы используют загрузчик Lilo, чьи настройки обычно находятся в /etc/lilo.conf. Найдите строку timeout (в которой указано timeout = 20 или вроде того) и установите число 5 или меньше. Завершив изменения, запустите /sbin/lilo (от имени суперпользователя) и обновите загрузчик. В следующий раз, когда вы предоставите машину самой себе, меню загрузки исчезнет значительно быстрее.

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

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

Этот совет является наиболее эффективным способом уменьшения времени загрузки – к тому же у него низкий рейтинг сложности! При старте, ваша система запускает некоторое количество неинтерактивных программ (называемых службами – services), помогающих настроить дистрибутив или выполняющихся в фоновом режиме, пока вы работаете с машиной. Например, службы udev и hotplug запускаются при загрузке, но вступают в дело, только когда вы подсоединяете к своей машине устройство. Или, если на вашей машине работает сервер, например Apache, ваш стартовый скрипт запускает его во время загрузки.

Некоторые большие дистрибутивы запускают 15 и более служб, и каждая добавляет ко времени загрузки несколько секунд (а то и больше). Некоторые из них важны для корректной работы вашей системы, но большинство можно отключить без вредных последствий. Например, ваш дистрибутив при загрузке может запускать службу PCMCIA/ Cardbus – очень нужную в ноутбуках, но напрасно съедающую время на настольных компьютерах, потому что скрипт опрашивает несуществующие устройства. Аккуратно отключив ненужные службы, вы можете уменьшить время загрузки примерно на 20 секунд.

Труднее всего определить, что именно подлежит пресечению. По традициям UNIX, инициализационные скрипты Linux имеют краткое имя, мало что говорящее обычному пользователю. К счастью, те же традиции UNIX означают, что это просто текстовый файл, содержащий текстовые комментарии, так что вы можете самостоятельно изучить каждый скрипт и решить, нужен он вам или нет. Все скрипты обычно хранятся в каталоге /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

и перезагрузитесь. Ваш исходный /etc восстановлен, а проблемный /etc, сорвавший загрузку, помещен в /broken-etc.

Персональные инструменты
купить
подписаться
Яндекс.Метрика