Windows Confidential파일 시스템의 모순

Raymond Chen

하드 드라이브를 살펴보면 아마도 많은 운영 체제 파일이 부팅 드라이브의 루트 디렉터리에 있음을 알 것입니다. 이러한 파일을 더욱 자세히 살펴보면 boot.ini, NTLDR 및 NTDETECT.COM은 중요한 부팅 파일이고 hiberfil.sys는 최대 절전 모드 파일이라는 것을 알 수 있습니다. 이들은 모두 운영 체제 부팅이나 최대 절전 모드 해제(hiberfil.sys의 경우)의 중요한 첫 번째 단계에 사용되는 파일로 부팅 드라이브의 루트에 있어야 합니다. 이러한 파일을 다른 위치로 이동할 수 없는 이유는 무엇일까요?

필자의 동료인 Adrian Oney의 설명에 따르면 디스크에서 부팅 파일을 읽으려면 파일 시스템 드라이버가 필요한데, 파일 시스템 드라이버는 파일 시스템 드라이버를 로드한 후에야 읽을 수 있는 디스크에 있다고 합니다. 이런 모순이 있을까요?

이렇게 순환되는 불합리적 문제는 간단한 파일 시스템 드라이버가 중요한 부팅 파일에 기본 제공됨으로써 해결됩니다. 이 간단한 드라이버는 루트 디렉터리에서 파일을 찾아 메모리에 로드할 수 있을 만큼의 정보만 알고 있습니다. 그런 다음 이러한 파일에서 운영 체제를 시작할 수 있는데, 이때 실제 파일 시스템 드라이버가 인계를 받아서 하위 디렉터리와 같은 훨씬 더 세분화된 위치에서 파일을 찾을 수 있습니다.

  

최대 절전 모드도 비슷한 양상을 따릅니다. 운영 체제를 최대 절전 모드로 전환하면 메모리의 전체 콘텐츠가 최대 절전 모드 파일에 덤프되고, 최대 절전 모드를 해제하면 해당 파일이 메모리에 다시 로드되고 아무 일도 일어나지 않은 듯이 정상적으로 작동합니다. 이것은 또 다른 닭과 달걀의 문제입니다. 즉, 최대 절전 모드 파일을 로드하려면 파일 시스템 드라이버가 필요한데, 파일 시스템 드라이버는 최대 절전 모드 파일에 있습니다. 최대 절전 모드 파일을 부팅 드라이브의 루트 디렉터리에 보관하면 간단한 파일 시스템 드라이버를 대신 사용할 수 있습니다.

MS-DOS®의 초기 버전을 사용했다면 운영 체제 부팅 파일의 위치에 대한 이러한 제약 조건을 잘 알고 있을 것입니다. 이전 SYS 명령을 사용하면 평범한 플로피 디스크를 놀라운 부팅 가능 플로피 디스크로 만들 수 있었습니다. 하지만 이미 데이터가 들어 있는 플로피 디스크에서 실행한 경우 MS-DOS의 초기 버전에서는 부팅 파일이 플로피 디스크 상의 특정 위치에 있어야만 부팅 섹터가 해당 파일을 찾을 수 있었기 때문에 변환이 실패할 가능성이 있었습니다. MS-DOS의 후기 버전에서는 부팅 로더를 개선하여 이러한 요구 사항을 완화했지만 개선된 버전의 경우에도 시스템 파일이 여전히 루트 디렉터리에 있어야 합니다.

"최대 절전 모드 파일을 하위 디렉터리로 이동할 수 있나요?"라고 묻는 고객이 있었습니다. 이러한 경우 파일 위치는 문제가 되지 않습니다. 파일을 어디에 저장하든 파일의 ACL은 같을 것입니다. 그러나 이러한 질문을 한 사람들은 부팅 드라이브와는 다른 드라이브에 파일을 저장하기를 원했고 결국 그렇게 할 수 없다는 대답을 들었습니다. 이들은 정말로 이 제한 사항의 이유를 이해하지 못하고 교묘히 회피하려고 했습니다. 필자는 어쨌든 최대 절전 모드 파일을 하위 디렉터리로 이동할 수 있다는 가정하에 디렉터리를 만들어 정말로 최대 절전 모드 파일을 저장할 위치를 가리키는 연결 지점으로 지정했습니다. 놀랍게도 최대 절전 모드 파일이 다른 위치로 옮겨졌습니다.

물론 탑재 지점은 디스크 관리 서비스와 통신함으로써 알 수 있기 때문에 간단한 파일 시스템 드라이버는 탑재 지점을 파악하지 못합니다. 그리고 시스템이 부팅될 때 운영 체제가 컴퓨터에 미처 로드되지 않은 상태이고 드라이브 문자를 ARC 경로에 다시 매핑하는 방법을 알고 있는 뛰어난 기능의 고급 서비스가 거의 없으며 어떻게 해서든지 이러한 서비스를 실행 중인 상태로 만들었다고 해도 여전히 이러한 다른 하드 드라이브의 장치 드라이버를 찾고 해당 파일 시스템 드라이버를 로드해야 합니다.

누군가가 최대 절전 모드 파일을 DFS 연결 지점에 넣는 방법을 요청하는 것은 시간 문제일 뿐입니다.

Raymond Chen은 The Old New Thing 웹 사이트와 동명의 저서(Addison-Wesley, 2007)에서 Windows의 역사와 Win32 프로그래밍에 대해 다루고 있습니다. 그의 Web 2.0 이름은 Raymond 또는 Chenster일 것입니다.

© 2008 Microsoft Corporation 및 CMP Media, LLC. All rights reserved. 이 문서의 전부 또는 일부를 무단으로 복제하는 행위는 금지됩니다..