Ⅰ. 섹터와 클러스터

포맷을 할 때 필수적으로 보게되는 클러스터(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.참고자로






 

 

신고
캐플 블로그에 공개된 글은 반드시 원본 글의 링크를 포함시키는 조건으로 자유롭게 이용하실 수 있습니다.
하지만 블로그의 발전을 위하여 되도록이면 링크로 글을 소개해주시길 부탁드립니다. ^^

- 상업적인 용도의 사이트는 대상에서 제외됩니다. -
- 글에는 오류가 있을 수 있고, 추후 수정 또는 재발행될 수 있습니다. -
  1. 청앵 2012.07.30 06:06 신고  댓글주소  수정/삭제  댓글쓰기
    얼마전부터 좋은 블로그를 알게되어 정말 좋은글 읽고있네요!
    그런데 CHS와 LBA에 대해서 좀더 알고싶은데 아직 거기에대한 포스팅은 보이질 않네요ㅠㅠ
    혹시 다뤄주실 생각 없으신지??ㅠㅠ
    • BlogIcon CApple 2012.07.30 06:38 신고  댓글주소  수정/삭제
      CHS 와 LBA 는 모두 디스크에 위치한 섹터의 주소를 나타내는 방법입니다.(주소가 있어야 해당 섹터로 찾아갈 수 있을테니)

      CHS 실린더 : 헤드 : 섹터라는 디스크의 물리적인 구조를 그대로 차용하여 디스크에 위치한 섹터의 주소를 나타내는 것입니다. 하지만 CHS 로 주소를 표현하는데에 IDE 나 BIOS 에 따라 최대로 표현할 수 있는 주소에 한계가 있었고, 이에 따라 큰 용량의 디스크는 이러한 한계를 넘어서는 섹터에 주소를 지정하는데 문제가 발생하게 되었습니다.(워낙에 오래된 주소 표현 방식이라)

      그래서 요즘은 LBA 를 사용하는데요. LBA 는 하드 디스크의 물리적인 구조를 사용하지 않고 하드 디스크에 있는 모든 섹터를 일렬로 세워놓고 차례로 번호를 매긴 것이라고 생각하면 됩니다. 즉, 논리적으로만 섹터에 번호를 매긴 것이죠.


      CHS 와 LBA 를 매우 단순하게 비교하자면

      CHS : 서울시 용산구 용산동 128 번지, 서울시 노원구 상계동 21 번지...

      └ 이게 처음에 집이 얼마 없을 때는 좋았는데 나중에 서울이 너무 커지다 보니 구나 동을 나누는데 한계가 발생. 어떤 지역엔 구나 동을 할당하지 못하는 사태가 발생해버림.

      LBA : 서울시 1 번지, 서울시 2 번지, 서울시 3 번지...

      └ 그래서 구나 동 같은 거 필요 없고 그냥 서울에 있는 모든 집들을 1 번부터 xxxx 번까지 차례로 번호를 매겨 버림.


      그래서 요즘은 LBA 를 사용한다고 생각하시면 됩니다. 간혹 디스크 관리 프로그램이나 그런 곳에서 CHS 주소를 사용하기도 하는데요. 그건 CHS 주소가 워낙에 예전부터 사용되던 것이라 일종의 호환과 편리를 위해 LBA 를 CHS 주소로 변환하여 표현해주는 것이라고 생각하시면 됩니다.


      이에 대해 설명이 된 곳을 찾아보니 아래의 글이 이에 대해 잘 설명하고 있네요. 아래의 글을 참고해 보시면 될 듯 합니다. ^^

      http://forensic-proof.com/archives/355
  2. 청앵 2012.08.01 04:24 신고  댓글주소  수정/삭제  댓글쓰기
    친절하신 답변 정말 감사드립니다!
  3. BlogIcon 니드뽀폴쉐 2012.11.05 22:17 신고  댓글주소  수정/삭제  댓글쓰기
    할당 단위 크기 관련 질문 좀 드려봅니다.

    제가 동영상 파일을 보관할 디스크를 exFAT이나 NTFS로 포멧하면서 할당 단위 크기로 고민을 많이 했는데... 파일 한개의 용량이 큰 경우(평균 수GB)에 할당 단위 크기를 좀 크게 하는게 뭔 이점이 있을까요? 당시에 뭐에 꽂혔었는지 그냥 파일 시스템도 그렇고, 할당 단위 크기도 8K 이상으로 설정하고 했던 기억이 나서... ^^;;
    • BlogIcon CApple 2012.11.06 14:45 신고  댓글주소  수정/삭제
      할당 단위를 크게 할 수록 관리하는 클러스터의 개수가 줄어들고, 이로인해 소폭이지만 액세스 타임을 줄일 수 있는 이점이 있죠. 또한 HDD 의 경우 단편화가 좀 더 적게 발생합니다. 벤치마크 상으로는 사실 차이가 없다고 봐도 되고요.

      아무튼 대용량 파일을 주로 저장하는 공간이라던지 다운로드 임시 공간과 같은 경우엔 상기와 같은 이유로 클러스터 사이즈를 크게 잡아주는 게 조금이지만 이득이 있죠. 그래서 저도 그냥 다운로드 & 토렌트 하드를 NTFS 64KB 로 잡아서 쓰고 있습니다. 어차피 자잘한 파일들은 그곳에 저장될 일이 없으니까요. ^^ 보통 16KB 이상이면 거의 똑같다고 하더군요.
    • BlogIcon 니드뽀폴쉐 2012.11.06 21:41 신고  댓글주소  수정/삭제
      오~ 그렇군요.
      exFAT에서 크~게 했다가 조각 모음이 엄청 오래 걸리는거 보고 쫄아서 8K정도 설정 했던 것 같은데... 앞으론 과감하게 해야겠네요.
      고맙습니다~ ^^
  4. 돌산 2013.01.16 11:47 신고  댓글주소  수정/삭제  댓글쓰기
    그림을 봐도 실린더에 대한 개념이 안잡힙니다.링크를 타고 가서 봐도 모르겠네요.
    실린더에 대해서 좀 알려주세요.캐플님.
    • BlogIcon CApple 2013.01.16 20:05 신고  댓글주소  수정/삭제
      플래터와 트랙이 뭔지는 아시겠나요? 하드 디스크는 둥그런 원판인 플래터로 이루어져 있죠. 그리고 플래터 하나당 위 아래로 두 개의 면이 존재합니다. 이러한 플래터의 면 하나 하나가 디스크에선 하나의 기록 공간입니다. 그리고 이러한 플래터가 여러 장이 존재하고 있습니다. 그럼 수직상으로 봤을 때 모든 플래터 면에서 동일한 지점에 위치한 트랙들을 하나로 묶어 실린더라고 합니다.

      [img]https://lh3.googleusercontent.com/-Xkt04IGpPcA/UPaCGb07GOI/AAAAAAAAAXs/dPb7THFjRGc/s626/0137-01.jpg[/img]

      즉, 위의 그림에선 세 장의 플래터에 여섯 개의 면이 존재하고 있죠. 그러한 면들의 동일한 지점에 위치한 총 여섯 개의 트랙을 묶어 하나의 실린더로 취급하는 것이죠.

      이러한 실린더가 왜 중요하냐면요. 플래터 하나당 앞 뒤로 해서 두 개의 면을 가지고 있으니 최종적으로 디스크에는 플래터 개수 x 2 만큼 기록할 공간이 존재한다는 거죠. 그래서 디스크에는 플래터 면의 개수만큼 헤드가 존재하고 있습니다. 이제 이러한 헤드가 플래터 위를 움직이면서 데이터를 읽고 쓰게 됩니다. 그런데 이러한 헤드들은 따로 따로 개별적으로 움직이는게 아니라 물리적으로 하나로 고정되서 동시에 움직입니다. 왜냐하면 헤드란 게 아래처럼 생겼으니까요.

      [img]https://lh6.googleusercontent.com/-CczbSHbAW9o/UPaE2MrrbvI/AAAAAAAAAX8/9M6GQcKrN7M/s576/0137-02.jpg[/img]

      이제 저기 헤드 암들 사이에 둥그런 플래터 원판이 끼워져 있고 그게 돌아가는 거라고 생각하시면 되는 겁니다. 그래서 헤드가 움직일 때 각각의 플래터 면마다 읽는 지점은(트랙은) 모두 동일한 위치가 될 수 밖에 없는 거죠. 그래서 이렇게 플래터 면마다 동일한 지점에 위치해있는 트랙들을 하나로 묶어서 실린더라고 부르고, 그걸 통해서 주소를 지정하는 겁니다.

      하드 디스크는 플래터 한 장으로만 구성되어 있는 것도 아니고, 헤드가 개별적으로 따로 따로 움직이는 것도 아닙니다. 아무튼, 실린더는 하드 디스크의 물리적인 작동 구조를 알아야 쉽게 이해할 수 있는 개념이죠. 이제 대충 이해되시나요?
    • 돌산 2013.01.17 10:40 신고  댓글주소  수정/삭제
      아...실린더가 그런 개념이었군요.이 글에 있는 그림과 링크를 타고 가서 본 그림을 보고,"아니,실린더란 원통이란 뜻인데 수직으로 실선이 있고,또 왜 트랙하고 같이 표시가 되어 있지?" "이게 도대체 뭔 뜻이야?" 라고 생각했었는데 캐플님 댓글의 설명을 보니 이제 확연히 이해가 됩니다.
      정말 고맙습니다.
  5. 십렙블마 2013.01.19 10:38 신고  댓글주소  수정/삭제  댓글쓰기
    아... 이해가 잘 됩니다. 저희 집이 예전 90년대 초반 16bit컴퓨터가 있었는데(허큘리스 그래픽... 이걸로 삼국지2, 수호지, 페르시아의 왕자1, 파퓰러스를 즐겼었네요)
    하드 용량이 30메가 였거든요.
    윗 글을 보니 왜 30메가 였는지 확실해지네요.
  6. 궁금합니다 2014.01.12 04:57 신고  댓글주소  수정/삭제  댓글쓰기
    좋은 글 게시해 주신 것에 대해 먼저 감사드립니다. 예전부터 가끔 들러서 이것저것
    읽어보는데 초보자들 입장에서 이해가 잘 되도록 설명을 잘 하시는 것 같습니다

    그런데 이 글을 읽다보니 궁금한 점이 하나 생겨서 질문을 드리려고 합니다. 본문의
    내용 중의 일부를 대충 요약해 보면 아래와 같습니다

    - 16 bit 시스템에서는 2^16 = 65,536개의 주소를 사용한다

    - 하나의 섹터에 하나의 주소를 매치시키면 총 65,536개의 섹터를 인식하게 된다

    - 하나의 섹터에는 512 byte의 데이터가 저장되므로 인식 가능한 하드 디스크의
    크기는 65,536 x 512 = 33,554,432 즉, 32메가 정도가 된다

    - 하지만 섹터 8개를 묶어 4,096 byte의 클러스터로 만들고 주소를 클러스터에
    매치시키면 인식 가능한 하드의 크기가 65,536 x 4,096 = 268,435,456 즉,
    256 MB가 된다

    여기까지는 이해가 갔는데... 이걸 요즈음의 시스템에 적용하여 같은 생각을 해
    보니 좀 이상한 겁니다. 아래는 제가 해 본 생각입니다

    - 32 bit 시스템에서는 2^16 = 4,294,967,296개의 주소를 사용할 수 있을 것이다

    - 하나의 섹터에 하나의 주소를 매치시키면 4,294,967,296개의 섹터를 인식하게 된다

    - 하나의 섹터에는 512 byte의 데이터가 저장되므로 인식 가능한 하드 디스크의
    크기는 4,294,967,296 x 512 = 2,199,023,255,552 즉, 2TB 정도가 된다

    - 하지만 섹터 8개를 묶어 4,096 byte의 클러스터로 만들고 주소를 클러스터에 매치시키면
    인식 가능한 하드의 크기가 4,294,967,296 x 4,096 = 17,592,186,044,416 즉, 16TB
    정도가 되어야 할 것이다

    이렇게 생각을 해 봤는데... 실제로는 32 bit 윈도우에서 2 TB 초과의 하드 디스크를
    하나의 파티션으로 인식하지 못하지 않는지요? 좀 더 곰곰히 생각을 해 봤는데 혹시
    2 TB 하드의 제한은 윈도우의 bit가 아니라 BIOS/EFI 또는 MBR/GPT와 관련된 문제인가
    하는 의문도 생기더군요. 예를 들어서 EFI 메인보드를 사용하는 시스템에 32 bit 윈도우를
    설치하면 16 TB까지의 GPT 하드를 통째로 인식시킬 수 있는 것일까요?

    어째서 16 bit 시스템에서는 섹터 대신 클러스터에 주소를 할당함으로써 볼륨의 크기
    제한을 상승시켰는데 요즘 사용하는 32 bit 시스템에서는 클러스터를 사용함에도
    불구하고 2 TB 초과의 하드 디스크 장착 제한에 대한 얘기가 나오는 것인지 궁금합니다
    • 별명 2016.05.12 22:39 신고  댓글주소  수정/삭제
      님 말씀대로 MBR 디스크라서 그렇습니다.
      http://cappleblog.co.kr/131 디스크의 종류와 용어 2 장 을 읽으면 나옵니다.
  7. 하드 2014.07.31 19:02 신고  댓글주소  수정/삭제  댓글쓰기
    안녕하세요 캐플님 글 잘 읽고 있습니다 EFI GPT 이런것들이나 하드웨어 쪽에 대해 전반적으로 자세히 공부해보고 싶은데 캐플님은 처음에 어떤 책으로 공부하셨나요 책좀 추천 해주실 수 있을까요?

댓글을 달아 주세요

- 댓글에선 예의를 지켜주시기 바라며, 블로그지기는 댓글에서 따로 활동하지 않습니다.

* 티스토리 사용자는 여기를 클릭하시면 로그인 됩니다.

BBCode 안내   굵게 밑줄 기울임 취소선   취소선 취소선 취소선 취소선   왼쪽 정렬 가운데 정렬 오른쪽 정렬   코드박스 인용구 이미지   이미지 업로드-Imgur.com