* 들어가기에 앞서 본 스터디에 사용 된 OS 종류 및 VMware 종류에 대해 기술하고 시작하고자 한다. 다른 버전이어도 상관은 없으나, 사용 상 불편한 부분까지 본 블로그에서 일일히 다루어 주지는 않는다. 물론, 질문을 남겨줄 경우, 따로 확인해서 답변을 드리긴 하겠다.

  - 필자 E-Mail : wotmd9408@naver.com

  - 가상머신 : VMWare WorkStation 12

  - OS : Window7 Enterprise K 64bit

  - RAM : 1GB

  - 나머지 사항은 기본적인 세팅으로 설정하였다.

  - 추가 필요 Tool : Hxd(https://mh-nexus.de/en/downloads.php?product=HxD)


파일시스템은 현대 모든 운영체제의 기본 구성 요소로 '컴퓨터에서 파일 또는 자료를 쉽게 발견 및 접근할 수 있도록 보관하는 조직 또는 체계'를 의미한다.

파일시스템은 크게 디스크, 네트워크 그리고 특수용도의 파일 시스템으로 나눌 수 있으며, 이번에 다루기 시작해 한동안 다룰 파일 시스템은 FAT32(Window에서 사용되는 파일 시스템. 기존 XP까지 주력 파일시스템으로 사용되었으며 Window7 이후 NTFS를 주력으로 사용 중)이다.


파일시스템 파트는 일단 MicroSoft사 OS인 Window 파일시스템부터 시작할 예정이며 가장 먼저 FAT32로 진행 할 예정이다.


FAT32에 대해 이야기하기 전에, 간단이 짚고 넘어가야 할 부분이 있다. 바로 MBR이다.

Master Boot Record(이하 MBR)은 간단히 말하면 디스크의 정보를 담고 있는 영역을 말한다. 모든 디스크의 시작 지점(0번 Sector)부터 512Byte의 크기를 가지고 있으며, 그 안에는 Master Boot Code와 Partition Table Area, 그리고 Signature를 포함하고 있습니다.

  * 아래 그림에 대한 실제 실습 과정은 다음 FAT32 파트에서 다루도록 한다.

<그림 1. MBR 구조>


위와 같이 크게 세 부분으로 구분되어있는 MBR은 전체 512 Byte 중 대부분을 부트코드로 채우고 있다. 또한 파티션 테이블(그림 1의 Partition Area)를 가지고 있는데, 이는 MBR의 가장 최종목표가 바로 부팅임을 알려주고 있다. 


MBR에서 가장 많은 영역을 차지하는 부분은 부트코드인데 440Byte 크기를 차지하고 있다. 부트코드는 부팅을 위해 파티션 내의 BR을 호출하는 과정이 프로그래밍 되어있으며 이를 위한 파티션 테이블 확인, 그리고 각 파티션의 부팅가능 여부를 확인하는 루틴이 들어있다. 또한 디스크의 정상여부를 판단해 예외처리를 진행하며 최종적으로 Start LBA(Logical Block Addressing, 논리 블록 어드레스)를 계산하여 해당 파티션의 Boot Record를 호출함으로서 그 임무를 다하게 된다.

어떻게 보면 전체 섹터에서 그렇게 큰 부분을 차지하지는 않는 부트코드지만 이 부분이 문제가 있을경우 PC가 정상적으로 부팅이 되지 않기 때문에 가장 중요한 부분이라고 보면 되겠다.


그다음으로 중요하게 봐야 할 부분은 파티션 테이블 영역이다. 총 64 Byte의 크기를 가지고 있는 파티션 테이블은 개당 16 Byte씩 총 4개의 파티션  테이블을 차례로 갖는다. 각 파티션에 대한 자세한 내용은 아래서 더 다루어 보기로 한다.

이름

 Bootable Flag

offset

 0

Size

1 Byte 

 Value

   0x80(부팅가능)     0x00(부팅불가) 

설명 

부팅 가능한 파티션임을 나타내는 Flag로 4개의 파티션 중 1개 이상에 0x80 Flag가 존재하면 부팅이 가능하다. 

이름

 Starting CHS Address

offset

 1~3

Size

3 Byte 

 Value

  가변적인 값

설명 

CHS 모드로 표현하는 파티션의 시작 번지로 현재는 거의 사용하지 않는다. 현재 사용되는 거의 대부분의 OS는 LBA 모드를 이용하고 있으며 이로인해 이부분이 0으로 채워져도 아무런 문제가 없다.

이름

 Partition Type

offset

 4

Size

1 Byte 

 Value

0x07(NTFS)
 0x0B(FAT32 CHS mode)
 0x0C(FAT32 LBA mode)

설명 

파티션 타입을 표현한 값으로 현재까지 나온 파티션들은 각각의 고유 값을 가지고 있다. 이 글에서 모든 파티션 타입을 다 다루지는 않을 예정이며 주로 많이 쓰이는 파티션 타입은 Value값을 참고하기 바란다.

이름

 Ending CHS Address

offset

 5~7

Size

3 Byte 

 Value

가변적인 값

설명 

CHS 모드로 표현하는 파티션의 끝 번지. Start CHS Address와 같이 현재는 거의 사용하지 않으며 마찬가지로 0으로 채워져도 부팅에는 아무런 문제가 없다.

이름

 Start LBA Address

offset

 8~11

Size

4 Byte 

 Value

가변적인 값

설명 

LBA 모드로 표현하는 파티션의 시작 번지. 현존하는 거의 대부분의 OS는 LBA 모드로 파티션을 사용하고 있다. 

이름

 Size in Sector

offset

 12~15

Size

4 Byte 

 Value

가변적인 값

설명 

파티션이 사용하는 Sector의 총 개수를 의미하며, 하나의 Sector는 512 Byte(Default value)이므로 파티션의 총 용량은 Size in Sector * 512가 된다.






<표 1. 파티션 영역 세부 분석>


[표 1]을 보다보면 CHS 부분은 현재는 거의 사용하지 않으며, 0으로 채워도 부팅에는 지장이 없다고 설명해 놓았다. 필자가 분석가는 아니지만, 많은 분들이 실제로 딱히 저부분은 크게 알 필요가 없다고 말하기도 하고, 어느경우는 무시하고 바로 LBA만 보라고 하는 경우도 있다. (필자도 여태까지 공부하면서 CHS 부분을 봐본적은 사실 없다.) 

물론 위에 말한 내용이 '요새 설정에 있어서'는 맞는 말이기는 하다. 여러분이 사용하는 OS의 파일 시스템 대부분이 LBA 모드를 사용하고 있기 때문이다. 그러나 잊지 말았으면 하는점이 있다. IT에 있어서, 아니 세상에 있어서 '절대' 라는 것은 단 하나밖에 존재하지 않는다. 바로 '생명은 태어나면 반드시 언젠간 죽음을 맞이한다는 것' 이다. 즉, 그 이외의 모든것들은 언제나 항상 맞는것은 아니라는 점이다. 

여러분이 분석을 진행하다 보면 대부분의 확률로 LBA 모드의 파일 시스템을 보게 될 것이다. 그러나 CHS 모드나 LBA 모드를 결정하는 것은 전적으로 어플리케이션이다. 함부로 단정짓지 않길 바란다. 여기에 기술하지는 않겠지만 인터넷을 찾아보면 각각의 파티션 타입을 설명해 놓은 글이 존재한다. 그리고 그것들은 단순히 파티션의 종류만 설명해 놓은 것이 아닌 CHS 모드인지 LBA 모드인지 역시 함께 서술해 놓고 있으니 참고하며 공부하길 권한다.

위 내용을 토대로 각각의 파티션별 디스크 최대 인식 용량을 구해보도록 하자.

위의 [그림 1]을 다시 한번 보면 MBR 내 파티션 테이블 영역은 0x1BE부터 0x1FD까지 총 64 byte를 차지하고 있다. 그리고 그 안에서 각각의 파티션은 16 Byte씩 최대 4개의 파티션을 가질 수 있다. 또한 각 파티션의 Size는 [표 1]의 Size in Sector 부분을 참고하면 찾을 수 있다. 

총 4 Byte의 크기를 가지고 있는 이 영역의 Max 값을 쉽게 표현해 보자. 16진수는 2의 4승만큼의 값을 가진다. 그런데 4 Byte의 값을 가지는 Size in Sector는 총 8개의 16 진수 값을 가질 수 있다. 즉, 최대의 개수는 2의 4승이 8개가 있다는 의미이기 때문에 2의 32승만큼의 섹터 값을 가진다. 

일반적인 파일시스템의 경우 섹터당 512 Byte의 값을 가진다. 그러면 Size in Sector 값과 512를 곱해줄 경우 해당 파티션의 용량이 구해지는데 최대 용량의 경우 가장 높은 값은 2의 32승 * 512(2,199,023,255,552 Byte)가 된다. 이것을 이제 1024로 지속적으로 나누게 되면 Byte -> KByte -> MByte -> GByte -> TByte 순이 된다. 

이렇게 계산할 경우 계산되는 MBR 구조에서 각각의 파티션 별 디스크 최대 인식 용량은 2TB가 된다. 이는 MBR 구조의 큰 단점 중 하나인데, 과거에는 파일별 용량이 크지 않았으나 상관이 없었으나, IT가 발전되면서 프로그램의 용량이 늘어남에 따라 곧 한계가 올 것으로 보인다. 

이를 해결하기 위해 나온 구조가 GPT구조이다. 나중에 기회가 되면 따로 설명하겠지만, GTP구조는 MBR의 구조적 문제를 해결하기 위해 만들어진 구조로 2TB 이상의 파티션도 인식 가능하다는 장점이 있다.


이상으로 파일시스템 중 FAT32에 들어가기에 앞서 기본 베이스가 될 수 있는 MBR구조에 대해 알아보았다. 다음 포스팅부터는 FAT32에 대해 자세히 알아보도록 한다.


* 참고 : 임베디드 개발자를 위한 파일시스템의 원리와 실습(정준석, 정원용 공저), 한빛미디어

Posted by Latte_
,