ReFS에서 복제 차단

적용 대상: Windows Server 2022, Windows Server 2019, Windows Server 2016

블록 복제는 대상 파일이 원본 파일과 같거나 다를 수 있는 애플리케이션을 대신하여 파일 바이트 범위를 복사하도록 파일 시스템에 지시합니다. 복사 작업은 비용이 많이 드는 읽기 및 쓰기를 기본 물리적 데이터에 트리거하기 때문에 비용이 많이 듭니다.

그러나 ReFS에서 복제 차단은 파일 데이터를 읽고 쓰는 대신 저렴한 메타데이터 작업으로 복사본을 수행합니다. ReFS를 사용하면 여러 파일이 동일한 논리 클러스터(볼륨의 물리적 위치)를 공유할 수 있으므로 복사 작업은 파일 영역을 별도의 물리적 위치에 다시 매핑하여 비용이 많이 드는 물리적 작업을 빠르고 논리적인 위치로 변환하기만 하면 됩니다. 이렇게 하면 복사본을 더 빠르게 완료하고 기본 스토리지에 대한 I/O를 더 적게 생성할 수 있습니다. 이 향상된 기능은 블록 복제 작업을 사용할 때 .vhdx 검사포인트 병합 작업이 크게 가속화되기 때문에 가상화 워크로드에도 도움이 됩니다. 또한 여러 파일이 동일한 논리 클러스터를 공유할 수 있으므로 동일한 데이터가 물리적으로 여러 번 저장되지 않아 스토리지 용량이 향상됩니다.

작동 원리

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

이제 애플리케이션이 지역 E의 오프셋에서 복사할 지역 A 및 B에 대해 파일 X에서 파일 Y로 블록 복제 작업을 실행한다고 가정합니다. 다음 파일 시스템 상태가 발생합니다.

Reference count shows 2 for blocked clone region

이 파일 시스템 상태는 복제된 블록 영역의 성공적인 복제를 표시합니다. ReFS는 VCN을 LCN 매핑으로만 업데이트하여 이 복사 작업을 수행하므로 실제 데이터를 읽지 않았으며 파일 Y의 실제 데이터를 덮어쓰지 않았습니다. 이제 파일 X와 Y는 테이블의 참조 수에 반영된 논리 클러스터를 공유합니다. 물리적으로 복사된 데이터가 없기 때문에 ReFS는 볼륨의 용량 소비를 줄입니다.

이제 애플리케이션이 파일 X에서 지역 A를 덮어쓰려고 시도한다고 가정합니다. ReFS는 공유 지역을 복제하고, 참조 수를 적절하게 업데이트하고, 새로 복제된 지역에 들어오는 쓰기를 수행합니다. 이렇게 하면 파일 간의 격리가 유지되고

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

쓰기를 수정한 후에도 지역 B는 여전히 두 파일에서 공유됩니다. 영역 A가 클러스터보다 큰 경우 수정된 클러스터만 중복되고 나머지 부분은 공유된 상태로 유지됩니다.

기능 제한 및 설명

  • 원본 및 대상 지역은 클러스터 경계에서 시작하고 끝나야 합니다.
  • 복제된 영역의 길이는 4GB 미만이어야 합니다.
  • 동일한 물리적 영역에 매핑할 수 있는 파일 영역의 최대 수는 8175입니다.
  • 대상 지역은 파일의 끝을 지나서 확장해서는 안됩니다. 애플리케이션이 복제된 데이터로 대상을 확장하려면 먼저 SetEndOfFile을 호출해야 합니다.
  • 원본 및 대상 영역이 동일한 파일에 있는 경우 겹치지 않아야 합니다. (애플리케이션은 블록 복제 작업을 더 이상 겹치지 않는 여러 블록 클론으로 분할하여 진행할 수 있습니다.)
  • 원본 및 대상 파일은 동일한 ReFS 볼륨에 있어야 합니다.
  • 원본 및 대상 파일에는 동일한 무결성 스트림 설정이 있어야 합니다.
  • 원본 파일이 스파스인 경우 대상 파일도 스파스여야 합니다.
  • 블록 복제 작업은 공유 기회 잠금(수준 2 기회 잠금으로 도 알려짐)을 중단합니다.
  • ReFS 볼륨은 Windows Server 2016으로 포맷되어 있어야 하며 장애 조치(failover) 클러스터링을 사용하는 경우 클러스터링 기능 수준은 형식 지정 시 Windows Server 2016 이상이어야 합니다.

추가 참조