안녕하세요 EnIaC 입니다.


[제 1강] 에 이어서 바로 2강 시작 하도록 하겠습니다. 이전 1강에서 우리는 하드디스크의 동작 구조와 구성 또한 공부 했습니다. 이제 데이터를 기록하고 보관하는 방법에 대해 이야기 하려 합니다. 우선 데이터를 기록하고 보관하려면 데이터를 기록하기 위한 일정 규칙이 있어야 합니다. 규칙 없이 중구난방으로 저장했다간 다시 읽을수도, 있는지 여부도 알 수 없는 돌아올 수 없는 강을 건넌 의미없는 데이터와 다를 바가 없습니다. 그래서 위대하신 엔지니어분들이 고안한 데이터 저장 방법 몇가지를 소개 합니다.



[그림 1. 데이터 기록, 관리]


아래애 나올 모든 내용을 압축한 사진이 [그림 1] 입니다. 저희가 알아볼 내용은 섹터(Sector), 트랙(Track), 실린더(Cylinder) 그리고 클러스터(Cluster) 입니다.




1. Cylinder (실린더)


[그림 2. Cylinder 구조]


실린더는 다수의 플래터에서 트랙을 수직적으로 관통하는 3차원적인 스택을 이야기합니다. 하드디스크 용량 = 헤드수 * 실린더수 * 섹터수 * 섹터당 기록 용량 이라는 계산 방법을 사용했습니다. 보통 섹터당 512Byte 이라는 용량을 갖고 (기본 할당단위) 동심원을 동일한 각도로 나누어 데이터를 기록할 경우 내부 섹터와 외부 섹터의 실제 기록 밀도는 상당한 차이가 발생하게 됩니다. 즉, 안쪽 실린더에는 길이에 비해 기록 밀도가 매우 높습니다. 따라서 밀도가 높은 곳은 그만큼 데이터 안정성에 문제가 있을 가능성이 있기에 오늘날 모든 섹터가 같은 길이를 갖도록 하는 데이터 기록 방식을 사용하는 것이 일반적인 추세 입니다. 하지만 아직도 실린더라는 단위를 사용하는 곳이 있기에 FAT32 와 같은 파일시스템 에서는 실린더 단위를 사용하는 경우를 대비하여 호환성을 높이기 위해 실린더 단위를 지원 하긴 합니다만 권장하지 않습니다. 실린더 단위 지원 여부에 관해서는 MBR 에서 Partition Table 영역을 가보면 알 수 있습니다. 


[그림 2-1. Starting CHS Addr & Ending CHS Addr]


정말 예전 서버에서는 아직도 실린더 단위를 이용하기도 하며 현재에는 거의 없는 상태입니다. 이를 위해 하드디스크의 헤드 위치에 관한 정보를 읽을 수 있는 별도의 헤드를 하나 더 사용하게 됩니다.



2. 트랙 (Track)

트랙, 이름에서 느껴지듯 트랙이라는 단위는 플래터를 원형으로 잘랐을때 한 줄을 뜻합니다. 그 한 줄에서 여러개로 나뉘면 그 단위가 섹터가 되는것 입니다. 즉, 어떤 섹터가 있는 한 줄을 트랙이라고 부릅니다. 이해를 돕기 위해 [그림 3] 을 준비 했습니다.



[그림 3. Track 구조]


위 그림에서 알 수 있듯 섹터가 있는 한 줄을 곧 트랙이라 부르며 트랙을 여러개로 나누면 그것이 바로 섹터가 되는 것 입니다. 다시 말해 자기 매체에 늘어선 동심원으로 구획된 하나하나를 트랙이라 부릅니다.




3. 섹터 (Sector)


섹터, 이미 2번 트랙에서 대충 어떤것인지 보았습니다. 더이상 크게 말씀 드릴 부분은 없고 섹터 할당 크기에 대해 몇가지 말씀 드리겠습니다. 한 섹터는 기본 할당 크기인 512Byte 로 이루어져 있습니다. 하지만 요즘엔 기본 할당 크기를 변경할 수 있죠. 이유는 요즘 저장되는 데이터의 크기가 점점 대형화 되고 있기 때문입니다. 영화 한편이 이제 10GB 를 넘어가는 블루레이 파일은 쉽게 볼 수 있고 게임 하나에 50GB ~ 70GB 에 육박하는 게임도 존재합니다. 실제로 파티션 혹은 디스크 포맷 옵션으로 이동하여 할당 크기를 변경할 수 있는걸 볼 수 있습니다.



