FAT 32
# BR(Boot Record)= PBR(Partition Boot Record)= VBR(Volume Boot Record)
File Allocation Table(파일 배치 표)
- 파일 내용이 저장되어 있는 클러스터 번호를 적는 곳이다.
- 4Byte 로 나누어져 있다
- FAT의 위치
- 첫번째 FAT는 Reserved Sector 바로 뒤에 이어진다.
- 두번째 FAT는 첫번째 FAT 바로 뒤에 이어진다.

- FAT파일 시스템의 구조 정보와 부트 스트랩 코드
- 파티션의 첫번째 섹터에 기록된다.
- Jump Boot Code
- Boot Strap Code 부분으로 점프하기 위한 기계어 코드
- Boot Strap Code
- Windows NT계열인 경우에 루트디렉토리에서 NTLDR이라는 파일을 찾아서 실행시킨다.
- OEM Name
- 파일 시스템을 생성한 프로그램이 기록한다.
- Bytes Per Sector
- 섹터 크기 : 보통 512 Bytes = 0x200
- Sector Per Cluster
- 클러스터란?
- 섹터의 모음
- 읽고 쓰기 명령의 효율성을 위해서 여러개의 섹터를 하나의 클러스터로 처리한다.
- 파일을 읽고 쓰는 최소 단위가 클러스터이다.
- 단점: 파일의 내용이 1바이트라도 클러스터 1개를 사용한다.(공간 낭비 심함)
- 가장 많이 사용하는 클러스터 크기는 4KB(4096 Bytes)(섹터 8개)
- SP개수
- Sector Per Cluster(섹터의 모음)
- FAT(File Allocation Table)
- 파일의 내용이 저장된 Cluster의 번호를 기록한 표 (파일 할당표)
- Total Sector 16
- 파티션의 전체 sector 개수
- - Reserved Sector count
- 예약된 섹터의 개수를 의미
- 파일 시스템에서 추가로 필요한 정보를 적기 위해서 필요한 공간을 예약해두고 사용한다.
- 파티션의 첫번째 섹터부터 몇개의 섹터를 예약한 것인지를 의미
- PBR/FSInfo 구조체/PBR Backup
- FAT count(개수)
- FAT의 개수
- FAT 손상되면 파일 내용을 읽을 수 없게 되므로 FAT를 여러 개 사용한다.
- FAT Size 32
- FAT 의 크기를 섹터 개수로 표현
- Total Sector 32
- 파티션의 전체 섹터 개수
- 2^32=4294967296 => 4294967296 * 512 Byte = 2TB
- File System Information (Fsinfo 구조체)
- File System Information 구조체의 위치(섹터번호, 상대값)
- BR Backup Sector
- BR이 백업된 섹터 번호
- PBR이 기준이 된다.( PBR을 0번으로 가정하고 계산해라)
- Root Directory Cluster
- Root Directory가 있는 첫번째 클러스터 번호
- 보통 2번으로 나온다. --> 하지만 실제로 2번이 첫번째 클러스터이다.
- Volume Label
- 볼륨(파티션)의 이름 (단순 문자열)
- File System Type
- 파티션(볼륨)의 파일시스템 종류(단순 문자열)
Partition Table Entry 구조
- Bootable Flag
- 부팅가능여부, 부팅가능(0x80), 부팅불가(0x00)
- Starting CHS Address
- CHS 방식으로 파티션의 시작 섹터의 위치 지정, Starting LBA Address항목을 주로 사용하므로 이 필드는 설정하지 않아도 크게 상관없다.
- Partition Type
- 파티션의 종류를 표시, 대표적인 타입은 아래 표를 참고한다.
- 파티션 타입 설명
- 0x00 비어있음
- 0x05
- 0x06 FAT16
- 0x07 NTFS
- 0x0C FAT32
- 0x0F Extended Partition
- 0x82 Linux Swap Partition
- 0x83 Linux Partition
- Ending CHS Address
- CHS 방식으로 파티션의 마지막 섹터의 위치 지정
- Starting LBA Address
- LBA 방식으로 파티션의 시작섹터의 번호 지정, 섹터번호는 0번부터 시작함. (주의)
- Size in Sector
- 파티션의 용량을 섹터의 개수로 표현(LBA방식)
FAT32 구조
- Root Directory
- 루트 디렉토리의 위치는 마지막 FAT 바로 뒤에서 시작한다.
- PBR에 Root Directory의 시작 클러스터 번호가 적혀 있다.

