Windows Storage 오프로드된 데이터 전송

Windows ODX(오프로드된 데이터 전송)는 서버 복사 및 이동 작업을 가속화하는 기능입니다. Windows Server 2012부터 사용할 수 있으며 NTFS 볼륨에서 지원됩니다.

이 문서에서는 스토리지 디바이스 관점에서 ODX에 대해 설명합니다. 파일 시스템 및 미니 필터와 관련된 자세한 내용은 오프로드된 데이터 전송을 참조 하세요.

개요

Windows ODX는 파일을 전송하는 동안 대량의 데이터를 복사하는 대신 스토리지 디바이스에서 데이터를 이동하는 토큰화된 작업을 도입했습니다. 원본 파일 및 대상 파일은 다음 위치 중 어느 위치에나 있을 수 있습니다.

  • 동일한 볼륨에서.
  • 동일한 컴퓨터가 호스트하는 두 개의 서로 다른 볼륨에서
  • 서버 메시지 블록을 통한 로컬 볼륨 및 원격 볼륨(SMB2 또는 SMB3).
  • SMB2 또는 SMB3을 통해 서로 다른 두 컴퓨터의 두 볼륨에서

다음 다이어그램에서는 ODX 지원 스토리지 디바이스에서 복사 작업을 오프로드하는 프로세스를 보여 줍니다.

ODX를 사용하여 오프로드 작업을 복사합니다.

  1. 복사 애플리케이션은 원본 스토리지 디바이스의 복사 관리자에게 오프로드 읽기 요청을 보냅니다.
  2. 원본 복사 관리자는 토큰을 반환합니다. 토큰은 복사할 ROD(데이터) 표현입니다.
  3. 애플리케이션은 토큰이 포함된 오프로드 쓰기 요청을 대상 스토리지 디바이스의 복사 관리자로 보냅니다.
  4. 스토리지 배열 복사 관리자는 원본 디바이스에서 대상 디바이스로 데이터를 이동하고 애플리케이션에 오프로드 쓰기 결과를 반환합니다.

ODX 지원 원본 및 대상 식별

ODX를 지원하려면 스토리지 배열이 토큰을 사용하여 읽기 및 쓰기 작업을 오프로드하는 것을 포함하여 ODX 지원 스토리지 배열에 대한 관련 T10 표준 사양을 구현해야 합니다. LUN 디바이스 열거(시스템 부팅 또는 플러그 앤 플레이 이벤트)에서 Windows는 다음 단계를 통해 스토리지 대상 디바이스의 ODX 기능 정보를 수집하거나 업데이트합니다.

  1. 쿼리 복사 오프로드 기능
  2. 복사 오프로드 작업 및 제한 사항에 필요한 매개 변수를 수집합니다.

기본적으로 원본 및 대상 LUN이 모두 ODX 지원인 경우 Windows는 복사 작업을 위해 먼저 ODX 경로를 시도합니다. 스토리지 디바이스가 초기 ODX 요청에 실패하면 Windows는 원본 및 대상 LUN의 조합을 "ODX 지원 안 함" 경로로 표시하고 레거시 복사 파일 코드 경로를 따릅니다.

ODX 읽기/쓰기 작업

동기 명령 채택 및 API

강력한 동기 오프로드 쓰기를 보장하기 위해 다음 알고리즘을 사용하여 큰 오프로드 쓰기 요청이 분할됩니다.

  • 대상 스토리지 디바이스가 최적의 전송 크기를 제공하지 않는 경우 최적의 전송 크기를 64MB로 설정합니다.
  • 대상 디바이스에서 설정한 최적의 전송 크기가 256MB보다 큰 경우 최적의 전송 크기를 256MB로 설정합니다.
  • 스토리지 대상 디바이스에서 지정한 최적의 전송 크기는 0보다 크고 256MB 미만입니다.

동기 오프로드 읽기 및 오프로드 쓰기 SCSI 명령은 MPIO 및 클러스터 장애 조치(failover) 시나리오의 복잡성을 줄입니다. Windows에서는 복사 관리자가 4초 이내에 동기 오프로드 읽기/쓰기 SCSI 명령을 완료해야 합니다.

애플리케이션은 FSCTL, DSM IOCTL 또는 SCSI_PASS_THROUGH API를 사용하여 스토리지 배열과 상호 작용하고 복사 오프로드 작업을 실행할 수 있습니다. 데이터 손상 또는 시스템 불안정을 방지하기 위해 Windows는 먼저 볼륨에 대한 단독 액세스를 얻지 않고도 애플리케이션이 파일 시스템 탑재 볼륨에 직접 쓰는 것을 제한합니다. 이 제한은 볼륨에 대한 쓰기가 파일 시스템 쓰기와 충돌할 수 있는 조건으로 인해 필요합니다. 이러한 충돌이 발생하면 볼륨의 내용이 일관되지 않은 상태로 남을 수 있습니다.

