РазбиениеДиска
Материал из ALT Linux Wiki
Содержание |
[править] Разбиение диска для увеличения производительности
[править] Введение
Эта статья описывает разбиение диска для увеличения производительности.
Есть мнение, что по крайней мере на тестовых машинах следует использовать LVM, который позволяет гибко создавать, удалять и изменять размеры разделов без потери данных. На ядрах ветки 2.6.* можно изменять размеры файловых систем ext2, ext3 и reiserfs без остановки сервера.
[править] Дисковая подкачка
У swap есть две особенности:
- Если уж он используется, то доступ к нему должен быть максимально быстрый (а это значит либо начало, либо середина диска);
- Данные в swap не представляют никакой ценности после перезагрузки машины;
Наилучшим решением считается держать swap в начале диска, это поможет спасти информацию на диске при повреждении по каким-либо причинам информации в начале диска. Пример такой причины — опечатка при создании нового раздела (указали вместо /dev/sda2 просто /dev/sda).
[править] Файловые системы
- ext2
Традиционная для Linux файловая система, после появления ext3 смысл её использовать есть только на разделах, которые должны поддерживаться сторонним программным обеспечением (например драйверами ext2 от других ОС).
Применение: разделы, к которым будет производится обращение программ без помощи ОС (например lilo, grub и другие загрузчики).
- ext3
Сделана на базе ext2, отличается только наличием журналирования. Полностью обратно совместима с ext2 (то есть любое ПО, умеющее читать ext2, прочитает и ext3), конвертирование ext2 в ext3 заключается только в создании файла журнала (что делается командой tune2fs -j <устройство_с_FS>).
Единственная из описываемых поддерживает журналирование данных при использовании ядер 2.4.x, а не только метаданных (при использовании параметра data=journal), которое, как ни странно, в некоторых случаях даёт увеличение производительности. Одна из самых надёжных файловых систем для Linux, активно продвигаемая компанией Red Hat, и оттестированая на огромном количестве пользователей.
Применение: ныне самая универсальная файловая система под Linux, рекомендуется использовать её как файловую систему для самых ценных данных, так как она самая надёжная из описываемых.
- ext4
Идёт на смену ext3
- reiserfs
Журналируемая файловая система, которая отличается от других с точки зрения администратора в первую очередь хорошей скоростью работы с каталогами, в которых большое количество маленьких файлов. Как и в ext3 в ветке 2.6, в ней используются для поиска файла в каталоге B-tree и хэши. Кроме того она умеет компактно хранить хвосты от файлов для экономии места, обычно расходуемого впустую.
Применение: файловые системы с большим количеством маленьких файлов, или в которых большое количество файлов в каталоге.
- xfs
Разработка SGI, перенесённая в Linux. Присутствует в ядре, начиная с ядер 2.4.25. Оптимизированная для быстрой работы с файлами большого размера (multimedia данных), обладающая великолепной надёжностью, имеющая поддержку ACL (полезно для файл-серверов с Windows-клиентами) и EA (до конца зачем они нужны понимают лишь бывшие пользователи OS/2, остальные смотрят на них с удивлением).
Применение: хранение файлов большого объёма (например мультимедиа-данных) и файл-сервера для Windows-сетей.
- jfs
Разработка IBM, использовавшаяся ранее на AIX, ныне портирована на OS/2 и Linux. См. ruwp:JFS
[править] Параметры монтирования
Есть набор параметров монтирования, поддерживаемых всеми файловыми системами, а также есть параметры конкретной файловой системы. Эта информация взята из mount(8). Здесь я описываю лишь некоторые, на которые хотел бы обратить внимание.
[править] Общие параметры монтирования
noatime — при каждом доступе (в том числе чтении) к файлу в inode обновляется время последнего доступа к файлу, что требуется крайне редко, при использовании этого параметра это обновление производиться не будет, что заметно ускорит работу news-серверов, и, в особенности, прокси-сервера squid (так как он каждую секунду выполняет несколько обращений к файлам на чтение, каждое из которых без noatime вызывает операцию записи, то есть обновления информации о времени последнего доступа).
nodev — не позволяет создавать и использовать на этой файловой системе файлы-устройства, эта возможность полезна для безопасности (если вы точно знаете, что на данной файловой системе файлы-устройства вам не нужны, то есть смысл ставить этот параметр).
nosuid — на этой файловой системе не действует бит suid (исполнение программы от имени её владельца, а не запустившего её пользователя).
noexec — запрет запуска с этой файловой системы (внимание! скрипты всё равно можно будет запустить командой bash скрипт.sh).
ro — доступ только для чтения
[править] ext2
- bsdgroups / sysvgroups
- grpquota / noquota / quota / usrquota
[править] ext3
- data=journal — все данные сначала пишутся в журнал, прежде чем начать запись на файловую систему
- data=ordered — (режим по умолчанию) сначала пишутся данные прямо в файловую систему, после чего метаданные добавляются в журнал
- writeback — очерёдность записи не соблюдается, метаданные могут быть записаны в журнал до того, как данные будут записаны на файловую систему, хотя этот режим гарантирует целостность файловой системы, он может позволить устаревшим данным присутствовать в файлах после сбоя (и, соответственно, восстановления журнала). Этот режим используется для увеличения производительности
[править] reiserfs
- notail — отключение ускорения доступа к маленьким файлам и упаковки «хвостов файлов». Она была нужна в те времена, когда загрузчик ядра (LILO) не понимал где искать «хвосты». Кроме того с этим параметром не будет часто замечаемого многими пользователя «обрывков других файлов в файле» после аппаратный сбоев.
Поддерживается в дистрибутивах ALT Linux, выпущенных с начала 2004 года:
- data=journal — данные сначала пишутся в журнал, а потом начинается запись на файловую систему
- quota — для управления квотами пользователей на дисковое пространство
[править] xfs
- dmapi
- logdev=device — путь к устройству, на котором будет размещён журнал
- osyncisdsync
- quota / usrquota / ugnoenforce
- grpquota / gqnoenforce
[править] Значение отдельных разделов
- /
Корневой раздел. Здесь, на мой взгляд, лучше применить ext3, ибо при сбоях на этапе начальной загрузки ext3 пока восстанавливается системой корректнее своих собратьев.
- /boot
На этом разделе обычно лежат рабочее и failsafe ядра, initrd образы, system.map файлы, а также некоторые данные используемого загрузчика (lilo или grub). На этот раздел обычно достаточно 5-10Mb. Обычно самый первый раздел (занимающий первую дорожку), и является самостоятельным primary разделом (не является logical volume на LVM как остальные).
Оптимальная ФС — ext2 (потому что объём мал, а изменения редки), причём лучше не монтировать её автоматически, а подключать только в моменты установки ядер и изменения конфигурации загрузчика.
- /usr
Обычно достаточно большой раздел (1-2Gb), который редко разбивается на подразделы. Без LVM я бы не рекомендовал его разбивать, однако при его наличии это может иметь смысл.
Насколько мне известно noatime на этом разделе не может дать никаких неприятных последствий.
- /usr/share/doc
reiserfs — ro, noatime, noexec, nodev
- /var
Раздел, предназначенный для хранения изменяемых в процессе работы системы данных. По-хорошему на нём должен стоять флаг noexec, однако из-за недоработок нынешних дистрибутивов это редко удаётся без доводки дистрибутива (или установленного софта) напильником.
Файловая система — ext3 или reiserfs, nosuid (обязательно), скорее всего возможно использовать noatime, однако стоит быть внимательными. noexec для всего /var в ALT Linux невозможен, поскольку в /var/resolv располагается изолированное окружение resolver'а.
- /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
Чаще всего это просто каталог на корневом разделе, однако это может быть и файловая система udev (ранее использовалась devfs). Преимущества devfs — отсутствие лишних записей в каталоге (файлы-устройства существуют только для тех устройств, драйверы которых загружены) и загрузка драйверов по запросу (попытка выполнить «ls /dev/ttyS*» загрузит модуль serial). При использовании userspace dev (udev) устройства добавляются вызовом /sbin/hotplug. В linux 2.6 devfs считается устаревшим (obsoleted). !!2mithraen: всё-таки cat /dev/ttyS* ?""
Недостаток — недостаточно оттестировано, поэтому в процессе настройки могут быть сложности. Однако на уже настроенной машине никаких проблем лично я не встречал, поэтому предпочитаю использовать её.
[править] Ссылки
- http://plasticfs.sourceforge.net/ -- файловая система в userspace
- http://www.filesystems.org/ -- разработка ФС сразу для Linux, Solaris и FreeBSD
- http://www.fsl.cs.sunysb.edu/project-unionfs.html -- A Stackable Unification File System
- http://sourceforge.net/projects/fuse/ -- инструмент для создания виртуальных файловых систем
[править] Благодарности
Клочков Роман — масса ценных комментариев, первый кто написал мне письмо в ответ на эту статью :)
