3. FAT32 파일시스템의구조 1) 마스터부트레코드 (MBR) 하드디스크의첫번째섹터를 MBR 이라고하며, 512 바이트의크기입니다. MBR 에서는해당디스크의파티션에대한정보를담고있으며, 아래 < 그림1 > 과같은구조를갖습니다. < 그림1. 마스터부트레코드구조 > MBR

Similar documents
Microsoft PowerPoint - 알고리즘_1주차_2차시.pptx

Microsoft PowerPoint - [#4-2] File System Forensic Analysis.pptx

Outline 1. FAT12/16/32 ü Introduction ü Internals ü Directory Structure ü Example

제목을 입력하세요

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

PowerPoint Presentation

ISP and CodeVisionAVR C Compiler.hwp

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - ch07 - 포인터 pm0415

네이버블로그 :: 포스트내용 Print VMw are 에서 Linux 설치하기 (Centos 6.3, 리눅스 ) Linux 2013/02/23 22:52 /carrena/ VMware 에서 l

8.파일시스템과 파일 복구

(Microsoft PowerPoint - \274\274\271\314\263\252 - OI Project - 3\306\355.pptx)

Microsoft PowerPoint - [#3-2] FAT File System - exFAT.pptx

BMP 파일 처리

8.파일시스템과 파일 복구

GNU/Linux 1, GNU/Linux MS-DOS LOADLIN DOS-MBR LILO DOS-MBR LILO... 6

ADP-2480

휠세미나3 ver0.4

-. Data Field 의, 개수, data 등으로구성되며, 각 에따라구성이달라집니다. -. Data 모든 의 data는 2byte로구성됩니다. Data Type는 Integer, Float형에따라다르게처리됩니다. ( 부호가없는 data 0~65535 까지부호가있는

Tablespace On-Offline 테이블스페이스 온라인/오프라인

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

OCW_C언어 기초

SRC PLUS 제어기 MANUAL

Microsoft Word - release note-VRRP_Korean.doc

Windows Server 2012

Microsoft Word - How to make a ZigBee Network_kr

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>


Mango-E-Toi Board Developer Manual

Microsoft PowerPoint - o8.pptx

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

슬라이드 1

강의 개요

Introduction to Computer Science

H3250_Wi-Fi_E.book

PowerPoint 프레젠테이션

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc

API 매뉴얼

chap 5: Trees

WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

BY-FDP-4-70.hwp

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

금오공대 컴퓨터공학전공 강의자료

adfasdfasfdasfasfadf

Microsoft PowerPoint - 02_Linux_Fedora_Core_8_Vmware_Installation [호환 모드]

6. 설치가시작되는동안 USB 드라이버가자동으로로드됩니다. USB 드라이버가성공적으로로드되면 Setup is starting( 설치가시작되는중 )... 화면이표시됩니다. 7. 화면지침에따라 Windows 7 설치를완료합니다. 방법 2: 수정된 Windows 7 ISO

PowerPoint Presentation

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

버퍼오버플로우-왕기초편 3.c언어에서버퍼사용하기 버퍼는 임시기억공간 이라는포괄적인개념이기때문에여러곳에존재할수있습니다. 즉, CPU 에도버퍼가존재할수있으며, 하드디스크에도존재할수있고, CD- ROM 이나프린터에도존재할수있습니다. 그리고앞의예제에서보신바와같이일반프로그램에도

RHEV 2.2 인증서 만료 확인 및 갱신

Microsoft PowerPoint - chap03-변수와데이터형.pptx

MySQL-.. 1

설계란 무엇인가?

디지털포렌식학회 논문양식

Mango220 Android How to compile and Transfer image to Target

KAA2005.9/10 Ãâ·Â

11장 포인터

7장. 교착상태(deadlock)

JVM 메모리구조

PowerPoint 프레젠테이션

1. Execution sequence 첫번째로 GameGuard 의실행순서는다음과같습니다 오전 10:10:03 Type : Create 오전 10:10:03 Parent ID : 0xA 오전 10:10:03 Pro

°ø±â¾Ð±â±â

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Microsoft Word - FunctionCall

시스템 사용자 계정 관리

Freecom Mobile Drive XXS 사용자에게! Freecom Mobile Drive XXS 외장형 하드 드라이브를 선택해 주셔서 감사합니다. 최 적의 사용과 성능을 위해 본 제품을 사용하기 전에 본 설명서를 주의 깊게 읽을 것 을 권합니다. Freecom T

Microsoft Word _whitepaper_latency_throughput_v1.0.1_for_

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - 리눅스부팅과정.pptx

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

UI TASK & KEY EVENT

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Office 365, FastTrack 4 FastTrack. Tony Striefel FastTrack FastTrack

유량 MODBUS-RTU Protocol UlsoFlow시리즈초음파유량계는 MODBUS-ASCII와 MODBUS-RTU를지원한다. 여기서는 MODBUS-RTU를기준으로설명한다. 유량계의국번은 0 ~ 6,5535 까지지정할수있다. ( 단, 0, 10, 13, 38, 42

슬라이드 1

Spring Boot

목차 1. 제품 소개 특징 개요 Function table 기능 소개 Copy Compare Copy & Compare Erase

PowerPoint Presentation

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

UI TASK & KEY EVENT

PowerPoint 프레젠테이션

가. 도트매트릭스제어하기 단일 LED와는다르게도트매트릭스를구동시는구동전류가프로세서에서출력되는전류보다사용량을더많이필요하기때문에 TTL 계열의 IC로구동시키기에는무리가따른다. 이러한문제를해결하기위해서사용전압, 전류정격이높은달링턴트랜지스터가어레이형태로들어있는 ULN2803을

Bochs \(x86 에뮬레이터\)에서 MicroC/OS-II 실행하기

[ 네트워크 1] 3 주차 1 차시. IPv4 주소클래스 3 주차 1 차시 IPv4 주소클래스 학습목표 1. IP 헤더필드의구성을파악하고요약하여설명할수있다. 2. Subnet ID 및 Subnet Mask 를설명할수있고, 각클래스의사용가능한호스트수와사설 IP 주소및네트

SIGIL 완벽입문

ThinkVantage Fingerprint Software

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

IP 심화 라우팅프로토콜적용시 라우팅테이블에서 이니셜이있는네트워크를설정하는것 : onnected 직접연결된네트워크를의미한다. 그러므로라우팅은 나는이런네트워크와연결되어있다. 를직접연결된라우터들에게알려주는것 1>en 1#conf t 1(config)#router rip 1

KARAAUTO_4¿ù.qxd-ÀÌÆå.ps, page Normalize

Microsoft Word - Armjtag_문서1.doc

SmartUpdaterPlus 설치 설치파일 다운로드 설치파일 다운로드하여 실행하여 순서에 따라 스마트 업데이트 플러스를 설치합니다. [스마트 업데이트 플러스 다운로드] 버튼을 클릭하여 설치파일 다운로드합니다. 소프트웨어 사용권에 동의하기를 누릅니다. 압축을 해제합니다

Transcription:

1. FAT 파일시스템이란? FAT(File Allocation Table, ' 파일할당테이블') 는 MS ' 社 의 MS-DOS의파일시스템에서하드디스크의 파일의위치정보등을기록하기위한영역을말합니다. 나중에윈도우에도들어가면서 FAT는파일시스템 그자체를가리키게되었습니다. FAT는 FAT12, FAT16, FAT32 총 3 종류가있으며, FAT 뒤의숫자는각파일에대한클러스터의위치와 순서를기록한 FAT 엔트리의비트수를가리킵니다. FAT12는 MS-DOS 초기시절에주로쓰였으며, 플로피디스크에서는여전히이용되고있습니다. FAT16은 32MB 이상하드디스크를지원하기위해 MS-DOS 3.0 과함께나왔으며, 윈도우 95까지주로이용 되었습니다. 저용량이동식드라이브에서는여전히유일한형식입니다. FAT32는 2GB 이상의하드디스크의지원을위해윈도 95 OSR2 에서지원이시작되었습니다. 파일의최대크기가 4GB 에그치며, 윈도우 2000 이후의운영체제에서최대 32GB로포맷이가능한문제로 인해현재는 NTFS 로대체되는추세이지만, 윈도우 98, 윈도우 Me와같은구형운영체제또는리눅스등타 운영체제또는 MP3 플레이어, 카메라, 게임기등에서의이용을위해서여전히이용되고있습니다. 2. 섹터와클러스터 1) 섹터 (Sector) 데이터를저장하는최소단위이며, 일반적인섹터의크기는 512 바이트입니다. 섹터에는데이터를저장할수있는공간이외의영역이존재합니다. 이부분은운영체제나프로그램이볼수 없는영역이며주로하드디스크컨트롤러가하드디스크를작동시키는데필요한것들입니다. - ID 정보(ID information) : 섹터번호, 위치에대한정보인데디스크상에서섹터의위치를확인하기위한정보. - 동기화필드(synchronization fields) : 하드디스크컨트롤러가섹터를읽기동작에필요한가이드역할을하는부분. - 데이터영역 : 데이터저장공간(512 byte) - ECC : 데이터의무결성을검사하기위한에러정정코드가존재하는부분. - 빈공간 (gabs) : 섹터사이를구분해주는빈공간. 2) 클러스터(Cluster) 섹터를일정단위로묶어놓은것입니다. 도스에서사용하는파일시스템인 FAT16 방식에서인식할수있 는주소를섹터마다배정하게되면배정가능한주소의수가모자라서하드디스크용량인식에문제가생기게 되어서고육지책으로고안해낸방법이섹터를여러개묶어서주소한개를배정해서인식할수있는용량 을더크게확장시킨방식입니다. 64MB ( 1 섹터 = 1 클러스터 ), 128MB ( 2 섹터 = 1 클러스터 ), 1GB ( 8 섹터 = 1 클러스터 ) 로정의됩니다. (1 섹터 = 512 바이트) - 1 -

3. FAT32 파일시스템의구조 1) 마스터부트레코드 (MBR) 하드디스크의첫번째섹터를 MBR 이라고하며, 512 바이트의크기입니다. MBR 에서는해당디스크의파티션에대한정보를담고있으며, 아래 < 그림1 > 과같은구조를갖습니다. < 그림1. 마스터부트레코드구조 > MBR은영역별로 Boot Code + Partition 1 + Partition 2 + Partition 3 + Partition 4 + 55 AA 로나누어지며, 크기로보면 446 바이트 + 16 바이트 + 16 바이트 + 16 바이트 + 16 바이트 + 2 바이트 = 512 바이트를이루고있습니다. 말로설명하자면 446바이트의 Boot Code를지나연속적으로 4개의 Partition 정보를가지고있고, 511번째바이트 에 55를마지막 512번째바이트에 AA 값을가지고있습니다. 마지막 511, 512 번째바이트값을보고어떤파일시스템인지구분합니다. 위 < 그림1 > 에서보시는것과같이 55 AA 값일경우이시스템은 FAT32 포맷형식임을알수있으며, 이 값을매직코드라고부릅니다. MP3 플레이어의경우에는저용량의 SD카드를많이사용하므로 Partition 1 의정보만사용하게되며, PC같은 고용량의하드로갈수록 Partition 정보를더많이사용할수도있습니다. 파티션테이블 Partition 1 의구조를보면 < 그림2 > 와같이 16Byte Patition Entry 정보를가지고있습니다. < 그림2. 16Byte Patition Entry > - 2 -

그림에서는색깔로표시된영역인 Type Code 와 LBA Begin 섹션의정보를얻어오면되며, Type Code 는 FAT의타입을 LBA Begin은해당파티션이시작되는주소를보여줍니다. 첫째로 Type Code 의값을보면현재어떤파일시스템인지를알수있습니다. 만약, 그값이 0x0B 또는 0x0C이면현재의파일시스템은 FAT32 인것입니다. 두번째로 LBA Begin의값을참조하여, 뒤에나올파티션부트레코드(PBR) 로이동하게됩니다. MBR 의실제데이터를보고복습하도록하겠습니다. < 그림3. 마스터부트레코드데이터 > < 그림3 > 에서 Boot Code 446바이트를지나 Partition 1 의정보를보면, Partition1 = 80 01 01 00 0B 07 60 DA 27 00 00 00 D9 DB 01 00 임을알수있습니다. 이는그림의구조이며빨간글자부분이가장중요한정보인 < 2 > 16Byte Patition Entry, Type Code 와 LBA Begin 부분입니다. - 3 -

Type Code = 0B 이고, LBA Begin = 27 00 00 00 임을알수있습니다. 여기서한가지주의해야할점이있는데, 2 바이트이상의값은역순으로저장되므로, LBA Begin 값을읽을때 리틀엔디안 으로읽어야합니다. 따라서, Type Code = 0B 이므로현재의파티션은 FAT32 파일시스템임을알수있습니다. LBA Begin = 27 00 00 00로서 PBR 의시작주소를나타냅니다. 따라서역으로 00 00 00 27 섹터를찾아 가보면그곳의 512 바이트가파티션부트레코드(PBR) 가됩니다. 00 00 00 27은 16진수이므로섹터번호 가몇번인지알아보기위해 10진수로바꿔보면 00 00 00 27 = 39 가됩니다. 즉, SD메모리의 39번째섹터가 PBR 의주소가되는것입니다. ( 39 라는값은 SD 카드의용량에따라변합니다. ) 마스터부트레코드 C 소스를보면 < 그림4 > 에서빨간글씨로표시한부분이 Type Code와 LBA Begin이됩니다. < 그림4. 마스터부트레코드 C 소스 > 2) 파티션부트레코드 (PBR) 마스터부트레코드와전혀다른영역인파티션부트레코드( 부트섹터) 에대해알아보겠습니다. MBR과마찬가지로 PBR은 512 바이트의크기를가지며, Volume ID 라는영역이존재합니다. Volume ID는 7 개정도의항목으로나뉘며, 구조는 < 그림5 > 과같습니다. < 그림5. 파티션부트레코드구조 > - 4 -

Field Microsoft's Name Offset Size Value Bytes Per Sector BPB_BytsPerSec 0x0B 16 Bits Always 512 Bytes Sectors Per Cluster BPB_SecPerClus 0x0D 8 Bits 1,2,4,8,16,32,64,128 Number of Reserved Sectors BPB_RsvdSecCnt 0x0E 16 Bits Usually 0x20 Number of FATs BPB_NumFATs 0x10 8 Bits Always 2 Sectors Per FAT BPB_FATSz32 0x24 32 Bits Depends on disk size Root Directory First Cluster BPB_RootClus 0x2C 32 Bits Usually 0x00000002 Signature (none) 0x1FE 16 Bits Always 0xAA55 < 표1. Volume ID 영역 > 위 < 그림5 > 과 < 표1 > 을보시면파티션정보를얻을수있는데크기는 512 바이트이며, Sectors Per Cluster는 파티션의용량에따라다릅니다. SD카드 64MB의경우 1섹터는 1 클러스터, 128MB의경우 2섹터가 1 클러스터, 1GB의경우 8섹터가 1 클러스터입니다. 그래서여러가지용량의 SD카드를사용하려면각각에맞는정보를 기록해두어야합니다. 또한 Root Directory First Cluster 주소와 Number of Reserved Sectors 정보가필요합니다. 여기서예약된공간을알아야하는이유는아래그림에서의 FAT #1 위치를파악하기위함으로써위의 Volume ID + 예약된공간의위치가 FAT #1 자리가됩니다. 또한아래그림에서 FAT #2는일종의백업영역으로 FAT #1과동일한정보를가지고있습니다. 그리고루트디렉터리클러스터는아래연두색의 Clusters의제일첫시작 부분을가리킵니다. < 그림6. FAT32 파일시스템전체영역 > - 5 -

PBR 의실제데이터를보고복습하도록하겠습니다. 아래 < 그림7 > 에있는데이터는 MBR에서의 LBA Begin을참조한 39번째 PBR 데이터입니다. < 그림7. 파티션부트레코드데이터 > 위의 < 그림7 > 의 PBR 실제데이터값을보고 Volume ID 7 가지항목을찾아보면, 1. Bytes Per Sector ( 섹터당바이트수) 00 02 리틀엔디안 0200 = 512 바이트 2. Sectors Per Cluster ( 클러스터당섹터수) 01 3. Number of Reserved Sectors ( 예약된공간) 26 00 리틀엔디안 0026 = 38개 4. Number of FATs (FAT 의개수) 02 5. Sectors of Per FAT (FAT 당섹터수) A9 03 00 00 리틀엔디안 0000 03A9 = 937개 6. Root Directory First Cluster ( 루트디렉터리의첫번째섹터) 02 00 00 00 리틀엔디안 0000 0002 7. Signature ( 매직코드) 55 AA 리틀엔디안 AA 55 위와같이 Volume ID 정보를알면 FAT#1, FAT#2 영역과 MP3 파일이들어있는 Clusters 영역을찾아갈수있습니다. - 6 -

파티션부트레코드 C 소스를보면 < 그림8 > 에서빨간글씨로표시한부분이 Volume ID 가됩니다. < 그림8. 파티션부트레코드 C 소스 > 위의 < 표1 > 에서언급했던영역의크기와위치를구하는공식은아래와같습니다. 또한 LBA_Begin 값을 알아보기위해선 < 그림4 > 마스터부트레코드 C 소스부분도참고하셔야합니다. 1. FAT 시작번지 2. FAT 당섹터수 = LBA_Begin + BPB_RsvdSecCnt; = BPB_SecPerClus; 3. 루트디렉터리주소 = LBA_Begin + BPB_RsvdSecCnt + (BPB_NumFATs BPB_FATSz32); 4. 루트디렉터리의첫번째섹터 = BPB_RootClus; 지금까지설명드린내용을하나로본다면, FAT32 파일시스템은 MBR + Reserved Sectors + PBR + Reserved Sectors + FAT #1 + FAT #2 + Clusters 즉, < 그림9 > 와같이 7 가지영역으로나타낼수있습니다. - 7 -

< 그림9. FAT32 파일시스템의전체구조 > 그럼한번위의영역을찾아가기위한과정을처음부터다시한번생각해보도록하겠습니다. 1. 제일처음 MBR에서매직코드를읽어 FAT 파일시스템인지확인 2. MBR에서파티션1의 PBR 위치와 FAT 타입을확인 ( FAT16 / 32 ) 3. PBR의처음섹터인 Volume ID 에서섹터당클러스터개수, 루트디렉터리클러스터주소, 예약섹터개수확인 4. PBR 의첫번째섹터위치 + 예약된공간을가지고 #FAT 1 위치확인 - 8 -

간단하게위의과정을거치면이젠최소한 이터영역이어디부터시작하는지알수있습니다. FAT32에서해당파티션이어디에있는지파일및디렉터리의데 3) FAT 엔트리 이처럼 FAT #1, FAT #2 영역에는클러스터가위치하는정보를담고있습니다. 클러스터에는그토록찾고싶었던 MP3 파일이들어있습니다. FAT 엔트리는 FAT 정보가위치한 FAT #1, FAT #2 영역을말합니다. FAT 정보가있는첫번째섹터의위치(FAT 엔트리의첫번째섹터) 를계산해보면, FAT 시작주소 = PBR 어드레스 + 예약된공간 ( 예약된공간은 PBR 섹터를포함한값입니다.) FAT 시작주소 = 0x00000027 + 0x26 = 0x4D 따라서 64MB SD카드의 FAT 엔트리의첫번째섹터는 0x4D 입니다. 아래 < 그림10 > 데이터는 FAT 엔트리의첫번째섹터에들어있는값입니다. SD메모리를 FAT32 형식으로포맷을한후에, 아무런파일도저장해놓지않았다면 < 그림10 > 과같이한 줄을제외하고는모두 0 으로나옵니다. < 그림10. 파일을저장하지않은경우 > - 9 -

다음으로 MP3 파일을 SD메모리에저장한후다시 FAT 의첫번째섹터를읽으면, 아래 < 그림11 > 과같이데이터가출력됩니다. 데이터는일정한패턴으로나타나게됩니다. < 그림11. 파일을저장한경우 > FAT 엔트리는위의데이터에보이는패턴처럼, 4 바이트구조로되어있습니다. 다시말하면아래와같이 <4 바이트> <4 바이트> <4 바이트> <4 바이트> [FAT 엔트리] [FAT 엔트리] [FAT 엔트리] [FAT 엔트리] [FAT 엔트리] [FAT 엔트리] [FAT 엔트리] [FAT 엔트리] [FAT 엔트리] [FAT 엔트리] [FAT 엔트리] [FAT 엔트리] 이런식으로 4 바이트크기를가진 [FAT 엔트리] 가모여서 FAT#1, FAT#2 를이루게됩니다. 4) FAT 루트디렉터리 다음은루트디렉터리엔트리입니다. 루트디렉터리엔트리는루트디렉터리클러스터(Root Directory First Cluster) 의제일처음시작되는부분입니다. 루트디렉터리라는말은우리가흔히말하는루트를말하고 ( 디렉 터리의최상위영역예를들어 일반적으로 C:\, D:\) 이부분에는어떤파일과디렉터리가있는지에대한정보를갖고있습니다. 2 번째클러스터에해당하는영역부터시작됩니다. 그리고일반서브디렉토리를생성하면서브디렉토리 에한하여그디렉터리내부에어떤파일과디렉터리가있는지정보가필요하므로앞서말한루트디렉터리엔트리와 동일한구조를갖는디렉터리엔트리형식을갖게됩니다. 물론서브디렉토리는다른클러스터에생성됩니다. - 10 -

디렉터리엔트리는 32 바이트크기로나누어져있는데, 아래와같은구조를같고, 1섹터당 16개의디렉터리 엔트리개수를갖고있습니다. < 그림12. 디렉터리엔트리개수 > Field Microsoft's Name Offset Size Short Filename DIR_Name 0x00 11 Bytes Attrib Byte DIR_Attr 0x0B 8 Bits First Cluster High DIR_FstClusHI 0x14 16 Bits First Cluster Low DIR_FstClusLO 0x1A 16 Bits File Size DIR_FileSize 0x1C 32 Bits < 표2. 디렉터리엔트리영역 > 그럼이제클러스터영역에존재하는루트디렉터리에대해알아보겠습니다. 루트디렉터리는 FAT#2 영역바로다음부터시작합니다. 즉, 클러스터가시작되는첫번째섹터부터를말합니다. 이제위치를알았으므로, 프로그램을실행하려면루트디렉터리주소를계산하는방법을알아야합니다. 루트디렉터리주소 = PBR 주소값 + 예약된공간 + ( FAT 개수 FAT 당섹터수 ) 루트디렉터리주소 = 0x00000027 + 0x0026 + ( 0x02 0x000003A9 ) = 0x0000079F = 1951 이계산식을쉽게이해할수있도록아래에 < 그림13 > 으로나타내었습니다. < 그림13. 루트디렉터리주소계산 > - 11 -

Volume ID는아래와같이 7 개의항목이있는데, 루트디렉터리주소계산에사용된항목은 3, 4, 5 번입니다. 1. Bytes Per Sector ( 섹터당바이트수) 00 02 리틀엔디안 0200 = 512 바이트 2. Sectors Per Cluster ( 클러스터당섹터수) 01 3. Number of Reserved Sectors ( 예약된공간) 26 00 리틀엔디안 0026 = 38개 4. Number of FATs (FAT 의개수) 02 5. Sectors of Per FAT (FAT 당섹터수) A9 03 00 00 리틀엔디안 0000 03A9 = 937개 6. Root Directory First Cluster ( 루트디렉터리의첫번째섹터) 02 00 00 00 리틀엔디안 0000 0002 7. Signature ( 매직코드) 55 AA 리틀엔디안 AA 55 그럼루트디렉터리의구조에대해알아보겠습니다. 루트디렉터리는아래의 < 그림14 > 에서처럼, 디렉터리엔트리로구성되어있습니다. SD 메모리에 MP3 파일을 2개넣었으므로디렉터리엔트리의개수도 2 개가됩니다. < 그림14. 루트디렉터리섹터 > - 12 -

디렉터리엔트리는 32 바이트로구성되어있습니다. 위의그림을보면 MP3 파일한개는 32바이트의디렉 터리엔트리를가지고있음을알수있습니다. 즉, 디렉터리엔트리는 MP3 파일이시작되는곳을알려주는역할을 하므로디렉터리엔트리에들어있는값만파악하면실제로 MP3 파일이시작되는클러스터를찾아갈수있습니다. 아래 < 그림15 > 같이빨간글씨로표시한부분만파악하면됩니다. 즉, Cluster Number 만이관심사항입니다. 또한디렉터리엔트리는 32 바이트이므로아래의구조체도 32 바이트인것을알수있습니다. < 그림15. 디렉터리엔트리 C 소스 > SD 메모리에들어있는파일은위에서말한바와같이, ABBA.mp3과 MORNING.mp3 입니다. 그리고이렇게파일 2 개가저장되어있을때, 클러스터의첫번째섹터에는 " 디렉터리엔트리" 가 2 개생성됩니다. 4. FAT32 파일액세스 디렉터리엔트리에서파일의시작클러스터주소를추출할수있기때문에이제는파일이어디서부터시작되는지찾아갈수있습니다. 그러나파일의시작클러스터에서 EOF(End of File) 까지클러스터가연속적으로붙어있지않을경우가있습니다. 예들들어, 포맷을한뒤 ( 아무파일도없이깨끗한상태또는파일의삭제를한번도안한매체) 파일을쓰면아래와같이순차적으로파일의실제정보가들어있는클러스터는아래와같이순차적으로진행됩니다. 00000004 00000005 00000028 EOF < 그림16. 순차적으로연결되어있는경우 > - 13 -

그러나잦은쓰기와지우기를반복하여중간중간디스크의단편화가발생하게되면파일에대한클러스터는 연속적이지않을가능성이높습니다. 00000004 00000012 00000037 EOF < 그림17. 순차적으로연결되어있지않은경우 > 그렇기때문에파일을읽기위해서는처음부터끝까지순차적으로읽을수있는것이아니라파일에대한클러스터체인의정보가 #FAT1 에저장되어있기때문에파일의하나의클러스터를모두읽어들였다면 #FAT 1 에서다음클러스터는몇번째클러스터인가에대한정보를불러와야합니다. 윈도우운영체제에서디스크조각모음이란것은이렇게떨어져있거나비순차적인파일클러스터순서를순차적으로바꾸어주어파일로딩속도향상을시키는작업이라고보면됩니다. 클러스터넘버는 0번과 1 번이존재하지않으며, 아래의 < 그림18 > 과같이 2 번부터시작됩니다. 또한, 0x0002 섹터는디렉터리엔트리의집합체인루트디렉터리를말하고, 0x0003 섹터가바로 MP3 데이터 가시작되는곳입니다. < 그림18. MP3 데이터시작 > 클러스터영역에있는 MP3 파일을읽으려면 1. 먼저디렉터리엔트리에서클러스터넘버를읽습니다. 2. MP3 파일이끝날때까지 FAT를읽고그에해당하는클러스터로가서 MP3 데이터를읽습니다. - 14 -

< 그림19. FAT 영역의첫번째섹터 > 간단히설명하면, 디렉터리엔트리는 MP3 파일의시작위치만알려줍니다. 이렇게 MP3 파일의시작위치를 알았으면 MP3 파일이끝날때까지 FAT을읽고그에해당하는클러스터로가서 MP3 데이터를읽으면됩니 다. 그이유는 FAT의 MP3 데이터가클러스터어디에존재하는지알려주기때문입니다. 위의 < 그림19 > 는 FAT 의첫번째섹터입니다. MP3 데이터읽기동작을설명해보겠습니다. 우선루트디 렉터리라는곳이있습니다. 이전에설명한부분인데루트디렉터리는여러개의 " 디렉터리엔트리" 로이루어 져있습니다. 그리고 SD 카드 ( 예:G:\) 에는노래 2 곡이들어있고파일이름이 ABBA.mp3, MORNING.mp3라 했습니다. 노래가 2 개이니까루트디렉터리섹터에디렉터리엔트리도 2 개가존재합니다. 이중에서 ABBA.mp3 파일을액세스할것이므로첫번째디렉터리엔트리가관심사항입니다. 이디렉터리엔트리에서 클러스터넘버 (=0x0003) 가몇번인지추출합니다. 클러스터넘버가 MP3 파일이시작되는곳을나타내므로 클러스터번호가 0x0003인섹터로가서 MP3 데이터 512 바이트를읽습니다. ( 클러스터번호는 0x00000002 번부터시작하고이곳에는루트디렉터리섹터가있습니다.) 첫번째 MP3 섹터를읽었으면 MP3 파일이끝날때까지 FAT 영역의첫번째섹터를참조합니다. 위에서말 한클러스터넘버는또한 FAT 엔트리번호를나타냅니다. 방금클러스터넘버 0x0003 섹터에있는 MP3 데 이터를읽었으므로이제 0x0003번 FAT 엔트리가가서다음클러스터번호를가져옵니다. 위의그림에서보 이듯이, 다음클러스터넘버는 0x0000 0004 번입니다. 이클러스터로가서 MP3 데이터를읽고 0x00000004 번 FAT 엔트리로가서다음클러스터번호를가져옵니다. 이런식으로 MP3 파일이끝날때까지반복합니다. - 15 -

FAT 을읽는방법을요약하면, 1. 2. 디렉터리엔트리에서클러스터번호확인 해당클러스터로이동 3. MP3 데이터를읽기 4. 클러스터번호에해당하는 FAT 엔트리로이동후내용읽기 5. 다음클러스터번호를가져옴. 이런식으로파일이끝날때까지반복하는것입니다. 이제실제데이터를가지고 FAT 을읽어보도록하겠습니다. 먼저이전글에서말한바와같이, 루트디렉터리에는디렉터리엔트리가있습니다. 즉, 아래의그림이루트디렉터리섹터이고여기에디렉터리엔트리들이모여있다고했습니다. 여기서 ABBA.mp3 파일에대한디렉터리엔트리만파악하면되므로, 첫번째디렉터리엔트리만살펴보면, Cluster Number 는 = 0x0003 이란것을알수있습니다. 이클러스터넘버를가지고 FAT 으로가면됩니다. 위의절차대로 < 그림20 > 의 FAT 데이터를읽어보면, 1. 디렉터리엔트리에서클러스터넘버가 0x0003 2. 0x0003 클러스터록가서 MP3 데이터를읽기 3. 0x0003번 FAT 엔트리로가서내용을읽기 4. 다음클러스터번호(0x0004) 를가져온다. 이처럼 FAT 엔트리들은서로순차적인구조를가지고있어서 MP3 파일의끝부분까지읽을수있습니다. < 그림20. 디렉터리엔트리읽기 > - 16 -

위에서는 FAT 영역과클러스터영역이서로어떻게연결되어동작하는지를알아봤습니다. 이제 MP3 데이터읽어오려면, 클러스터넘버 0x0003에해당하는 FAT 엔트리를찾아야합니다. 실제 C소스로 MP3 데이터읽기위한 FAT 엔트리를찾는계산식은다음과같습니다. fat_entry_per_secter = bytes_per_sector 4 fat_address = ( fat_start_address + cluster_num ) fat_entry_per_secter 한글로풀어보면, 섹터당 FAT 엔트리개수 = 섹터당바이트수 4 FAT 주소 = ( FAT 시작주소 + 클러스터넘버 ) 섹터당 FAT 엔트리개수가됩니다. 위의식에값을대입하면, 섹터당 FAT 엔트리개수 = 512 4 = 128 개 (10 진수) = 0x80 (16 진수) FAT 주소 = ( 0x04D + 0x0003 ) 0x80 = 0x4D + 0x00 = 0x4D 따라서 0x0003번 FAT 엔트리는 0x4D 섹터에있습니다. 위의내용을정리하면, 루트디렉터리에서 Cluster Number(0x0003) 를먼저알아내고, Cluster Number를 Physical Sector Address(0x79F + 1) 로변환후, 이를 SD카드에전달하여첫번째 MP3 데이터를꺼내는 것입니다. 그다음데이터부터, 아래의내용이적용됩니다. 클러스터넘버(0x00000003) 에해당하는 FAT 엔트리(0x4D + 4 3) 로가서그내용을읽어, 다음클러스터 번호(0x00000004) 를가져옵니다. 그클러스터 ( 0x00000004 0x79F + 2 ) 로가서 MP3 데이터를읽고, 클러스터넘버(0x00000004) 에해당 하는 FAT 엔트리( 0x4D + 4 4 ) 로가서그내용을읽어, 다음클러스터번호(0x00000005) 를가져옵니다. 위의경로대로파일이끝날때까지계속해서반복실행하다가다음클러스번호가 0xFFFFFFFF 0x0FFFFFFF) 일경우는더이상의클러스터는없고파일의끝임을알립니다. ( 실제로는 FAT32 파일시스템분석을마치며, 좋은자료를주신 유리한 님과 요술고냥 님께감사의말씀드립니다. 5. 참고문헌 다음사전검색어 FAT ' 네이버카페 당근이의 AVR 갖구놀기 유리한님 FAT32 이해하기 네이버카페 Microchip PIC 사용자커뮤니티 요술고냥님파일시스템 FAT32에대한이해 - 17 -