- File System Information
- 파일 시스템의 사용 현황을 적는 공간
- 파일 시스템의 사용 현황을 적는 공간
M.A.C Time
Modified Date/Time- 마지막으로 변경된 날짜/시간
Accessed Date/Time- 마지막으로 읽은 날짜/시간
Created Date/Time - 최초 생성 날짜/시간
시간정보가 있어야 Time Line Analysis ; 기준시간 + 지나간 시간
- Directory Entry
- 디렉토리에 들어있는 파일이나 하위 디렉토리에 대한 정보를 적는 항목
- 크기는 32 Byte(1줄에 16byte)
- Name : 이름
- 8 bytes (영문 8글자, 한글 4글자)
- 이름의 첫번째 바이트가 0xE5이면 삭제되었다는 표시임.
- 짧게 수정할 경우, 탐색기에서 읽는게 불가능
- Extender : 확장자
- 3 Bytes (영문 3글자)
- Attributes : 파일 속성
- 0x01 Read Only 읽기 전용 파일 속성
- 0x02 Hidden 숨김 파일 속성
- 0x04 System 운영체제 파일 속성
- 0x08 Volume Label 볼륨의 이름. 루트 디렉토리에 한 개만 허용된다. 이 속성이 설정되면 First Cluster High/Low 항목이 0이 된다. 볼륨의 이름을 나타내므로 클러스터를 사용할 일이 없기 때문이다.)
- 0x10 Directory 디렉토리임을 나타낸다.
- 0x20 Archive 기록문서 속성. 백업할 때 주로 사용된다.
- 0x0F Long File Name Entry 일반 Directory Entry가 아니라 LFN Entry임을 나타낸다
- File Size : 파일 크기(Byte)
- First Cluster Low/High : 파일 내용이 들어 있는 첫번째 클러스터의 번호
- 루트 디렉토리의 첫번째 Entry는 다른목적으로 사용된다.
- 볼륨의 이름
- 파일 조각화
- File Fragmentation
- 파일의 내용이 클러스터 한개 이상을 필요로 하는 경우에 다음 클러스터를 배정하는 것이 원칙이나 다음 클러스터를 다른 파일이나 디렉토리가 사용하고 있으면 그 다음 클러스터를 사용해야 한다.
- 파일 조각 모음
- File Defragmentation
- 헤드의 움직임을 최소화 하여 읽기 성능을 높이기 위한 작업
- 파일내용이 쭉 이어져 있으라고..그래야 빨리 읽음
- 대부분의 운영체제와 파일시스템은 파일이 조각나는 것을 고려해서 만들어졌다.
- FAT32 방식은 FAT(File Allocation Table)을 사용해서 조각나서 저장된 파일을 정확하게 읽을 수 있도록 설계됐다.
- Slack Space
- 파일을 저장할 때 클러스터 단위로 할당이 되므로 아무리 적은 데이터를 저장해도 클러스터 하나를 사용해야 한다. 데이터가 저장되고 남은 공간은 다른 파일의 내용을 저장하는데 사용할 수 없다.
- 클러스터의 크기가 커지면 낭비되는 공간(Cluster Slack)이 증가한다
- 윈도우즈에서는 32GB를 넘어가는 볼륨을 FAT32로 포맷하는 것을 지원하지 않음
- High Level Format 된 경우 데이터 복구
- 사용하던 파일시스템을 다시 포맷할 경우
- FAT 초기화
- 조각난 파일은 첫번째 클러스터 내용만 찾을 수 있다.(directory Entry를 보고)
- 루트 디렉토리 초기화
- 루트 디렉토리에 있던 파일은 파일이름과 첫번째 클러스터 번호가 없어졌기 때문에 아무것도 찾을 수 없다.
- 하지만 하위 디렉터리에 있던 파일들은 복구가 가능하다.
- 디렉토리 엔트리 O & 파일 크기가 클러스터 1개 크기보다 작은 경우
- 시작 클러스터 번호와 파일 크기를 읽어서 복구(복구율 100%)
- 디렉토리 엔트리 O & 파일 크기가 클러스터 1개 크기보다 큰 경우
- 첫번째 클러스터 내용을 분석(파일의 종류, 파일의 다음 내용을 유추)
[ 참고 ]
[ 하드디스크 파티션 모음의 구조 ]
[실습]
WINDOWS 7, HDD 읽어보기
순차적으로 읽으며 훑어보기
LBA Start Addr. = 0x800
만들어진 하드디스크 확인
LBA Start Addr. = 0x800 = 2048
->BR주소의 시작점
FAT Size 32 : 0x27f2=10226
RS개수 : 0x101c=4124
eX.=EB5890
: MBR의부트스트랩코드가 BR의 부트스트랩코드로 넘어가는 과정
[ 위의 내용을 도면화하면 한눈에 확인하기 쉬움 ]
[ FAT의 마지막 섹터 ]
$RECYCLEBIN 의 값으로 아래표랑 대조
[ 파일 시스템 정보 ]
[ Cluster 정보 ]
- LFN(Long File Name)
- 파일 이름이 8글자(8 Byte)를 넘어가면 Directory Entry로는 이름을 기록할 공간이 없기 때문에 LFN Entry를 사용하여 긴 이름을 추가로 기록한다.
- LFN Directory Entry
- 이름만 기록하는 공간
- 엔트리 한개의 크기는 32 바이트
- 이름을 유니코드로 기록한다.(1글자에 2바이트가 필요하다.)
- .(점) 표시도 파일이름 길이로 계산한다.
- 이름과 확장자 구분을 하지 않는다.
- 확장자 길이가 3글자 제한이 없어진다.
- .을 여러번 사용할 수 있다.
- 마지막 점(.) 뒷부분을 확장자로 인식한다.
- LFN 엔트리 한개에는 이름을 점(.)과 확장자를 포함하여 총 26 바이트 기록할수 있다.
- 13글자 기록가능
- 13글자를 넘으면 LFN 엔트리를 추가로 사용하여 기록한다.
- LFN 엔트리의 첫번째 바이트에 순서번호가 기록되어 있다.
- 마지막 엔트리는 0x40이 추가된다.
- 이름이 8.3규격을 벗어나면 LFN엔트리에 4파일이름을 기록하는데 기존의Directory Entry의 이름을 적는 부분에는 6글자(6바이트)만 기록하고 ~(숫자)형태로 기록한다.
- 실습
- 파일명 abcdefgh.txt -> 8.3 일치
- Directory Entry만 사용
- 파일명 abcdefghi.txt -> 8.3 넘음, 13글자 넘지 않음
- Directory Entry 와 LFN Entry 1개 추가 사용
- 파일명 abcdefghijkl.txt -> 8.3 넘음 , 13글자 넘음
- Directory Entry 와 LFN Entry 2개 추가 사용
[ 실습 ]
- 파일이름이 13자인 경우
- abcdefghi.txt라는 이름으로 파일설정
- 2개의 행을 사용함
- abcdefghi.txt라는 이름으로 파일설정
- 2개의 행을 사용함
- 파일이름이 16자인 경우
- abcdefghijkl.txt라는 이름으로 파일설정
- 4개의 행을 사용함
- abcdefghijkl.txt라는 이름으로 파일설정
- 4개의 행을 사용함
- 같은 이름으로 시작해서 ABCDEF~1TXT로 구별
- 확장될 때 마지막 Entry는 0x40으로 시작(42)
- 00으로 끝맺음을하고 FF로 채움
- FAT 구조
- 4 Byte 단위로 엔트리 구성된다.
- 엔트리 번호는 따로 적혀 있지 않지만 0번 부터 시작
- FAT 엔트리는 번호가 같은 클러스터의 상태를 나타낸다.
- 0,1번 엔트리는 실제 클러스터를 가리키지 않고 특수 목적으로 사용된다.
- FAT 엔트리의 값이
- 0x00000000
- 클러스터가 사용되지 않고 있다.
- 0x0FFFFFFF
- 클러스터에 파일의 내용이 들어 있다. 그리고 파일의 마지막 클러스터
- 0x????????
- 클러스터에 파일의 내용이 들어 있다. 그리고 ????????번호에 해당하는 FAT 엔트리에 가서 파일 내용이 들어 있는 클러스터를 더 찾아보기
*FAT의 Entry 에 Cluster의 상태표시
0,1,2,3/4,5,6,7,8Enrty(2번Entry부터시작)->2
*7번 클러스터>>FAT마지막섹터(26624)+16*5
클러스터의 내용과 메모장의 내용이 일치함
No comments:
Post a Comment