본문 바로가기

디스크와 파티션

[디스크 정보] 파일 시스템과 포맷 3 장 - 섹터와 클러스터

Ⅰ. 섹터와 클러스터

포맷을 할 때 필수적으로 보게되는 클러스터(Cluster) 란 것에 대해서 이야기를 해보도록 하겠습니다.


1. 디스크의 구조와 섹터

우리가 사용하는 디스크는 자기 마음대로 데이터를 저장하는 것이 아닙니다. 디스크에도 데이터를 저장하고 관리하기 위한 일종의 체계가 있습니다.

디스크에도 일정한 구역이 있는데 플래터(Platter), 헤드(Head), 트랙(Track), 섹터(Sector) 로써 그 구역이 나누어집니다. 또한 이러한 위치를 나타내기 위한 주소 체계가 있는데 이를 CHS(Cylinder-Head-Sector) 주소 체계라고 부릅니다.[MBR 디스크에서도 한 번 잠깐 나왔죠 ^^ 새로운 주소 체계인 LBA(Logical Block Addressing) 도 있습니다.]

Cylinder Head Sector(A) Track, (B) Geometrical Sector, (C) Track sector, (D) Cluster

뭐 지금은 디스크의 구조에 대한 포스팅이 아니기 때문에 여기까지만 하고(굳이 알 필요도 없고) 아무튼 디스크에서 사용하는 최소의 저장 단위는 바로 섹터(Sector) 입니다. 그리고 섹터 하나의 크기는 512 Byte 입니다. 이것만 아시면 됩니다. 왜 섹터 하나의 크기가 512 Byte 인지는 저에게 묻지 마세요. 만든 사람들이 그렇게 만들었으니까요.



2. 주소의 한계

초기엔 이걸 그대로 썼습니다. 즉, 데이터 저장의 최소 단위는 디스크에서 사용하는 그대로 512 Byte 였던 거죠. 근데 문제가 하나 있었습니다. 지금은 32bit & 64 bit 시대지만 과거엔 8 bit, 16 bit 시대였습니다. 8 bit 는 너무 멀리 갔고 16 bit 시절로만 따져도 컴퓨터가 인식할 수 있는 정보의 한계는 216 = 65,536 개가 전부였습니다.[0 과 1 의 비트 16 개를 통해 정보를 구현하니 16 bit 시스템에서 인식할 수 있는 정보의 한계는 216]

디스크의 최소 저장 단위인 섹터의 크기는 말했듯 512 Byte 입니다. 디스크에 데이터를 쓰고 읽기 위해선 파일을 어디에 쓸건지 어디에 위치해 있는지 알 수 있는 그 주소가 필요합니다. 그래서 섹터마다 주소를 지정해 주어야 하죠. 위에서 16 bit 시스템에서 인식할 수 있는 정보의 한계는 216 = 65,536 개라고 했습니다. 그래서 16 bit 시스템에서 인식할 수 있는 주소의 한계도 65,536 개가 한계인 것 입니다. 이러한 연유로 16 bit 시스템에서 사용할 수 있는 디스크 저장 공간의 크기는 512 * 65,536 = 33,554,432 Byte = 32MB 가 전부였습니다.[섹터마다 찾아갈 수 있게 주소를 지정해야 하는데 인식할 수 있는 주소의 한계가 65,536 개라]

32 MB 그 때 당시엔 모든 걸 담을 수 있을 만큼 거대한 용량이었지만 지금은 참 한심한 용량이죠.[그 시절 빌 게이츠가 남긴 유명한 말이 있죠. 메모리 640KB 면 네가 원하는 모든 걸 할 수 있을거라고... 개뿔! 빌 게이츠 때문에 도스에서 게임 한 번 하려면 고생 좀 했습니다. -_-;] 근데 하드 디스크가 점점 발달하면서 정말로 40 MB 가 넘는 거대한(?) 디스크들이 나오기 시작했습니다. 16 bit 시스템에선 인식할 수 있는 용량의 한계가 32 MB 뿐인데 미치고 환장할 노릇이 아닐 수 없었습니다. 얼른 32 bit 시대가 열리면 좋겠는데 그러기엔 좀 오래 걸릴 듯 하고 말이죠.



