Поделиться через


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

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

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

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

Принцип работы

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

Отображение обновлений счетчика ссылок, когда несколько файлов ссылались на один регион

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

Пример

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

Два файла с тремя отдельными регионами, которые сопоставляются с регионами, имеющими число ссылок 1

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

Счетчик ссылок показывает 2 для заблокированной области клонирования

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

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

Изоляция, сохраненная путем записи в новый регион G и обновление счетчиков ссылок

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

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

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

См. также