Сайт | Скачать | Видео | Wiki

Автор Тема: [Советы для работы в Linux с флешки]  (Прочитано 5838 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
 
После покупки Asus eeePC и установки туда линукса я задумался о продлении срока службы встроенных ssd-дисков. В поисках по интернету я нашел интересную статью, в которой описано как это можно сделать. Статья мне очень понравилась и я решил сделать ее перевод.

Если Вы работает в линуксе с флешки, то есть несколько вещей, которые Вы могли бы захотеть сделать с целью уменьшить износ используемой флешки (так как она имеет ограниченное число циклов перезаписи).
Файловая система ext3 по умолчанию записывает изменения метаданных на диск каждые 5 секунд. Этот период может быть увеличен путем монтирования файловой системы с параметром commit=N, который говорит ядру задерживать запись на N секунд.
Ядро записывает новое время доступа для каждого файла, который был прочитан, что генерирует одну операцию записи на каждое чтение. Это может быть отключено путем монтирования файловой системы с опцией noatime.
Оба вышеперечисленных действия могут быть установлены добавлением опций noatime,commit=120,… в файл /etc/fstab. Так же это можно сделать для уже смонтированных файловых систем путем выполнения команды:

Код
mount -o remount,noatime,commit=120 /

Система будет запускать updatedb каждый день, который создает базу данных для всех файлов в системе для использования в команде locate. Это будет также негативно сказываться на файловой системе, поэтому Вы можете захотеть отключить это добавив:

Код
exit 0

ранее в скрипт /etc/cron.daily/find.
syslogd при установке по умолчанию будет синхронизировать большое количество логов на диск сразу же после добавления новой информации. Вы можете захотеть изменить /etc/syslog.conf так, что каждое имя файла начиналось бы со знака «-» (минус), что означает что файлы не синхронизируются мгновенно (это повышает риск что некоторые сообщения будут потеряны если ваша система зависнет). Например, такая линия как:

Код
kern.* /var/log/kern.log

Может быть изменена на:

Код
kern.* -/var/log/kern.log

Вы так же можете захотеть отключить некоторые классы сообщений вообще, записывая их в /dev/null вместо файла, смотрите syslog.conf(5) для дополнительной информации.
Так же syslogd любит писать линии — MARK — в лог каждые 20 минут что бы показать что система все еще работает. Это может быть отключено изменением опции SYSLOGD в /etc/default/syslogd таким образом:
Код
SYSLOGD="-m 0"

После того как Вы сделаете данные изменения Вам потребуется перезапустить syslogd выполнив команду:

/etc/init.d/syslogd restart

Если у Вас есть раздел подкачки или файл подкачки на флешке, Вы можете захотеть постоянно перемещать его на другую часть диска что бы убедиться что разные части диска изнашиваются одинаково из-за частых записей, которые он генерирует. Для файла подкачки это может быть сделано путем создания нового файла подкачки перед удалением старого.
Если у Вас есть раздел подкачки или файл подкачки хранимый на флешке, Вы можете убедиться что он используется как можно меньше установив /proc/sys/vm/swappiness в 0.
Ядро также имеет настройку известную как laptop_mode (режим ноутбука), которая заставляет его откладывать запись на диск (изначально создавалась с намерением позволить диску ноутбука останавливаться пока он не используется, отсюда и название). Несколько файлов в директории /proc/sys/vm/ контролируют его (режима) работу:
/proc/sys/vm/laptop_mode: Через сколько секунд после чтения данных должна начаться запись измененных файлов (это основано на предположении о том, что чтение вызовет раскрутку ранее остановленного диска).
/proc/sys/vm/dirty_writeback_centisecs: Как часто ядро должно проверять есть ли «грязные» (измененные) данные для записи на диск (в сантисекундах).
/proc/sys/vm/dirty_expire_centisecs: Насколько «грязны» должны быть данные, что бы ядро решило что они достаточно стары для записи на диск. В общем случае, это хорошая идея установить для этой опции такое же значение как и для dirty_writeback_centisecs выше.
/proc/sys/vm/dirty_ratio: Максимальный размер памяти (в процентах), для хранения грязных данных прежде чем процесс, их сгенерировавший, будет принужден записать их. Установка этому параметру высокого значения не должно быть проблемой, так как запись будет так же происходить если в системе закончится память.
/proc/sys/vm/dirty_background_ratio: Минимальное число памяти (в процентах), где позволено хранить гразные данные вместо записи на диск. Этот параметр должен быть намного меньше чем dirty_ratio что бы позволить записывать куски грязных данных за один проход.

Все вышеперечисленные параметры ядра могут быть настроены используя собственных загрузочный скрипт, как в этом примере. Сохраните его, например, в /etc/init.d/kernel-params, сделайте его исполняемым с помощью команды

Код
chmod a+x /etc/init.d/kernel-params

и убедитесь что он выполняется с помощью команды

Код
update-rc.d kernel-params defaults

Замечание. Большинство из этих настроек уменьшают число записей на диск путем увеличения использования памяти. Это увеличивает риск ситуации нехватки памяти (что может запустить «убийцу процессов» в ядре). Это может произойти даже если есть доступная свободная память (например, когда ядру требуется выделить более чем одну непрерывную страницу, но доступны только фрагментированные страницы).
Таким образом, с любыми настройками рекомендуется приглядывать за объемом свободной памяти и изменять эти настройки (используя менее агрессивное кэширование и увеличение подкачки) в зависимости от рабочей загрузки.
« Последнее редактирование: 25 Май 2009, 02:55:12 от Zloy_T »