ORIONPOINT 2021. 12. 11. 02:59

파일 시스템

디지털 데이터 효과적으로 기록하기 위해 파일 체계적으로 기록하는 방식

- 저장매체의 종류, 운영체제 목적에따라 고유한 파일 시스템 사용함

 

파일시스템 구조

메타영역 : 파일 저장 관리하기 위해 필요한 것. 파일이름, 위치, 크기, 시간, 정보 등이 기록됨. 시스템 중심으로 자동 생성됨.

데이터 영역 : 사용자가 작성한 내용이 저장됨.

 

 

주소지정 방식(Addressing)

 

CHS(Cylinder-Head-Sector) 방식

  •  실린더(Cylinder), 헤드(Head), 섹터(Sector)
  • 디스크의 물리적인 구조에 기반한 주소지정 방식
  • 8.1GB까지만 주소 지정 가능. 대용량 디스크 지원X

 

LBA(Logical Block Address) 방식

  • 디스크 0번 실린더, 0번 헤드, 1번 섹터를 0번으로 해 디스크의 마지막 섹터까지 순차적으로 주소 저장
  • 물리적 구조에 대한 정보 없이도 접근하고자 하는 섹터 번호만으로 접근 가능

 

 

클러스터(Cluster)

 

섹터

  • 하드 디스크의 물리적인 최소 단위(512 바이트)
  • 하드 디스크의 읽기 쓰기 작업 단위

클러스터

  • 1섹터 크기로 입, 출력 한 경우 큰 파일은 많은 시간이 요구됨
  • 여러 개의 섹터를 묶어 한꺼번에 데이터를 입, 출력 함 = 클러스터(단위) 
  • 하나의 파일을 입, 출력할 때 할당되는 크기는 클러스터의 배수

ex) 4MB 파일 저장하는 경우

  • 클러스터 크기 4KB => 1,024번 입출력 명령 수행
  • 클러스터 크기 512Byte => 8,192번 입출력 명령 수행

 

클러스터 크기

: 임의로 지정 가능, 볼륨 크기에 따라 미리 정의된 크기 선택 

 

볼륨 크기 클러스터 크기
32MB - 8GB 4KB
8GB - 16GB 8KB
16GB - 32GB 16KB
32GB 32KB

 

슬랙 공간

: 물리적인 구조와 논리적인 구조 차이로 발생하는 낭비 공간. 디지털 포렌식 관점에서 중요한 부분(정보 은닉에 사용될 수 있고 삭제된 파일 파편이 있을 수도 있기 때문에)

  • 파일 슬랙 : 한 파일 사이즈가 클러스터 크기보다 크거나 작으면 남는 공간(슬랙)이 발생함.
  • 램 슬랙 : CPU의 주기억장치 RAM이 보조기억 장치에 들어오는데 RAM과 파일 사이즈의 단위가 일치하지 않아 생기는 비어있는 공간

 

Mater Boot Record

 

BR(Boot Record)

  • 파티션의 크기, 위치, 설치된 운영체제 등의 정보를 담고 있는 영역
  • 윈도우즈 운영체제의 경우 파티션의 첫 번째 섹터에 BR이 위치함

MBR(Master Boot Record)

  • BR 영역을 관리하는 영역으로 부팅에서 BR 영역을 찾아갈 수 있는 정보 저장 

MBR 구조

MBR 데이터 구조

바이트 Offset 설명
10진수 16진수
0 - 445 0x0000 - 0x01BD Boot Code
446 - 461 0x01BE - 0x01CD Partition table entry #1
462 - 477 0x01CE - 0x01DD Partition table entry #2
478 - 493 0x01DE - 0x01ED Partition table entry #3
494 - 509 0x01EE - 0x01FD Partition table entry #4
510 - 511 0x01FE - 0x01FF Signature (0x55AA)

 

파티션 테이블

64 바이트로 각각 16바이트씩 총 4개의 파티션 정보를 저장함

 

파티션 테이블 구조

바이트 Offset 설명 비고
10진수 16진수
0 - 0 0x0000 - 0x0000 Boot Flag 부팅가능 - 0x80, 부팅X - 0x00
1 - 3 0x0001 - 0x0003 CHS 주소 방식의 시작 위치  
4 - 4 0x0004 - 0x0004 파티션 유형 NTFS - 0x07,
FAT16 - 0x06,
FAT32 - 0x0C
Solaris - 0x85
5 - 7 0x0005 - 0x0007 CHS 주소 방식의 끝 위치  
8 - 11 0x0008 - 0x000B LBA 주소 방식의 시작 위치 파일 시스템의 BR 위치의 섹터
12 - 15 0x000C - 0x000F 총 섹터 개수  

 

MBR 영역의 일반 구조

 

Boot Code

  • 파티션 테이블에서 부팅 가능한 파티션 찾아 해당 파티션 부트 섹터를 호출하는 코드

 

Partition Table #1

00 03 39 00 0B 1F FF DF F5 00 00 00 0B 83 1E 00

 

00 부팅 불가능한 파티션
F5 00 00 00 BR 위치 섹터 번호, little endian으로 저장된 형식이므로 0x00 00 00 F5(245) 로 계산되어야 함
0B 83 1E 00 총 섹터 개수, little endian으로 저장된 형식이므로 0x00 1E 83 0B(1,999,627) 로 계산되어야 함

 