읽기 작업 오프로드

애플리케이션의 오프로드 읽기 요청은 토큰 수명(비활성 시간 제한)을 지정할 수 있습니다. 애플리케이션에서 토큰 수명을 0으로 설정하면 기본 비활성 타이머가 토큰 수명으로 사용됩니다. 스토리지 배열의 복사 관리자는 비활성 시간 제한 값 및 자격 증명에 따라 토큰을 유지 관리하고 유효성을 검사합니다. 또한 Windows 호스트는 파일 조각 수를 64개로 제한합니다. 오프로드 읽기 요청이 64개 이상의 조각으로 구성된 경우 Windows는 복사 오프로드 요청에 실패하고 기존 복사 작업으로 돌아갑니다.

오프로드 읽기 요청을 완료한 후 복사 관리자는 수신 오프로드 읽기 결과 명령에 대한 ROD(데이터) 토큰의 표현을 준비합니다. ROD 토큰 필드는 사용자 데이터 및 보호 정보의 지정 시간 표현을 지정합니다. ROD는 "단독으로 열기" 또는 "공유로 열기" 형식의 사용자 데이터일 수 있습니다. 복사 관리자는 ROD 정책 설정에 따라 토큰을 무효화할 수 있습니다. ROD가 복사 오프로드 작업에 대해 "단독으로 열려 있는" 경우 ROD를 수정하거나 이동할 때 ROD 토큰을 무효화할 수 있습니다. ROD가 "공유를 사용하여 열기" 형식인 경우 ROD가 수정될 때 ROD 토큰은 유효한 상태로 유지됩니다. ROD 토큰은 다음 형식의 512바이트입니다.

크기(바이트) 토큰 내용
4 ROD 토큰 형식
508 ROD 토큰 ID

ROD 토큰은 스토리지 배열에서만 부여되고 사용되므로 해당 형식은 불투명하고 고유하며 매우 안전합니다. 토큰이 수정되거나, 유효성이 검사되지 않거나, 만료된 경우 복사 관리자는 오프로드 쓰기 작업 중에 토큰을 무효화할 수 있습니다. 오프로드 읽기 작업에서 반환된 ROD 토큰에는 복사 관리자가 다음 쓰기 토큰 사용에 대해 유효한 토큰을 유지해야 하는 시간(초)을 나타내는 비활성 시간 제한 값이 있습니다.

쓰기 작업 오프로드

애플리케이션은 복사 관리자로부터 ROD 토큰을 받은 후 ROD 토큰을 사용하여 오프로드 쓰기 요청을 스토리지 배열의 복사 관리자로 보냅니다. 동기 오프로드 쓰기 명령을 대상 디바이스로 보내면 Windows에서는 복사 관리자가 4초 이내에 명령을 완료할 것으로 예상합니다. 명령 제한 시간 또는 기타 오류 조건으로 인해 명령이 종료되면 Windows에서 명령이 실패합니다. 애플리케이션은 반환된 상태 코드에 따라 레거시 복사 작업으로 돌아갑니다.

오프로드 쓰기 요청은 하나 이상의 수신 오프로드 쓰기 결과 명령으로 완료할 수 있습니다. 오프로드 쓰기가 부분적으로 완료되면 복사 관리자는 예상 지연 시간 및 전송 횟수와 함께 반환하여 복사 진행률을 나타냅니다. 전송 횟수는 원본에서 대상 미디어로 오류 없이 작성된 연속 논리 블록의 수를 지정합니다. 복사 관리자는 순차적 또는 분산/수집 패턴으로 오프로드 쓰기를 수행할 수 있습니다.

쓰기 오류가 발생하면 복사 진행률이 첫 번째 논리 블록에서 오류 블록까지 연속된 논리 블록 수를 계산합니다. 클라이언트 애플리케이션 또는 복사 엔진은 쓰기 실패 블록에서 오프로드 쓰기를 다시 시작합니다. 오프로드 쓰기가 완료되면 복사 관리자가 다음을 사용하여 ROD 토큰 정보 받기 명령을 완료합니다.

  • 예상 상태 업데이트 지연이 0으로 설정됩니다.
  • 데이터 전송 횟수의 진행률(100%)입니다.

수신 오프로드 쓰기 결과가 데이터 전송 횟수와 동일한 진행률을 반환하는 경우 Windows는 네 번의 재시도 후 복사 작업을 애플리케이션에 다시 실패합니다.

