메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

FAT 파일시스템(3) - 부트 레코더(1)

한빛미디어

|

2006-08-08

|

by HANBIT

16,494

제공: 한빛미디어 네트워크 기사
저자: 정준석
출처: IT EXPERT, 임베디드 개발자를 위한 파일시스템의 원리와 실습 Chapter 3

볼륨의 여러 설정 값들은 전부 부트 레코드에 저장되기 때문에 이 영역을 잘 분석하는 것이 Windows와 호환되는 FAT를 구현하는 첫걸음이라고 할 수 있다. 부트 레코드는 섹터 1개(512Byte)로 이루어져 있는 작은 영역이지만 중요한 내용이 많으니 유심히 살펴보자.

부트 레코드 소개

BIOS Parameter Block(BPB)이라고도 불리는 이 영역은 해당 볼륨의 여러 가지 설정 값들을 저장하고 있으며, 해당 볼륨이 부팅될 수 있도록 부팅에 필요한 실행 코드도 포함하고 있다. Boot Record가 저장되는 위치는 해당 볼륨의 첫 번째 섹터이며FAT 파일시스템을 구성하는 영역 중 맨 앞에 위치하는 영역인 예약된(Reserved) 영역의 첫 번째 섹터이기도 하다.

만약 하드디스크에 볼륨이 여러 개 있다면 각각의 볼륨에 부트 레코드도 하나씩 있게 된다. 만약 하드디스크에 파티셔닝이 되어 있지 않아서 볼륨이 하나라면 부트 레코드는 MBR(Master Boot Record) 영역에 존재하게 된다.



[그림 3-4] 파티션 없이 단일 볼륨인 하드디스크의 부트 레코드 위치



[그림 3-5] 파티션이 존재하고 볼륨이 2개인 하드디스크의 부트 레코드 위치

부트 레코드에서 FAT16과 FAT32의 차이



[그림 3-6] FAT16과 FAT32의 부트 레코드 레이아웃

부트 레코드의 0번 오프셋에서 32번 오프셋까지는 FAT16과 FAT32가 공통된 항목을 가진다. 32번 오프셋 이후는 FAT16과 FAT32의 항목이 서로 달라서 호환이 안 되는데, 이 말은 여러분이 FAT 파일시스템을 구현할 때 FAT16용 부트 레코드 구조체와 FAT32용 부트 레코드 구조체를 따로 선언해야 한다는 말이다. 볼륨이 어떤 파일시스템으로 이루어져 있는지를 조사해볼 때에는 0번 오프셋에서 32번 오프셋까지의 공통 항목의 내용을 조사하면 알 수 있게된다.

FAT16 부트 레코드



[그림 3-7] FAT16 부트 레코드 영역을 출력한 값

위 그림은 실제로 FAT16의 부트 레코드를 출력해 놓은 것이다. 그림에서 보이는 512Byte의 16진수 내용이 FAT16 부트 레코드의 모든 것이다. 위의 값들 중에서 바탕에 색깔을 칠해놓은 값들은 각각 의미가 있는 설정 값들인데, Windows가 FAT 파티션을 인식하는 데 필수적인 사항들이므로 꼭 적어주어야 하는 중요한 내용들이다. 그 외에 바탕에 색이 없는 영역들은 Windows가 해당 볼륨을 부팅할 때 사용하는 부트 코드 영역이다. 이 파티션을 부팅용으로 이용하지 않을 것이라면 전부‘0’으로 채워 넣어도 상관없는 영역이다. 이제부터 위 그림에서 색이 칠해져 있는 부분에 대해 하나씩 자세히 살펴보자.

이번 절을 읽으면서 위의 그림과 비교해 보는 것도 이해를 돕는 데 있어 좋은 방법 중 하나이다. 한 가지 유의해야 할 점은 FAT 파일시스템은 리틀 엔디언(Little Endian)으로 설계되었기 때문에 위의 그림에서 출력된 값들은 실제 저장한 값과 반대로 뒤집혀 있다는 것이다.



[그림 3-8] FAT16 부트 레코드 항목들

위 그림은 [그림 3-7]에서 보여준 데이터들이 어떤 항목인지를 보여주는 그림이다. 이제 위 그림에 있는 각각의 항목들을 자세하게 살펴볼 것이다. 항목 중에 흐리게 칠해진 항목들은 FAT16과 FAT32 둘 다 가지는 공통 항목을 의미하고, 진하게 칠해진 항목들은 FAT16 전용 항목을 의미한다.

FAT16과 FAT32 부트 레코드 공통 항목 설명





이쯤 되면 클러스터의 크기를 알 수 있게 된다.


Sector Per Cluster X Bytes Per Sector = 클러스터 크기


예를 들어보자. 클러스터당 섹터 수가 2이고, 섹터당 512Byte라면 2 X 512 = 1024Byte, 즉 클러스터의 크기는1KB가되는것이다.





Root Directory Entry Count 항목이 존재하는 이유는 FAT16의 경우 루트 디렉토리 영역이 따로 분리되어 있기 때문이다. 이 영역의 크기를 지정하기 위해서 위 항목이 존재하게 된다. FAT16에서는 루트 디렉토리에 넣을 수 있는 디렉토리나 파일의 수에 제한이 있는데 보통은 512개이며, 더 넣고 싶다면 Root Directory Entry Count 항목의 값을 변경하면 된다. 단, 루트 디렉토리의 크기가 부족하다고FAT16 파일시스템 사용 도중 마음대로 늘릴 수 없으니, 포맷을 할 때 신중히 결정해야 한다.







[표 3-6] Media 항목에 들어갈 수 있는 값들





지금까지 Offset 0~35에 해당하는 항목들을 살펴보았다. 여기까지는 FAT16과 FAT32가 동일하게 가지는 항목들이다. Offset 36부터는 FAT16과 FAT32가 각각 다른 항목들을 가지게 되므로 따로 설명하겠다.

FAT16 부트 레코드 항목 설명

이제부터 FAT16에 해당하는 항목들을 살펴보자. 주의해야 할 점은 위치(Offset) 값의 시작이 36부터라는 점이다.





지금까지 FAT16에 해당하는 항목에 대해 모두 알아보았다.
TAG :
댓글 입력
자료실

최근 본 상품0