После установки Linux-а на своем лэптопе я обнаружил, что он обращается к жесткому диску каждые несколько секунд, даже если нет пользователей, вошедших в систему. Соответственно, жесткий диск не мог войти в режим ожидания. Снижение активности жесткого диска может намного увеличить время работы на батареях. Поэтому я собрал эту коллекцию рецептов.
Все они проверены на RedHat 4.1, в вашем дистрибутиве пути к файлам конфигурации могут отличаться. (если так, дайте мне знать.)
Проверьте файл /etc/crontab и убедитесь в том, что он запускается каждую минуту. Часто здесь можно найти atrun.
С помощью команды at реализуется отложенный запуск команд. Некоторые системы Linux используют для этого выделенный демон atd, другие (например RedHat) используют crond для запуска раз в минуту atrun.
На большинстве систем не требуется запуск команд at точно в определенное время. Поэтому, если в вашем /etc/crontab есть строки
# Запускаем задания at каждую минуту * * * * * root [ -x /usr/sbin/atrun ] && /usr/sbin/atrun |
то можно смело изменить их на
# Запускаем задания at каждый час 00 * * * * root [ -x /usr/sbin/atrun ] && /usr/sbin/atrun |
Для получения более подробной информации читайте man 5 crontab. Некоторые могут нормально работать вообще без демона crond, так что, если вы знаете, что делаете, то можете вообще его выключить.
Linux работает со множеством одновременно открытых файлов, поэтому система должна быть уверена, что изменения, произведенные в них, будут сохранены на жесткий диск, как можно быстрее. В случае аварии системы эти изменения будут потеряны.
Этим занимается демон update / bdflush. (Это имена одной программы, для запуска демона можно использовать и то, и другое.) По умолчанию flush вызывается каждые 5 секунд и sync - каждые 30 секунд.
Это приводило к постоянному доступу к моему диску Fujitsu. (Похоже, этот жесткий диск сбрасывает (записывает) свой кэш даже при отсутствии в нем каких-либо изменений. Впрочем, это зависит от производителя - по сообщениям других некоторые диски переходят в режим ожидания даже без нижеприведенных изменений.)
Сбои Linux теперь - это не такое уж частое явление, поэтому я сменил оба значения на 3600 секунд (= один час), что не вызвало никаких проблем и остановило постоянный доступ к диску. (Но если сейчас моя система аварийно завершит работу, то испорченных файлов будет, конечно, больше)
RedHat 4.1: B /etc/inittab, измените вызов update на:
ud::once:/sbin/update -s 3600 -f 3600 |
Suse 4.4.1: update вызывается из /sbin/init.d/boot.
Slackware: update вызывается из /etc/rc.d/rc.S.
Если хотите углубиться в подробности - читайте man update.
Демон syslogd отвечает за различные файлы системных журналов Linux, находящихся в каталоге /var/log/. По умолчанию syslogd сбрасывает на диск (sync) файлы журналов всякий раз после записи в них системного сообщения.
Вы можете отключить сброс, поставив перед именем файла в файле /etc/syslog.conf знак "минус". Вот пример syslog.conf из моей системы:
# Ведем журнал всех сообщений (кроме почтовых) уровня info и выше. # Не включаем в журнал сообщения об аутентификации! *.info;mail.none;authpriv.none -/var/log/messages |
Опять таки, в случае аварии системы, сообщение о возникшей проблеме, скорее всего, не будет записано на диск. Дилемма...
Во время загрузки начальные процессы и демоны запускаются командой init. Эта команда (опять таки) вызывает sync перед созданием любого нового процесса.
Это можно изменить, убрав вызов sync() в исходных текстах и перекомпилировав init.
Чтобы избежать проблемы с потерянными файловыми буферами, следует добавить в скрипт /etc/rc.d/init.d/halt перед отключением файловых систем вызов sync.
Раздел подкачки Linux используется для увеличения размера физической памяти за счет виртуальной памяти, что, опять-таки, может послужить причиной доступа к диску. Если на вашем лэптопе много памяти, или используемые вами приложения довольно просты (подумайте о vi),то, возможно, вам стоит подумать об отключении этого раздела.
Само собой, решение должно зависеть от того, что вы собираетесь делать. 4 - 8 Мб памяти однозначно недостаточно для работы без раздела подкачки. 8 - 16 Мб достаточно для работы текстовых консольных приложений, если вы, конечно, не используете активно многозадачность. Работа в X-Windows требует большого количества памяти - если размер памяти вашего компьютера не намного превышает 16 мб, то отключать раздел подкачки не следует.
(Отступление: Мой лэптоп с 16 мб и отключенным разделом подкачки одновременно работал с emacs, четырьмя оболочками bash и компилировал ядро, не испытывая недостатка в памяти. Этого для меня достаточно.)
Если вы уже установили раздел подкачки, то можете отключить его, поставив символ решетки перед командой командой swapon, вызываемой из /etc/rc.d/rc.sysinit. Если вы не хотите насовсем отключать раздел подкачки, то можно заставить систему спрашивать вас во время загрузки, следует ли использовать подкачку. В файле /etc/rc.d/rc.sysinit (RedHat 4.1) или /sbin/init.d/boot (Suse 4.4.1):
echo "Должна ли система использовать подкачку?" echo " 0: Нет." echo " 1: Да." /bin/echo "Ваш выбор: \c" read SWAPCHOICE case "$SWAPCHOICE" in 0) # Ничего не делаем. echo "(Разделы подкачки отключены)" ;; *) # Включаем подкачку. echo "Подключение разделов подкачки" swapon -a esac |
В этом случае можно включать подкачку при работе от сети и не использовать при работе на батареях.
Я использую мой лэптоп для написания и отладки cgi скриптов, поэтому на нем работает локальный веб-сервер. В стандартной конфигурации он слишком велик, если все, что вам нужно - просто проверять, работает ли скрипт или, иногда, как выглядит страничка.
Просто смените в файле httpd.conf значения MinSpareServers и StartServers на 1. Этого вполне достаточно для локального тестирования.
Если вы хотите выключить ведение веб-сервером журнала, то перекомпилируйте демон httpd. За подробностями обращайтесь к документации.
Grant Taylor перекомпилировал ведение журнала и обнаружил, что от этого apache не перестал "дергать" диск. Поэтому я нашел, как мне кажется, лучшее решение - запуск apache не демоном, а через inetd." Читайте man inetd.
Настройка XFree86 для лэптопов - это отдельная история. Я, опять таки, отсылаю вас к Linux Laptop page, где можно найти помощь по этому вопросу.
Гашение экрана X консоли всего лишь очищает его (делает черным), но не выключает. Как было отмечено в "Примечании о выключении консоли" , для настройки гашения можно использовать опцию dpms команды xset Впрочем, эта возможность зависит от графического адаптера и bios вашего лэптопа.
Grant Taylor использовал следующие настройки для выключения экрана своего лэптопа, с помощью apmd и хранителя экрана:
# Запускаем xscreensaver, с помощью программы APM xscreensaver -timeout 5 \ -xrm xscreensaver.programs:apm_standby \ -xrm xscreensaver.colorPrograms:apm_standby & |
где apm_standby - это suid perl скрипт, позволяющий лишь некоторым пользователям запускать apm -S.
Ладно, emacs - это не редактор, а стиль жизни. Вот подсказка Florent Chabaud: "Если вы использовали emacs, то, может быть, заметили, что этот редактор кое-что сохраняет автоматически. Эта возможность, конечно, очень полезна и не должна быть выключена, но ее параметры могут быть немного подстроены под лэптоп.
Я добавил в файл /usr/share/emacs/site-lisp/site-start.el следующие две строки:
(setq auto-save-interval 2500) (setq auto-save-timeout nil) |
При этом выключается автосохранение по времени, и включается автосохранение по количеству нажатий (2500) на клавиши. Если вы набираете текст, то можно уменьшить количество нажатий; для программирования же это в самый раз. Так как считается любое нажатие (вверх, вниз, влево, удаление символа, вставка из буфера, и т. д.), то лимит в 2500 нажатий достигается довольно быстро."
Если ваша система Linux все равно слишком часто обращается к диску, то с помощью команды ps ax можно выяснить, что происходит внутри. Она выводит список процессов с полным именем каждого, иногда даже хватает места для аргументов командной строки.
После этого прочитайте руководство (man) по каждому процессу, с целью найти способ, изменить его поведение. Так вы наверняка обнаружите процесс, виновный в частом обращении к диску. Команда strace также может пригодиться.
Пожалуйста, пошлите мне письмо, если найдете что-то новое.