클라이언트 애플리케이션은 알려진 데이터 패턴 및 토큰 형식의 미리 정의된 ROD 토큰인 잘 알려진 ROD 토큰을 사용하여 오프로드 쓰기 작업을 수행할 수도 있습니다. 하나의 일반적인 구현을 0 토큰이라고 합니다. 클라이언트 애플리케이션은 0 토큰을 사용하여 하나 이상의 논리 블록 범위를 0으로 채울 수 있습니다. 잘 알려진 토큰이 지원되지 않거나 인식할 수 없는 경우 복사 관리자는 "잘못된 토큰"으로 쓰기 요청을 오프로드하지 못합니다. 잘 알려진 ROD 토큰은 다음 형식의 512바이트입니다.

크기(바이트) 토큰 내용
4 ROD 토큰 형식
2 잘 알려진 패턴
506 ROD 토큰 ID

잘 알려진 ROD 토큰이 있는 오프로드 쓰기에서 클라이언트 애플리케이션은 잘 알려진 토큰을 요청하기 위해 오프로드 읽기를 사용할 수 없습니다. 복사 관리자는 자체 정책에 따라 잘 알려진 ROD 토큰을 확인하고 유지 관리합니다.

ODX 구현의 성능 튜닝 매개 변수

ODX의 성능은 서버와 스토리지 배열 간의 클라이언트-서버 네트워크 또는 SAN(스토리지 영역 네트워크)의 전송 링크 속도에 따라 달라지지 않습니다. 스토리지 배열의 복사 관리자와 디바이스 서버는 데이터를 이동합니다.

모든 복사 오프로드가 ODX 기술의 이점을 누릴 수 있는 것은 아닙니다. 예를 들어 1Gbit iSCSI 스토리지 배열의 복사 관리자는 10초 이내에 3GB 파일 복사를 완료할 수 있으며 데이터 전송 속도는 초당 300MB보다 큽니다. 데이터 전송 속도는 이미 1Gbit 이더넷 인터페이스의 최대 이론적 전송 속도를 능가합니다.

또한 특정 크기의 파일에 대한 복사 성능이 ODX 기술의 이점을 얻지 못할 수 있습니다. 성능을 최적화하기 위해 ODX 사용은 허용되는 최소 파일 크기 및 최대 복사 길이로 제한될 수 있습니다. 고:

  • Windows는 복사 엔진의 복사 오프로드 작업에 대한 최소 파일 크기 요구 사항을 256KB로 설정합니다. 파일이 256KB 미만이면 복사 엔진이 레거시 복사 프로세스로 돌아갑니다.

  • Windows 호스트는 최대 토큰 전송 크기 및 최적 전송 횟수를 사용하여 오프로드 읽기 또는 쓰기 SCSI 명령의 최적의 전송 크기를 준비합니다. 블록 수의 총 전송 크기는 최대 토큰 전송 크기를 초과하지 않아야 합니다. 스토리지 배열이 최적의 전송 수를 보고하지 않는 경우 Windows는 기본 수로 64MB를 사용합니다.

최적 및 최대 전송 길이 매개 변수는 한 범위 설명자에서 최적 및 최대 블록 수를 지정합니다. 복사 오프로드 애플리케이션은 최적의 파일 전송 성능을 달성하기 위해 이러한 매개 변수를 준수할 수 있습니다.

ODX 오류 처리 및 고가용성 지원

ODX 작업에서 파일 복사 요청에 실패하면 복사 엔진과 NTFS(Windows 파일 시스템)가 레거시 복사 작업으로 대체됩니다. 오프로드 쓰기 작업의 중간에 복사 오프로드가 실패하면 복사 엔진 및 NTFS가 오프로드 쓰기의 첫 번째 실패 지점에서 레거시 복사 작업으로 다시 시작됩니다.

ODX 오류 처리

ODX는 스토리지 배열의 기능에 따라 강력한 오류 처리 알고리즘을 사용합니다. ODX 지원 경로에서 복사 오프로드가 실패하면 Windows 호스트는 애플리케이션이 레거시 복사 작업으로 대체됩니다. 이 시점에서 Windows 복사 엔진은 이미 "기존 복사로 대체" 메커니즘을 구현했습니다. 복사 오프로드 실패 후 NTFS는 원본 및 대상 LUN을 3분 동안 ODX 지원되지 않는 것으로 표시합니다. 이 기간이 지나면 Windows 복사 엔진이 ODX 작업을 다시 시도합니다. 스토리지 배열은 이 기능을 사용하여 스트레스가 많은 상황에서 일부 경로에서 ODX 지원을 일시적으로 사용하지 않도록 설정할 수 있습니다.

