[파일시스템] 주어진 증거 이미지를 읽어서 다음과 같은 결과를 출력하는 프로그램을 작성한다.
FAT32 1024 1024768
NTFS 1025792 1024768
python3 mbr_parser.py mbr_128.dd
- MBR(Master Boot Record)
- 디스크의 첫 번째(0번) 섹터에 위치한 부트 레코드이다.
- 시스템이 부팅될 때 가장 먼저 읽히는 정보이다.
- 부트 로더와 함께 파티션 테이블 정보가 포함되어 있다. 즉, MBR은 디스크 전체에 대한 정보(파티션 구조)를 관리하는 역할을 한다.
- 최대 4개의 파티션을 지원한다.
- 4개의 기본 파티션
- 3개의 기본 파티션 + 1개의 확장 파티션
- 최대 2TB 크기의 디스크를 지원한다.
- EBR(Extended Boot Record)
- 확장 파티션 안에 위치한 부트 레코드이다.
- MBR에서 정의된 확장 파티션의 내부에서 추가 파티션을 관리하는 데 사용된다.
- EBR을 통해 여러 개의 논리 파티션을 만들 수 있다.
- 각 EBR은 다음 EBR의 위치에 대한 정보를 포함하여 체인처럼 연결된다.
- VBR (Volume Boot Record)
- 각 파티션의 첫 번째 섹터에 위치한 부트 레코드이다.
- 해당 파티션을 부팅하기 위한 정보를 포함하고 있다.
- 운영체제가 설치된 파티션에서 부팅을 수행하는 데 필요하다.
💡 섹터란?
컴퓨터 저장장치에서 데이터를 저장하는 기본 단위이다.
- 일반적으로 한 섹터의 크기는
512바이트
이다. - 파일 시스템이 읽고 쓰는 기본 단위로, 파일이나 데이터가 저장될 때 여러 섹터에 나누어 저장된다.
- 각 섹터는 물리적 주소를 갖고 있어 운영체제나 파일 시스템이 주소를 찾고 접근할 수 있다.
MBR의 첫 번째 섹터에 위치한 코드로, 시스템이 부팅할 때 실행되는 프로그램이다.
-
엔트리 하나의 크기는 16바이트이다.
-
Partition Type
: 파티션의 종류 -
LBA Address of Start
: 파티션의 시작 위치 -
Number of sectors
: 파티션의 사이즈 -
예시 1) 첫 번째 엔트리 분석
80 20 21 00 07 DF 13 0C 00 08 00 00 00 00 20 03 00
- 부팅 여부:
80
- CHS Address:
00 21 20
- Partition Type:
07
- CHS Address:
0C 13 DF
- LBA Address of Start:
00 00 08 00
- Number of sectors:
00 03 20 00
- 부팅 여부:
💡 리틀 엔디안 방식에 따라 값을 읽어야 한다.
- MBR의 마지막 두 바이트에 위치한 값이다.
- 주로 부트 레코드의 유효성을 검증하는 데 사용된다.
0x55AA
로 정의한다.
-
Partition Table Entry와 Signature만 존재한다.
-
EBR이 존재하면 보통 첫 번째 엔트리만 사용하고 두 번째 엔트리는 다음 EBR의 위치를 가리킨다. 만약 두 번째 엔트리에 값이 없다면 이는 마지막 파티션임을 의미한다.
-
마지막 2개의 엔트리는 사용하지 않는다.