확장 파티션(Extended Partition)

  • 파티션 4개를 초과하는 경우 기존 MBR에서 관리되지 않아 나온 개념
  • MBR 파티션 테이블 마지막 4번째 파티션 테이블이 가리키는 위치가 또 다른 MBR 영역 가리켜 추가적으로 4개의 파티션 담을 수 있도록 하는 구조
  • 확장 파티션은 파티션 개수에 제한이 없음

 


 

FAT 영역

: 파일 시스템에서 파일의 위치 정보를 기록하는 테이블

 

FAT 파일 시스템

  • 파일 시스템 가리키는 용어
  • FAT12 / 16 / 32
    • FAT 뒤의 숫자는 파일 시스템에서 관리하는 클러스터의 개수를 의미함

 

FAT 파일 시스템의 클러스터 최대 개수

파일 시스템 클러스터 최대 개수
FAT12 4,084
FAT16 65,524
FAT32 67,092,481

 

FAT 파일 시스템 구조

BR = 예약 영역

 

예약 영역

: FAT 파일 시스템에서 가장 앞에 위치하는 구조

  • FAT 12/16  : 1개의 섹터
  • FAT 32
    • BIOS Parameter Block의 오프셋 14~15의 Reserved Sector Counter에 표시됨
    • 일반적으로 32개의 섹터

 

예약된 섹터 : 0, 1, 2, 6, 7, 8번

예약된 섹터 내용
0 부트 섹터
1 FSINFO(File System Information)
2 부트 섹터와 부트 코드 영역이 부족할 경우 추가적으로 사용
6 0번 섹터 백업용
7 1번 섹터 백업용
8 2번 섹터 백업용

 

FAT12 / 16 / 32 부트 섹터 - 공통된 데이터 구조

바이트 Offset 설명
10진수 16진수
0 - 2 0x0000 - 0x0002 Jump Command To Boot Code
3 - 10 0x0003 - 0x000A OEM ID
11 - 12 0x000B - 0x000C Byte Per Sector
13 - 13 0x000D - 0x000D Sectors Per Cluster
14 - 15 0x000E - 0x000F Reserved Sector Count(FAT12/15 = 1)
16 - 16 0x0010 - 0x0010 Number of FAT Tables
17 - 18 0x0011 - 0x0012 Root Directory Entry Count
(FAT12/16 = variable, FAT32 = 0)
19 - 20 0x0013 - 0x0014 Total Sector 16
21 - 21 0x0015 - 0x0015 Media Type
22 - 23 0x0016 - 0x0017 FAT Size 16
24 - 25 0x0018 - 0x0019 Sector Per Track(Typically 32 for Hard Disks)
26 - 27 0x001A - 0x001B Number of Heads
(Typically 255 for Hard Disks)
28 - 31 0x001C - 0x001F Hidden Sectors
32 - 35 0x0020 - 0x0023 Total Sectors 32
FAT32 부트 섹터의 추가적인 데이터 구조
36 - 39 0x0024 - 0x0027 FAT Size 32
44 - 47 0x002C - 0x002F Root Directory Cluster Offset
(FAT12/16과는 다르게 시작 위치가 데이터 영역 0번섹터가 아니어도 되므로)
50 - 51 0x0032 - 0x0033 Backup Boot Sector Offset

 

FAT 영역

  • 두 개의 FAT
    • File Allocation Table, FAT1, FAT2 - 복사본
  • FAT16/32
    • FAT16은 16비트, FAT32는 32비트를 사용해 데이터 영역의 시작 클러스터부터 마지막 클러스터까지 할당 상태를 표시함

 

FAT Entry

: 데이터 영역의 각 클러스터 사용 여부 및 특정 파일이 점유하고 있는 클러스터 위치 나타냄

 

상태 상태값
미할당 상태 0x00
할당 상태 다음 데이터가 있는 클러스터
할당 상태 - 마지막 데이터가 있는 경우 FAT12 - 0xFF8보다 큰 값
FAT16 - 0xFFF8보다 큰 값
FAT32 - 0x0FFF FFF8보다 큰 값
배드 섹터 FAT12 - 0xFF7
FAT16 - 0xFF7
FAT32 - 0x0FFF FFF7

 

루트 디렉터리

FAT12/16 - FAT 영역 바로 뒤, 데이터 영역의 제일 앞부분에 위치(FAT Entry 2번)
- 최대 32개의 섹터를 사용할 수 있음(16,384바이트, 최대 512개의 Entry를 나타낼 수 있음)
FAT32 - 데이터 영역 어느 곳에나 올 수 있음(기본값은 FAT Entry 2번)
- 부트 섹터의 오프셋 44~47 값 통해 표시
- 루트 디렉터리의 생성할 수 있는 파일 및 디렉터리 개수 제한 없음

 

Directory Entry 구조

 

 

파일이 삭제됨 > 첫번째 바이트 값이 0xE5 > 해당 FAT Entry를 0x00으로 초기화 > 미할당된 Directory Entry > 0x00으로 초기화

 

 

 

 

LFN(Long File Name) Entry 구조

  • 8바이트보다 긴 파일이름 표현
  • 유니코드로 표현
  • FAT32의 경우 파일이름 255자까지 지원
    • 여러 개의 LFN Entry로 표현