РазбиениеДиска: различия между версиями
(→Значение отдельных разделов: no noexec on var in ALT) |
Нет описания правки |
||
Строка 3: | Строка 3: | ||
{{викифицировать}} | {{викифицировать}} | ||
=Разбиение диска для увеличения производительности= | |||
==Введение== | |||
Эта статья описывает разбиение диска для увеличения производительности. | Эта статья описывает разбиение диска для увеличения производительности. | ||
Есть мнение, что по крайней мере на тестовых машинах следует использовать LVM, который позволяет гибко создавать, удалять и изменять размеры разделов без потери данных. На ядрах ветки {{pkg|2.6.*}} можно изменять размеры файловых систем ext2, ext3 и reiserfs без остановки сервера. | Есть мнение, что по крайней мере на тестовых машинах следует использовать LVM, который позволяет гибко создавать, удалять и изменять размеры разделов без потери данных. На ядрах ветки {{pkg|2.6.*}} можно изменять размеры файловых систем ext2, ext3 и reiserfs без остановки сервера. | ||
==Дисковая подкачка== | |||
У swap есть две особенности: | У swap есть две особенности: | ||
Строка 18: | Строка 18: | ||
Наилучшим решением считается держать swap в начале диска, это поможет спасти информацию на диске при повреждении по каким-либо причинам информации в начале диска. Пример такой причины — опечатка при создании нового раздела (указали вместо /dev/sda2 просто /dev/sda). | Наилучшим решением считается держать swap в начале диска, это поможет спасти информацию на диске при повреждении по каким-либо причинам информации в начале диска. Пример такой причины — опечатка при создании нового раздела (указали вместо /dev/sda2 просто /dev/sda). | ||
==Файловые системы== | |||
===ext2=== | |||
Традиционная для Linux файловая система, после появления ext3 смысл её использовать есть только на разделах, которые должны поддерживаться сторонним программным обеспечением (например драйверами ext2 от других ОС). | Традиционная для Linux файловая система, после появления ext3 смысл её использовать есть только на разделах, которые должны поддерживаться сторонним программным обеспечением (например драйверами ext2 от других ОС). | ||
Применение: разделы, к которым будет производится обращение программ без помощи ОС (например {{prg|lilo}}, {{prg|grub}} и другие загрузчики). | Применение: разделы, к которым будет производится обращение программ без помощи ОС (например {{prg|lilo}}, {{prg|grub}} и другие загрузчики). | ||
=== ext3 === | |||
Сделана на базе ext2, отличается только наличием журналирования. Полностью обратно совместима с ext2 (то есть любое ПО, умеющее читать ext2, прочитает и ext3), конвертирование ext2 в ext3 заключается только в создании файла журнала (что делается командой {{cmd|tune2fs -j <устройство_с_FS>}}). | Сделана на базе ext2, отличается только наличием журналирования. Полностью обратно совместима с ext2 (то есть любое ПО, умеющее читать ext2, прочитает и ext3), конвертирование ext2 в ext3 заключается только в создании файла журнала (что делается командой {{cmd|tune2fs -j <устройство_с_FS>}}). | ||
Строка 32: | Строка 32: | ||
Применение: ныне самая универсальная файловая система под Linux, рекомендуется использовать её как файловую систему для самых ценных данных, так как она самая надёжная из описываемых. | Применение: ныне самая универсальная файловая система под Linux, рекомендуется использовать её как файловую систему для самых ценных данных, так как она самая надёжная из описываемых. | ||
=== ext4 === | |||
Идёт на смену ext3 | Идёт на смену ext3 | ||
=== reiserfs === | |||
Журналируемая файловая система, которая отличается от других с точки зрения администратора в первую очередь хорошей скоростью работы с каталогами, в которых большое количество маленьких файлов. Как и в ext3 в ветке {{pkg|2.6}}, в ней используются для поиска файла в каталоге B-tree и хэши. Кроме того она умеет компактно хранить хвосты от файлов для экономии места, обычно расходуемого впустую. | Журналируемая файловая система, которая отличается от других с точки зрения администратора в первую очередь хорошей скоростью работы с каталогами, в которых большое количество маленьких файлов. Как и в ext3 в ветке {{pkg|2.6}}, в ней используются для поиска файла в каталоге B-tree и хэши. Кроме того она умеет компактно хранить хвосты от файлов для экономии места, обычно расходуемого впустую. | ||
Применение: файловые системы с большим количеством маленьких файлов, или в которых большое количество файлов в каталоге. | Применение: файловые системы с большим количеством маленьких файлов, или в которых большое количество файлов в каталоге. | ||
=== xfs === | |||
Разработка SGI, перенесённая в Linux. Присутствует в ядре, начиная с ядер {{pkg|2.4.25}}. Оптимизированная для быстрой работы с файлами большого размера (multimedia данных), обладающая великолепной надёжностью, имеющая поддержку ACL (полезно для файл-серверов с Windows-клиентами) и EA (до конца зачем они нужны понимают лишь бывшие пользователи OS/2, остальные смотрят на них с удивлением). | Разработка SGI, перенесённая в Linux. Присутствует в ядре, начиная с ядер {{pkg|2.4.25}}. Оптимизированная для быстрой работы с файлами большого размера (multimedia данных), обладающая великолепной надёжностью, имеющая поддержку ACL (полезно для файл-серверов с Windows-клиентами) и EA (до конца зачем они нужны понимают лишь бывшие пользователи OS/2, остальные смотрят на них с удивлением). | ||
Применение: хранение файлов большого объёма (например мультимедиа-данных) и файл-сервера для Windows-сетей. | Применение: хранение файлов большого объёма (например мультимедиа-данных) и файл-сервера для Windows-сетей. | ||
=== jfs === | |||
Разработка IBM, использовавшаяся ранее на AIX, ныне портирована на OS/2 и Linux. См. [[ruwp:JFS]] | Разработка IBM, использовавшаяся ранее на AIX, ныне портирована на OS/2 и Linux. См. [[ruwp:JFS]] | ||
== Параметры монтирования == | |||
Есть набор параметров монтирования, поддерживаемых всеми файловыми системами, а также есть параметры конкретной файловой системы. Эта информация взята из mount(8). Здесь я описываю лишь некоторые, на которые хотел бы обратить внимание. | Есть набор параметров монтирования, поддерживаемых всеми файловыми системами, а также есть параметры конкретной файловой системы. Эта информация взята из mount(8). Здесь я описываю лишь некоторые, на которые хотел бы обратить внимание. | ||
=== Общие параметры монтирования === | |||
'''noatime''' — при каждом доступе (в том числе чтении) к файлу в inode обновляется время последнего доступа к файлу, что требуется крайне редко, при использовании этого параметра это обновление производиться не будет, что заметно ускорит работу news-серверов, и, в особенности, прокси-сервера squid (так как он каждую секунду выполняет несколько обращений к файлам на чтение, каждое из которых без noatime вызывает операцию записи, то есть обновления информации о времени последнего доступа). | *'''noatime''' — при каждом доступе (в том числе чтении) к файлу в inode обновляется время последнего доступа к файлу, что требуется крайне редко, при использовании этого параметра это обновление производиться не будет, что заметно ускорит работу news-серверов, и, в особенности, прокси-сервера squid (так как он каждую секунду выполняет несколько обращений к файлам на чтение, каждое из которых без noatime вызывает операцию записи, то есть обновления информации о времени последнего доступа). | ||
*'''nodev''' — не позволяет создавать и использовать на этой файловой системе файлы-устройства, эта возможность полезна для безопасности (если вы точно знаете, что на данной файловой системе файлы-устройства вам не нужны, то есть смысл ставить этот параметр). | |||
*'''nosuid''' — на этой файловой системе не действует бит suid (исполнение программы от имени её владельца, а не запустившего её пользователя). | |||
*'''noexec''' — запрет запуска с этой файловой системы (внимание! скрипты всё равно можно будет запустить командой bash скрипт.sh). | |||
*'''ro''' — доступ только для чтения | |||
=== ext2 === | |||
* '''bsdgroups / sysvgroups''' | * '''bsdgroups / sysvgroups''' | ||
* '''grpquota / noquota / quota / usrquota''' | * '''grpquota / noquota / quota / usrquota''' | ||
=== ext3 === | |||
* '''data=journal''' — все данные сначала пишутся в журнал, прежде чем начать запись на файловую систему | * '''data=journal''' — все данные сначала пишутся в журнал, прежде чем начать запись на файловую систему | ||
* '''data=ordered''' — (режим по умолчанию) сначала пишутся данные прямо в файловую систему, после чего метаданные добавляются в журнал | * '''data=ordered''' — (режим по умолчанию) сначала пишутся данные прямо в файловую систему, после чего метаданные добавляются в журнал | ||
* '''writeback''' — очерёдность записи не соблюдается, метаданные могут быть записаны в журнал до того, как данные будут записаны на файловую систему, хотя этот режим гарантирует целостность файловой системы, он может позволить устаревшим данным присутствовать в файлах после сбоя (и, соответственно, восстановления журнала). Этот режим используется для увеличения производительности | * '''writeback''' — очерёдность записи не соблюдается, метаданные могут быть записаны в журнал до того, как данные будут записаны на файловую систему, хотя этот режим гарантирует целостность файловой системы, он может позволить устаревшим данным присутствовать в файлах после сбоя (и, соответственно, восстановления журнала). Этот режим используется для увеличения производительности | ||
=== reiserfs === | |||
* '''notail''' — отключение ускорения доступа к маленьким файлам и упаковки «хвостов файлов». Она была нужна в те времена, когда загрузчик ядра (LILO) не понимал где искать «хвосты». Кроме того с этим параметром не будет часто замечаемого многими пользователя «обрывков других файлов в файле» после аппаратный сбоев. | * '''notail''' — отключение ускорения доступа к маленьким файлам и упаковки «хвостов файлов». Она была нужна в те времена, когда загрузчик ядра (LILO) не понимал где искать «хвосты». Кроме того с этим параметром не будет часто замечаемого многими пользователя «обрывков других файлов в файле» после аппаратный сбоев. | ||
Строка 79: | Строка 75: | ||
* '''quota''' — для управления квотами пользователей на дисковое пространство | * '''quota''' — для управления квотами пользователей на дисковое пространство | ||
=== xfs === | |||
* '''dmapi''' | * '''dmapi''' | ||
* '''logdev=device''' — путь к устройству, на котором будет размещён журнал | * '''logdev=device''' — путь к устройству, на котором будет размещён журнал | ||
Строка 86: | Строка 82: | ||
* '''grpquota / gqnoenforce''' | * '''grpquota / gqnoenforce''' | ||
== Значение отдельных разделов == | |||
: '''{{path|/}}''' | : '''{{path|/}}''' | ||
Строка 164: | Строка 160: | ||
Недостаток — недостаточно оттестировано, поэтому в процессе настройки могут быть сложности. Однако на уже настроенной машине никаких проблем лично я не встречал, поэтому предпочитаю использовать её. | Недостаток — недостаточно оттестировано, поэтому в процессе настройки могут быть сложности. Однако на уже настроенной машине никаких проблем лично я не встречал, поэтому предпочитаю использовать её. | ||
== Ссылки == | |||
* [http://plasticfs.sourceforge.net/ http://plasticfs.sourceforge.net/] -- файловая система в userspace | * [http://plasticfs.sourceforge.net/ http://plasticfs.sourceforge.net/] -- файловая система в userspace | ||
* [http://www.filesystems.org/ http://www.filesystems.org/] -- разработка ФС сразу для Linux, Solaris и [[FreeBSD|FreeBSD]] | * [http://www.filesystems.org/ http://www.filesystems.org/] -- разработка ФС сразу для Linux, Solaris и [[FreeBSD|FreeBSD]] | ||
Строка 170: | Строка 166: | ||
* [http://sourceforge.net/projects/fuse/ http://sourceforge.net/projects/fuse/] -- инструмент для создания виртуальных файловых систем | * [http://sourceforge.net/projects/fuse/ http://sourceforge.net/projects/fuse/] -- инструмент для создания виртуальных файловых систем | ||
== Благодарности == | |||
Клочков Роман — масса ценных комментариев, первый кто написал мне письмо в ответ на эту статью :) | Клочков Роман — масса ценных комментариев, первый кто написал мне письмо в ответ на эту статью :) |
Версия от 15:35, 27 июня 2015
Разбиение диска для увеличения производительности
Введение
Эта статья описывает разбиение диска для увеличения производительности.
Есть мнение, что по крайней мере на тестовых машинах следует использовать 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/ -- инструмент для создания виртуальных файловых систем
Благодарности
Клочков Роман — масса ценных комментариев, первый кто написал мне письмо в ответ на эту статью :)