파일 시스템은 OS에서 제공하는 가장 기본적인 서비스 중 하나로, Windows는 현재 널리 이용되는 OS 중에서도 가장 발전된 파일 시스템 중 하나를 제공합니다. Windows 7에서는 안전성과 관리 편의성을 높이고, 이전의 ‘조각 모음’ 개념을 완전히 자동화하는 등의 강력한 기능을 추가하여 파일 시스템을 대폭 개선했었습니다. Windows 8에서는 이러한 개선을 바탕으로 규모와 용량을 확장하는 부분에 중점을 두고 개발했습니다. 이 글은 저장소 및 파일 시스템 팀의 프로그램 관리자인 Bryan Matthew가 작성했습니다.
- Steven

디지털 데이터의 규모는 어느 때보다 빠른 속도로 급증하고 있으며, 이 중 가장 큰 부분을 차지하는 것은 주로 고해상도 디지털 사진과 고선명 홈 비디오, 방대한 양의 음악 파일 등입니다. 하드 디스크 공급업체들은 이러한 상황에 대처하기 위해 초대용량 하드 디스크 드라이브를 공급하고 있습니다. 최근 IDC가 실시한 시장 조사 보고서에 따르면 2015년까지 하드 디스크 드라이브 1개의 최대 용량이 8TB로 증가할 것으로 예상됩니다.

2010년에는 2TB, 2011년에는 3TB, 2015년에는 8TB(예상치)로 점차 증가하는 추세

디스크 드라이브 1개의 기간별 최대 용량 증가 추이
(출처: IDC 연구 번호 228266, Worldwide Hard Disk Drive 2011–2015 Forecast: Transformational Times
(전 세계 하드 디스크 드라이브의 2011–2015년 전망: 변혁의 시대), 2011년 5월)

이번 글에서는 초대용량 드라이브를 더 효율적으로 최대한 활용할 수 있도록 업계 파트너가 내놓은 새로운 기능과 기술을 바탕으로 Windows 8가 어떻게 개선되었는지 알아봅니다.

초대용량 하드 디스크 드라이브에 관한 문제

우선 개념 정리 차원에서 '초대용량' 디스크 드라이브를 용량이 2.2TB 이상인 디스크 드라이브로 정의하겠습니다. Windows의 현재 아키텍처에는 몇 가지 제약이 있어 간혹 이러한 초대용량 드라이브를 처리하기 어려운 경우가 있습니다.

하드 디스크 드라이브 공급업체들이 혁신적으로 초대용량 드라이브를 공급하고는 있지만 다음 두 가지 문제가 쟁점으로 떠오르고 있습니다.

  • 초대용량 드라이브의 완전한 활용을 위해 사용 가능한 전체 용량을 주소 지정할 수 있어야 합니다.
  • 하드 디스크 드라이브 공급업체에서 더 효율적으로 관리되는 물리적 디스크를 제공할 수 있도록 4K(대용량) 섹터 크기를 실현하기 위한 노력을 뒷받침해야 합니다.

이제 위의 두 가지 사항에 대해 좀 더 자세히 알아보도록 하겠습니다.

사용 가능한 전체 용량의 주소 지정

초대용량 디스크에서 사용 가능한 전체 용량을 주소 지정하는 문제를 충분히 이해하려면 다음 개념을 좀 더 자세히 알아보아야 합니다.

  • 주소 지정 방법
  • 디스크 파티셔닝 방식
  • BIOS 또는 UEFI 등 PC의 펌웨어 구현

주소 지정 방법

초기에 이용된 디스크의 주소 지정 방법은 CHS(Cylinder-Head-Sector) 방식으로, 데이터가 위치한 실린더, 헤드 및 섹터를 지정함으로써 디스크에서 특정 데이터 블록을 정확하게 규정할 수 있었습니다. 제가 학창시절을 보낸 2001년에는 CHS 주소 지정 방식의 한계(약 137GB)를 뛰어넘은 160GB 디스크가 출시되었습니다. 이를 계기로 대용량 디스크를 지원하기 위한 시스템 설계의 변화가 요구되었습니다. [편집자 참고사항: 제가 처음으로 사용한 하드 드라이브는 5MB였지만 크기는 타워 PC 정도였습니다. - Steven]

