파일 시스템이 필요한 이유
•
저장 매체의 용량이 증가함에 따라 저장되는 파일의 수도 급격히 증가
•
원하는 파일을 읽고 쓰는 기본적인 기능부터 데이터를 검색, 저장, 관리
하기 위한 규약이 필요
파일시스템
•
디지털 데이터를 효과적으로 관리하기 위해 파일을 체계적으로 기록하는
방식
•
사용자에게 파일과 디렉터리를 계층 구조로 데이터를 저장하도록 하는
메커니즘
•
파일이 어디에 저장되어 있는지 조직화하고, 사용자의 데이터를 구조적
으로 정의
파일 시스템 종류
저장매체 | 운영체제 | 파일 시스템 |
디스크장치 | Windows | FAT(FAT12,FAT16,FAT32,exFAT), NTFS |
디스크장치 | Linux | Ext2, Ext3, Ext4 |
디스크장치 | Unix-like | UFS |
디스크장치 | OS2 | HPFS |
디스크장치 | Mac OS | HFS, HFS+ |
디스크장치 | Solaris | ZFS |
디스크장치 | HP-UX | ODS-5, VxFS |
광학장치 | ISO 9660, UDF |
파일시스템 구조
•
파일시스템의 기본적인 동작은 운영체제가 각 파일을 사용하기 위해 저
장되어 있는 위치로 접근하여 해당 데이터를 읽도록 함
•
또한 데이터의 위치를 파악하기 위하여 사용자가 저장된 파일의 목록을
확인할 수 있도록 지원 함
파일시스템 추상화 구조
•
사용자가 생성한 파일의 내용은 데이터 영역에 기록
•
메타 영역에는 파일 관리를 위한 파일의 이름, 위치, 크기, 시간 정보 등
이 기록
•
파일 시스템은 이러한 메타 정보를 유지 관리함으로써 파일 시스템을 효
과적으로 관리
•
파일 크기를 확인하고자 할 때는 메타 영역에만 접근
•
파일을 읽고자 할 때는 메타 영역에서 위치를 확인하여 파일에 접근
Heade
하드디스크
Interface or Controller
•
IDE (Integrated Drive Electronics) Controller
•
SCSI (Small Computer System Interface)
•
SATA (Serial Advanced Technology Attachment) Controller
•
RAID (Redundant Array of Inexpensive Disks)
구성
Sector
•
섹터의 위치를 구분하기 위한 고유 번호 저장에 59 bytes 사용
•
총 571 bytes = 59 bytes +512 bytes
•
실제 데이터 저장으로 사용되는 영역은 512 bytes (Sector size)
•
데이터 기록의 가장 기본 단위
Addressing (주소 지정 방식)
LBA (Logical Block Addressing) 방식
•
디스크의 0번 실린더, 0번 헤드, 1번 섹터를 첫 번째 블록으로 지정
•
디스크의 마지막 섹터까지 순차적으로 주소를 지정
•
물리적인 구조에 대한 정보 불필요(일종의 선형 주소 공간)
•
초기에는 28bit로 처리하여 약 127GB가 최대 용량이었음
•
228 * 512 bytes = 137,438,952,960 bytes
•
현재는 48bit 어드레스 방식을 사용하고 있음
클러스터
•
Sector
◦
물리적인 최소 단위 , 512bytes
◦
디스크와 관련된 작업은 모두 Sector 단위로 수행됨
◦
파일이 큰 경우 많은 시간이 요구 됨 => 이를 보완하기 위해 Cluster 단위 로 처리
•
Cluster
◦
디스크 입출력 횟수를 줄이기 위함
◦
클러스터의 배수로 파일이 할당 됨
◦
1Cluster가 4KB인 경우 100Byte 파일도 실제 할당된 크기는 4Kb가
됨
•
FAT32 클러스터 크기
볼륨 크기 | 클러스터 크기 |
32MB~8GB | 4KB |
8GB~16GB | 8KB |
16GB~32GB | 16KB |
32GB | 32KB |
•
NTFS 클러스트 크기
볼륨 크기 | 클러스터 크기 |
512MB 이하 | 512Byte |
512MB~1GB | 1KB |
1GB~2GB | 2KB |
2GB 이상 | 4KB |
Slack Space
•
물리적인 구조와 논리적인 구조의 차이로 발생하는 낭비 공간
•
파일이 물리적으로 할당된 공간이지만 논리적으로 사용할 수 없는 공간을 의미하며 은닉할 수 있기 때문에 디지털 포렌식 관점에서 유의해서 관찰할 필요가 있음
◦
RAM Slack (Sector Slack)
파일 카빙에 활용(파일의 끝을 알 수 있기 때문에 파일 복구에 사용)
▪
데이터가 디스크에 저장될 때 512Byte씩 기록되는 특성 때문에
발생하는 공간, Sector Slack 이라고도 함
▪
윈도우 메모리 관리 정책 때문에 slack 영역은 0x00의 값이 기록됨
◦
File Slack (Drive Slack)
이전에 사용한 데이터가 존재, 흔적 조사에 활용
▪
Ram Slack 을 제외한 나머지 부분으로 Drive Slack이라고도 함
▪
이 영역에는 이전의 데이터가 그대로 남아 있음
◦
File System Slack
▪
cluster로 할당하다 보면 볼륨 크기간의 차이로 인해 발생되는 공간이 생김
◦
Volume Slac
▪
전체 볼륨 크기와 할당 된 파티션 크기의 차이로 인해 발생하는 공간
▪
다른 Slack은 자동으로 발생되는 반면 Volume Slack은 임의로 생성 가능함
MBR과 파티션
파티션
•
논리적으로 분할하여 개별 공간으로 사용하는 것
•
다수의 운영체제를 독립 공간에 설치하거나 운영체제와 데이터 영역 을
분리하여 활용하기도 함
BR(Boot Record)
•
파티션의 크기, 위치, 설치된 운영체제 등의 정보를 포함
•
파티션의 첫 번째 섹터에 위치
MBR(Master Boot Record)
•
여러 개로 분할된 파티션의 BR 영역을 관리
•
각 BR 영역을 찾아갈 수 있는 정보를 보관
파티션 테이블 영역
•
16 바이트씩 총 4개의 파티션 정보가 저장
•
0x0000
•
첫 번째 값인 부트 플래그(Bootable Flag)는 해당 파티션이 부팅 가
능한 파티션인지를 나타내며, 부팅 가능한 파티션일 경우 해당 부트
플래그의 값이 0x80
•
MBR의 부트 코드는 파티션 테이블을 검색하여 부트 플래그 값이
0x80 값을 갖는 파티션의 부트 섹터 위치로 점프하는 역할을 수행
•
0x0001 - 0x0003, 0x0005 - 0x0007 : CHS 관련 부분은 요즘은 사 용하지 않아 의미 없는 값이 부여됨, 호환성 때문에 존재
•
0x0004 : 파티션 유형
◦
NTFS : 0x07FAT32, LBA : 0x0C or 0x0B
◦
FAT16 : 0x07
◦
리눅스 : 0x83
◦
확장 파티션 : 0x05(CHS), 0x0F(LBA)
•
0x0008 - 0x000B, 0x000C - 0x000F : LBA 시작 위치와 섹터 개수 를
통해 해당 파티션의 시작 위치와 크기를 계산할 수 있음
•
파티션 영역을 조작하여 파티션으로 인식하지 못하게 하는 기법이 사용
되기도 하므로 운영체제에서 보이는 파티션 영역만이 아니라 디스크 전
영역을 확인해야 함
파티션 FAT 32
Start Sector(00 08 00 00) 2,048
Partition Size(00 20 4E 00) 5,120,000
끝 : 5,122,048 -1
파티션 NTFS
00 28 4E 00 = 5122,048
00 C8 31 00 = 3,262,464
끝 : 8,384,512 -1
확장 파티션
•
4개의 파티션 한계를 극복하기 위함
•
마지막 4번째 파티션 테이블이 가리키는 위치가 또 다른 MBR영역을 가리켜 추가적으로 파티션을 담을 수 있도록 하는 구조
•
파티션 유형이 0x05, 0x0F으로 설정 됨
•
보통 최대로 26개까지 확장 가능