하드디스크 구조에 대해 공부한 것을 간단히 정리했다.

wikipedia.org

하드디스크를 크게 6가지 구성으로 나누면 다음과 같다.
1. 전원 커넥터(Power Connector) : 하드디스크에 전원을 공급하는 역할
2. 데이터 커넥터(IDE Connector) : 하드디스크와 컴퓨터 사이의 데이터를 송수신하는 역할
3. 헤드(Head) : 데이터를 읽는 역할.
4. 액츄에이터암(ActuatorArm) : 데이터를 읽을 위치로 헤드를 이동하는 역할
       헤드와 암은 플래터의 위아래 모두 존재할 수 있으며 한 쌍으로 생각할 수 있다.
5. 플래터(Platter) : 실제 데이터가 저장되는 곳
6. 스핀들(Spindle) : 플래터를 회전시키는 역할

이 중 데이터를 저장하는 곳인 플래터를 단면으로 살펴보면 다음과 같다.

wikipedia.org

A. 트랙 : 중심으로부터 같은 거리에 있는 섹터들의 모음. 원심 전체를 하나의 트랙이라고 한다.
B. 섹터 : 하드 드라이브의 최소 기억 단위이자 디스크 시스템에 데이터가 쓰여지거나 읽혀지는 물리적인 단위.
              트랙의 일부를 일정 단위로 자른 것.
              전통적으로 하드 디스크 드라이브(HDD)는 512byte, 신형 HDD(Advenced Format, AF)는 4096byte 섹터를 사용한다.
              섹터 헤더, 데이터 영역, 오류 정정 코드(ECC)로 이루어진다.
              - 섹터 헤더 : 디스크와 컨트롤러가 사용하는 정보(동기 바이트, 주소 식별 정보, 결함 플래그, 헤더 패리티 바이트)
              - 데이터 영역 : 기록된 사용자의 데이터
              - 오류 정정 코드(ECC) : 데이터에 유입될 수 있는 오류를 검사, 정정하는데 사용
C. 트랙 섹터 : 같은 구역에 있는 섹터의 집합
D. 클러스터 : 섹터를 일정한 단위로 묶어서 데이터의 입출력 단위로 사용하는 것. 기본 4096byte
              파일을 저장하도록 할당될 수 있는 가장 작은 논리 디스크 공간이므로, 만약 파일 크기에 비해 클러스터 크기가 크다면 그만큼의 디스크 공간이 낭비되게 된다. (이 때 낭비되는 공간을 slack space라고 한다.) 하지만 클러스터가 커질 경우 입출력 시 오버헤드와 단편화가 줄어들어 읽기 속도와 쓰기 속도 모두를 개선할 수 있다. 
              클러스터로 묶여있는 섹터들은 논리적으로 인접해있기 때문에 꼭 물리적으로 인접해있을 필요는 없다.

**
디스크 팩 : 보다 큰 용량의 데이터를 저장하기 위해 하나 이상의 플래터들을 모아 같은 중심축에 쌓아 놓은 것.
실린더 : 하나의 디스크 팩에서 반지름의 길이가 같은 위치에 있는 트랙들의 집합.
             아래 그림에서 3개의 플래터에 표시되어 있는 부분이 모두 하나의 실린더를 의미한다.
             일반적으로 데이터를 순차적으로 저장할 때 실린더 단위로 저장한다.

http://www.datarecoverytools.co.uk/2009/12/22/chs-lba-addressing-and-their-conversion-algorithms/

Slack Space

: 논리적인 크기와 물리적인 크기의 차이로 인해 낭비되는 공간

- 램 슬랙(RAM Slack) : 섹터에 할당하고 남은 비할당 영역. 섹터 크기보다 작은 파일이 할당될 경우 발생.
- 파일 슬랙(File Slack) 또는 드라이브 슬랙 : 클러스터에 할당하고 남은 비할당 영역. 
         하나의 클러스터 안에 여러 섹터가 존재할 때, 섹터 내에 남은 공간은 램 슬랙, 다른 남은 섹터가 있을 경우 이들을 파일 슬랙이라고 함.
- 볼륨 슬랙(Volume Slack) : 하드디스크를 논리 단위인 파티션으로 할당한 후 남는 영역.
- 파일시스템 슬랙(File System Slack) : 하드디스크를 논리 단위인 클러스터로 할당하고 남는 영역.
         볼륨 슬랙과 파일시스템 슬랙은 메모리를 원하는 단위로 나누고 남은 나머지. 파일을 할당하고 남은 것이 아님.

주소지정방식

각 섹터에 있는 데이터를 읽어오기 위해서는 해당 위치의 주소를 이용하여 접근해야한다.
이를 위해 섹터별로 가지고 있을 주소가 필요한데 이 주소를 지정하는 방식에 대한 논의이다.

1. CHS(Cylinder-Head-Sector) 방식
: 실린더, 헤드, 섹터의 물리적인 구조에 기반을 둔 방식.
실린더, 헤드, 섹터 각각의 위치가 지정되고 하드디스크 컨트롤러에 의해 그 위치로 이동하여 데이터를 읽는 것.
CHS(19, 2, 10)일 경우 2번째 헤드를 19번째 실린더, 10번째 섹터에 위치하도록 한다.
하드웨어 입출력 과정에 관여하는 BIOS에 한계가 있어 고용량 디스크에 사용되기 어려워 현재는 쓰이지 않는 방식이다.

2. LBA(Logical Block Addressing) 방식
: 각 섹터별로 논리적인 번호를 부여하는 방식. 
논리적인 번호와 해당 섹터의 위치 간 관계는 디스크 컨트롤러에서 관리한다.

섹터는 1부터 시작하기 때문에 LBA 주소가 0이라면 CHS 주소는 (0, 0, 1)이 된다.
LBA 주소가 1이라면 CHS주소는 (0, 0, 2)가 된다.

이를 이용하여 CHS와 LBA 간의 주소 변환 과정을 살펴보면 다음과 같다.

http://forensic-proof.com/archives/355

최근의 디스크들은 ZBR(Zone Bit Recording)이라고 하는 방식을 사용하는데, 이는 바깥쪽 트랙이 안쪽 트랙보다 길이가 더 길다는 점을 이용하여 바깥쪽 트랙에 더 많은 섹터를 할당하는 방식이다. 따라서 이러한 방식을 사용하는 디스크의 경우에는 CHS와 LBA 변환 시 트랙별로 섹터 갯수가 달라지는 것까지 고려해야할 것이다.

+ Recent posts