Денис Смирнов
mithraen@freesource.info
2 Jun 2003
Эта статья описывает разбиение диска для увеличения производительности.
Я рекомендую по крайней мере на тестовых машинах использовать LVM, который
позволяет гибко создавать, удалять и изменять размеры разделов без потери
данных. При переходе к ядрам ветки 2.6.* можно будет изменять размеры
файловых систем ext2 и ext3 без остановки сервера, а на reiserfs увеличение
размера раздела “в горячую” можно делать уже сейчас.
Файловые системы
ext2 — традиционная для Linux файловая система, после появления ext3 смысл
её использовать есть только на разделах, которые должны поддерживаться
сторонним программным обеспечением (например драйверами ext2 от других ОС).
применение: разделы, к которым будет производится обращение программ без
помощи ОС (например lilo, grub и другие загрузчики).
ext3 — сделана на базе ext2, отличается только наличием журналирования.
Полностью обратно совместима с ext2 (то есть любое ПО умеющее читать ext2
прочитает ext3), конвертирование ext2 в ext3 заключается только в создании
файла журнала (что делается командой “tune2fs -j <устройство с FS>”).
Единственная из описываемых поддерживает журналирование данных, а не только
метаданных (при использовании параметра data=journal), которое, как ни странно,
в некоторых случаях даёт увеличение производительности. Одна из самых надёжных
файловых систем для Linux (второй является xfs, но её пока нет в стабильной
ветке ядра), активно продвигаемая компанией Red Hat, и оттестированая на
огромном количестве пользователей.
применение: ныне самая универсальная файловая система под Linux, особенно
рекомендую её использовать как файловую систему для самых ценных данных,
так как она самая надёжная из описываемых
reiserfs — новая журналируемая файловая система, которая отличается от
других с точки зрения администратора в первую очередь хорошей скоростью
работы с каталогами, в которых большое количество маленьких файлов.
В отличии от ext2/3 в ней используются для поиска файла в каталоге B-tree
и хэши (в ext2/3 используются списки, в 2.5.* ветке уже внесены модификации
добавляющие B-tree поиск). Кроме того она умеет компактно хранить хвосты
от файлов для экономии места, обычно расходуемого впустую.
применение: файловые системы с большим количеством маленьких файлов, или
в которых большое количество файлов в каталоге.
xfs — разработка SGI недавно перенесённая в Linux. Для ядер 2.4.* существует
в виде патчей (уже присутствующих в большинстве современных дистрибутивов),
оптимизированая для быстрой работы с файлами большого размера (multimedia
данных), обладающая великолепной надёжностью, имеющая поддержку ACL (полезно
для файл-серверов с Windows-клиентами) и EA (до конца зачем они нужны
понимают лишь бывшие пользователи OS/2, остальные смотрят на них с удивлением).
применение: хранение файлов большого объёма (например мультимедиа-данных)
и файл-сервера для Windows-сетей.
jfs — разработка IBM, использовавшаяся ранее на AIX, ныне портирована на OS/2
и Linux. Несмотря на моё огромное уважение к этой компании я пока не вижу
применения этой файловой системе, и лично мне непонятно в каких случаях стоит
её применять. Буду рад, если кто-нибудь мне об этом расскажет.
Опции монтирования
Есть набор опций монтирования, поддерживаемых всеми файловыми системами, а
также есть опции конкретной файловой системы. Эта информация взята из
mount(8). Здесь я описываю лишь некоторые, на которые хотел бы обратить
внимание.
Общие опции монтирования
noatime — при каждом доступе (в том числе чтении) к файлу в inode обновляется
время последнего доступа к файлу, что требуется крайне редко, при использовании
этой опции это обновление производиться не будет, что заметно ускорит работу
news-серверов, и, в особенности, прокси-сервера squid (так как он каждую
секунду выполняет несколько обращений к файлам на чтение, каждое из которых
без noatime вызывает операцию записи, то есть обновления информации о
времени последнего доступа).
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
Домашние каталоги пользователей. На серверной машине, на которой у пользователей
нет shell-доступа, скорее всего, имеет смысл ставить на этот раздел флаг
noexec, но если он не ставится, то nosuid обязателен.
Время последнего доступа к файлам если раздел используется несколькими
реальными пользователями может быть нужно, поэтому в этом случае noatime
не нужен. Однако если машина используется, скажем, как почтовый сервер (то
есть пользователи никогда не сталкиваются с данными на файловой системе),
то, скорее всего, этот флаг вам нужен.
ext3/xfs nosuid,nodev
/dev
Чаще всего это просто каталог на корневом разделе, однако это может быть
и файловая система devfs.
Преимущества devfs — отсутствие лишних записей в каталоге (файлы-устройства
существуют только для тех устройств, драйверы которых загружены) и загрузка
драйверов по запросу (попытка выполнить “ls /dev/ttyS*” загразит модуль
serial).
Недостаток — недостаточно оттестировано, поэтому в процессе настройки
могут быть сложности. Однако на уже настроеной машине никаких проблем лично
я не встречал, поэтому предпочитаю использовать её.
Благодарности
Клочков Роман — масса ценных комментариев, первый кто написал мне письмо в
ответ на эту статью :)
freesource.info