Библиотека сайта rus-linux.net
Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
Фрагментация под Linux: Настройка файловой системы Ext3
Оригинал: Tuning
the Linux file system Ext3
Автор: Oliver Diedrich
Дата: 27
октября 2008
Свободный перевод: Алексей
Дмитриев
Дата перевода: 8 ноября 2008
Ext3 - это стандартная файловая система для Линукс; она надежная, быстрая, устойчивая к ошибкам, и подходит для любой сферы использования. Однако, с точки зрения эффективности, Ext3 может стать узким местом. Даже по поводу фрагментации к этой файловой системе есть вопросы.
Как и предшествовавшая ей Ext2, файловая система Ext3 утвердилась в качестве стандарта файловой системы для Линукс; Ext2/Ext3 обеспечивают хорошую производительность, а уж испытаны они лучше, чем какая-либо другая Линуксовая файловая система, в силу своего широкого распространения. Больше того, они столь надежны, что позволяют спасти большую часть информации с частично поврежденного жесткого диска. Это отличает Ext2/Ext3 от других файловых систем типа ReiserFS, которая, вследствие чувствительности структур управления жесткими дисками, может потерять все данные из-за повреждения нескольких секторов.
В дополнении к надежным структурам метаданных, Ext3 имеет хороший инструмент проверки: e2fsck может спасти большую часть данных из поврежденных файловых систем. Позже в этой статье мы раскроем несколько секретов успешного применения команды fsck даже в практически безнадежных ситуациях. Если уже не помогает e2fsck, значит файловая система настолько повреждена, что данные могут быть извлечены только посекторно при помощи низкоуровневых поисковых программ вроде dd_rescue и вручную собраны в файлы.
В этой статье, говоря о Ext3, мы также имеем в виду и Ext2. Главное различие между ними в том, что Ext3 имеет журнал, который гарантирует постоянство файловой системы и уменьшает время проверки смонтированной файловой системы с нескольких часов до нескольких секунд. Ext2 и Ext3 полностью совместимы; Ext3 можно примонтировать как Ext2, в этом случае ее журнал просто не будет использован. А при помощи команды
tune2fs -j
можно "научить" Ext2 вести журнал.
Простота
Как и всякая порядочная Юникс-подобная файловая система, Ext3 использует три главных структуры данных: директории, индексные дескрипторы (inode) и блоки данных (data blocks). Директории содержат только записи имен файлов и соответствующих им номеров индексных дескрипторов (индексы файлов). При этом на один и тот же индексный дескриптор могут указывать записи нескольких директорий. Это положение называется жесткой ссылкой. Мягкой или символической ссылкой (симлинк) называется положение, когда содержимое одного файла указывает на другой файл, а не на индексный дескриптор. Сами директории сохраняются на жестком диске как обычные файлы, отличающиеся от последних только типом файла и тем, что их содержимое представляет собой обязательную структуру.
Рис 1. Основная структура информации в файловых системах Ext2/Ext3: директории, индексные дескрипторы и блоки данных.
Индексные дескрипторы содержат всю необходимую информацию о
файлах, кроме их имени: размер, тип файла (обычный файл, директория,
файл устройства, именованный канал, сокет, или символическая ссылка),
владельца файла, количество жестких ссылок, права и время доступа, а
также номера блоков данных, содержащих информацию. Эти сведения, за
исключением номеров блоков данных, можно получить при помощи команды
stat. Некоторые сведения можно получить при помощи команды ls.
Команда ls -i
выводит номер индексного дескриптора файла.
Индексные дескрипторы сохраняются в таблицах, создаваемых программой mke2fs в зарезервированных участках файловой системы. Если имя симлинка короче 60 символов, то оно также сохраняется прямо в дескрипторе (это называется быстрой символической ссылкой). Во всех остальных случаях имя файла, на который указывает симлинк, сохраняется в файле, имеющем индексный дескриптор.
И, наконец, собственно информация сохраняется в блоках данных. Они занимают несколько секторов по 512 байт (наименьший адресуемый участок жесткого диска). Ext3 использует размер блоков в 1024, 2048 или 4096 байт - нужный размер задается при создании файловой системы при помощи программы mke2fs, форматирующей носитель в файловую систему Ext3. Теоретически, Ext3 поддерживает размер блоков вплоть до 64 килобайт, но на практике архитектуры х86 и х64 устанавливают максимум в 4 Кб - такой размер блока соответствует размеру страницы памяти в RAM, которыми оперирует ядро. Это делает манипуляции со страницами памяти проще для операционной системы.
Большие блоки упрощают работу с данными, и позволяют создавать файловые системы большего размера. Так, Ext3 использует 32-битный доступ к номерам блоков, что означает примерно миллиард адресуемых блоков - 4Тб при размере блока 1024 байта, и 16 Тб при размере блока 4096 байт. Кроме того, для управления мелкими блоками файловой системе требуется больше места на диске.
С другой стороны, крупные блоки впустую тратят много дискового
пространства, так как файл всегда занимает целый блок, даже если в
нем содержится всего несколько байт. В среднем, каждый файл
использует только половину блока - чем крупнее блоки и меньше файлы,
тем ощутимее потери. Этот эффект называется внутренней фрагментацией.
Ext3 содержит структуры, позволяющие управлять несколькими
фрагментами внутри одного блока данных (эти фрагменты являются
остаточными частями файлов, не занимающими целый блок), и программа
mke2fs предлагает для этого параметр -f
. Но, к сожалению,
это свойство файловой системы пока не реализовано.
При форматировании носителя, программа mke2fs приводит размер
блока в соответствие с размером файловой системы: для системы до 512
Мб размер блока будет 1Кб, в остальных случаях размер блока равен
4Кб. Опция mke2fs -b
позволяет определять размер блока
вручную - это имеет смысл, когда файловая система предназначена для
размещения преимущественно очень мелких файлов, и потери дискового
пространства будут иметь значение.
Скорость
В целом, устройство файловой системы Ext3 оптимизировано для выполнения приложениями типичной для них работы - читать файлы с определенными именами или записывать в эти файлы. Для файловой системы это означает необходимость быстро находить данные, принадлежащие данному имени файла. Вся система крутится вокруг индексных дескрипторов, которые доступны через записи в директориях, и которые содержат метаданные и указатели на блоки данных. Обратное отображение невозможно: чтобы выяснить, какому файлу принадлежит определенный блок данных, придется прочесать все дескрипторы в поисках нужного номера блока, а затем все директории в поисках соответствующего номера дескриптора. Отладочные программы низкого уровня, входящие в набор программы debugfs делают это при помощи команд icheck и ncheck (см. Приложение, Отладчик файловой системы).
Чтобы быстро перебрать все дескрипторы, доступ к ним должен быть чрезвычайно эффективен. Система гарантирует это, в процессе форматирования записывая дескрипторы в стационарные таблицы на диске. Одним из следствий этого является невозможность изменить количество дескрипторов после установки системы. Так как каждый файл должен соответствовать отдельному дескриптору, в системе не может быть больше файлов, чем дескрипторов. По умолчанию, mke2fs создает один дескриптор на каждые 4Кб в системе размером до 512Мб, в остальных случаях - один дескриптор на каждые 8Кб.
Тот, чье мнение не совпадает с мнением программы mke2fs, и хочет,
скажем, разместить немного крупных файлов, или наоборот, очень много
мелких файлов, может воспользоваться опцией -i
при запуске
команды mke2fs, чтобы самому задать, сколько байт данных будет
приходиться на каждый дескриптор. Если будет мало дескрипторов, то
можно создать мало файлов, но при этом освободится несколько мегабайт
места на диске, так как конструктивно каждый дескриптор занимает 128
байт на жестком диске. Большое количество дескрипторов позволяет
создать больше файлов.
Опция программы mke2fs -T type
дает доступ к нескольким
настройкам, прописанным в файле /etc/mke2fs.conf:
- small (по умолчанию с файловыми системами размером до 512Мб) задает размер блока 1Кб при соотношении: один дескриптор на каждые 4 блока;
- news задает размер блока в 4Кб при одном дескрипторе на блок;
- largefile задает размер блока 4 Кб при одном дескрипторе на 256 блоков;
- largefile4 задает размер блока 4Кб при одном дескрипторе на 1024 блоков.
Фиксированный размер дескриптора в 128 байт также способствует быстрому доступу к этому центральному элементу организации информации. Применив при создании файловой системы опцию
mke2fs -I inode size
пользователь может задать большее значение, которое должно делиться без остатка на 128. Ext3 может использовать увеличенные дескрипторы для сохранения дополнительных атрибутов.
Последующие части: 2, 3, 4, 5, 6.