[그림 4. 기본 할당 크기]


이렇게 기본 할당 크기가 달라지면 어떤 장단점이 있길래 여러개로 나눈 것인지 생각해보면 답은 바로 나옵니다. 바로 읽기 쓰기 '속도' 에 있습니다. 저장 용량의 대형화도 물론 중요하지만 데이터를 읽고 쓰는 속도 역시 중요합니다. 예를 들어 하나의 피자를 놓고 10조각으로 나눈 것과 5조각으로 나눈것을 먹으려면 10개로 나눈것 보다 5개로 나눈것이 훨씬 더 빠르게 먹을 수 있을 것 입니다. (하나씩 가져가서 먹고, 먹는 속도는 크기와 상관 없다는 가정 하에) 이것도 마찬가지 입니다. 데이터 할당 단위의 크기가 크면 클수록 한번에 읽어들이는 데이터가 많아진다는 얘기고 그만큼 총 용량에서 읽고 확인하는 작업을 기하급수적으로 줄일 수 있습니다. 따라서 할당 단위의 크기는 해당 디스크를 사용하는 사람의 목적에 맞게끔 설정 되어야 합니다. 작은 문서파일을 주로 저장한다면 기본 할당 크기인 512Byte 를 사용하는것이 좋고, 대용량 영화나 게임같은 큼직 큼직한 파일을 주로 저장한다면 4096Byte 가 적당할 것 입니다. 혹은 더 크거나요. 이렇게 섹터는 데이터 기록에 있어서 중요한 역할을 하고 있습니다.




4. 클러스터 (Cluster)


클러스터는 데이터 기록에 있어서 가장 중요한 부분 입니다. 섹터의 그룹이며 도스에 의해 인식되는 최소 기억 단위 입니다. 보통 클러스터는 2의 누승개의 섹터를 갖고 있습니다. 작게는 16부터 많게는 64 혹은 128개 이상의 섹터를 하나의 클러스터로 사용 하기도 합니다. 그렇다면 왜 섹터를 클러스터로 묶는가에 대해 의문에 있으실 수 있습니다. 사실 디스크에 512 Byte 의 섹터 단위로 기록해도 아무런 문제가 없습니다. 섹터 단위로 기록하면 데이터를 촘촘히 기록할 수 있기 때문에 기록 밀도는 높아져서 디스크를 보다 효율적으로 사용할 수 있습니다. 하지만 1024 Cylinder, 16 Head, 63 Sector (CHS) 의 특성을 갖는 하드디스크를 생각하면 섹터 단위로 기록할 경우 자그마치 1.032,192개의 주소가 필요 합니다. 오늘날 하드디스크에 기록되는 파일은 대부분 512 Byte 보다 작지 않습니다. 따라서 512 Byte 단위를 초과할 때 마다 연결된 데이터가 위치한 포인터가 필요하게 됩니다. 이것은 바로 하나의 파일을 읽기 위해 수십 혹은 수 천개의 포인터를 계산하여 읽어들여야 한다는 뜻이 됩니다.

정리하자면 16 Sector / Cluster 인 하드디스크에서는 데이터를 8KB 로 기록을 하고 그 이하인 파일도 8KB 를 차지 합니다. 예를 들어 파일 용량이 1KB 이라도 한 클러스터에 할당되어 8KB 용량을 차지 하게 됩니다. 실제 용량과 하드디스크에 기록된 용량을 따로 볼 수 있는 이 유 또한 이러한 이유 때문입니다. 이해를 돕기 위해 [그림 5]를 준비 했습니다.



[그림 5. 실제 크기와 디스크 할당 크기]


[그림 5] 에서 보시는 바와 같이 실제 크기는 40KB 가 아님에도 불구하고 디스크에서는 40KB 로 정확히 잘라 저장하고 있습니다. 이 또한 한 클러스터당 8KB 이므로 8*5 즉, 5개의 클러스터를 할당하여 데이터를 저장하고 있기 때문입니다.




다음 강의에서는 파일 시스템의 꽃(?) 이라면 꽃인 MBR 즉, Master Boot Record 에 대해 알아보도록 하겠습니다.


WRITTEN BY
EnIaC
WhiteHackerGroup 『LockDown』 EnIaC 입니다.

,