본문 바로가기

Job Notes/File System

[펌] (2) FAT32 의 첫 번째 섹터(MBR)와 부트레코드

MP3 플레이어 제작에 있어서 가장 큰 걸림돌인 FAT32 파일시스템에 대해 알아보려고 합니다.^^


아래의 그림과 내용은

http://www.pjrc.com/tech/8051/ide/fat32.html

http://www.project-hf.net/blog/?no=38&category=5 사이트와

http://cafe.naver.com/carroty.cafe 사이트에 있는 유치뽕님, 당근이님, kkamcneko님의 자료를 참고하였습니다.


이외에도 자료를 제공해 주신 분들께 감사드립니다.






FAT32의 첫 번째 섹터의 구조는 아래의 그림과 같습니다.


마스터 부트 레코드(MBR)

사용자 삽입 이미지


FAT32의 "첫 번째 섹터"는 영어로 First Sector입니다. 다들 아시죠?^^;

첫 번째 섹터를 컴퓨터 용어로는 MBR 이라 부릅니다. (MBR은 Master Boot Record의 약자이구요.^^)

FAT32의 첫 번째 섹터의 용량은 아까 말씀드렸듯이 512 바이트 입니다. 실제로 계산해 볼까요?

위 그림을 보면서 계산해 보면,

446 + 16 + 16 + 16 + 16 + 2 = 512 바이트로 계산이 되네요.^^


여기서 맨 아래에 있는 [55 AA]는 16진수로서 "매직코드"라고 부르는 값입니다.

예를들어, SD 메모리를 FAT32형식으로 포맷했을 경우,

(SD메모리의) 첫 번째 섹터(MBR)에는 위의 그림과 같이 [55 AA]라는 값이 저장된다고 합니다.

즉, 위 그림에서 511번째에 55가 저장되고, 512번째에 AA가 저장되는 것입니다.^^


따라서 SD카드가 FAT32 형식으로 포맷되었는지 확인하는 방법은 MBR의 끝 부분에 [55 AA]가 있는지 없는지 체크하면 됩니다.^^




---------------------------------------------------------------------------------------

이제 파티션 테이블 Partition 1, Partition 2, Partition 3, Partition 4 에 대해 알아볼 차례입니다.^^

MBR에는 아래 그림처럼 총 4개의 파티션 정보가 존재합니다. (Partition 1,2,3,4를 파티션 테이블이라 부릅니다.^^)

Partition 1,2,3,4의 크기는 각각 16 바이트로 모두 같은 형식입니다. 그 형식은 아래와 같은데요,

사용자 삽입 이미지


위의 그림처럼 파티션 테이블인 Partition 1의 구조를 살펴보면, 16 바이트로서

16 바이트 안에 Boot Flag, CHS Begin, Type Code, CHS End, LBA Begin, Number of Sectors 라는 항목이 들어 있습니다.

여기서 파란색으로 표시한 Type Code 와 녹색으로 표시한 LBA Begin 부분만 신경쓰면 된다고 합니다.^^


Type Code 의 값을 보면 현재의 파티션이 FAT16인지, FAT32인지 알 수 있습니다.

예를 들어,Type Code 에 0x0B 또는 0x0C 값이 들어 있으면 현재의 파티션이 FAT32 파일시스템임을 나타냅니다.

LBA Begin은 SD메모리의 파티션 시작 주소를 가지고 있습니다. 파티션 시작 주소는 = 부트 레코드 주소를 나타냅니다.

부트 레코드는 후에 배우게 될 것인데, 간단히 말하자면 해당 파티션(C: 또는 D: 드라이브)의 첫 번째 섹터를 의미합니다. 즉, MBR에 있는 파티션 테이블에서 LBA Begin값을 참조하여 부트레코드 섹터(PBR)를 찾아 가는 것입니다.^^



-------------------------------------------------------------------------------------

이번에는 부트레코드 섹터(PBR)에 대해 알아보겠습니다.^^

파티션 테이블(Partition 1)의 LBA Begin에 들어있는 값은 위에서 언급했듯이, 부트레코드의 주소입니다.

이 주소값을 참조해서 부트레코드 섹터를 찾아가게 됩니다. (1 섹터는 512 바이트입니다.^^)

참고할 점은 MBR과 부트레코드는 다른 섹터라는 것입니다. 부트레코드의 정확한 용어는 파티션 부트 레코드입니다.

영어로 Partition Boot Record 이고 약자는 PBR 입니다.^^ 따라서 약자만 봐도 MBR과 PBR은 다른 영역임을 알 수 있습니다.


다시 정리하면,

부트 레코드 = 파티션 부트 레코드 = Partition Boot Record = PBR = 부트섹터로서 모두 같은 의미를 가진다고 볼 수 있습니다.^^


512 바이트의 크기를 가진 부트 레코드 안에는 아래의 그림과 같이 Volume ID라고 부르는 영역이 존재하는데,

이 부분이 중요한 것 같습니다.^^ 즉,


Bytes Per Sector = 0002

Sectors Per Cluster

Number of Reserved Sectors

Number of FATs = 02

Number of Per FAT

Root Directory First Cluster

Signature


이렇게 7개의 항목이 존재합니다. 이것을 통틀어 Volume ID라고 하는 것 같습니다.

(몇 가지 영역이 더 있지만, 위의 7개만 파악하면 된다고 하네요^^)


파티션 부트 레코드(PBR)

사용자 삽입 이미지



아래는 위의 그림을 표로 자세히 나타낸 것입니다. 즉, 아래의 표가 Volume ID 입니다.

간단히 훑어보고 넘어가시면 될 것 같습니다.^^

사용자 삽입 이미지
 


----------------------------------------------------------------------------------------

위의 내용들을 정리하면,


(MBR섹터에 들어 있는) 파티션 테이블(Partition 1)의 정보(LBA Begin)를 통해 부트 레코드 섹터를 찾아가 다시 부트 레코드 섹터에 들어 있는 Volume ID를 참고해서 코드를 수행하는 것으로 요약되는 것 같습니다.^^