이러한 요구에 따라 등장한 새로운 주소 지정 방식인 논리적 블록 주소 지정(LBA)은 분리된 기하학적 형태를 이용하여 섹터를 참조하는 대신 '섹터 번호'라는 '논리적 블록 주소'를 사용하여 디스크의 특정 데이터 블록을 참조했습니다. 이에 따라 Windows도 새로운 방식으로 하드 디스크 드라이브의 사용 가능한 용량을 주소 지정할 수 있도록 업데이트되었습니다. LBA 방식에서는 각 섹터의 크기가 미리 정의되어 있는데 최근까지 섹터당 512바이트로 지정되어 있습니다. 또한 섹터는 '섹터 0'부터 '섹터 n'까지 순차적으로 증가하는 방식으로 주소가 지정됩니다.

n = (바이트 단위의 총 용량)/(바이트 단위의 섹터 크기)

디스크 파티셔닝 방식

LBA 주소 지정 방식은 이론상으로 용량이 아무리 커져도 액세스 가능하지만 실질적으로 ‘n’의 최대값은 어떤 '디스크 파티셔닝 방식'을 사용하는지에 따라 제한될 수 있습니다.

디스크 파티셔닝 개념이 등장한 시기는 1980년대 초로 거슬러 올라갑니다. 당시 시스템을 구현하는 사람들은 디스크 드라이브를 여러 개의 '파티션'(하위 부분)으로 분할해야 한다는 필요성을 인식하고, 개별적인 파일 시스템으로 포맷하여 데이터를 저장하는 데 사용했습니다. 이 당시에 최대 32비트 정보로 디스크의 최대 용량을 나타낼 수 있는 마스터 부트 레코드(MBR) 파티션 테이블 방식도 고안되었습니다. 간단한 수식에 따라 32비트로 나타냈을 때 주소 지정 가능한 최대 바이트는 232 또는 2.2TB입니다. 물론 시판되는 가장 큰 용량의 디스크가 고작 5MB였지만 가격은 1500달러를 훌쩍 뛰어넘었던 1980년대의 상황을 고려하면 이러한 제한은 실용적으로 아무 문제가 되지 않아 보였습니다.

1990년대 후반에 들어, 시스템 구현자들은 무엇보다 2.2TB 한계를 뛰어넘는 주소 지정이 시급하다는 데 인식을 같이 했습니다. 이에 따라 관련 기업들이 협력하여 UEFI(Unified Extensible Firmware Interface) 사양의 일부로 GUID 파티션 테이블(GPT)이라는 확장 가능한 파티셔닝 방식을 개발했습니다. GPT 방식의 경우 최대 디스크 크기를 나타내는 숫자를 최대 64비트 정보로 저장할 수 있기 때문에 이론상으로 최대 용량은 9.4ZB(제타바이트)까지 가능합니다. (1ZB = 1,000,000,000,000,000,000,000바이트)

Windows Vista 64비트부터 Windows는 GPT 파티셔닝 방식의 하드 디스크 드라이브로 부팅하는 기능을 지원하기 시작했습니다. 여기에는 시스템 펌웨어가 UEFI여야 한다는 전제조건이 있습니다. UEFI에 대한 내용은 이전 글에서 설명 드렸으므로 Windows 8 PC의 새로운 기능으로 사용될 수 있다는 점을 익히 알고 계실 것입니다. 그러면 이제 펌웨어에 대해 알아보겠습니다.

BIOS 또는 UEFI 등 PC의 펌웨어 구현

PC 공급업체들은 Windows와 같은 OS로 통제권을 넘기기 전에 기본 하드웨어 초기화를 처리하는 펌웨어를 함께 제공합니다. 오래 전에 개발된 BIOS(기본 입출력 시스템) 펌웨어는 PC가 처음 고안된 1980년경에 구현되었습니다. 수십년에 걸쳐 PC 기술이 크게 발전하면서 BIOS를 대체하는 UEFI 사양이 개발되었으며 UEFI는 1990년대 후반부터 구현되고 있습니다. 일부 BIOS 구현 방식에서도 대용량 드라이브 문제에 대한 해결책으로 하이브리드 MBR-GPT 파티셔닝 방식 등을 이용하여 관련성과 활용도를 높이기 위한 노력이 시도되기는 했지만, UEFI는 애초부터 GUID 파티션 테이블 또는 GPT를 사용하여 초대용량의 드라이브를 지원하도록 설계되었습니다. 이러한 BIOS 구현 방식은 상당히 불완전하여 데이터가 손실될 위험이 높습니다. 따라서 Windows는 부팅 디스크에 GPT 방식을 사용하는 동시에 최신 UEFI 펌웨어를 이용하도록 지속적으로 요구해 왔습니다.

