Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Файловые системы Linux

Фрагментация под Linux: Настройка файловой системы Ext3

Автор: Oliver Diedrich, перевод: Алексей Дмитриев

Предыдущие страницы: 1


Не всегда прямо

Каким образом удается втиснуть номера миллионов блоков данных, необходимых для описания гигабайтных файлов в статичную информационную структуру размером 128 байт? - Один дескриптор в файловой системе Ext3 сохраняет ровно 15 номеров блоков. Первые 12 указывают напрямую на блоки данных; блок 13 указывает на блок данных, содержащий номера блоков (непрямая адресация блоков, иногда называемая косвенной), блок 14 указывает на блоки, указывающие на блоки с номерами блоков (двойная непрямая адресация блоков), а блок 15 производит тройную непрямую адресацию блоков. Таким образом, при размере блока в 4Кб (а это 1024 номеров блоков, если считать по 4 байта на непрямой блок) один дескриптор может содержать 12 + 1024 + 10242 + 10243, то есть около миллиарда номеров блоков.

Рисунок 2. Непрямая адресация блоков позволяет при помощи 15 номеров блоков адресовать несколько терабайт данных

Найденный нами максимальный размер файла более 4 Тб есть только теоретическое предположение, так как в дескрипторе сохраняется номер принадлежащего файлу сектора жесткого диска размером в 512 байт. Команда stat программы debugfs выводит это значение как "block count" (счет блоков). А так как этот счет блоков 32-битный, то максимальный размер файла в Ext3 на самом деле только 2Тб.

Между прочим, двухтерабайтный максимальный размер файла не обусловлен свойствами файловой системы Ext3, а является следствием организации системных вызовов доступа к файлам. Работа и структура информации доступа к файлу традиционно использует предварительно заданное 32-битное смещение (адресная ссылка (pointer), адресующая любой байт внутри файла). В результате, максимальный размер файла равен 231-1 байт. Это ограничение было снято введением Поддержки Длинных Файлов (Large File Support, LFS), использующим 64-битное смещение.

Группы блоков

Помимо директорий, таблиц индексных дескрипторов и блоков данных, файловая система Ext3 применяет еще несколько информационных структур. Две битовые карты содержат записи о том, какие из блоков данных находятся в работе, а какие свободны. Чтобы обеспечить эффективный доступ в эту область, Ext3 организует файловую систему в группы блоков - нечто вроде разделов внутри файловой системы.

В процессе чтения, записи и создания файлов, считывающие головки жестких дисков перепрыгивают между блоками данных, директориями, таблицами дескрипторов, самими дескрипторами, битовыми картами блоков. Между тем, каждое перемещение головок занимает в среднем несколько миллисекунд - время достаточное, чтобы прочитать мегабайт данных с быстрого диска. Учитывая, что перемещения головок занимают тем больше времени, чем дальше нужные сектора диска находятся друг от друга, предпочтительнее сохранять "родственные" части структуры файловой системы и данных в близком соседстве.

Ext3 достигает этого при помощи групп блоков. Каждая группа блоков содержит:

  • идентификатор группы блоков (block group descriptor), ведущий статистику о количестве групп блоков, находящихся в работе, кроме того,
  • "кусок" таблицы дескрипторов и
  • ту часть битовой карты дескрипторов и блоков, которая относится к этому "куску"
  • и сами блоки данных, принадлежащие к этой группе блоков.

Ext3 старается создавать файлы таким образом, чтобы метаданные - дескрипторы и директории - и связанные с ними блоки данных, находились внутри одной группы блоков.

Количество созданных групп блоков зависит от размеров файловой системы. Хотя этот параметр может быть установлен при помощи опции mke2fs -g, разработчики Ext3 советуют не настраивать его, так как программа mke2fs выберет оптимальное значение. Вследствие того, что только один блок данных выделен для битовой карты группы блоков, то эта группа может содержать максимально 32 768 блоков, или 128Мб при размере блока в 4Кб.

Суперблок

И последняя информационная структура файловой системы Ext3 - это суперблок, описывающий саму файловую систему. Он содержит всю необходимую информацию для правильной расшифровки структуры файловой системы:

  • Размер блока

  • Количество блоков и дескрипторов

  • Группы блоков

  • Размер дескриптора

Первый незарезервированный дескриптор (несколько дескрипторов зарезервированы для внутренних нужд системы, например второй дескриптор - за корневой директорией, а восьмой - за журналом в Ext3)

Всю эту (и много другой) информации можно получить при помощи программы debugfs. Нужно запустить в терминале программу debugfs, которая содержит много инструментов отладки файловой системы. В данном случае, понадобится ее команда stats. Помимо debugfs, существует команда dumpe2fs -h, которая также выводит информацию о суперблоках.

Блоки, помеченные как резервные (5% от общего числа блоков по умолчанию, этот процент может быть изменен опцией mke2fs -m), доступны только суперпользователю (root); это сделано, чтобы дать системе немного жизненного пространства, на случай если пользователи полностью заполнят файловую систему.

Кроме всего этого, супеблок несет информацию о состоянии системы: о количестве свободных дескрипторов и блоков; о том, когда система в последний раз была примонтирована, когда в последний раз была проверена программой e2fsck; о текущем статусе (чистая - clean, если все в порядке). Здесь же находятся все остальные настройки, позволяющие провести проверку файловой системы каждый раз, когда пользователю нужно "по быстрому" запустить систему. Ext3 помнит: и сколько месяцев прошло, и сколько раз система была запущена с момента последней проверки e2fsck. Когда один из лимитов достигнут, система запускает принудительную проверку. Если ваш компьютер запускается часто, то можно без опаски увеличить эти лимиты при помощи команды:

tune2fs -c 100 -i 180

Что означает 100 месяцев, или 180 запусков системы между проверками e2fsck (при ежедневном запуске компьютера это составит примерно полгода). Нулевое значение совершенно отключает автоматическую проверку. Хотя советы не делать этого слышны по всему Интернету, они в большой степени потеряли актуальность - дефекты диска скорее выявит программа smartmontools, которая напрямую проверяет состояние дисков, а также выявляет проблемы с памятью или чипсетом раньше, чем выявятся повреждение структуры Ext3.


Последующие части: 3456.