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


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

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

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

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

Блокировка клонирования в 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 24H2 и Windows Server 2025, блочное клонирование происходит изначально в поддерживаемых операциях копирования Windows.

См. также