Блокирование клонирования в ReFSBlock cloning on ReFS

Относится к: Windows Server 2019, Windows Server 2016, Windows Server (Semi-Annual Channel)Applies to: Windows Server 2019, Windows Server 2016, Windows Server (Semi-Annual Channel)

Клонирование блоков — это копирование диапазон байтов файла от имени приложения, при этом конечный файл может совпадать с исходным или нет.Block cloning instructs the file system to copy a range of file bytes on behalf of an application, where the destination file may be the same as, or different from, the source file. К сожалению, операции копирования являются дорогостоящими, поскольку они инициируют затратные операции чтения и записи физических данных.Copy operations, unfortunately, are expensive, since they trigger expensive read and writes to the underlying, physical data.

Однако при клонировании блоков в ReFS выполняется не требующая много ресурсов операция копирования метаданных вместо чтения и записи данных в файл.Block cloning in ReFS, however, performs copies as a low-cost metadata operation rather than reading from and writing to file data. Поскольку ReFS позволяет нескольким файлам совместно использовать одни логические кластеры (физические расположения на томе), операциям копирования достаточно просто изменить сопоставление области файла с отдельным физическим расположением, т. е. дорогостоящая физическая операция превращается в быструю логическую процедуру.Because ReFS enables multiple files to share the same logical clusters (physical locations on a volume), copy operations only need to remap a region of a file to a separate physical location, converting an expensive, physical operation to a quick, logical one. Это позволяет быстрее завершать копирование и инициировать меньше операций ввода-вывода в базовом хранилище.This allows copies to complete faster and generate less I/O to the underlying storage. Это улучшение также дает преимущества для рабочих нагрузок виртуализации, например операции слияния контрольной точки VHDX-файлов значительно ускоряются при использовании клонирования блоков.This improvement also benefits virtualization workloads, as .vhdx checkpoint merge operations are dramatically accelerated when using block clone operations. Кроме того, поскольку несколько файлов могут совместно использовать одни логические кластеры, одинаковые данные не хранятся физически несколько раз, что дает больше свободного места.Additionally, because multiple files can share the same logical clusters, identical data isn't physically stored multiple times, improving storage capacity.

Принцип работыHow it works

Клонирование блоков в ReFS позволяет превратить операцию с данными файла в обработку метаданных.Block cloning on ReFS converts a file data operation into a metadata operation. Для такой оптимизации в ReFS представлены счетчики ссылок в метаданных для скопированных регионов.In order to make this optimization, ReFS introduces reference counts into its metadata for copied regions. Такие счетчики записывают количество отдельных областей файлов, которые ссылаются на одни и те же физические области.This reference count records the number of distinct file regions that reference the same physical regions. Это позволяет нескольким файлам использовать одни физические данные:This allows multiple files to share the same physical data:

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

Сохраняя счетчик ссылок для каждого логического кластера, ReFS не разрывает изоляцию между файлами: операции записи в общие области инициируют механизм выделения при записи, когда ReFS выделяет новый регион для записи.By keeping a reference count for each logical cluster, ReFS doesn't break the isolation between files: writes to shared regions trigger an allocate-on-write mechanism, where ReFS allocates a new region for the incoming write. Этот механизм сохраняет целостность общих логических кластеров.This mechanism preserves the integrity of the shared logical clusters.

ПримерExample

Предположим, что существует два файла, X и Y, каждый из которых состоит из трех областей, а каждая область соответствует отдельным логическим кластерам.Suppose there are two files, X and Y, where each file is composed of three regions, and each region maps to separate logical clusters.

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

Теперь предположим, что приложение инициирует клонирование блоков из файла X в файл Y для копирования регионов A и B по смещению региона E. В результате файловая система перейдет в следующее состояние:Now suppose an application issues a block clone operation from File X to File Y, for regions A and B to be copied at the offset of region E. The following file system state would result:

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

Это состояние обозначает успешное дублирование области с клонированными блоками.This file system state reveals a successful duplication of the block cloned region. Так как ReFS выполняет эту операцию копирования, только изменяя сопоставления VCN до LCN, физические данные были прочитаны или перезаписаны в файле Y.Because ReFS performs this copy operation by only updating VCN to LCN mappings, no physical data was read, nor was the physical data in File Y overwritten. Файл X и Y теперь совместно используют логические кластеры, что отражают счетчики ссылок в таблице.File X and Y now share logical clusters, reflected by the reference counts in the table. Поскольку данные не копируются физически, ReFS сокращает используемый объем тома.Because no data was physically copied, ReFS reduces capacity consumption on the volume.

Теперь предположим, что приложение пытается перезаписать область A в файле X. ReFS дублирует общую область, соответствующим образом обновит счетчик ссылок и выполнит входящую операцию записи в дублированную область.Now suppose the application attempts to overwrite region A in File X. ReFS will duplicate the shared region, update the reference counts appropriately, and perform the incoming write to the newly duplicated region. Это сохраняет изоляцию между файлами.This ensures that isolation between the files is preserved.

Изоляция сохраняется за счет записи в новую область G и обновления счетчиков ссылок

После изменения записи область B по-прежнему используется обоими файлами.After the modifying write, region B is still shared by both files. Обратите внимание, что если область A больше кластера, только измененный кластер будет дублирован, а оставшееся часть останется общей.Note that if region A were larger than a cluster, only the modified cluster would have been duplicated, and the remaining portion would have remained shared.

Функциональные ограничения и примечанияFunctionality restrictions and remarks

  • Исходная и конечная область должны начинаться и заканчиваться на границе кластера.The source and destination region must begin and end at a cluster boundary.
  • Размер клонированной области должен быть меньше 4 ГБ.The cloned region must be less than 4GB in length.
  • Максимальное число областей файлов, которые можно сопоставить с одной физической областью — 8175.The maximum number of file regions that can map to the same physical region is 8175.
  • Конечная область не должна выходить за конец файла.The destination region must not extend past the end of the file. Если приложению необходимо расширить конечную область, добавив клонированные данные, необходимо сначала вызвать метод SetEndOfFile.If the application wishes to extend the destination with cloned data, it must first call SetEndOfFile.
  • Если исходная и конечная области находятся в одном файле, они не должны пересекаться.If the source and destination regions are in the same file, they must not overlap. (Приложение может продолжить работу, разделив операцию клонирования блоков на несколько клонов, которые не пересекаются.)(The application may be able to proceed by splitting up the block clone operation into multiple block clones that no longer overlap).
  • Исходный и конечный файлы должны размещаться на одном томе ReFS.The source and destination files must be on the same ReFS volume.
  • У исходного и конечного файла должен быть одинаковый параметр Потоки целостности.The source and destination files must have the same Integrity Streams setting.
  • Если исходный файл разреженные, конечный файл также должен быть разреженным.If the source file is sparse, the destination file must also be sparse.
  • Операция клонирования блоков нарушит общие уступающие блокировки (уступающие блокировки 2 уровня).The block clone operation will break Shared Opportunistic Locks (also know as Level 2 Opportunistic Locks).
  • Том ReFS должен быть отформатированы с помощью Windows Server 2016, а если используется отказоустойчивый кластер, то во время форматирования функциональным уровнем кластеризации должна быть Windows Server 2016 или более поздняя версия.The ReFS volume must have been formatted with Windows Server 2016, and if Failover Clustering is in use, the Clustering Functional Level must have been Windows Server 2016 or later at format time.

См. такжеSee also