MPIO 및 클러스터 서버 구성의 ODX 장애 조치(failover)

동일한 스토리지 링크(I_T nexus)에서 읽기 및 쓰기 작업을 오프로드하거나 취소해야 합니다.

동기 오프로드 읽기 또는 쓰기 작업 중에 MPIO 또는 클러스터 서버 장애 조치(failover)가 발생하면 Windows는 다음과 같이 장애 조치(failover)를 처리합니다.

  • MPIO 경로 장애 조치(failover)가 발생하면 Windows에서 실패한 ODX 명령을 다시 시도합니다. 명령이 다시 실패하면 Windows:

    • 클러스터 서버의 일부일 때 클러스터 서버 노드 장애 조치(failover)를 시작합니다.
    • 스토리지 디바이스에 LUN 재설정을 실행하고 클러스터 서버 장애 조치(failover)가 옵션이 아닌 경우 애플리케이션에 I/O 오류 상태를 반환합니다.
  • 클러스터 서버 구성에서 클러스터 스토리지 서비스는 다음 기본 클러스터 노드로 장애 조치된 다음 클러스터 스토리지 서비스를 다시 시작합니다. 클러스터 스토리지 서비스 장애 조치(failover) 후 오프로드 읽기/쓰기 명령을 다시 시도할 수 있으려면 오프로드 애플리케이션이 클러스터를 인식해야 합니다.

MPIO 경로 및 클러스터 노드 장애 조치(failover) 후 오프로드 읽기 또는 쓰기 명령이 실패한 경우 Windows는 장애 조치(failover) 후 스토리지 디바이스에 LUN 재설정을 실행합니다. 스토리지 디바이스는 LUN에서 모든 미해결 명령 및 보류 중인 작업을 종료합니다.

현재 Windows는 스토리지 스택에서 SCSI 명령을 읽거나 쓰는 비동기 오프로드를 실행하지 않습니다.

ODX 사용 모델

실제 디스크, 가상 하드 디스크 및 SMB 공유 디스크의 ODX

ODX 작업을 수행하려면 애플리케이션 서버가 읽기/쓰기 권한이 있는 원본 LUN 및 대상 LUN 모두에 액세스할 수 있어야 합니다. 복사 오프로드 애플리케이션은 원본 LUN에 대한 오프로드 읽기 요청을 실행하고 원본 LUN의 복사 관리자로부터 토큰을 받습니다. 복사 오프로드 애플리케이션은 토큰을 사용하여 대상 LUN에 오프로드 쓰기 요청을 실행합니다. 그런 다음 복사 관리자는 스토리지 네트워크를 통해 원본 LUN에서 대상 LUN으로 데이터를 이동합니다. 다음 다이어그램에서는 오프로드된 데이터 전송에 대해 지원되는 가장 기본적인 원본 및 대상 대상을 보여 줍니다.

기본 지원 ODX 원본 및 대상 대상입니다.

하나의 서버를 사용하여 ODX 작업

단일 서버 구성에서 복사 오프로드 애플리케이션은 동일한 서버 시스템에서 오프로드 읽기 및 쓰기 요청을 실행합니다.

원본 서버(또는 원본 VM)는 원본 LUN(VHD 또는 실제 디스크) 및 대상 LUN(VHD 또는 실제 디스크)에 모두 액세스할 수 있습니다. 복사 오프로드 애플리케이션은 원본 LUN에 대한 오프로드 읽기 요청을 실행하고 원본 LUN에서 토큰을 받습니다. 그런 다음 복사 오프로드 애플리케이션은 토큰을 사용하여 대상 LUN에 대한 오프로드 쓰기 요청을 실행합니다. 복사 관리자는 원본 LUN에서 동일한 스토리지 배열 내의 대상 LUN으로 데이터를 이동합니다.

두 서버를 사용하여 ODX 작업

