Блокировка клонирования в ReFS

Область применения: Windows Server 2022, Windows Server 2019, Windows Server 2016

Блокировка клонирования указывает файловой системе копировать диапазон байтов файлов от имени приложения, где целевой файл может совпадать с исходным файлом или отличаться от него. Операции копирования, к сожалению, являются дорогостоящими, так как они активируют дорогостоящие операции чтения и записи в базовые физические данные.

Однако блокировка клонирования в ReFS выполняет копии в виде низкой стоимости операции метаданных, а не считывания из файловых данных и записи из нее. Так как ReFS позволяет нескольким файлам совместно использовать одни и те же логические кластеры (физические расположения на томе), операции копирования должны перенаставить область файла в отдельное физическое расположение, преобразовав дорогостоящую, физическую операцию в быструю, логическую. Это позволяет выполнять копии быстрее и создавать меньше операций ввода-вывода в базовое хранилище. Это улучшение также обеспечивает рабочие нагрузки виртуализации, так как операции слияния vhdx проверка point значительно ускоряются при использовании операций клонирования блоков. Кроме того, так как несколько файлов могут совместно использовать одни и те же логические кластеры, идентичные данные не хранятся физически несколько раз, что повышает емкость хранилища.

Как это работает

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

Show reference count updates when multiple files reference same region

Сохраняя количество ссылок для каждого логического кластера, ReFS не прерывает изоляцию между файлами: записи в общие регионы активируют механизм выделения по записи, где ReFS выделяет новый регион для входящей записи. Этот механизм сохраняет целостность общих логических кластеров.

Пример

Предположим, что существует два файла, X и Y, где каждый файл состоит из трех регионов, а каждый регион сопоставляется с отдельными логическими кластерами.

Two files each with three distinct regions which all map to regions that have ref count 1

Теперь предположим, что приложение выдает операцию клонирования блока из File X в File Y, чтобы регионы A и B были скопированы в смещение региона E. Следующее состояние файловой системы приведет к следующему:

Reference count shows 2 for blocked clone region

Это состояние файловой системы показывает успешное дублирование клонированного региона блока. Так как ReFS выполняет эту операцию копирования, обновляя только сопоставления VCN до LCN, физические данные не считывались, ни физические данные в файле Y перезаписаны. Файл X и Y теперь используют логические кластеры, отраженные счетчиками ссылок в таблице. Так как данные не были физически скопированы, ReFS снижает потребление емкости на томе.

Теперь предположим, что приложение пытается перезаписать регион A в файле X. ReFS будет дублировать общий регион, обновлять счетчики ссылок соответствующим образом и выполнять входящий запись в вновь повторяющийся регион. Это гарантирует сохранение изоляции между файлами.

Isolation preserved by writing to a new region G and updating ref counts

После изменения записи регион B по-прежнему предоставляется обоими файлами. Обратите внимание, что если регион A был больше кластера, только измененный кластер будет дублирован, а оставшаяся часть останется общей.

Ограничения функций и примечания

  • Исходный и целевой регион должны начинаться и заканчиваться границами кластера.
  • Клонированные области должны быть меньше 4 ГБ длины.
  • Максимальное количество регионов файлов, которые могут сопоставляться с тем же физическим регионом, равно 8175.
  • Целевой регион не должен расширяться до конца файла. Если приложение хочет расширить назначение с клонированных данными, он должен сначала вызвать SetEndOfFile.
  • Если исходные и целевые регионы находятся в одном файле, они не должны перекрываться. (Приложение может продолжить, разделив операцию клонирования блока на несколько клонов блоков, которые больше не перекрываются).
  • Исходные и целевые файлы должны находиться в одном томе ReFS.
  • Исходные и целевые файлы должны иметь одинаковые параметры целостности Потоки.
  • Если исходный файл разрежен, целевой файл также должен быть разрежен.
  • Операция клонирования блока разорвит общие оппортунистические блокировки (также известные как блокировки уровня 2).
  • Том ReFS должен быть отформатирован с помощью Windows Server 2016, и если кластеризация отработки отказа используется, уровень функциональной кластеризации должен быть Windows Server 2016 или более поздней версии во время форматирования.

Дополнительные справочники