Ключевые слова:linux, disk, fs, ex3fs, xfs, reiserfs, tune, mount, (найти похожие документы)
From: Денис Смирнов <mithraen@freesource.info>
Newsgroups: http://freesource.info
Date: Mon, 4 Jul 2004 13:01:37 +0000 (UTC)
Subject: Разбиение диска для увеличения производительности
Оригинал: http://freesource.info/article/4.shtml
Разбиение диска для увеличения производительности v1.1
Эта статья описывает разбиение диска для увеличения
производительности.
Я рекомендую по крайней мере на тестовых машинах использовать 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
Благодарности
Клочков Роман -- масса ценных комментариев, первый кто написал мне
письмо в ответ на эту статью :)
Денис Смирнов <mithraen@freesource.info>
2 Jun 2003