두 서버 구성에는 두 개의 서버와 동일한 복사 관리자가 관리하는 여러 스토리지 배열이 있습니다.

  • 한 서버(또는 VM)는 원본 LUN의 호스트이고 다른 서버(또는 VM)는 대상 LUN의 호스트입니다. 원본 서버는 SMB 프로토콜을 통해 원본 LUN을 애플리케이션 클라이언트와 공유하고 대상 서버는 SMB 프로토콜을 통해 애플리케이션 클라이언트와 대상 LUN을 공유합니다. 따라서 애플리케이션 클라이언트는 원본 LUN 및 대상 LUN 모두에 액세스할 수 있습니다.
  • 원본 및 대상 스토리지 배열은 SAN 구성에서 동일한 복사 관리자에 의해 관리됩니다.
  • 애플리케이션 클라이언트 시스템에서 복사 오프로드 애플리케이션은 원본 LUN에 대한 오프로드 읽기 요청을 발급하고 원본 LUN에서 토큰을 받은 다음 대상 LUN에 대한 토큰을 사용하여 오프로드 쓰기 요청을 실행합니다. 복사 관리자는 원본 LUN의 데이터를 서로 다른 두 위치에 있는 두 개의 서로 다른 스토리지 배열에서 대상 LUN으로 이동합니다.

대규모 데이터 마이그레이션

대규모 데이터 마이그레이션은 데이터베이스 레코드, 스프레드시트, 텍스트 파일, 스캔한 문서 및 이미지와 같은 대량의 데이터를 새 시스템으로 가져오는 프로세스입니다. 데이터 마이그레이션은 스토리지 시스템 업그레이드, 새 데이터베이스 엔진 또는 애플리케이션 또는 비즈니스 프로세스의 변경으로 인해 발생할 수 있습니다. 새 시스템의 복사 관리자가 레거시 시스템을 관리할 수 있는 경우 ODX를 사용하여 레거시 스토리지 시스템에서 새 스토리지 시스템으로 데이터를 마이그레이션할 수 있습니다.

  • 한 서버는 레거시 스토리지 시스템의 호스트이고 다른 서버는 새 스토리지 시스템의 호스트입니다. 원본 서버는 원본 LUN을 SMB 프로토콜을 통해 데이터 마이그레이션 애플리케이션 클라이언트로 공유하고 대상 서버는 SMB 프로토콜을 통해 대상 LUN을 데이터 마이그레이션 애플리케이션 클라이언트로 공유합니다. 따라서 애플리케이션 클라이언트는 원본 및 대상 LUN 모두에 액세스할 수 있습니다.
  • 레거시 스토리지 시스템과 새 스토리지 시스템은 SAN 구성에서 동일한 복사 관리자에 의해 관리됩니다.
  • 데이터 마이그레이션 애플리케이션 클라이언트 시스템에서 복사 오프로드 애플리케이션은 원본 LUN에 대한 오프로드 읽기 요청을 실행하고 원본 LUN에서 토큰을 받습니다. 그런 다음 애플리케이션은 대상 LUN에 대한 토큰을 사용하여 오프로드 쓰기 요청을 실행합니다. 복사 관리자는 원본 LUN에서 대상 LUN으로 데이터를 두 개의 서로 다른 위치에 있는 두 개의 서로 다른 스토리지 시스템에서 이동합니다.
  • 대규모 데이터 마이그레이션은 동일한 위치에 있는 하나의 서버에서 작동할 수도 있습니다.

계층화된 스토리지 디바이스 내에서 호스트 제어 데이터 전송

계층화된 스토리지 디바이스는 데이터를 다양한 유형의 스토리지 미디어로 분류하여 비용을 절감하고 성능을 향상시키며 용량 문제를 해결합니다. 범주는 필요한 보호 수준, 성능 요구 사항, 사용 빈도 및 기타 고려 사항을 기반으로 할 수 있습니다.

데이터 마이그레이션 전략은 계층화된 스토리지 전략의 최종 결과에서 중요한 역할을 합니다. ODX를 사용하면 계층화된 스토리지 디바이스 내에서 호스트 제어 데이터 마이그레이션이 가능합니다. 다음 예제에서는 2계층 스토리지 디바이스의 ODX에 대해 설명합니다.

  • 서버는 계층화된 스토리지 시스템의 호스트입니다. 원본 LUN은 Tier1 스토리지 디바이스이고 대상 LUN은 Tier2 스토리지 디바이스입니다.
  • 동일한 복사 관리자는 모든 계층화된 스토리지 디바이스를 관리합니다.
  • 서버 시스템에서 데이터 마이그레이션 애플리케이션은 원본 LUN에 대한 오프로드 읽기 요청을 실행하고 원본 LUN에서 토큰을 받습니다. 그런 다음, 이 애플리케이션은 대상 LUN에 대한 토큰을 사용하여 오프로드 쓰기 요청을 실행합니다. 복사 관리자는 원본 LUN의 데이터를 서로 다른 두 계층 스토리지 디바이스에서 대상 LUN으로 이동합니다.
  • 데이터 마이그레이션 작업이 완료되면 애플리케이션은 Tier1 스토리지 디바이스에서 데이터를 삭제하고 스토리지 공간을 회수합니다.