Windows 8부터 Windows 내의 여러 가지 새로운 기능은 UEFI에 기반을 두고 있습니다. UEFI 펌웨어와 GPT 파티셔닝, LBA의 결합으로 Windows에서 초대용량 디스크를 완전하게 주소 지정하는 문제는 손쉽게 해결할 수 있습니다.

우리의 많은 파트너들은 보안 부팅, 암호화 드라이브 및 빠른 시작 등 Windows 8의 혁신적 기능과 시나리오를 실행할 수 있게 해 주는 UEFI를 사용한 Windows 8 기반 시스템을 개발하기 위해 전력을 다하고 있습니다. Windows 8이 출시되면 이러한 새로운 시스템이 Windows 8을 3TB 이상의 초대용량 디스크에 설치하고 부팅할 수 있도록 지원할 수 있을 것으로 전망됩니다. 간략히 살펴보면 다음과 같습니다.

전체 2.72TB 중에서 사용 가능한 공간이 2.71TB인 C 드라이브

UEFI 시스템이 사용된 3TB SATA 드라이브에서 Windows 8 부팅

4KB(대용량) 섹터 크기

모든 하드 디스크 드라이브에는 일정한 형태의 오류 수정 정보와 논리가 내장되어 있습니다. 이를 통해 하드 디스크 드라이브 공급업체는 디스크 플래터를 판독할 때 신호 대 잡음비(SNR)를 자동으로 처리할 수 있습니다. 디스크 용량이 증가하면서 디스크의 비트 밀도가 더욱 조밀해짐에 따라, 디스크를 판독할 때 SNR은 감소하고 있습니다. SNR 감소를 보상하려면 디스크의 각 섹터는 섹터 판독 오류를 손쉽게 보상할 수 있도록 더 많은 '오류 수정 코드(ECC)'를 저장해야 합니다. 현재의 ECC 저장 방식으로는 최신 디스크에서 공간을 더 이상 효율적으로 사용하지 못하는 실정입니다. 즉, 현재 512바이트 섹터의 많은 공간이 사용자의 데이터를 저장하는 데 사용되는 것이 아니라 ECC 정보를 저장하는 데 사용되고 있습니다. 이에 따라 더 큰 섹터 크기를 도입하게 되었습니다.

대용량 섹터 크기 – ‘고급 형식(AF)’ 미디어

섹터 크기가 커지면 오류를 좀 더 효율적으로 수정하고 총 공간을 더 적게 사용하는 다른 방식을 사용하여 ECC를 인코딩할 수 있습니다. 이러한 효율성은 향후 보다 큰 용량의 디스크를 개발하는 데 도움을 줍니다. 하드 디스크 제조업체들은 ‘고급 형식(AF)’이라는 4KB 크기의 섹터를 사용하는 데 합의하고 2009년 말 최초의 AF 드라이브를 출시했습니다. 그 이후, 하드 디스크 제조업체들은 향후 모든 저장 장치에 이 형식이 사용될 것이라는 예상에 따라 제품군을 AF 미디어로 급격히 전환했습니다.

읽기-수정-쓰기

AF 디스크의 경우, 미디어의 데이터 레이아웃은 4KB의 물리적 블록으로 배열됩니다. 미디어 업데이트는 이 단위에서만 수행될 수 있기 때문에 더 작은 단위로 논리적 블록을 주소 지정하려면 디스크에 별도의 추가 작업이 필요합니다. 물리적 섹터 크기 단위로 수행된 쓰기 작업에는 별도의 작업이 필요하지 않기 때문에 물리적 섹터 크기를 미디어의 원자 상태 단위로 볼 수 있습니다.

