FAT
1. 정의 :
- 파일 할당 테이블(File Allocation Table, FAT)
- 디지털 카메라 메모리카드, 많은 컴퓨터 시스템에 널리 쓰이는 컴퓨터 파일 시스템 구조
- 비교적 간단 : 플로피 디스크, 플래시 메모리 카드, 디지털 카메라에서 흔하게 볼 수 있음
- 성능이 좋지 않음
- 단순한 자료 구조를 이용하고 조그마한 파일이 많이 있으면 디스크 공간을 잘 활용 못함
2. 기타 용어 :
클러스터 :
- 하드디스크에 파일을 저장하는 논리적 단위.
- 파일은 기본적으로 하나 이상의 클러스터를 차지하게 됨
- 클러스터는 FAT에 의해 관리되므로 일렬로 저장될 필요가 없음
- FAT16은 514 MB 크기가 최대이다 (2^16 * 8192 : 8192바이트가 최대 클러스터 크기)
- 2^16은 65536 이므로 FAT16은 최대 65536개의 클러스터를 저장할 수 있음
- 다음에 나온 FAT32 는 2테라 바이트까지 저장 가능
3. Physical Layout :
- FAT는 다음과 같은 파일 시스템을 가짐
- 기본적으로 여기에 없는 Boot Record가 존재
- 볼륨의 첫번째 섹터 또는 예약된 영역의 첫번째 섹터에 저장
- 윈도우즈를 부팅하기 위한 기계어코드와 FAT 파일시스템의 여러 설정값들이 저장
- BPB(Bios Parameter Block) 라고도 함.
-보통 차지하는 비중은 다음과 같음
4. Reserved Area
- FAT16
- 예약된 영역의 크기 : 1섹터
- 용도 :
- 첫번째 섹터만 부트 레코드 저장
- 나머지 섹터는 사용되지 않지만 0으로 초기화시킴
- FAT32
- 예약된 영역의 크기 : 32섹터
- 용도 :
- 첫번째 섹터에 부트 레코드 저장
- 두번째 섹터에 FSInfo 구조체 저장
- 여섯번째 섹터에 부트 레코드 사본 저장
- 나머지 섹터는 사용되지 않지만 0으로 초기화시킴
- Boot Sector : VBR(Volume Boot Record) 구조를 살펴보면 아래와 같음
- Jump Boot Code :
- Offset : 0~ 2
- Size : 3 Byte
- Value : EB 3C 90
- 설명 :
- 부트 코드로 점프하라는 명령어.
- x86 계열 PC는 부팅 시 이 항목을 읽어서 부트 코드가 있는 영역으로 점프함.
- 해당 볼륨을 이용해서 부팅할 일이 없으면 어떤 값이 와도 무방함.
- OEM ID :
- Offset : 3~ 10
- Size : 8 Byte
- Value : 제한없음
- 설명 :
- OEM 회사를 나타내는 문자열 (아무거나 적어도 됨)
- Bytes Per Sector :
- Offset : 11 ~ 12
- Size : 2 Byte
- Value : 512
- 설명 :
- 섹터 당 바이트 수
- 512, 1024, 2048, 4096 만 가능
- 512 추천
- Sector Per Cluster :
- Offset : 13
- Size : 1 Byte
- Value : 32
- 설명 :
- 클러스터 당 섹터 수
- 0 보다 커야하고 2의 배수여야함
- 클러스터 크기 = Sector Per Cluster * Bytes Per Sector
- Reserved Sector Count :
- Offset : 14 ~ 15
- Size : 2 Byte
- Value : FAT16 : 1, FAT32 : 32
- 설명 :
- 예약된 영역의 섹터 수
- 최소 1개 이상의 섹터 이상(부트 레코드가 첫 번째 섹터에 있으므로)
- Reserved area에 부트 레코드나 특별한 정보가 없다면 0으로 초기화
- Number of FATs :
- Offset : 16
- Size : 1 Byte
- Value : 2
- 설명 :
- 볼륨에 있는 FAT 영역의 수, 최소한 1 이상
- Root Directory Entry Count :
- Offset : 17 ~ 18
- Size : 2 Byte
- Value : FAT16 : 512 ,FAT32 : 0
- 설명 :
- 루트 디렉토리에 있는 엔트리 수용 개수
- Total Sector 16 :
- Offset : 19 ~ 20
- Size : 2 Byte
- Value : FAT16 : 가변적, FAT32 : 0
- 설명 :
- 볼륨 상의 총 섹터 수. (저장장치의 섹터 수 X)
- 이 항목이 0이면 Total Sector 32는 0이 되어서는 안 된다.
- FAT16이라도섹터 수가 0xFFFF 초과 시 Total Sector 32를 이용해야 한다.
- Media :
- Offset : 21
- Size : 1 Byte
- Value : 0xF8
- 설명 :
- 어떤 미디어에 저장되어 있는지 나타냄
- 여기서 미디어란 동영상이 아니라 저장장치를 뜻함
- USB를 포함한 고정식 디스크 같은 경우 F8이다.
- FAT Size 16 :
- Offset : 22 ~ 23
- Size : 2 Byte
- Value : FAT16 : 가변적, FAT32 : 0
- 설명 :
- FAT 영역의 1개의 섹터 수 (FAT영역이 2개라도 합친 값이 아닌 1개의 섹터 수 이다)
- FAT32에서는 반드시 0이다.
- Sector per Track :
- Offset : 24 ~ 25
- Size : 2 Byte
- Value : 63
- 설명 :
- 저장장치의 트랙 당 섹터 수
- x86 프로세서 계열에서 발생하는 인터럽트(INT) 0x13을 위해 존재하는 항목
- (Windows 계열에서는 더 이상 이 항목을 참조하지 않음)
-Number of Heads :
- Offset : 26 ~ 27
- Size : 2 Byte
- Value : 255
- 설명 :
- 저장장치의 헤더 수
- x86 프로세서 계열에서 발생하는 인터럽트(INT) 0x13을 위해 존재하는 항목
- (Windows 계열에서는 더 이상 이 항목을 참조하지 않음)
- Hidden Sector :
- Offset : 28 ~ 31
- Size : 4 Byte
- Value : 32
- 설명 :
- 볼륨 앞에 존재하는 숨겨진 섹터 수를 저장
- 파티션 되지 않은 볼륨에는 반드시 0
- x86 프로세서 계열에서 발생하는 인터럽트(INT) 0x13을 위해 존재하는 항목
- (Windows 계열에서는 더 이상 이 항목을 참조하지 않음)
- Total Sector 32 :
- Offset : 32 ~ 35
- Size : 4 Byte
- Value : 가변적
- 설명 :
- 볼륨 상에 있는 총 섹터 수 (저장장치의 섹터 수 X)
- FAT 32에서는 반드시 Total Sector 16을 이용하지 않고 이 값을 이용한다.
- Total Sector 16과 이 값 둘 중에 어느 하나는 반드시 입력되어야 함
FAT 16 만 해당
- Drive Number :
- Offset : 36
- Size : 1 Byte
- Value : 0x80
- 설명 :
- 플로피 드라이브 0x0
- 그 외의 대부분의 저장장치 0x80
- x86 프로세서 계열에서 발생하는 인터럽트(INT) 0x13을 위해 존재하는 항목
- (Windows 계열에서는 더 이상 이 항목을 참조하지 않음)
- Reserved1
- Offset : 37
- Size : 1 Byte
- Value : 0
- 설명 :
- Windows NT 계열에서 쓰기 위해 만등 항목
- 항상 0이다
- Boot Signature
- Offset : 38
- Size : 1 Byte
- Value : 0x29
- 설명 :
- 확장 부트 서명
- 여기서 끝이 아닌 이 항목 아래에 세 가지 항목이 추가 되었음을 의미
- 항상 0x29이다
- Volume ID
- Offset : 39 ~ 42
- Size : 4 Byte
- Value : 가변적
- 설명 :
- 볼륨 시리얼 번호
- 고유의 임의의 시리얼 번호를 생성해서 기록
- Volume Label
- Offset : 43 ~ 53
- Size : 11 Byte
- Value : 가변적
- 설명 :
- 볼륨 레이블
- Windows에서 디스크 이름으로 쓰임
- 루트 디렉토리에도 존재 ( 따라서 변경될 시 2곳 모두 바꾸어주어야 한다.)
- 볼륨 레이블이 없을 경우 "NO NAME "
- File System Type
- Offset : 54 ~ 61
- Size : 8 Byte
- Value : "FAT 16 ", "FAT 32 ", "FAT " 중 적절한 문자열
- 설명 :
- 파일 시스템 형식
- 하지만 이 형식을 보고 FAT16인지 FAT32인지 판단하면 안된다.
FAT32 만 해당
- FAT Size 32
- Offset : 36 ~ 39
- Size : 4 Byte
- Value : 가변적
- 설명 :
- FAT 영역의 섹터 수
- 1개의 FAT 영역의 섹터수를 적어야 한다.
- Ext Flags
- Offset : 40 ~ 41
- Size : 2 Byte
- Value : 0x00
- 설명 :
- FAT 테이블을 조작하려는 것에 대한 여러 설정 값
- 여러개의 FAT 영역을 사용할 경우 설정 값
- File System Version
- Offset : 42 ~ 43
- Size : 2 Byte
- Value : 0x00
- 설명 :
- 상위 바이트 : 주 버전
- 하위 바이트 : 부 버전
- 지금까지 나온 버전은 전부 0x00
- Root Directory Cluster
- Offset : 44 ~ 47
- Size : 2 Byte
- Value : 2
- 설명 :
- 루트 디렉토리의 클러스터 값
- 루트 디렉토리의 시작 위치를 적는다. (FAT32는 루트디렉토리가 어느 곳에 와도 상관없음)
- 보통 2
- File System Information
- Offset : 48 ~ 49
- Size : 2 Byte
- Value : 2
- 설명 :
- FSInfo 구조체가 어디에 저장되어 있는지 가리킴
- 보통 볼륨의 2번 섹터
- Boot Record Backup Sector
- Offset : 50 ~ 51
- Size : 2 Byte
- Value : 6
- 설명 :
- 부트 레코드 백업 위치
- 보통 볼륨의 6번 섹터
- 만약 0일 경우 백업을 하지 않겠다는 의미
- Reserved
- Offset : 52 ~ 63
- Size : 12 Byte
- Value : 0
- 설명 :
- 미래를 위해 예약된 영역
- 0으로 채워져야함
- Drive Number
- Offset : 64
- Size : 1 Byte
- Value : 0
- 설명 :
- 미래를 위해 예약된 영역
- 0으로 채워져야함
- x86 프로세서 계열에서 발생하는 인터럽트(INT) 0x13을 위해 존재하는 항목
- (Windows 계열에서는 더 이상 이 항목을 참조하지 않음)
- Reserved1
- Offset : 65
- Size : 1 Byte
- Value : 0
- 설명 :
- Windows NT 계열에서 사용하려고 만든 항복
- 0으로 채워져야함
- Boot Signature
- Offset : 66
- Size : 1 Byte
- Value : 0x29
- 설명 :
- 확장 부트 서명
- 여기서 끝이 아닌 이 항목 아래에 세 가지 항목이 추가 되었음을 의미
- 항상 0x29이다
- Volume ID
- Offset : 67 ~ 70
- Size : 4 Byte
- Value : 가변적
- 설명 :
- 볼륨 시리얼 번호
- 고유의 임의의 시리얼 번호를 생성해서 기록
- Volume Label
- Offset : 71 ~ 81
- Size : 11 Byte
- Value : 가변적
- 설명 :
- 볼륨 레이블
- Windows에서 디스크 이름으로 쓰임
- 루트 디렉토리에도 존재 ( 따라서 변경될 시 2곳 모두 바꾸어주어야 한다.)
- 볼륨 레이블이 없을 경우 "NO NAME "
- File System Type
- Offset : 54 ~ 61
- Size : 8 Byte
- Value : "FAT32 "
- 설명 :
- 파일 시스템 형식
- 그냥 FAT32 라고 적음
공통
- Signature
- Offset : 508 ~ 511
- Size : 4 Byte
- Value : 0xAA550000
- 설명 :
- 부트 레코드가 손상되었는지 판단하기 위한 용도.
- 다른 값이 적혀 있을 시 망가졌다고 판단.
참고
- 문자열을 입력하는 곳의 빈칸은 0x0이 아닌 스페이스를 나타내는 0x20으로 입력해야 한다.
정리
- FSinfo(file system information) 섹터 :구조를 살펴보면 아래와 같음
- Lead Signature
- Offset : 0 ~ 3
- Size : 4 Byte
- Value : 0x41615252
- 설명 :
- FSinfo 섹터라는 것을 표시해줌
- 값이 무조건 0x41615252이다.
- Reserved1
- Offset : 4 ~ 483
- Size : 479 Byte
- Value : 0
- 설명 :
- 예약된 영역
- Struct Signature
- Offset : 484 ~ 487
- Size : 4 Byte
- Value : 0x61417272
- 설명 :
- FSinfo 섹터라는 것을 표시해줌
- 값이 무조건 0x61417272이다.
- Free Cluster Signature
- Offset : 488 ~ 491
- Size : 4 Byte
- Value : 가변적
- 설명 :
- 볼륨 상에 존재하는 빈 클러스터의 수 저장
- 정확한 값이 아니므로 참고로만 이용
- 만약 값이 0xFFFFFFFF 라면 알 수 없는 상태
- Free Cluster Signature
- Offset : 492 ~ 495
- Size : 4 Byte
- Value : 가변적
- 설명 :
- 해당 볼륨에 보다 빨리 빈 클러스터가 있는지 알아내기 위한 항목
- 마지막으로 할당된 클러스터의 값이 여기 저장됨
- 정확한 값이 아니므로 참고로만 이용
- 만약 값이 0xFFFFFFFF 라면 아무것도 갱신된 사항이 없다는 의미
- 빈 클러스터를 찾기 위해선 처음부터 찾기 시작해야 한다.
- Reserved2
- Offset : 496 ~ 507
- Size : 12 Byte
- Value : 0
- 설명 :
- 예약된 영역
5. FAT Area
- 정의
- Fila Allocation Table
- 데이터 영역에 저장된 파일들의 클러스터 할당 관계를 보여주는 테이블
- 연결방식
- FAT영역 시작 부분
- FAT영역 시작 부분 예제
'보안 > 파일시스템' 카테고리의 다른 글
EXT4 (Extended File System 4)의 소개 (0) | 2015.04.02 |
---|---|
NTFS 파일 시스템 (0) | 2015.03.19 |