Оптимизация Linux 3
Оптимизация Linux В прошлых статьях мы рассмотрели некоторые ухищрения, которые помогают заоптимизировать систему. Но многие спрашивают, а почему я не написал про то, как освободить память или, скажем, "обрезать" Linux. Сегодня я исправляю эту оплошность.
Начнем с того, что заставим наш Linux занимать меньше места на винчестере. Для этого нам понадобятся следующие инструменты: архиваторы gzip или bzip2 (жмет лучше, чем первый), входящие в любой современный дистрибутив, и упаковщик исполняемых файлов upx, который можно найти в Интернете. Не помешает также иметь ровные руки и трезвую голову:).
Итак, приступим. Для начала мы удалим исходные тексты ядра. Вы могли их поставить просто случайно, ставя первый раз Линукс или просто так, но я практически на сто процентов уверен, что вы ими не пользуетесь. А так как исходные тексты ядра занимают 20-100 и больше мегабайт, то, скорее всего, вы захотите их удалить. Если так, то откомпилируйте новое ядро, которое будет работать с вашей машиной, и освободитесь от исходных текстов. Они лежат в /usr/src/linux. Но удалять их лучше разынсталлируя пакет, их содержащий. Не рекомендуется удалять исходные тексты ядра до тех пор, пока вы не удостоверитесь, что новое ядро, которое вы, возможно, создали, правильно установлено и работает. Кроме того, вам могут понадобиться header-файлы ядра для того, чтобы компилировать программы на C.
Теперь приступим к удалению лишних приложений. Решите, какие приложения вам на самом деле необходимы. Некоторые могут оказаться излишествами: например, уверены ли вы в том, что вам очень нужен Emacs? Вместо него можно использовать другой, более мелкий и удобный текстовый редактор. От вас зависит, что оставлять, а что удалять. Вот несколько основных принципов:
— компилятор gcc довольно велик по размеру. Он используется для компиляции ядра и практически всех программ Linux. Разумеется, он вам понадобится, если вы будете писать собственные программы на C, поэтому определитесь с вашими потребностями, перед тем как удалить его. Также можно удалить все остальные пакеты для разработки программ, если вы не программист;
— X11/X-Window система еще больше, но это вещь, которую хотелось бы иметь под рукой. Если вы решились его удалить, то не удаляйте все, постарайтесь обойтись необходимым минимумом: нужный Х-сервер, один простенький менеджер окон, единственный xterm, никаких шрифтов на 100 dpi, и т.п.;
— TeX и сопутствующие программы занимают большой объем. Уход от LaTeX и переход на чистый TeX сэкономит много места; это же дает удаление программ предварительного просмотра в X11, таких как xdvi и ghostview, и, возможно, если у вас есть dvitty, dvivga или некоторые им подобные;
— игры никогда не являются "необходимостью";).
Практически все программы можно удалить, просто удалив пакет, который их содержит. Для этого используются программы kpackage и gnorpm.
Теперь давайте приступим к уменьшению объема самих программ. Перейдите в /usr/bin и наберите команду
strip *
Она удалит из запускамых файлов всю информацию, которая может понадобиться только тем, кто занимается debug'ом программ, но не относится к телу программы. Повторите это действие в /usr/X11R6/bin и других каталогах, содержащих исполняемые программы (не забывайте про программы TeX и gcc), но не делайте этого в /sbin, /bin или /usr/sbin, т.к. здесь это особо не уменьшит размер файлов, но может повредить некоторые из них.
Следующий шаг — сжатие программ при помощи upx. Сначала установите upx и прочтите документацию к нему. Затем перейдите в /usr/bin и запустите там команду
upx *
Она закомпрессирует все исполняемые файлы. Повторите эти действия во всех каталогах, описанных выше. Помните, что архивировать исполняемые файлы надо всякий раз, когда вы устанавливаете новую программу. Т.е. заново пересжимать уже сжатые файлы, конечно, никто не будет, но только что установленные будут сжаты.
Есть множество других файлов, которые можно заархивировать раз и навсегда. Начнем с каталога /usr/doc. Перейдите в этот каталог и наберите команду
find. -type f -exec gzip -9 {} \; 2> /dev/null
Эта команда сожмет все файлы документации, расположенные в данном каталоге. Но это не помешает их смотреть, т.к. при просмотре в большинстве случаев автоматически происходит распаковка сжатых gzip или bzip2 файлов. Помните, что архивировать документацию надо всякий раз, когда вы устанавливаете новую программу, к которой прилагается документация. Здесь справедлив тот же принцип, который применялся к предыдущему пункту. Повторите эти действия в других ваших каталогах, содержащих документацию. Если же использовать при сжатии архиватор bzip2, то результат операции будет лучше, но распаковка будет чуть медленнее. Если вы уверены, что документация вам не нужна, то вы просто можете удалить все эти каталоги.
С "обрезанием" и уменьшением Linux'а покончено. Теперь можно приступить к освобождению памяти.
Начнем с ядра. Все ядра Linux, которые поставляются вместе с дистрибутивами, раздуты и поддерживают множество возможностей, которые вам могут никогда не понадобиться. Если вы еще не пересобирали ядро, то можете попробовать это сделать, но здесь нужен трезвый ум и полное понимание того, что делаешь. Существуют множество прекрасных книг и руководств по Linux, которые также рассказывают об этом, а я тоже писал про это в последних "Вопросах и ответах".
Если вы пересобираете ядро, запомните, что совсем не надо использовать все возможности ядра. Например, как часто вы включаете, к примеру, поддержку PLIP в ядро? Как часто вы будете это использовать? Маленькое ядро требует меньше времени для загрузки, меньше памяти и меньше загружает процессор.
Другая важная вещь в ядре — модули. Использование модулей позволяет не держать код ядра, который реализует какую-нибудь фишку, в памяти, а подгружать его только тогда, когда это необходимо.
Виртуальные консоли — это прекрасный путь освободить память. Большинство дистрибутивов Linux запускают около 6 виртуальных консолей — именно между ними вы переключаетесь, используя комбинации Alt+F1 — Alt+F6. В среднем, использование 6 консолей требует около 4 Мб памяти. Если убрать пару консолей, можно освободить пару мегабайт памяти. Большинство пользователей используют 3-4 консоли. Например, я использую только две. Сколько консолей вы оставите — это ваше личное дело. Просто запомните, что чем меньше виртуальных консолей вы используете, тем больше памяти остается для работающих приложений. Количество используемых консолей описывается в файле /etc/inittab. Для того чтобы убрать виртуальную консоль, загрузите /etc/inittab в текстовый редактор, найдите строки, похожие на:
c1:12345:respawn:/sbin/getty tty1 38400 linux
c2:12345:respawn:/sbin/getty tty2 38400 linux
Начиная с наибольшего номера (например, c6), закомментируйте строку, поставив знак '#' в начале строки. Повторите этот шаг столько раз, сколько вам нужно. Запомните, каждая закомментированная строка убирает одну виртуальную консоль. Перезапустите систему, чтобы изменения вступили в силу.
Большинство дистрибутивов Linux запускают множество демонов (что это такое, я уже писал раньше; но _грубо_ говоря это типа сервисов, как в Win2k, но только лучше), которые никогда не используются. Чаще всего они запускаются через скрипты. Где находятся скрипты и какие из них запускаются, зависит от дистрибутива. Чаще всего их можно найти в /etc/rc.d/rc.*.
Прежде чем продолжить, стоит сказать, что вам было бы неплохо уметь писать скрипты. Книга по скриптам лежит на моем сайте в разделе документации. Для тех, кто уже знаком со скриптами, напомню, что скрипт должен начинаться со строки "#!/bin/sh" или подобной, после которой каждая строка запускается командным интерпретатором так, как будто она была введена с клавиатуры (так что скрипт — не что иное, как простые макросы клавиатуры).
Строки, начинающиеся с '#', являются комментариями и не исполняются. Большинство скриптов запуска демонов выглядят следующим образом:
if условие then
что-то
fi
Все, что мы хотим сделать — это закомментировать строки между if и fi.
Для того чтобы найти скрипт, в котором запускается демон, нужно поискать скрипт на предмет наличия в нем названия демона. Если я хочу найти, где запускается inetd, то должен сделать следующее:
cd /etc/rc.d
grep -n inetd rc.*
Кратко перечислю демоны, которые можно удалять (список не претендует на полноту и достаточность):
— inetd — этот демон поддерживает такие вещи, как telnet, ftp и talk. Если вы не используете свою машину как сервер или не хотите иметь удаленный доступ к своей машине, то можете убрать inetd;
— lpd — используется для печати файлов на принтере командой lpr. Если вы не пользуетесь печатью на своей машине, то можете убрать lpd;
— nfsd и mountd — это два демона, образующие NFS сервер. Если вы не используете свою машину как NFS сервер, то можете спокойно убрать эти два демона;
— portmap — этот демон используется для поддержки сервиса RPC. Если вы не используете NFS или любую другую программу, использующую RPC, то можете убрать portmap;
— sendmail — это еще один демон, требующий достаточно много памяти. Если вы не используете свою машину в качестве почтового сервера, то можете убрать sendmail. Если вы пользуетесь электронной почтой, то программу чтения почты можно настроить на другой почтовый сервер.
Могут быть также другие демоны в системе, которые вам не нужны. Удалите их, если они не нужны. Вы должны обязательно оставить только два демона — это syslogd и klogd, которые ведут логи вашей Линукс-системы.
В более новых дистрибутивах запуск демонов прописан другим способом. В etc/rc.d есть другие подкаталоги, каждый из которых соответствует определенному runlevel'у. Для отключения какого-либо сервиса достаточно удалить соответствующую символическую ссылку в нужном каталоге на скрипт, запускающий этот сервис. Все скрипты, как правило, лежат в /etc/rc.d/init.d.
Стоит также заметить, что еще проще и удобнее делать отключение сервисов при помощи соответствующих конфигурационных программ: linuxconf, drakconf (для Mandrake Linux).
Вот и все. Стоит заметить, что результат выполнения вышеописанных действий зависит лишь от того, насколько вы разобрались в Linux. Так что используйте эти принципы на свой страх и риск. А также побольше читайте документацию (RTFM — кто знает, тот поймет;). Удачи!
X-Stranger, xstranger@tut.by
www.linux4u.narod.ru
(c) компьютерная газета
Начнем с того, что заставим наш Linux занимать меньше места на винчестере. Для этого нам понадобятся следующие инструменты: архиваторы gzip или bzip2 (жмет лучше, чем первый), входящие в любой современный дистрибутив, и упаковщик исполняемых файлов upx, который можно найти в Интернете. Не помешает также иметь ровные руки и трезвую голову:).
Итак, приступим. Для начала мы удалим исходные тексты ядра. Вы могли их поставить просто случайно, ставя первый раз Линукс или просто так, но я практически на сто процентов уверен, что вы ими не пользуетесь. А так как исходные тексты ядра занимают 20-100 и больше мегабайт, то, скорее всего, вы захотите их удалить. Если так, то откомпилируйте новое ядро, которое будет работать с вашей машиной, и освободитесь от исходных текстов. Они лежат в /usr/src/linux. Но удалять их лучше разынсталлируя пакет, их содержащий. Не рекомендуется удалять исходные тексты ядра до тех пор, пока вы не удостоверитесь, что новое ядро, которое вы, возможно, создали, правильно установлено и работает. Кроме того, вам могут понадобиться header-файлы ядра для того, чтобы компилировать программы на C.
Теперь приступим к удалению лишних приложений. Решите, какие приложения вам на самом деле необходимы. Некоторые могут оказаться излишествами: например, уверены ли вы в том, что вам очень нужен Emacs? Вместо него можно использовать другой, более мелкий и удобный текстовый редактор. От вас зависит, что оставлять, а что удалять. Вот несколько основных принципов:
— компилятор gcc довольно велик по размеру. Он используется для компиляции ядра и практически всех программ Linux. Разумеется, он вам понадобится, если вы будете писать собственные программы на C, поэтому определитесь с вашими потребностями, перед тем как удалить его. Также можно удалить все остальные пакеты для разработки программ, если вы не программист;
— X11/X-Window система еще больше, но это вещь, которую хотелось бы иметь под рукой. Если вы решились его удалить, то не удаляйте все, постарайтесь обойтись необходимым минимумом: нужный Х-сервер, один простенький менеджер окон, единственный xterm, никаких шрифтов на 100 dpi, и т.п.;
— TeX и сопутствующие программы занимают большой объем. Уход от LaTeX и переход на чистый TeX сэкономит много места; это же дает удаление программ предварительного просмотра в X11, таких как xdvi и ghostview, и, возможно, если у вас есть dvitty, dvivga или некоторые им подобные;
— игры никогда не являются "необходимостью";).
Практически все программы можно удалить, просто удалив пакет, который их содержит. Для этого используются программы kpackage и gnorpm.
Теперь давайте приступим к уменьшению объема самих программ. Перейдите в /usr/bin и наберите команду
strip *
Она удалит из запускамых файлов всю информацию, которая может понадобиться только тем, кто занимается debug'ом программ, но не относится к телу программы. Повторите это действие в /usr/X11R6/bin и других каталогах, содержащих исполняемые программы (не забывайте про программы TeX и gcc), но не делайте этого в /sbin, /bin или /usr/sbin, т.к. здесь это особо не уменьшит размер файлов, но может повредить некоторые из них.
Следующий шаг — сжатие программ при помощи upx. Сначала установите upx и прочтите документацию к нему. Затем перейдите в /usr/bin и запустите там команду
upx *
Она закомпрессирует все исполняемые файлы. Повторите эти действия во всех каталогах, описанных выше. Помните, что архивировать исполняемые файлы надо всякий раз, когда вы устанавливаете новую программу. Т.е. заново пересжимать уже сжатые файлы, конечно, никто не будет, но только что установленные будут сжаты.
Есть множество других файлов, которые можно заархивировать раз и навсегда. Начнем с каталога /usr/doc. Перейдите в этот каталог и наберите команду
find. -type f -exec gzip -9 {} \; 2> /dev/null
Эта команда сожмет все файлы документации, расположенные в данном каталоге. Но это не помешает их смотреть, т.к. при просмотре в большинстве случаев автоматически происходит распаковка сжатых gzip или bzip2 файлов. Помните, что архивировать документацию надо всякий раз, когда вы устанавливаете новую программу, к которой прилагается документация. Здесь справедлив тот же принцип, который применялся к предыдущему пункту. Повторите эти действия в других ваших каталогах, содержащих документацию. Если же использовать при сжатии архиватор bzip2, то результат операции будет лучше, но распаковка будет чуть медленнее. Если вы уверены, что документация вам не нужна, то вы просто можете удалить все эти каталоги.
С "обрезанием" и уменьшением Linux'а покончено. Теперь можно приступить к освобождению памяти.
Начнем с ядра. Все ядра Linux, которые поставляются вместе с дистрибутивами, раздуты и поддерживают множество возможностей, которые вам могут никогда не понадобиться. Если вы еще не пересобирали ядро, то можете попробовать это сделать, но здесь нужен трезвый ум и полное понимание того, что делаешь. Существуют множество прекрасных книг и руководств по Linux, которые также рассказывают об этом, а я тоже писал про это в последних "Вопросах и ответах".
Если вы пересобираете ядро, запомните, что совсем не надо использовать все возможности ядра. Например, как часто вы включаете, к примеру, поддержку PLIP в ядро? Как часто вы будете это использовать? Маленькое ядро требует меньше времени для загрузки, меньше памяти и меньше загружает процессор.
Другая важная вещь в ядре — модули. Использование модулей позволяет не держать код ядра, который реализует какую-нибудь фишку, в памяти, а подгружать его только тогда, когда это необходимо.
Виртуальные консоли — это прекрасный путь освободить память. Большинство дистрибутивов Linux запускают около 6 виртуальных консолей — именно между ними вы переключаетесь, используя комбинации Alt+F1 — Alt+F6. В среднем, использование 6 консолей требует около 4 Мб памяти. Если убрать пару консолей, можно освободить пару мегабайт памяти. Большинство пользователей используют 3-4 консоли. Например, я использую только две. Сколько консолей вы оставите — это ваше личное дело. Просто запомните, что чем меньше виртуальных консолей вы используете, тем больше памяти остается для работающих приложений. Количество используемых консолей описывается в файле /etc/inittab. Для того чтобы убрать виртуальную консоль, загрузите /etc/inittab в текстовый редактор, найдите строки, похожие на:
c1:12345:respawn:/sbin/getty tty1 38400 linux
c2:12345:respawn:/sbin/getty tty2 38400 linux
Начиная с наибольшего номера (например, c6), закомментируйте строку, поставив знак '#' в начале строки. Повторите этот шаг столько раз, сколько вам нужно. Запомните, каждая закомментированная строка убирает одну виртуальную консоль. Перезапустите систему, чтобы изменения вступили в силу.
Большинство дистрибутивов Linux запускают множество демонов (что это такое, я уже писал раньше; но _грубо_ говоря это типа сервисов, как в Win2k, но только лучше), которые никогда не используются. Чаще всего они запускаются через скрипты. Где находятся скрипты и какие из них запускаются, зависит от дистрибутива. Чаще всего их можно найти в /etc/rc.d/rc.*.
Прежде чем продолжить, стоит сказать, что вам было бы неплохо уметь писать скрипты. Книга по скриптам лежит на моем сайте в разделе документации. Для тех, кто уже знаком со скриптами, напомню, что скрипт должен начинаться со строки "#!/bin/sh" или подобной, после которой каждая строка запускается командным интерпретатором так, как будто она была введена с клавиатуры (так что скрипт — не что иное, как простые макросы клавиатуры).
Строки, начинающиеся с '#', являются комментариями и не исполняются. Большинство скриптов запуска демонов выглядят следующим образом:
if условие then
что-то
fi
Все, что мы хотим сделать — это закомментировать строки между if и fi.
Для того чтобы найти скрипт, в котором запускается демон, нужно поискать скрипт на предмет наличия в нем названия демона. Если я хочу найти, где запускается inetd, то должен сделать следующее:
cd /etc/rc.d
grep -n inetd rc.*
Кратко перечислю демоны, которые можно удалять (список не претендует на полноту и достаточность):
— inetd — этот демон поддерживает такие вещи, как telnet, ftp и talk. Если вы не используете свою машину как сервер или не хотите иметь удаленный доступ к своей машине, то можете убрать inetd;
— lpd — используется для печати файлов на принтере командой lpr. Если вы не пользуетесь печатью на своей машине, то можете убрать lpd;
— nfsd и mountd — это два демона, образующие NFS сервер. Если вы не используете свою машину как NFS сервер, то можете спокойно убрать эти два демона;
— portmap — этот демон используется для поддержки сервиса RPC. Если вы не используете NFS или любую другую программу, использующую RPC, то можете убрать portmap;
— sendmail — это еще один демон, требующий достаточно много памяти. Если вы не используете свою машину в качестве почтового сервера, то можете убрать sendmail. Если вы пользуетесь электронной почтой, то программу чтения почты можно настроить на другой почтовый сервер.
Могут быть также другие демоны в системе, которые вам не нужны. Удалите их, если они не нужны. Вы должны обязательно оставить только два демона — это syslogd и klogd, которые ведут логи вашей Линукс-системы.
В более новых дистрибутивах запуск демонов прописан другим способом. В etc/rc.d есть другие подкаталоги, каждый из которых соответствует определенному runlevel'у. Для отключения какого-либо сервиса достаточно удалить соответствующую символическую ссылку в нужном каталоге на скрипт, запускающий этот сервис. Все скрипты, как правило, лежат в /etc/rc.d/init.d.
Стоит также заметить, что еще проще и удобнее делать отключение сервисов при помощи соответствующих конфигурационных программ: linuxconf, drakconf (для Mandrake Linux).
Вот и все. Стоит заметить, что результат выполнения вышеописанных действий зависит лишь от того, насколько вы разобрались в Linux. Так что используйте эти принципы на свой страх и риск. А также побольше читайте документацию (RTFM — кто знает, тот поймет;). Удачи!
X-Stranger, xstranger@tut.by
www.linux4u.narod.ru
(c) компьютерная газета
Компьютерная газета. Статья была опубликована в номере 34 за 2001 год в рубрике soft :: linux