На прошлогодней выставке LinuxExpo компания SGI объявила о передаче своей технологии файловой системы с протоколированием XFS сообществу сторонников свободно распространяемых программ.
Данная файловая система долгое время оставалась одной из наиболее совершенных реализаций файловых систем для UNIX, решающих одну из основных проблем, ограничивавших распространение Linux в критически важных средах - отсутствие файловой системы с ведением журнала. Кроме того, XFS поддерживает все 64-разрядные функции для работы с файлами, что позволит масштабировать Linux для поддержки файловой системы, содержащей 18 млн. Тбайт данных и файлов размером до 9 млн. Тбайт. Данный шаг оказал существенное влияние на будущее Linux как платформы для приложений уровня предприятия. Любопытно посмотреть, как вообще в UNIX организована работа с большими файлами.
Файловая система XFS
Необходимость в масштабировании ОС и файловых систем возникла в конце 80-х, когда емкость дисков начала приближаться к 2 Гбайт - пределу существовавших тогда файловых систем и стало ясно, что в скором времени пользователям понадобятся новые системы, способные работать с большими файлами (таблица 1). Первыми на этот призыв откликнулись SGI и Digital Equipment, компании наиболее близко стоявшие тогда к корпоративным пользователям.
При создании файловой системы следующего тысячелетия, разработчики SGI стремились решить ряд базовых вопросов архитектуры, способных гарантировать масштабируемость и отказоустойчивость при работе большим числом файлов практически неограниченного размера. В результате появилась масштабируемая система XFS, которая не имела себе равных в управлении большими файлами и каталогами, содержащими огромное число файлов. XFS обеспечивает высокую надежность и быстрое восстановление после сбоев без снижения производительности. Коротко говоря, заполучив в свой арсенал эту файловую систему, Linux значительно увеличит потенциал. Технология XFS предоставляет Linux ряд преимуществ.
Масштабируемость. XFS может масштабироваться для удовлетворения требований к объему хранения и скорости операций ввода/вывода при доступе к памяти. Изначально XFS проектировалась для очень высоких уровней производительности, так что потоки свыше 300 Мбайт/с были продемонстрированы еще на системах CHALLENGE. Обычно, традиционные файлы, каталоги и файловые системы по мере роста обычно снижают производительность системы - файловая система XFS была спроектирована таким образом, что ее производительность не зависит от ее размера. Например, неизменная производительность была показана в тестах на XFS-каталогах емкостью до 32 миллионов файлов.
Поддержка больших файловых систем и больших файлов. XFS дает возможность управлять файловыми системами и отдельными файлами размером до 1 эксабайт (1018), то есть в миллионы раз больше, чем самые крупные из современных файловых систем. При этом обеспечивается совместимость с популярными 64-разрядными платформами. Например, версия от SGI сетевой файловой системы NFS 5.3 позволяет экспортировать 64-разрядные файловые системы в другие типы файловых систем. Можно использовать поставляемый с XFS интерфейс для работы с 32-разрядными программами, которые в результате могут работать с 64-разрядными позициями и размерами файлов. Используя комбинацию NFS и XFS можно плавно преодолеть ограничения 32-разрядных систем, а все существующее программное обеспечение будет работать без перекомпиляции с XFS-файлами размером до 2 Гбайт. Однако, для работы с файлами большего размера могут потребоваться некоторые изменения.
XFS позволяет создавать файловые системы с размером блока от 512 байт до 1 Мбайт. Пользователь может задавать конфигурацию экстентов (непрерывных данных) файла в момент его создания, за счет чего обеспечивается непрерывность записи данных на диск и увеличение скорости операций ввода/вывода. Как результат, нет задержек при доступе данных за счет перехода от одного экстента файла к другому. Максимальный размер одного экстента может достигать 1 Тбайт.
Управление большими каталогами с большим числом файлов. По мере роста размеров файловых систем, старый способ поиска файлов, предусматривающий линейный перебор, выполняется настолько медленно, что оказывается практически бесполезным. Для решения этой задачи в XFS включены большие каталоги, позволяющие динамически резервировать индексное пространство для файлов.
Программа управления томами XFS (менеджер XLV) является надстройкой над программой-менеджером логических томов и поддерживает стандартный набор операций для дискового массива RAID (striping, concatenation, mirroring). XLV «умеет» поддерживать «зеркальное» отображение корневого раздела (root partition). Кроме этого, XLV поддерживает «на лету» динамические изменения параметров томов, включая изменения размера монтированной файловой системы. XLV может использовать разделы диска для хранения разных типов файловых систем (XFS и EFS), а утилиты обеспечивают конвертирование логических томов без необходимости операций дампирования и восстановления данных.
Производительность на операциях ввода/вывода. Современные серверы используют большие распределенные дисковые массивы, способные обеспечивать совокупную полосу пропускания в сотни мегабайт в секунду. Ключевым моментом оптимизации производительности при работе с такими массивами становится требуемая мощность систем ввода/вывода и требуемая степень параллелизма операций ввода/вывода. Система XFS обеспечивает «гарантированную скорость операций ввода/вывода, что позволяет приложениям резервировать заданную пропускную способность файловой системы на ввод или вывод данных. Файловая система может определять наличную «пропускную способность» и гарантировать, что запрошенный уровень производительности может быть достигнут в заданное время. Это освобождает программистов от необходимости предсказывать производительность проектируемой системы, что особенно важно для таких систем, как пересылка видео по запросу или ввод данных.
Восстановление после сбоя. XFS может восстанавливаться после самых неожиданных сбоев менее чем за секунду, вне зависимости от того, сколько файлов в данный момент находилось в работе. Традиционные файловые системы должны выполнять специальные проверки после прерывания, на что уходит порой несколько часов. Возможности протоколирования XFS позволяют отказаться от проведения таких длительных проверок и, кроме того, значительно сокращают время чтения и записи на диск.
Для обеспечения надежности и высокой скорости восстановления файловой системы XFS использует технологию ведения журнальной базы данных, за счет которой восстановление файловой системы после краха системы происходит за несколько секунд без использования специальных программ типа FSCHK, часами работающей на больших системах. И что особенно важно, время восстановления XFS не зависит от размера файловой системы. Ведение журнала позволяет XFS использовать более эффективно структуру диска для запоминания информации о файловой структуре, списке экстентов файла, каталогах.
В отличие от традиционных файловых систем, которые должны быть предварительно размонтированы для гарантии целостности их дампа, для файловой системы XFS дамп может быть создан в процессе работы. Утилита XFSdump сохраняет образ всей файловой системы, дерева каталогов или отдельных файлов, допуская рестарт. Это позволяет создавать большие дампы в течении длительного периода времени или, например, продолжить работу после рестарта операционной системы. При этом учитываются все изменения, которые были внесены в архивируемые файлы с момента начала процедуры создания дампа.
Сегодня просто необходимо реализовать в Linux файловую технологию, позволяющую реализовывать корпоративные решения по хранению информации. Например, компания Caldera Systems постоянно получает от корпоративных потребителей запросы на подобные решения, особенно от компаний, работающих с графикой. Можно предположить, что подобное «вливание» в Linux значительно ускорит продвижение этой операционной системы на рынок больших корпоративных систем. По крайней мере, SGI сильно на это рассчитывает, если судить по тому, что в фирменных учебных центрах число предлагаемых курсов по Linux уже близко к числу курсов по собственной операционной системе IRIX.
Конкретная жизнь больших файлов на примере UnixWare
Сегодня считается дурным тоном не поддерживать в операционной системе работу с большими файлами, поэтому в описаниях Solaris, AIX и HP-UX также можно встретить указания на то, что эти системы работают с файлами до 1 Тбайт. Например, основная новая черта SCO UnixWare 7 - поддержка файлов размером почти 1 Тбайт (максимальный размер самой файловой системы установлен также на уровне 1 Тбайт).
Работа с большими файлами UnixWare возможна только в файловой системе vxfs, включаемой в момент создания файловой системы по команде
# mkfs .... -o largefiles
Если нет уверенности в том, какого типа файловая система была создана, то можно для исследования этого вопроса использовать команду
mkfs «-m»
Будет возвращена командная строка, которая использовалась для создания файловой системы. Аналогичным способом можно проверить, какая файловая система была создана при инсталляции операционной системы, например:
# mkfs -F vxf -m
Если вы не использовали команду mkfs с флагом «о» или хотите модифицировать файловую систему позднее (система в этот момент должна быть размонтирована), используйте, например, команду:
# fsadm -F vxfs -o largefiles dev/rdsk/c0b0t0d0s1
Для работы с монтированной системой в дополнение к команде fsadm нужна специальная лицензия на использование расширенных возможностей (Advanced Feature License). Если же у вас такой лицензии нет, использование упомянутой команды вызывает сообщение, что данная опция поддерживается на версии 3 или более поздней.
Установив в системе параметр «largefiles», можно приступать к работе с большими файлами. Для этого можно воспользоваться специальным API-интерфейсом, не забыв включить соответствующие описания в тексты программ. Чтобы найти функции, не имеющие соответствующих деклараций, можно скомпилировать программу с флагом «-v»:
cc -v ....prog.c
Если все декларации сделаны правильно, надо скомпилировать приложение с опцией, позволяющей переопределить некоторые функции ввода/вывода для работы с 64-разрядным интерфейсом вместо 32-разрядного, используемого по умолчанию:
cc ...-D _FILE_OFFSET_BITS=64 ...
Следует отметить, что дескрипторы файлов (например, stdin, stderr и stdout), наследуемые из родительских процессов, должны быть открыты для работы с большими файлами.
При разработке приложений с поддержкой больших файлов важно избежать некоторых потенциальных ловушек. Например, если в исходном коде используется описание смещений адресов (offset) как переменных целочисленного типа (int), то эти переменные могут «переполниться» при работе с 64-разрядными адресами.
Другие, менее очевидные, ограничения могут возникать при работе со следующими конструкциями:
unsigned long l; unsigned long long ll; int ss=10; ll = (l << ss);
Результатом операции (l << ss) являются старшие биты, которые будут отброшены, так как результат операции перед тем, как он будет присвоен переменной ll, сначала запоминается во временной 32-разрядной переменной. Данная проблема может быть решена следующим путем:
ll = ((unsigned long long)l << ss);
Строка ll = (unsigned long long)(l << ss) не дает корректного решения, так как результат операции (l << ss) все еще запоминается во временной 32-разрядной переменной.
Можно также использовать флаг O_LARGEFILE при вызове функции open(), что обеспечит 64-разрядный доступ к файлу. Альтернативным решением является прямой вызов API-интерфейса, поддерживающего работу с большими файлами, вместо того, чтобы возлагать переименование функций на _FILE_OFFSET_BITS (подробную информацию можно получить по команде #man -k 64).
Ограничения на размер файла отменяются из командной строки
ulimit -f unlimited,
хотя ksh будет сообщать о размере файла в 4194303 байт. Ограничения на размер файла могут быть проверены по команде
ulimit -f
или
getrlimit().
Чтобы работать с большими файловыми системами не требуется дополнительной настройки ядра операционной системы - внутренний параметр VXFS управляет поддержкой больших файлов. Существуют ограничения на размеры файла для пользователя, устанавливаемые командой idtune(). Если параметры SFSZLIM и HFSZLIM установлены на максимальное значение (0x7FFFFFFF, определяемое также как RLIM_INFINITY), пользователю разрешается создавать большие файлы. В противном случае, большие файлы может создавать только привилегированный пользователь (superuser).
Суммируя сказанное, можно определить набор действий, необходимых для работы с большими файлами.
1. Установить для файловой системы (например, vxfs) опции работы с большими файлами.
2. Установить ограничение на размер файла ulimit, указав параметр «бесконечность» (infinity).
3. Использовать 64-разрядные API-интерфейсы либо задавая _FILE_OFFSET_BITS=64, либо вызывая 64-разрядные функции, например open64().
Об авторе
Анатолий Ракалин — независимый автор. С ним можно связаться по электронной почте по адресу: rtolik@yahoo.com
Годы | Файловая система |
Начало 70-х | Файловая система Version 7 |
Начало 1980-х | "Быстрая" файловая система FFS (Berkeley) |
Середина 80-х | Ранние журнальные файловые системы (Veritas/Tolerant/IBM JFS) |
Середина 90-х | XFS |
Самый простой способ сгенерировать большой файл в UnixWare
Имеются специальные программы для генерации файлов любого размера:
/dev/zero - генерирует файл, содержащий одни нули.
/dev/byte/hex/ff - генерирует файл, содержащий одни единицы.
Для создания файла используется команда:
dd if=/dev/ of=// bs=1024k count=
где
- имя одной из перечисленных программ генерации файлов.
// - имя создаваемого файла.
- размер файла в мегабайтах.
Например, 250-мегабайтный файл из одних единиц с именем bigfile.ff может быть создан по команде:
dd if=/dev/byte/hex/ff of=/tmp/bigfile.ff
bs=1024k count=250
Спецификация файловой системы XFS
Технология поддержки файловой системы - журнальная 64-разрядная.
Максимальный размер файла - 9,223,372,036,854, 775,807 байт (9 млн. Тбайт).
Максимальный размер файловой системы - 18 млн. Тбайт.
Размер блока - выбирается в момент создания файловой системы (с помощью команды mkfs_512) и может составлять от 512 до 64 Кбайт для обычных данных и до 1 Мбайт для данных в системах реального времени. Экстенты файловой системы могут конфигурироваться во время создания файла и кратны размеру блока файловой системы. Размер физического сектора на диске поддерживается с учетом совместимости с 512-байтными секторами NFS. 64-разрядные файловые системы могут быть экспортированы в другие системы, поддерживающие протокол NFS V3. Системы с протоколом NFS V2 могут получать доступ к XFS-файлам внутри 32-разрядных ограничений поддерживаемого протокола.
Резервное копирование/восстановление - утилиты Dump/restore, bru, cpio, tar; IRIS NetWorker для IRIX.
Совместимость дампов - можно восстанавливать как дампы XFS, так и дампы EFS с преобразованием типа файловой системы. Может быть создан дамп активной файловой системы XFS с учетом произошедших в ней изменений в процессе создания резервной копии. Поддерживается параллельное выполнение операций создания резервных копий и восстановления.
Поддержка иерархической памяти - интерфейс DMIG (Data Management API) позволяет применять программное обеспечение управления иерархическими системами хранения данных без модификации ядра системы.
Файлы подкачки (Swap) - поддерживаются.
Гарантированная скорость операций ввода/вывода - на аппаратном (при отключении самодиагностики дисков) и программном уровнях.
Производительность - более высокая по сравнению с EFS (свыше 500 Мбайт/с).
Дополнительные возможности - XFS обеспечивает гарантированную скорость операций ввода/вывода для четырех потоков и выше.
Файлы небольшого объема могут размещаться непосредственно в информационных узлах (inode), не занимая дополнительного пространства на диске.
Команды XFS:
- xfs_estimate - оценка объема дискового пространства, необходимого для размещения файловой системы XFS, в которую требуется преобразовать существующую файловую систему EFS;
- mkfs, mkfs_xfs - создание файловой системы XFS;
- xfs_check - проверка состояния файловой системы XFS;
- xfs_growfs - расширение существующей файловой системы XFS;
- xfsdump - дампирование файловой системы;
- xfsrestore восстановление файловой системы из дампа.
Файл-менеджер логических томов XLV
Поддерживаемая топология - запись с чередованием (stripping), зеркальное дублирование (mirroring), слияние физических томов (concatenation). Каждый том может состоять из трех подтомов: тома реального времени, тома журнала, тома данных. Для обеспечения максимальной производительности журнал файловой системы может храниться в одном разделе (partition), а сама файловая система XFS - в другом.
Максимальное число дисков на файловую систему - каждый том может иметь до четырех независимых зеркальных копий, при записи с чередованиями для обеспечения наивысшей производительности может использоваться до 128 томов, можно объединять в один логический том до 128 томов-экстентов. Другие ограничения могут быть обусловлены аппаратными возможностями оборудования.
Корневой раздел (root partition) может также иметь зеркальную копию. Запись с чередованием и объединение томов для ранних реализаций XLV не поддерживаются. Для раздела /usr и всех других, кроме корневого, такого ограничения нет.
Динамическое изменение - добавление или удаление зеркальной копии, увеличение размера тома, замена сбойного сегмента на зеркальной копии.
Специфика XLV - зеркальные копии томов, запись с чередованием и логическое объединение томов поддерживаются базовым программным обеспечением.
Команды XLV:
- lv_make - создание нового логического тома, приписывая метки логического тома входящим в него устройствам;
- lv_to_xlv - грамматический разбор файла, описывающего логические тома, используемые локальными машинами, генерация необходимых команд;
- xlv_assemble - сканирование всех дисков локальной системы с целью поиска меток логических томов и сбора всех логических томов для генерации новой конфигурации структуры данных;
- xlv_labd - установка логических томов для дисков;
- xlv_plexed - создание «зеркальных» томов;
- xlvd - обработка ввода/вывода на «зеркальных томах и выполнение восстановления данных в случае возникновения ошибок;
- xlv_admin - модификация объектов файловой системы XLV (тома, «зеркальные» копии, элементы томов, метки логических дисков XLV).
Ограничения
- Чувствительность к аппаратным ошибкам при работе без использования зеркальных копий.
- Еще не реализовано квотирование дисков - индивидуальных ограничений для пользователя на дисковое пространство.
Установка XFS
- Установить операционную систему с поддержкой XFS, сделать дампы всех существующих файловых систем.
- Назначить зеркальные тома XFS, выбрать размеры блоков, выбрать размер и тип журнала XFS.
- Выполнить проверки на наличие адекватного свободного пространства на физических носителях.
- Выполнить разбиение дисков на разделы.
- Создать новую файловую систему XFS с использованием команды
- mkfs_xfs.
- Восстановить необходимые данные из дампа с преобразованием их в файловые системы XFS.
- Перезагрузить компьютер и получить удовольствие от работы с XFS.