Блокировка клонирования
Операция клонирования блока указывает файловой системе копировать диапазон байтов файлов от имени приложения. Целевой файл может совпадать с исходным файлом или отличаться от нее.
Файловая система управляет сопоставлениями кластеров и экстентов и может выполнять копирование, изменив номер виртуального кластера (VCN) на логические сопоставления номеров кластера (LCN), а не чтение и запись базовых данных файлов. Это позволяет копировать быстрее и создает меньше операций ввода-вывода в базовое хранилище. Кроме того, несколько файлов теперь могут совместно использовать логические кластеры после клонирования блока, сохраняя емкость, не сохраняя одинаковые кластеры несколько раз на диске.
Операция клонирования блока не нарушает изоляцию, предоставляемую между файлами. После завершения клона блока запись в исходный файл не отображается в назначении или наоборот.
Блокировка клонирования доступна только в типе файловой системы ReFS, начиная с Windows Server 2016. Начиная с обновления Windows 11 Moment 5 (KB5034848) и более поздних выпусков сборок клиента Windows и Windows Server, блокировка клонирования происходит изначально в поддерживаемых операциях копирования Windows.
Блокировка клонирования в ReFS
ReFS в Windows Server 2016 реализует клонирование блоков путем повторного сопоставления логических кластеров (то есть физических расположений на томе) из исходного региона в целевой регион. Затем он использует механизм выделения по записи для обеспечения изоляции между этими регионами. Исходные и целевые регионы могут находиться в одном или другом файле.
Эта реализация требует выравнивания смещения начального и конечного файлов с границами кластера. В ReFS в Windows Server 2016 кластеры размером 4 КБ по умолчанию, но при необходимости можно задать значение 64 КБ. Размер кластера — это набор параметров на уровне томов во время форматирования.
Ограничения и примечания
- Исходные и целевые регионы должны начинаться и заканчиваться границами кластера.
- Клонированные области должны быть меньше 4 ГБ длины.
- Целевой регион не должен расширяться до конца файла. Если приложение хочет расширить назначение с клонированных данными, он должен сначала вызвать SetEndOfFile.
- Если исходные и целевые регионы находятся в одном файле, они не должны перекрываться. (Приложение может продолжить, разделив операцию клонирования блока на несколько клонов блоков, которые больше не перекрываются.)
- Исходные и целевые файлы должны находиться в одном томе ReFS.
- Исходные и целевые файлы должны иметь одинаковый параметр "Потоки целостности" (т. е. потоки целостности должны быть включены в обоих файлах или отключены в обоих файлах).
- Если исходный файл разрежен, целевой файл также должен быть разрежен.
- Операция клонирования блока разорвит общие оппортунистические блокировки (также известные как блокировки уровня 2).
- Том ReFS должен быть отформатирован с помощью Windows Server 2016 и если отказоустойчивая кластеризация Windows используется, уровень функциональности кластеризации должен быть Windows Server 2016 или более поздней версии во время форматирования.
Пример
Предположим, у нас есть два файла X и Y, где каждый файл состоит из 3 разных регионов. Каждый регион файла хранится в отдельной области тома. Файловая система сохраняет знания, на которые ссылается каждый из этих регионов томов в одном файловом регионе:
Теперь предположим, что приложение выдает операцию клонирования блока из File X, по регионам файлов A и B, в файл Y в смещение, где сейчас находится E. Следующее состояние файловой системы приведет к следующему:
Данные в регионах A и B были фактически дублируются из File X в File Y путем изменения сопоставления VCN в LCN в томе ReFS. Экстенты резервного копирования областей A и B не были считываны, а также экстенты диска, поддерживаемые старыми регионами E и F, перезаписаны во время операции.
Файлы X и Y теперь совместно используют логические кластеры на диске. Это отражается в счетчиках ссылок, показанных в таблице. Общий доступ приводит к снижению потребления емкости тома, чем если регионы A и B дублируются на базовом томе.
Теперь предположим, что приложение перезаписывает регион A в файле X. ReFS создает дубликат копии A, которая теперь вызывает G. ReFS, а затем сопоставляет G с File X и применяет изменение. Это гарантирует сохранение изоляции между файлами. Счетчики ссылок обновляются соответствующим образом:
После изменения записи регион B по-прежнему предоставляется на диске. Обратите внимание, что если регион A был больше кластера, только измененный кластер будет дублирован, а оставшаяся часть останется общей.