Не так давно вышла публичная бета-версия Microsoft Windows 8 Server с поддержкой анонсированной файловой системы ReFS (Resilient File System — отказоустойчивая файловая система), ранее известной под кодовым названием “Protogon”. Данная файловая система предлагается как альтернатива зарекомендовавшей себя годами файловой системе NTFS в сегменте систем хранения данных на базе продуктов Microsoft, с дальнейшей ее миграцией в область клиентских систем. Целью данной статьи является поверхностное описание структуры файловой системы, ее преимуществ и недостатков, а также анализ ее архитектуры с точки зрения сохранения целостности данных и перспектив восстановления данных, в случае повреждения или удаления пользователем. Статья также раскрывает исследование архитектурных особенностей файловой системы и ее потенциальную производительность. Windows Server 8 Beta Вариант файловой системы, доступный в данной версии операционной системы, имеет поддержку кластеров данных размером только 64КБ и кластеров метаданных размером 16КБ. Пока не ясно, будет ли поддержка файловых систем ReFS с другим размером кластера: в настоящее время параметр «Размер кластера» при создании тома ReFS игнорируется и всегда принимается умалчиваемым. При форматировании ФС единственным доступным вариантом для выбора размера кластера является 64КБ. Он также является единственным упоминаемым в блогах разработчиков. Такой размер кластера является более чем достаточным для организации файловых систем любого размера из практически реализуемых, но в то же время приводит к ощутимой избыточности при хранении данных. Архитектура файловой системы Несмотря на частые упоминания о схожести ReFS и NTFS на высоком уровне, речь идет всего лишь о совместимости некоторых структур метаданных, как-то: «стандартная информация», «имя файла», совместимость по значениям некоторых флагов атрибутов и т.д. Дисковая реализация структур ReFS кардинально отличается от других файловых систем Microsoft. Основными структурными элементами новой файловой системы являются B+-деревья.
Все элементы структуры файловой системы представлены одноуровневыми (списками) или многоуровневыми B+-деревьями, что позволяет значительно масштабировать практически любой из элементов файловой системы. Наряду с реальной 64-битной нумерацией всех элементов системы это исключает появление “узких мест” при дальнейшем ее масштабировании.Кроме корневой записи B+-дерева, все остальные записи имеют размер целого блока метаданных (в данном случае - 16КБ); промежуточные же (адресные) ноды имеют небольшой полный размер (порядка 60 байт). Поэтому, обычно, требуется небольшое количество уровней дерева для описания даже очень крупных структур, что достаточно благоприятно сказывается на общей производительности системы. Основным структурным элементом файловой системы является «Каталог», представленный в виде B+-дерева, ключом в котором является номер объекта-папки. В отличие от других подобных файловых систем, файл в ReFS не является отдельным ключевым элементом «Каталога», а лишь существует в виде записи в содержащей его папке. Возможно, именно ввиду этой архитектурной особенности жесткие ссылки на ReFS не поддерживаются. «Листьями Каталога» являются типизированные записи. Для объекта-папки существуют три основных типа записей: описатель каталога, индексная запись и описатель вложенного объекта. Все такие записи упакованы в виде отдельного B+-дерева, имеющего идентификатор папки; корень этого дерева является листом B+-дерева «Каталога», что позволяет упаковать в папку практически любое количество записей. На нижнем уровне в листах B+-дерева папки находится в первую очередь запись описателя каталога, содержащая основные сведенья о папке (как-то: имя, «стандартная информация», атрибут имени файла и т.д.). Структуры данных имеют много общего с принятыми в NTFS, хотя и имеют ряд отличий, основным из которых является отсутствие типизированного списка именованных атрибутов. Далее в каталоге следуют так называемые индексные записи: короткие структуры, содержащие данные об элементах, содержащихся в папке. По сравнению с NTFS эти записи значительно короче, что в меньшей степени перегружает том метаданными. Последними следуют записи элементов каталога. Для папок эти элементы содержат имя паки, идентификатор папки в «Каталоге» и структуру «стандартной информации». Для файлов идентификатор отсутствует, но вместо этого структура содержит все основные данные о файле, включая корень B+-дерева фрагментов файла. Соответственно, файл может состоять практически из любого числа фрагментов. На диске файлы располагаются в блоках размером 64КБ, хотя адресуются точно так же, как и блоки метаданных (кластерами размером 16КБ). «Резидентность» данных файла на ReFS не поддерживается, поэтому файл размером 1 байт на диске займет целый блок 64КБ, что ведет к значительной избыточности хранения на мелких файлах; с другой стороны это упрощает управление свободным пространством и выделение свободного места под новый файл осуществляется значительно быстрее. Размер метаданных пустой файловой системы составляет порядка 0.1% от размера самой файловой системы (т.е. около 2ГБ на том 2ТБ). Некоторые основные метаданные дублируются для лучшей устойчивости от сбоев. Архитектурно загрузка с разделов ReFS возможна, но в данной редакции Windows Server она не реализована. Защищенность от сбоев Цели проверить стабильность существующей реализации ReFS не стояло. С точки зрения же архитектуры файловой системы она обладает всеми необходимыми инструментами для безопасного восстановления файлов даже после серьезного сбоя оборудования. Части структур метаданных содержат собственные идентификаторы, что позволяет проверить принадлежность структур; ссылки на метаданные содержат 64-бит контрольные суммы блоков, на которые производится ссылка, что позволяет оценить целостность прочитанного по ссылке блока. При этом стоит отметить, что контрольные суммы пользовательских данных (содержимого файлов) не подсчитываются. С одной стороны это отключает механизм проверки целостности в области данных, с другой же стороны это ускоряет работу системы за счет минимального количества изменений в области метаданных. Любое изменение структуры метаданных осуществляется в два этапа: сначала создается новая (измененная) копия метаданных в свободном дисковом пространстве, потом, в случае успеха, атомарной операцией обновления производится перевод ссылки со старой (неизмененной) на новую (измененную) область метаданных. Такая стратегия (Copy-on-Write (CoW) -копирование-при-записи) позволяет обойтись без журналирования, сохраняя автоматически целостность данных.
Подтверждение таких изменений на диске может не осуществляться достаточно долго, позволяя объединить несколько изменений состояния ФС в одно. Данная схема не применяется для пользовательских данных, поэтому любые изменения содержимого файла пишутся непосредственно в файл. Удаление файла производится перестроением структуры метаданных (с использованием CoW), что сохраняет предыдущую версию блока метаданных на диске. Это делает восстановление удаленных файлов возможным до их перезаписи новыми пользовательскими данными. Избыточность хранения данных В данном случае речь идет о расходовании дискового пространства за счет схемы хранения данных. Для целей тестирования установленный Windows Server был скопирован на раздел ReFS размером 580ГБ. Размер метаданных на пустой ФС составлял около 0.73ГБ. При копировании установленного Windows Server на раздел с ReFS избыточность хранения данных файлов выросла с 0.1% на NTFS почти до 30% на ReFS. При этом еще около 10% избыточности добавилось за счет метаданных. В итоге «пользовательские данные» размером 11ГБ (более 70 тыс. файлов) на NTFS с учетом метаданных заняли 11.3ГБ, тогда как на ReFS те же данные заняли 16.2ГБ; это означает, что избыточность хранения данных на ReFS составляет почти 50% для этого типа данных. При небольшом количестве файлов большого размера такого эффекта, естественно, не наблюдается. Скорость работы Ввиду того, что речь идет о Beta, замеров производительности ФС не проводилось. С точки же зрения архитектуры ФС можно сделать кое-какие выводы. При копировании более 70 тыс. файлов на ReFS, это создало B+-дерево «Каталога» размером в 4 уровня: «корень», промежуточный уровень 1, промежуточный уровень 2, «листья». Таким образом, для поиска атрибутов папки (при условии кэширования корня дерева) требуется 3 чтения блоков по 16КБ. Для сравнения, на NTFS эта операция займет одно чтение размером 1-4КБ (при условии кэширования карты расположения $MFT). Поиск атрибутов файла по папке и имени файла в папке (небольшая папка в несколько записей) на ReFS потребует те же 3 чтения. На NTFS же уже потребуется 2 чтения по 1КБ или 3-4 чтения (если запись о файле находится в нерезидентном атрибуте «индекс»). В паках большего размера количество чтений NTFS растет намного быстрее, чем количество чтений, требуемых для ReFS. Точно так же дела обстоят и для содержимого файлов: там, где рост числа фрагментов файла на NTFS приводит к перебору длинных списков, разнесенных по разным фрагментам $MFT, на ReFS это осуществляется эффективным поиском по B+-дереву. Выводы Окончательные выводы пока делать рано, но по текущей реализации файловой системы можно видеть подтверждение изначальной ориентированности файловой системы на серверный сегмент, и, прежде всего, на системы виртуализации, СУБД и сервера архивного хранения данных, где скорость и надежность работы имеют первостепенное значение. Основной недостаток файловой системы, такой как неэффективная упаковка данных на диске, сводится на нет на системах, оперирующих большими файлами. СисДев Лабораториз будет следить за развитием данной файловой системы и планирует включение поддержки восстановления данных с этой файловой системы. Экспериментальная поддержка ReFS бета-версии Microsoft Windows 8 Server уже успешно реализована в продуктах UFS Explorer и доступна для закрытого бета-тестирования среди партнеров. Официальный релиз инструментов для восстановления удаленных файлов с ReFS, а также восстановления данных после повреждения файловой системы в результате сбоев оборудования, планируется чуть ранее или одновременно с выходом релиза Microsoft Windows 8 Server с поддержкой ReFS.
|