3. 클러스터란 개념의 등장

그래서 내 놓은 해결 방안이 바로 섹터 여러 개를 하나로 묶고 이를 클러스터라 하고 이러한 클러스터를 운영체제에서 사용하는 데이터 저장의 최소 단위로 사용하자! 였습니다. 즉, 65,536 이라는 주소를 섹터 하나 하나에 모두 지정해서 사용할 경우 32 MB 가 한계이니 차라리 섹터 여러 개를 묶어서 이를 클러스터라 하고 클러스터를 운영체제에서 최소 저장 단위로(주소 지정 단위로) 사용하자는 개념인 것 이죠. 8 개의 섹터를 하나로 묶으면 4096 Byte(4 KB) 클러스터, 16 개의 섹터를 하나로 묶으면 8192 Bye(8 KB) 클러스터가 되는 것 입니다.

이렇게 클러스터라는 개념을 도입하고 운영체제의 최소 저장 단위로 함으로써 운영체제가 사용할 수 있는 디스크 크기의 한계를 극복한 것 입니다. 그래서 클러스터를 4 KB 로 하면 4096 * 65,536 = 268,435,456 Byte = 256 MB, 클러스터를 32 KB 로 하면 32,768 * 65,536 = 2147483648 Byte = 2 GB 가 되는 것 입니다. FAT16 의 경우 32 KB 사이즈의 클러스터까지 지원을 하기 때문에 그래서 한계 용량이 2 GB 가 되는 것 입니다. 물론 64 KB 의 클러스터를 사용하여 4 GB 지원을 하기도 하지만 도스에선 지원을 안 해서 거의 사용이 안 되었죠.



4. 클러스터의 문제점

근데 클러스터를 사용하면서 문제가 하나 발생했습니다. 디스크의 최소 저장 단위인 섹터와 운영체제의 최소 저장 단위인 클러스터의 크기에서 차이가 발생하면서 버려지는 공간이 생겨버린 겁니다. 즉, 1 KB 짜리 파일을 하나 저장한다면 디스크의 최소 저장 단위인 섹터에선 512 Byte 섹터 두 개를 사용하여 버리는 용량이 없는 것에 반해(물론 파일의 크기가 더 작다면 섹터에서도 버려지는 공간은 분명 있습니다.) 4 KB 의 클러스터를 사용할 경우 나머지 3 KB 는 쓰지 못하고 버려지는 용량이 되어 버린 것 입니다. 만약 32 KB 라면 무려 31 KB 를 사용하지 못하고 버려지는 것이죠. 물론 파일의 용량이 큰 경우엔 이렇게 버려지는 용량이 미미하지만 작은 파일을 다수 저장하는 경우엔 이게 좀 문제가 됩니다.

또한 얻은 이점도 있습니다. 클러스터로 인해 해당 파일을 기록하고 찾는데 더 적은 수의 주소가 필요하게 된 것이죠. 즉, 좀 더 적은 주소로 관리할 수 있게 된 것 입니다. 이 때문에 파일을 찾고 읽는 작업에서는 좀 더 적은 수의 주소로 인해 좀 더 빨리 찾고 읽을 수 있게 된 것이죠.

이러한 클러스터의 크기는 양날의 검 입니다. NTFS 에선 이러한 클러스터의 단점를 개선하기 위해 좀 더 고급적인 클러스터 관리 기술을 사용하여 덜 하지만 FAT 패밀리에선 이 차이가 명확하게 들어납니다. 그래서 포맷을 할 때 이러한 지식없이 클러스터 크기를 수동으로 지정하지 말고 그냥 윈도우가 권장하는 기본 값으로 사용하라는 게 그러한 이유입니다. 섹터와 클러스터 이야기는 여기까지 입니다. ^^





Ⅱ. 부록

1.참고자로