Эта статья описывает разбиение диска для увеличения производительности.
Я рекомендую по крайней мере на тестовых машинах использовать LVM, который
позволяет гибко создавать, удалять и изменять размеры разделов без потери
данных. При переходе к ядрам ветки 2.6.* можно будет изменять размеры
файловых систем ext2 и ext3 без остановки сервера, а на reiserfs увеличение
размера раздела в горячую можно делать уже сейчас.
Файловые системы
ext2 традиционная для Linux файловая система, после появления ext3 смысл
её использовать есть только на разделах, которые должны поддерживаться
сторонним программным обеспечением (например драйверами ext2 от других ОС).
ext3 сделана на базе ext2, отличается только наличием журналирования.
Полностью обратно совместима с ext2 (то есть любое ПО умеющее читать ext2
прочитает ext3), конвертирование ext2 в ext3 заключается только в создании
файла журнала (что делается командой tune2fs -j <устройство с FS>).
Единственная из описываемых поддерживает журналирование данных, а не только
метаданных (при использовании параметра data=journal), которое, как ни странно,
в некоторых случаях даёт увеличение производительности. Одна из самых надёжных
файловых систем для Linux (второй является xfs, но её пока нет в стабильной
ветке ядра), активно продвигаемая компанией Red Hat, и оттестированая на
огромном количестве пользователей.
reiserfs новая журналируемая файловая система, которая отличается от
других с точки зрения администратора в первую очередь хорошей скоростью
работы с каталогами, в которых большое количество маленьких файлов.
В отличии от ext2/3 в ней используются для поиска файла в каталоге B-tree
и хэши (в ext2/3 используются списки, в 2.5.* ветке уже внесены модификации
добавляющие B-tree поиск). Кроме того она умеет компактно хранить хвосты
от файлов для экономии места, обычно расходуемого впустую.
xfs разработка SGI недавно перенесённая в Linux. Для ядер 2.4.* существует
в виде патчей (уже присутствующих в большинстве современных дистрибутивов),
оптимизированая для быстрой работы с файлами большого размера (multimedia
данных), обладающая великолепной надёжностью, имеющая поддержку ACL (полезно
для файл-серверов с Windows-клиентами) и EA (до конца зачем они нужны
понимают лишь бывшие пользователи OS/2, остальные смотрят на них с удивлением).
Опции монтирования
Есть набор опций монтирования, поддерживаемых всеми файловыми системами, а
также есть опции конкретной файловой системы. Эта информация взята из
mount(8). Здесь я описываю лишь некоторые, на которые хотел бы обратить
внимание.
Общие опции монтирования
noatime при каждом доступе (в том числе чтении) к файлу в inode обновляется
время последнего доступа к файлу, что требуется крайне редко, при использовании
этой опции это обновление производиться не будет, что заметно ускорит работу
news-серверов, и, в особенности, прокси-сервера squid.
nodev не позволяет создавать и использовать на этой файловой системе
файлы-устройства, эта возможность полезна для безопасности (если вы точно
знаете, что на данной файловой системе файлы-устройства вам не нужны, то
есть смысл ставить эту опцию монтирования).
nosuid на этой файловой системе не действует бит suid (исполнение
программы от имени её владельца, а не запустившего её пользователя).
noexec запрет запуска с этой файловой системы (внимание! это никак
не влияет на скрипты).
ro доступ только для чтения
ext2
bsdgroups / sysvgroups
grpquota / noquota / quota / usrquota
ext3
data=journal все данные сначала пишутся в журнал, прежде чем начать запись
на файловую систему
data=ordered (режим по умолчанию) сначала пишутся данные прямо в файловую
систему, после чего метаданные добавляются в журнал
writeback очерёдность записи не соблюдается, метаданные могут быть
записаны в журнал до того, как данные будут записаны на файловую систему,
хотя этот режим гарантирует целостность файловой системы, он может позволить
устаревшим данным присутствовать в файлах после сбоя (и, соответственно,
восстановления журнала)
reiserfs
notail отключение ускорения доступа к маленьким файлом и упаковки хвостов
файлов.
xfs
dmapi
logdev=device путь к устройству, на котором будет размещён журнал
osyncisdsync
quota / usrquota / ugnoenforce
grpquota / gqnoenforce
Значение отдельных разделов
/boot
На этом разделе обычно лежат рабочее и failsafe ядра, initrd
образы, system.map файлы, а также некоторые данные используемого загрузчика
(lilo или grub). На этот раздел обычно достаточно 5-10Mb. Обычно самый первый
раздел (занимающий первую дорожку), и является самостоятельным primary разделом
(не является logical volume на LVM как остальные).
/usr
Обычно достаточно большой раздел (1-2Gb), который редко разбивается на
подразделы. Без LVM я бы не рекомендовал его разбивать, однако при его
наличии это может иметь смысл.
Насколько мне известно noatime на этом разделе не может дать никаких
неприятных последствий.
/usr/share/doc
reiserfs ro,noatime,noexec,nodev
/var
Раздел, предназначеный для хранения изменяемых в процессе работы системы
данных. По-хорошему на нём должен стоять флаг noexec, однако из-за недоработок
нынешних дистрибутивов это редко удаётся без доводки дистрибутива (или
установленного софта) напильником.
Файловая система ext3 или reiserfs, noexec(желательно), nosuid(обязательно),
скорее всего возможно использовать noatime, однако стоит быть внимательными.
/var/log
Этот раздел делать отдельно обязательно. При сбоях или DoS атаках размер
журналов может резко увеличиваться, тем самым переполняя этот раздел. Если
сервер используется для узкого круга задач (скажем web-сервер), есть смысл
журнал основного сервиса вынести на отдельный раздел (скажем /var/log/apache).
/var/log системные логи
/var/log/apache логи www-сервера
Файловая система ext3 либо xfs, опции noatime,noexec,nodev
/var/spool
reiserfs/ext3 noexec,nodev
/var/spool/mail
Каталог с почтой пользователей. ext3 с data=journal,noatime,noexec,nodev.
Также на этот раздел обязательно устанавливать квоты.
/var/cache
reiserfs noexec,nodev,noatime
/var/tmp
Эта файловая система предназначена в первую очередь для хранения временных
данных, которые могут иметь смысл после сбоя сервера (например данные
autosave или журнал работы текстовых редакторов). Предназначен исключительно
для файлов данных и должен обеспечивать высокую надёжность при аппаратных
и программных сбоях.
Оптимальное решение с моей точки зрения ext3 со включённым журналированием
данных.
ext3 data=journal,noexec,nodev,atime
/var/www
Раздел с сайтами пользователей
/tmp
Каталог для временных файлов, не имеющих никакого смысла при перезагрузке.
Может (и, как я считаю, должен) пересоздаваться во время загрузки системы.
Время последнего доступа к файлу может использоваться для проверки не является
ли файл в этом каталоге неиспользуемым (скажем если к файлу не было доступа
больше трёх суток и он никем не открыт, то он удаляется), поэтому желательно
держать флаг atime.
Запускать файлы из /tmp пытаются некоторые криво написаные программы, если
вы с такой встретились лучше сделать патч. Если не ставится флаг noexec,
то хотя бы nosuid стоять должен.
Файловая система лучше reiserfs она лучше всех справляется с большим
количеством небольших файлов в одном каталоге.
reiserfs noexec,nodev,atime
/home
Домашние каталоги пользователей. На серверной машине, скорее всего, имеет
смысл ставить на этот раздел флаг noexec, но если он не ставится, то nosuid
обязателен.
Время последнего доступа к файлам если раздел используется несколькими
реальными пользователями может быть нужно, поэтому в этом случае noatime
не нужен. Однако если машина используется, скажем, как почтовый сервер (то
есть пользователи никогда не сталкиваются с данными на файловой системе),
то, скорее всего, этот флаг вам нужен.
ext3/xfs nosuid,nodev
Благодарности
Клочков Роман масса ценных комментариев, первый кто написал мне письмо в
ответ на эту статью :)