File System (FAT)
1. 파일시스템과 운영체제
1-1. 파일시스템이란?
파일시스템은 데이터의 최소 단위인 파일이 하드디스크, CD-ROM등의 저장매체에 저장되는 방식을 말한다.
운영체제는 디스크 상에 파일들을 저장하는데 파일시스템은 여기에 필요한 규칙을 세우고 정한 규칙에 의해 저장 하게한다.
< 소프트웨어와 물리적인 저장매체의 연결역할을 하는 파일시스템>
파일시스템의 방식에는 FAT, NTFS, EXT2등 여러 가지가 있고 각 파일시스템은 고유의 구조를 가지며 이 구조에 따라 기능과 성능에 차이를 보일 수 있다. 예를 들면 NTFS방식은 각 파일마다 보안설정을 할 수 있어서 네트웍 상에서 해킹의 위험이 적고 FAT방식은 그러한 기능이 전혀 없어서 네트웍이나 인터넷 상에서 해킹의 위험이 매우크고 개인의 일상 업무용등의 보안이 중요하지 않은 용도로 사용하기에 적당하다. FAT방식은 마이크로소프트사가 도스시절에 만들어서 지금까지 사용되고 있는 대표적인 파일시스템이며 FAT방식으로 구성된 하드디스크에는 윈도우95,98,ME 등의 운영체제가 설치될 수 있다.
< FAT 방식 파일시스템의 구조>
MBR(MASTER BOOT RECORD)
BOOT RECORD
FAT1 (실제파일의 위치정보)
FAT2 (FAT1의 복사본)
루트 디렉토리
데이터 저장영역
위의 구조에서 IBM PC에서는 MBR영역은 운영체제에 관계없이 공통적으로 존재하는 부분이며 하드디스크의 제일 첫 부분에 위치한다.
MBR 다음의 부분부터는 파일시스템에 따라서 그 구조가 다른 형태를 가진다. MBR에 대한 세부사항은 “5. 마스터부트레코드 영역의 구조와 FDISK/MBR에 대한 설명” 편에서 자세하게 다룬다.
2. 파일시스템의 종류
지구상에 존재하는 파일시스템은 수 십가지가 있으며 개인이 취미로 만든 것도 있다.또한 하나의 파일시스템 이라도 버전에 따라서 기능과 성능이 다른 점에도 유의 하여야 한다.
2-1. FAT(FILE ALLOCATION TABLE) 방식
하드디스크의 한 부분에 FAT이라고 하는 하드디스크 안에 저장되어 있는 파일의 실제위치와 크기, 이름 등의 정보를 기록한 테이블을 이용해서 파일을 호출하고 저장하는 방식이다. FAT16방식과 이를 개선한 FAT32방식, FAT32방식과 함께 사용되며 긴 파일이름을 지원하는 VFAT(VIRTUAL FILE ALLOCATION TABLE)이란 파일시스템도 있다.
≫ FAT12
플로피디스크에서 사용되고 있는 파일시스템이며 디스켓공간에 2^12(2의 12승)=4096개의 섹터(파일저장의 최소공간)를 가질 수 있으며 최대용량은 4096×512(1개섹터의 용량)=약 2MB이며 섹터8개를 하나의 최소저장공간으로 묶을 경우 약 16MB 까지 최대 저장용량으로 지정할 수 있다.
FAT12방식을 사용하는 플로피디스켓은 저장용량이 작기 때문에 하드디스크와는 달리 공간을 나눌 필요가 없으므로 MBR영역이 필요하지 않다.
< FAT12 방식 파일시스템의 구조>
부트레코드
FAT1
FAT2
루트디렉토리
데이터 저장영역
≫ FAT16
MS-DOS에서 사용하는 파일시스템으로 윈도우95 ORIGINAL 버전까지 사용된 파일시스템이다.
FAT16방식은 2^16(2의 16승)=65536개의 섹터를 가질 수 있으므로 약 30MB를 하나의 방(파티션)으로 만들 수 있다. 여기에서 섹터를 최대한 64개를 하나로 묶어서(=클러스터) 사용하면 65536×64×512=약 2GB 의 공간을 하나의 파티션으로 사용 할 수 있다.
만일 10GB용량의 하드디스크를 가지고 있다면 파티션을 5개로 분할해야만 전체공간을 모두 사용 할 수 있고, 1클러스터는 64×512 byte=32KB가 되고 파일 한 개는 무조건 클러스터 하나 이상의 공간을 하기 때문에 1KB크기를 가진 파일도 32KB공간 한 개를 차지하며 나머지 31KB는 낭비되는 공간으로 남게 되며 남은 공간에는 다른 파일을 함께 넣을 수 없게 약속되어 있어서 FAT16방식의 최대 단점은 2GB마다 파티션을 나누어야 한다는 점과 공간의 낭비가 매우 심하다는 것이다.
≫ FAT32
윈도우95 OSR2버전부터 채택된 FAT32는 FAT16방식의 한계를 극복하기 위해 2^32(2의 32승)개의 섹터나 클러스터 수를 지정 할 수 있다. 한 섹터를 한 클러스터로 지정해서 사용하더라도 한 파티션의 최대양을 2TB(2000GB)까지 지정 할 수 있으며 클러스터 공간의 낭비도 최소한으로 줄일 수 있다.
FAT32방식의 주소지정방식은 2^28(2의 28승)(실제 주소지정가능량)×2^4(2의 4승)(예비)으로 이루어진다.
단점으로는 클러스터를 이용하는 방식은 읽거나 기록할 때 FAT에 가서 위치정보를 확인해서 실제 위치로 이동하는 방식이므로 ACCESS 시간이 많이 걸리며 FAT 영역이 손상되면 실제의 정상적인 파일도 사용을 못하고 여러 개의 클러스터로 구성된 용량이 큰 파일은 각 클러스터 간의 링크가 손상되어도 해당파일을 사용 할 수 없게 되는 단점이 있다. 또한 각 디렉토리나 파일에 사용권한을 줄 수가 없으므로 여럿이 함께 사용하는 운영체제에는 부적절한 파일시스템이다.
|
FAT12 |
FAT16 |
FAT32 |
사용매체 |
플로피디스크 |
소용량 하드디스크 |
대용량 하드디스크 |
주소지정방식 |
12 bits |
16 bits |
32 bits |
최대 주소 지정갯수 |
4,086 |
65,526 |
~268,435,456 |
1개클러스터 용량 |
0.5 KB to 4 KB |
2 KB to 32 KB |
4 KB to 32 KB |
1개 파티션 최대량 |
16,736,256 |
2,147,123,200 |
약 2^41 |
3. 섹터(sector)와 클러스터(cluster)
≫ 섹터의 개념
하드디스크에 데이터를 저장하는 최소단위가 섹터이다. 물질의 마지막 형태가 원자인 것과 같이 데이터의 최소형태는 파일이며 이 파일은 섹터라는 곳에 저장된다.
IBM호환 컴퓨터에 사용되는 하드디스크의 섹터는 512byte의 정보를 저장 할 수가 있다. 즉 영문자 512자를 섹터 하나에 기록할 수가 있다.
섹터에는 데이터를 저장 할 수 있는 공간 이외의 영역이 존재한다. 이 부분은 운영체제나 프로그램이 볼 수 없는 영역이며 주로 하드디스크 컨트롤러가 하드디스크를 작동시키는데 필요한 것들이다.
- ID정보(ID information)
: 섹터번호, 위치에 대한 정보인데 디스크 상에서 섹터의 위치를 확인하기 위한 정보이다.
- 동기화 필드(synchronization fields)
: 하드디스크 컨트롤러가 섹터를 읽기동작에 필요한 가이드 역할을 하는 부분.
- 데이터 영역
: 데이터 저장공간(512 byte)
- ECC
: 데이터의 무결성을 검사하기 위한 에러정정코드가 존재하는 부분.
- 빈공간(gabs)
: 섹터 사이를 구분해주는 빈 공간.
≫ 클러스터(cluster)
섹터를 일정 단위로 묶어 놓은 것을 클러스터라 한다.
도스에서 사용하는 파일시스템인 FAT16 방식에서 인식할 수 있는 주소를 섹터마다 배정하게 되면 배정 가능한 주소의 수가 모자라서 하드디스크 용량 인식에 문제가 생기게 되어서 고육지책으로 고안해 낸 방법이 섹터를 여러 개 묶어서 주소 한 개를 배정해서 인식 할 수 있는 용량을 더 크게 확장시킨 방식이다.
4. FAT16 / FAT32와 클러스터와의 관계 이해하기
☞ FAT16과 FAT32 방식의 기본 개념에 대해서는 파일시스템과 운영체제와의 관계 부분을 참고하기 바란다.
프로그램의 최소단위인 파일은 파일저장의 최소단위인 클러스터에 저장되는데 한 개의 파일은 한 개의 클러스터 이상의 공간에 저장된다.
파일 한 개의 크기가 클러스터의 크기보다 작을 때 그 클러스터의 남는 공간은 다른 파일이 함께 저장 될 수 없기 때문에 공간의 낭비가 심해지게 되고 파일은 크고 클러스터는 매우 작게 포맷이 되었을 경우 한 파일이 차지하게 되는 클러스터의 수가 많아지게 되어 그 파일을 읽어 들이는 속도가 느려지게 되고 클러스터 간의 링크가 손상될 확률이 높아지게 된다.
FAT16과 FAT32의 차이는 근본적으로 하드디스크의 클러스터에 얼마나 많은 주소를 지정할 수 있느냐의 차이다. FAT16은 2의16승(2^16)=65536개의 주소를 클러스터에 붙일 수 있고 (실제로는65536-10개) FAT32는 2^28 + 2^4 = 약 4억개 정도의 주소를 지정 할 수 있다.
<FAT16 방식에서의 섹터/클러스터/파티션의 관계>
클러스터당 섹터수와 용량 |
인식 가능한 파티션의 최대용량 |
1 × 512 = 512 |
512 × 65536 = 32MB |
2 × 512 = 1024 |
1024 × 65536 = 64MB |
4 × 512 = 2048 |
2048 × 65536 = 128MB |
8 × 512 = 4096 |
4096 × 65536 = 256MB |
16 × 512 = 8192 |
8192 × 65536 = 512MB |
32 × 512 = 16384 |
16384 × 65536 = 1024MB |
64 × 512 = 32768 |
32768 × 65536 = 2048MB |
위의 표에서 보면 FAT16방식에서는 섹터64개를 클러스터 1개로 묶으면 한 파티션의 최대용량이 2GB가 된다.
만일 8GB용량의 하드디스크를 FAT16방식으로 포맷하게 되면 파티션을 네개로 나누어야 하드디스크전체를 사용 할 수 있다. 이때 한 개 클러스터의 크기도 과도하게 크므로(32KB) 낭비되는 공간이 심하면 30%에 이를 수도 있다.
크기가 1KB인 문서파일 한 개 남는 공간 여기엔 다른 파일을 함께 저장 할 수 없다
<1클러스터=64섹터 일 때의 파일의 크기가 적을수록 공간의 낭비가 심해진다>
FAT16방식의 단점을 보완하기 위해 윈도우95 OSR2부터 FAT32를 지원하기 시작했다. FAT32에서는 클러스터의 크기에 따른 공간의 낭비와 데이터검색속도와의 효율성을 고려해서 1클러스터=4096byte(8개섹터)를 기본값으로 사용한다. 각 클러스트를 인식 할 수 있는 주소수도 충분해서 8GB의 하드디스크를 단일파티션으로 사용 할 수 있다.
<클러스터별 지원용량의 비교>
FAT16 |
FAT32 | |||
파티션 |
클러스터 |
파티션 |
클러스터 |
권장 클러스터 크기 |
128MB |
2KB |
260MB |
512B |
512B |
256MB |
4KB |
260MB~8GB |
512B, 1, 2, 4KB |
4KB |
512MB |
8KB |
8GB~16GB |
4, 8KB |
8KB |
1G |
16KB |
16~32GB |
8, 16KB |
16KB |
2G |
32KB |
32GB |
16, 32KB |
32KB |
FAT32에서는 8GB이상의 하드디스크를 8섹터=1클러스터가 기본값으로 되어있다.
5. 마스터부트영역의 구조와 FDISK/MBR에 대한 설명
≫ MBR이란?
MBR이란 하드디스크로 부팅하기위한 정보와 파티션 분할 정보 부팅에 사용되는 실제 파티션 (ACTIVE PARTITION)에 대한 정보가 저장된 곳으로 하드디스크의 제일 바깥쪽에 위치한 공간으로(절대섹터0(Cylinder 0, Head 0, Sector 1), 크기:1sector(512byte)) 하드 디스크로 들어오는 관문이 되는 곳이다.
≫ MBR이 하는 일
1. 부트파티션(active partition)을 파티션 테이블에서 찾는다.
2. 부트파티션의 시작섹터를 찾는다.
3. 부트파티션 내의 부트섹터(boot record) 복사본을 메모리로 로드시킨다.
4. 부트섹터의 실행코드의 전송을 중간에서 컨트롤한다.
만일 MBR이 위의 기능들을 완전히 끝마치지 못하면 다음 중 하나의 메세지를 화면에 표시하고 시스템이 정지하게 된다.
Invalid partition table.
Error loading operating system.
Missing operating system.
※ 플로피디스크나 LS-120, Zip 디스크 등은 MBR이 존재하지 않는다. 위의 이동식 저장매체의 첫번째 섹터는 부트섹터부터 시작한다.
※ 하드디스크가 두 개 이상 정착된 시스템에서 모든 하드디스크에 MBR이 존재하지만, 실행영역으로 지정된 파티션 (active partition)이 포함된 하드디스크의 MBR만 사용된다.
≫ MBR의 구조와 내용
다음은 윈도우98,ME에서 사용되는 표준MBR코드의 내용이다.
Absolute Sector 0 (Cylinder 0, Head 0, Sector 1)
0 1 2 3 4 5 6 7 8 9 A B C D E F
0000: 33 C0 8E D0 BC 00 7C FB 50 07 50 1F FC BE 1B 7C 3.....|.P.P....|
0010: BF 1B 06 50 57 B9 E5 01 F3 A4 CB BE BE 07 B1 04 ...PW...........
0020: 38 2C 7C 09 75 15 83 C6 10 E2 F5 CD 18 8B 14 8B 8,|.u...........
0030: EE 83 C6 10 49 74 16 38 2C 74 F6 BE 10 07 4E AC ....It.8,t....N.
0040: 3C 00 74 FA BB 07 00 B4 0E CD 10 EB F2 89 46 25 <.t...........F%
0050: 96 8A 46 04 B4 06 3C 0E 74 11 B4 0B 3C 0C 74 05 ..F...<.t...<.t.
0060: 3A C4 75 2B 40 C6 46 25 06 75 24 BB AA 55 50 B4 .u+@.F%.u$..UP.
0070: 41 CD 13 58 72 16 81 FB 55 AA 75 10 F6 C1 01 74 A..Xr...U.u....t
0080: 0B 8A E0 88 56 24 C7 06 A1 06 EB 1E 88 66 04 BF ....V$.......f..
0090: 0A 00 B8 01 02 8B DC 33 C9 83 FF 05 7F 03 8B 4E .......3.......N
00A0: 25 03 4E 02 CD 13 72 29 BE 46 07 81 3E FE 7D 55 %.N...r).F..>.}U
00B0: AA 74 5A 83 EF 05 7F DA 85 F6 75 83 BE 27 07 EB .tZ.......u..'..
00C0: 8A 98 91 52 99 03 46 08 13 56 0A E8 12 00 5A EB ...R..F..V....Z.
00D0: D5 4F 74 E4 33 C0 CD 13 EB B8 00 00 00 00 00 00 .Ot.3...........
00E0: 56 33 F6 56 56 52 50 06 53 51 BE 10 00 56 8B F4 V3.VVRP.SQ...V..
00F0: 50 52 B8 00 42 8A 56 24 CD 13 5A 58 8D 64 10 72 PR..B.V$..ZX.d.r
0100: 0A 40 75 01 42 80 C7 02 E2 F7 F8 5E C3 EB 74 49 .@u.B......^..tI
0110: 6E 76 61 6C 69 64 20 70 61 72 74 69 74 69 6F 6E Nvalid partition
0120: 20 74 61 62 6C 65 00 45 72 72 6F 72 20 6C 6F 61 table.Error loa
0130: 64 69 6E 67 20 6F 70 65 72 61 74 69 6E 67 20 73 ding operating S
0140: 79 73 74 65 6D 00 4D 69 73 73 69 6E 67 20 6F 70 ystem. Missing op
0150: 65 72 61 74 69 6E 67 20 73 79 73 74 65 6D 00 00 erating system.
0160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0180: 00 00 00 8B FC 1E 57 8B F5 CB 00 00 00 00 00 00 ......W.........
0190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01B0: z00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01 ................
01C0: 01 00 0B 7F BF FD 3F 00 00 00 C1 40 5E 00 00 00 ......?....@^...
01D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA ..............U.
실행코드영역(excutable area, 271byte)
: 하드디스크로 부팅하기 위해 필요한 어셈블러 명령어들로 구성되어 있다.
에러메세지(error message, 80byte)
: 하드디스크의 부팅이 실패했을 때 보여줄 메시지들이 들어 있는 곳.
예비공간(미래를 위해 남겨둔 공간)
: 기본적으로는 사용되지 않으나 일부 프로그램들은 이 영역을 사용하기도 한다.
실행코드(excutable code)
: MS사가 실행코드 7byte를 이곳에 쓰게 했는데 아직 정확한 이유를 밝히고 있지 않다.
파티션테이블(partition table, 64KByte)
: 하드디스크내의 기본영역과 확장영역에 관련된 용량,위치 등의 정보와 부팅 가능한 파티션 설정에 대한 정보가 담겨 있다.
매직넘버(magic number)
: 내용의 끝을 알리는 표시.
≫ FDISK /MBR 명령이 하는 일
FDISK /MBR 명령명령을 실행하면 MBR영역 중 파티션테이블64Byte를 제외한 MBR영역 전체를 FDISK가 다시 기록해 준다.
이 명령은 파티션테이블을 제외한 MBR영역이 손상되었을 때 이를 복구하는 도구로 사용된다.
파티션테이블이 손상되었을 경우는 다른 복구 유틸리티나 디스크에디터를 이용하여 직접 정보를 써 주거나 백업본을 이용하여 복구해야 한다.
6. 부트섹터 구조에 대해 확실히 이해하기
≫ 부트섹터의 구조
부트섹터는 각 파티션의 첫 번째 섹터에 위치한 기록으로 컴퓨터 시작에 중요한 역할을 하는 부분이다.
부트섹터에는 파일시스템이 해당 파티션으로 부팅하는데 필요한 실행 코드와 데이터 코드로 구성되어 있으며 파티션을 포맷 할 때 생성 된다.
윈도우2000 이나 XP를 시작 하게 되면 active로 지정된 파티션의 부트 섹터를 램에 로드시키고 ntldr을 실행시키게되며 ntldr은 boot.ini에 설정된 대로 운영체제를 로드 시키게 된다.
윈도우98은 active로 지정된 파티션의 부트섹터를 램에 로드시킨 후 루트 디렉토리에 있는 운영체제를 램에 로딩시키게 된다.
부트섹터는 다음의 내용으로 구성되어 있다.
1. CPU jump 명령어
2. OEM ID
3. BIOS parameter block (BPB) ? 파티션 내의 데이터 구조
4. 확장 BPB(extended BPB)
5. 운영체제의 부팅에 필요한 실행 코드(boot code or bootstrap code)
BPB는 해당 파티션의 자세한 구성정보(parameter)를 가지고 있으며 BPB 실행 후 이어서 확장 BPB가 실행된다.
FAT12, FAT16, FAT32, NTFS가 각각 다른 구성요소를 가지고 있기 때문에 BPB의 길이가 모두 다르다.
하드디스크 관련 장치 드라이버들은 필요 할 때 BPB와 확장 BPB의 정보를 이용한다.
확장 BPB 다음에는 부팅과정을 진행 시키는데 필요한 부트코드가 이어진다.
≫ 부팅과정 중의 부트섹터에서의 특징
A드라이브(플로피디스켓)는 MBR이 없고 부트섹터부터 존재하기 때문에 A드라이브로 부팅하게 되면 제일 먼저 부트섹터가 램에 로딩되고 부트코드가 실행되어 IO.SYS를 램에 올리게 된다.
만일 부트섹터를 찾지 못하게 되면 다음의 에러 메세지를 보이고 부팅과정이 멈추게 된다.
Non-system disk or disk error.
Replace and press any key when ready.
만일 위의 메시지를 하드디스크로 부팅하는 도중 만나게 되면 부팅파티션의 부트섹터의 손상을 의미한다.
윈도우2000과 XP에서는 동적 볼륨의 SPANNED VOLUME이나 STRIPED VOLUME으로부터는 부팅이 불가능하다.
이런 파티션의 정보는 MBR의 파티션 테이블에 정보가 없기 때문이다.
≫ 부트섹터 구성요소
MBR에 의해 CPU에 전송된 부트섹터의 처음 3바이트(CPU jump 명령)를 CPU가 실행하면 다음에 오는 OEM ID를 건너뛰고 다음을 실행하게 된다. 8바이트로 구성된 OEM ID는 해당 파티션을 포맷한 운영체제의 종류, 버전을 표시한다.
윈도우2000과 XP는 FAT방식으로 포맷된 파티션에서 도스와의 호환성을 유지하기 위해 OEM ID를 “MSDOS5.0”이라고 기록한다. 하지만 NTFS방식으로 포맷된 파티션에서는 “NTFS”라고 기록한다.
“MSWIN4.0”은 윈도우95 original에서 포맷한 파티션이며, “MSWIN4.1”은 윈도우95 OSR2, 98, ME에서 포맷한 디스크에서 볼 수 있다.
≫ FAT32 파티션에서의 부트섹터
FAT32의 부트섹터의 구성요소는 FAT16과 거의 비슷하나 몇 가지 항목이 더 추가 되었다. 확장 BPB는 FAT16과 동일하지만 BPB가 다르게 구성 되어 있기 때문에 FAT32와 호환되지 않는 운영체제는 FAT32의 부트섹터를 인식할 수 없다.
시작바이트주소
길이
이름
00000000
3 bytes
CPU Jump 명령어
00000003
8 bytes
OEM ID
0000000B
53 bytes
BPB(BIOS PARAMETER BLOCK)
00000040
26 bytes
확장 BPB
0000005A
420 bytes
Bootstrap code
000001AE
80 bytes
에러메세지
000001FE
2 bytes
부트섹터의 끝 표시(매직넘버)
부트섹터의 실제내용(FAT32 방식)
0 1 2 3 4 5 6 7 8 9 A B C D E F
00000000: EB 58 90 4D 53 44 4F 53 - 35 2E 30 00 02 10 24 00 .X.MSDOS5.0...$.
00000010: 02 00 00 00 00 F8 00 00 - 3F 00 FF 00 3F 00 00 00 ........?...?...
00000020: 1D 91 11 01 2A 22 00 00 - 00 00 00 00 02 00 00 00 ....*"..........
00000030: 01 00 06 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
00000040: 80 00 29 F1 9E 5E 5E 4E - 4F 20 4E 41 4D 45 20 20 ..)..^^NO NAME
00000050: 20 20 46 41 54 33 32 20 - 20 20 33 C9 8E D1 BC F4 FAT32 3.....
00000060: 7B 8E C1 8E D9 BD 00 7C - 88 4E 02 8A 56 40 B4 08 {......|.N..V@..
00000070: CD 13 73 05 B9 FF FF 8A - F1 66 0F B6 C6 40 66 0F ..s......f...@f.
00000080: B6 D1 80 E2 3F F7 E2 86 - CD C0 ED 06 41 66 0F B7 ....?.......Af..
00000090: C9 66 F7 E1 66 89 46 F8 - 83 7E 16 00 75 38 83 7E .f..f.F..~..u8.~
000000A0: 2A 00 77 32 66 8B 46 1C - 66 83 C0 0C BB 00 80 B9 *.w2f.F.f.......
000000B0: 01 00 E8 2B 00 E9 48 03 - A0 FA 7D B4 7D 8B F0 AC ...+..H...}.}...
000000C0: 84 C0 74 17 3C FF 74 09 - B4 0E BB 07 00 CD 10 EB ..t.<.t.........
000000D0: EE A0 FB 7D EB E5 A0 F9 - 7D EB E0 98 CD 16 CD 19 ...}....}.......
000000E0: 66 60 66 3B 46 F8 0F 82 - 4A 00 66 6A 00 66 50 06 f`f;F...J.fj.fP.
000000F0: 53 66 68 10 00 01 00 80 - 7E 02 00 0F 85 20 00 B4 Sfh.....~.... ..
00000100: 41 BB AA 55 8A 56 40 CD - 13 0F 82 1C 00 81 FB 55 A..U.V@........U
00000110: AA 0F 85 14 00 F6 C1 01 - 0F 84 0D 00 FE 46 02 B4 .............F..
00000120: 42 8A 56 40 8B F4 CD 13 - B0 F9 66 58 66 58 66 58 B.V@......fXfXfX
00000130: 66 58 EB 2A 66 33 D2 66 - 0F B7 4E 18 66 F7 F1 FE fX.*f3.f..N.f...
00000140: C2 8A CA 66 8B D0 66 C1 - EA 10 F7 76 1A 86 D6 8A ...f..f....v....
00000150: 56 40 8A E8 C0 E4 06 0A - CC B8 01 02 CD 13 66 61 V@............fa
00000160: 0F 82 54 FF 81 C3 00 02 - 66 40 49 0F 85 71 FF C3 ..T.....f@I..q..
00000170: 4E 54 4C 44 52 20 20 20 - 20 20 20 00 00 00 00 00 NTLDR .....
00000180: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
00000190: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
000001A0: 00 00 00 00 00 00 00 00 - 00 00 00 00 0D 0A 43 61 ..............Ca
000001B0: 6E 6E 6F 74 20 73 74 61 - 72 74 2E 20 20 52 65 6D nnot start. Rem
000001C0: 6F 76 65 20 6D 65 64 69 - 61 2E FF 0D 0A 44 69 73 ove media....Dis
000001D0: 6B 20 65 72 72 6F 72 FF - 0D 0A 50 72 65 73 73 20 k error...Press
000001E0: 61 6E 79 20 6B 65 79 20 - 74 6F 20 72 65 73 74 61 any key to resta
000001F0: 72 74 0D 0A 00 00 00 00 - 00 AC CB D8 00 00 55 AA rt............U.
BPB(BIOS PARAMETER BLOCK) 구성요소
시작주소
길이
내용
0000000B
2 바이트
한 섹터의 크기. 보통 512 바이트이다.
0000000D
1 바이트
한 클러스터 당 섹터 수. 윈도우기본값은 8섹터(4KB)이다.
0000000E
2 바이트
부트섹터부터 FAT1 전까지의 예약된 섹터 수.부트섹터가 포함된다.
00000010
1 바이트
FAT의 개수.이 값은 항상 2이다.(FAT1,FAT2)
00000011
2 바이트
루트디렉토리에 등록된 파일과 디렉토리의 갯수(FAT12/FAT16 만 적용). FAT32 에서는 항상 0 이다.
00000013
2 바이트
FAT12/FAT16 만 적용. FAT32 에서는 항상 0 이다.
00000015
1 바이트
Media Descriptor(매체서술자).현재 사용되는 매체에 대한 정보.F8은 하드디스크이며 F0는 고밀도 3.5인치 고밀도 플로피 디스켓을 의미.윈도우2000과 XP에서는 사용되지 않는다.
00000016
2 바이트
FAT당 섹터 수. FAT12/FAT16 만 적용. FAT32 에서는 항상 0 이다.
00000018
2 바이트
트랙 당 섹터 수
0000001A
2 바이트
헤드 수. 플로피 디스켓은 항상 2 이다.
0000001C
4 바이트
하드디스크의 처음부터 부트섹터까지의 거리.앞에 파티션이 없으면 이 값은 0이다.
00000020
4 바이트
총 섹터 수
00000024
4 바이트
FAT당 섹터 수.(FAT32 만 사용).
00000028
2 바이트
윈도우2000, XP는 사용하지 않는 영역이다.
0000002A
2 바이트
파일시스템Version (FAT32 만 사용). 윈도우2000과 XP는 0이다.
0000002C
4 바이트
루트디렉토리의 클러스터 수(FAT32 만 적용). 값은 대부분 2이다.
00000030
2 바이트
File System Information(FSINFO)의 섹터 수.백업부트섹터의 예비공간안에 저장되나 업데이트는 안된다. 기본값은1이다.
00000032
2 바이트
백업부트섹터.부트섹터의 백업본이며 권장값은 6이다.
00000034
12 바이트
예비공간(FAT32에서만 사용)
확장 BPB 구성요소
00000040
1 바이트
저장매체종류에 관한 정보. 플로피는 00이고 하드디스크는 80이다. 이 값은 부팅에 관련된 매체일 때만 관련이 있다.
00000041
바이트
예비영역. FAT32일때만 사용되는 영역이다.
00000042
1 바이트
확장부트표시.윈도우2000과 XP에서는 이 값이28이나29이어야 인식된다.
00000043
4 바이트
파티션 Serial Number. 파티션이 포맷될 때 임의값으로 부여되며 다른파티션과 구별하기 위한 정보이다.
00000047
11 바이트
Volume Label.
00000052
8 바이트
시스템 ID. FAT32 임을 의미.
7. FAT (file allocation table 파일 할당 테이블)이란?
FAT은 부트섹터 다음에 위치하는 부분으로 한 파티션 안에서 실제 파일에 해당하는 정보가 어느 위치에 저장되어 있는가를 표시해 놓은 위치정보를 모아 놓은 곳이다.
FAT 안을 들여다보면 각각 한 개의 클러스터 주소를 나타내는 커다란 숫자표라 할 수 있다.
FAT은 FAT1과 FAT2 두 부분으로 되어 구성되어 있으며 운영체제가 실제로 데이터를 찾을 때 이용하는 부분은 FAT1이며 실제 데이터 저장영역이 손상되지 않아도 FAT1에 기록된 위치정보가 손상되면 그 위치에 해당하는 실제 파일을 찾을 수 없으므로 FAT2라고 하는 복사본을 항상 유지하고 있다가 디스크에 파일이 새로 저장되거나 삭제될 때 FAT1의 위치정보도 그에 맞게 변경되며 동시에 FAT2에서도 FAT1과 같은 변경이 이루어진다.
위의 화면은 FAT1의 일부를 보여 준다.
번호가 매겨진 각각의 숫자들은 연속적으로 배열된 클러스터의 번호이며 실제 데이터 저장영역은 제일 처음의 0번과1번의 클러스터를 사용하지 않으며 세번째 클러스터인 2번 클러스터부터 사용된다.
첫 부분에 표시된 258이 실제 데이터가 저장된 첫 클러스터이며 클러스터 번호로는 cluster 2가된다. 그 다음 네번째 클러스터 부터는 순서대로 번호가 매겨져 있으며 네번째 클러스터에 <EOF>라고 표시된 이유는 파일 한개의 크기가 한 개의 클러스터보다 작아서 1클러스터만 차지 한다는 의미이며 end of file의 약자이다.
검정색으로 선택된 곳인 75 ~ <EOF>의 영역을 보면 RAMBOOST.EXE라는 파일은 74번 클러스터부터 79번 클러스터까지 차지하고 있으며 79번은 실제 파일의 마지막 클러스터라는 의미로 <EOF>라고 표시되어 있다.
FAT영역을 이해하는데 주의해야 할 점은 FAT 안에는 클러스터의 범위만 표시되어 있을 뿐 그 클러스터를 차지하고 있는 파일의 실제 이름은 존재하지 않는다. 위의 화면에서 보이는 C:\DOS\RAMBOOST.EXE는 루트 디렉토리와 하위디렉토리(SUB DIRECTORY)의 정보를 DISKEDIT라는 프로그램이 추적해서 표시해 준 것이다.
8. 파일을 읽고 쓰는 원리
≫ 하드디스크에서 파일을 찾는 과정
윈도우가 파일을 찾기 위해 처음으로 들어서는 곳이 루트 디렉토리이며. 여기에는 찾고자하는 파일의 위치정보 중 첫 클러스터만 알 수 있다. 파일의 전체 공간에 대한 정보는 FAT이 가지고 있으며 루트디렉토리에서는 알 수 없다.
1. 운영체제가 AAA.TXT 파일을 가져 올 것을 요구한다.
2. 루트디렉토리에서 AAA.TXT파일이 위치한 첫 클러스터의 번호와 기타 정보를 읽는다.
3. FAT1에 가서 해당 클러스터로 시작하는 클러스터들의 전체 범위를 파악한다.
4. 실제 파일의 위치로 가서 데이터를 읽는다.
결국 하나의 파일의 내용을 읽기 위해서는 루트 디렉토리와 FAT이 서로 협조해야 가능한 구조이다.
<하드디스크에 파일을 저장하는 과정>
1. 응용프로그램이 운영체제에게 파일을 하드디스크에 저장 할 것을 요구한다.
2. 운영체제가 FAT1의 사용하지 않는 공간을 검사
3. FAT1의 빈공간을 앞쪽부터 사용할 클러스터로 표시
4. 루트디렉토리나 하위디렉토리에 사용될 파일의 이름을 기록
5. FAT1에 표시된 클러스터의 실제주소에 데이터 저장
참고> 파일을 실제 데이터 저장영역에 기록하기 위해서는 바이오스의 도움을 받아야 한다.
운영체제가 지정한 클러스터 범위를 바이오스는 트랙과 섹터단위로 바꾸어 주는 일을 한다.
≫ 사용자가 파일을 지울 때 일어나는 일들
사용자가 파일을 지울 때 하드디스크에서는 파일을 지우지 않는다.
대신 다음의 두 가지 일이 일어난다.
1. 해당파일의 전체 클러스터 범위를 기록해 놓은 FAT의 정보를 모두 0 으로 바꾸어 놓는다.
2. 루트디렉토리의 해당 파일명 첫 문자를 소문자 시그마로 바꾸어 놓는다.
사용자가 지운 파일은 첫 문자와 FAT정보만 변경되고 다른 파일이 자신의 데이터를 그 위에 덮어 쓰지 않는 이상 실제 데이터는 원래대로 유지된다.
파이날데이터나 노턴 삭제복구마법사는 이 원리를 이용하여 데이터를 복구 시키며 다른 파일이 데이터를 덮어 쓴 경우에는 원래의 데이터를 복구하기 힘들게 된다.