Оптимизация Linux: жесткий диск (HDD)

Недавно ставил на второй свой компьютер Linux и обратил внимание что каждый раз при установке приходится править например файл /etc/fstab и не на добавление/удаление разделов - уж с этим чуть ли не любой линукс-установщик справляется на все сто - а на добавление опций монтирования…

Странно что это не добавлено разработчиками по умолчанию… В общем захотелось посвятить пост оптимизации жесткого диска в Linux ведь большинство обычных пользователей совершенно все в этой части оставляют по умолчанию после установки… Объясню что я имею ввиду поподробнее…

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

Так проверить скорость чтения можно командой:

hdparm -t /dev/sda1 /dev/sda1:Timing buffered disk reads: 280 MB in 3.02 seconds = 92.85 MB/sec hdparm -t /dev/sda8 /dev/sda7:Timing buffered disk reads: 160 MB in 3.02 seconds = 53.06 MB/sec

Разница заметна…

Далее… Прежде чем заниматься настройкой свежеустановленной системы я всегда открываю файл /etc/fstab для того чтобы изменить там значения монтирования по умолчанию - сколько дистрибутивов я не пробовал устанавливать все время в опциях монтирования стояло defaults

Итак открываем файл /etc/fstab в котором содержатся сведения о монтируемых при загрузке разделах. Ну и добавляем опции монтирования на выбор в зависимости от того что нужно получить в итоге… Опции зависят от файловой системы:

ReiserFS: acluser_xattrnoatimenodiratimenotailbarrier=flushExt3/Ext4: acluser_xattrnoatimenodiratimebarrier=1XFS: defaultsnoatimenodiratimelogbufs=8logbsize=32kbiosize=16allocsize=512mbarrier

Обозначает все это следующие функции:

  • user_xattr – расширенные атрибуты файлов (используются для индексирования)
  • barrier – команда очистки кэша
  • noatime и nodiratime – отключение записи времени последнего доступа (для файлов/директорий)
  • allocsize – размер заранее резервируемой области на диске. Высокое значение помогает избежать фрагментации
  • biosize – размер I/O-блоков по умолчанию
  • logbufs – количество встроенных буферов для ведения журнала
  • logbsize – размер буфера
  • notail - не упаковывать хвосты больших файлов - улучшает производительность - увеличивает используемое для хранения место(~5%) - для применения этой опции надо перезаписать находящиеся на ней файлы!

Еще одним моментом можно назвать оптимизацию журналирования файловой системы - в большинстве дистрибутивов по умолчанию при создании раздела ext3/ext4 используется тип журналирования Ordered (упорядоченный) потому что он обеспечивает наилучшее соотношение скорости и безопасности. Однако наибыстрейшим режимом является Writeback (журналирование после записи): он осуществляет наименьшее журналирование. Есть при этом недостаток что можно потерять некоторые данные например при непредвиденном отключении питания компьютера однако например для ноутбука это не самый худший вариант :)

Для включения режима Writeback желательно загрузиться в другой дистрибутив или с LiveCD ибо необходимо чтобы корневой раздел был размонтирован:

tune2fs -O has_journal -o journal_data_writeback /dev/sda1

Также неплохо было бы включить режим индексирования директорий который увеличивает скорость чтения и записи «в» и «из» каталогов вашего жесткого диска. Это полностью безопасный и рекомендованный режим.

Сначала нужно указать режим журналирования:

tune2fs -O dir_index /dev/sda1

Затем – включить индексацию существующих директорий:

e2fsck -D /dev/sda1

Выполнение команды e2fsck может занять немного времени – это зависит от размера раздела диска и количества директорий в нем…

В ядра 2.6.х включен параметр swappiness который определяет количество свободно памяти в процентах при котором система начинает «свопить» то есть записывать данные не в оперативную память а на жесткий диск. По умолчанию выставляется значение 60% что мне лично кажется чрезмерно завышенным и способствует преждевременному включению swap что не может не отражаться на жестком диске и его живучести… т.е. если память забита и мы запускаем программу (особенно большую) винту приходится одновременно и считывать библиотеки и данные для запускаемой программы и записывать в своп «устаревшие» страницы - отсюда долгие запуски софта и снижение отзывчивости системы.

Для уменьшения значения нужно в файл /etc/sysctl.conf добавить строчку

vm.swappiness=10

Только следует помнить что очень маленькое значение при малом обьеме оперативной памяти может вызвать при сборке большого проекта или запуске тяжелого софта недостаток памяти (не страшно но тот же тяжелый софт просто не запустится)…

Понятно что это не все советы по оптимизации жесткого диска в Линукс однако даже этого хватит чтобы заметно ускороить работу системы…


Оригинал статьи http://pingvinoff.net/2010/07/03/optimizaciya-linux-zhestki-disk-hdd/

0 комментариев

Оставить комментарий