아래 그림과 같이 4KB의 물리적 섹터는 논리적으로 512바이트의 논리 섹터로 주소 지정할 수 있습니다. 단일 논리 섹터에 쓰기 위해 디스크가 단순히 물리적 섹터에서 해당 부분 위로 디스크 헤드를 옮겨서 쓰기 작업을 시작할 수는 없습니다. 대신, 전체 4KB의 물리 섹터를 캐시로 읽어들이고 캐시에서 512바이트의 논리 섹터를 수정한 후, 전체 4KB 물리 섹터를 다시 미디어에 써서 이전 블록을 대체해야 합니다. 이 과정을 읽기-수정-쓰기 프로세스라고 합니다.

정렬되지 않은 쓰기 작업을 지원하기 위해 이러한 에뮬레이션 레이어를 사용하는 디스크를 '512바이트 에뮬레이션이 사용된 4K'라고 하거나, 간단히 줄여서 ‘512e’라고 합니다. 이 에뮬레이션 레이어가 없는 디스크는 ‘4K Native’라고 부릅니다.

4K 물리 섹터에 512 단위가 8개 있습니다. 1단계: 4K 섹터를 미디어에서 캐시로 읽습니다. 화살표. 2단계: 캐시에서 512바이트 논리 섹터를 업데이트합니다. 512 블록 중 하나가 강조 표시되어 있습니다. 3단계: 미디어에서 이전의 4K 물리 섹터를 덮어씁니다.

정렬되지 않은 쓰기 작업을 대량으로 수행하는 응용 프로그램과 작업에서는 읽기-수정-쓰기 프로세스로 인해 결과적으로 성능이 저하될 수 있습니다. 이러한 형태의 미디어를 지원하기 위해 Windows는 응용 프로그램에서 장치의 '물리적' 섹터 크기를 검색할 수 있도록 해야 하고, Windows 응용 프로그램과 타사 응용 프로그램에서 모두 보고된 '물리적' 섹터 크기에 맞게 I/O를 조정해야 합니다.

대용량 섹터 디스크에 적합한 디자인

이전 버전의 Windows에서 확인된 몇 가지 문제를 해소하기 위해 사용된 AF 디스크는 Windows 8의 새로운 기능과 기술을 뒷받침하는 핵심 디자인 요소로 자리잡았습니다. 그 결과 Windows 8은 512e와 4K Native의 AF 디스크 유형을 '모두' 완벽히 지원하는 최초의 OS로 기록될 것입니다.

이를 위해 위에서 설명한 잠재적 문제에 가장 취약한 기능과 기술 부분을 파악하고, 해당 기능을 개발하는 팀에게 개발 방향을 제시하는 동시에 이러한 시나리오에 따라 하드웨어를 테스트하도록 지원하고 있습니다.

저희가 해결한 부분들은 다음과 같습니다.

  • 응용 프로그램에서 디스크의 물리적 섹터 크기를 보다 효율적으로 쿼리할 수 있도록 기존의 API를 개선하고 새로운 API를 도입합니다.
  • 확장된 쓰기(파일 끝에 쓰기)를 수행할 때 적합한 섹터 패딩을 보장하는 등 NTFS 파일 시스템 내에서 대용량 섹터의 인식 수준을 높입니다.
  • 두 가지 AF 디스크 유형을 완벽하게 지원하기 위해 Hyper-V가 사용하는 새로운 VHDx 파일 형식에서 대용량 섹터를 인식하도록 합니다.
  • 4K Native 디스크에서 부팅할 때 올바로 작동하도록 Windows 부팅 코드를 강화합니다.

위의 내용은 Windows 8에서 두 가지 AF 디스크 유형을 전면적으로 지원하기 위해 이루어진 수많은 작업들 중 일부에 불과합니다. 정확하면서도 효율적으로 AF 디스크가 작동할 수 있도록 Microsoft 내의 다른 제품 팀은 물론, 데이터베이스 응용 프로그램 개발자를 비롯한 업계 전반에 걸쳐 지속적으로 협력하여 개발에 임하고 있습니다.

결론

Windows 8의 NTFS는 초대용량 디스크를 효과적으로 지원하기 위해 업계 파트너들이 제공하는 기능과 기술을 완벽하게 활용합니다. Windows 8과 NTFS를 통해 대용량 저장 공간에 대한 요구 사항이 충분히 해결되리라 확신합니다.

- Bryan