1. HDD란?
컴퓨터를 구성하는 부품 중 하나로 '보조기억장치' 중 하나이다. 쉽게 말해, "데이터 저장공간을 제공하는 장치" 정도로 생각하면 될 것 같다.
(주기억장치와 혼동하는 자들이 있는데, 주기억장치는 메모리이다. 주기억장치를 보조한다는 의미)
주기억장치(메모리)는 휘발성인데, 컴퓨터 전원이 꺼지면 데이터가 날아가버리는 반면, 보조기억장치는 비휘발성이라 전원이 꺼져도 장치에 데이터가 여전히 보존된다.
HDD는 내부의 동그란 판때기가 무식하게 빠른 속도로 돌면서 데이터를 기록한다.
비자성체(자기에 반응하지 않는 물질)인 비금속 성분의 원판 표면에 자성체(자기에 반응하는 물질)인 산화금속 막이 양면에 코팅되어 있는 판때기가 돌면서 자기적으로 0 또는 1의 데이터를 저장한다. 자기장의 밀도변화를 측정하는 원리라고 한다. (자세한건 구글링 하셈)
어쨌든 그냥 0아니면 1기록하는 장치라고 알면 된다.
HDD라는 하드웨어가 어떻게 데이터를 기록하고, 실제 컴퓨터 사용시에 저장된 데이터를 어떻게 탐색하는지, 저장공간 관리는 어떻게 하며, 데이터 복구는 어떻게 가능한지 등등 디지털포렌식 관점의 지식들을 알아가는게 더 중요하다.
그래도 저 깡통안에 뭐가 들었는지는 좀 궁금하니까 간단하게 한번 알아본다.
2. HDD의 구조
하드디스크는 외부환경(진동, 충격, 자성 등)에 의해서 수명 편차가 커지는 장비라서 최대한 밀폐된 구조로 설계되어 있다.
일단 아래 그림처럼 한번 뜯어내면 그냥 못쓴다고 봐야한다.
- 플래터(Platter)
위에서 언급한 원형 판떼기이다. 1개 이상의 플래터가 층층이 쌓여 있는 구조이다.
플래터의 윗면, 아랫면에는 산화금속 막으로 코팅되어 있고, 양면으로 데이터를 읽고 쓰게 된다.
이 판떼기의 단면을 위에서 바라보면 아래 그림과 같이 나타낼 수 있다.
플래터는 위와 같은 단면으로 나타낸다.
트랙(Track)은 '나무의 나이테 하나' 라고 생각하면 쉽다. 구역이 나누어진 한 동심원을 트랙이라고 부른다.
헷갈리면 올림픽 육상 트랙이 동그란 형태로 돼있으니까 그것을 연상하면 될 듯 하다.
섹터(Sector)는 트랙을 일정한 크기로 조각낸 것을 말한다. 일반적으로 "데이터 기록의 가장 기본 단위" 이다.
흔히들 불량섹터(베드섹터)라는 말을 들어봤을 텐데, 그 때 섹터의 개념이 이것이다.
총 571byte 가 기본 단위이며, 섹터 고유정보 저장영역(69byte)과 데이터영역(512byte)으로 이루어져 있다.
실제 데이터는 512byte가 저장된다.
클러스터(Cluster)는 섹터들의 집합이라고 볼 수 있다.
하드디스크 입/출력 작업은 1섹터(512 byte)가 최소 단위인데, 용량이 큰 파일들은 1섹터 씩 작업하면 느리다.
그래서 일반적으로 파일시스템에서 여러 개의 섹터들을 묶어 하나의 클러스터 개념으로 기본 입/출력 작업 단위로 사용한다.
클러스터의 단위는 할당하기 나름이다. 클러스터 하나를 512 byte, 1KB, 2KB, 4KB, 8KB 등 여러 단위로 할당할 수 있다.
크게 할당 할수록 처리는 빨라질 수 있으나, 낭비되는 공간이 그만큼 많이 생기고, 작게 할당하면 반대로 느리지만 공간낭비가 덜 하겠지..
그리고 실린더(Cylinder)라는 논리적 개념이 있는데, 하나의 HDD에는 여러개의 판떼기로 구성돼있다고 언급했었다.
이 판떼기들은 동일한 구조를 가진다. 1층 103호 바로 위에 2층 203호, 3층 303호가 있듯이.
이때 103호, 203호, 303호 각각이 트랙의 개념이고, 3개 층의 호수를 통째로 묶어 "3호 라인"으로 부르는 것을 실린더라고 한다.
즉, 동일한 위치에 있는 트랙의 집합을 실린더라고 한다. 이 개념은 트랙을 구분하기 위해 사용된다.
동일한 위치에 트랙들이 쌓이기 때문에 마치 통조림캔에 든 파인애플 형태라고 상상하면 된다. 이것 자체를 디스크 팩이라 부르기도 한다.
- 스핀들(Spindle)
판떼기를 돌리는 모터와 직접 연결된 부품이다. 플래터가 여러개 일때 각 플래터를 단단히 고정시켜주는 역할을 한다.
스핀들 없이 플래터를 돌리다간.. 판떼기가 표창이 될 수도 있다.
- 헤드(Head)
판떼기에 직접 접근하여 데이터 읽기 / 쓰기 등 작업을 한다. 한번에 하나의 작업만 가능하다.
하나의 플래터에 2개의 헤더가 필요한데, 양면을 다 쓰기 때문이다. 그래서 플래터가 2개면 헤더는 4개, 3개면 6개
이 "헤드의 번호" 자체가 읽기/쓰기 작업할 플래터 식별, 식별된 플래터의 앞면 인지 뒷면인지 구분할 수 있는 척도가 된다.
- 액츄에이터 암(Actuator Arm)
헤드를 움직이는 역할을 한다. 직선운동을 한다. 앞뒤로 왔다리 갔다리
디스크의 헤드가 섹터에 있는 데이터를 읽으려면 헤드 바로 밑에 그 섹터가 있어야 한다. 근데 디스크는 계속 뺑뺑 돌고 있으니 헤드 위치로 섹터가 올때까지 기다려야겠죠? 이 기다리는 시간을 '회전대기시간' 이라고 부른다. 보통 HDD 구매 시에 확인하는 것이 RPM(회전속도) 인데, RPM이 높아야 회전대기시간이 짧아서 더 빠르게 작업이 가능하겠지.
정리하자면, 모터와 연결된 스핀들이 플래터를 회전시키고, 데이터를 읽거나 쓰기 위해 액츄에이터 암이 직선운동을 하면서 헤드의 위치를 잡아주는 방식으로 동작!
3. HDD 데이터 주소 지정 방식 (or 데이터 접근 방식)
- 3.1. CHS (Cylinder - Head - Sector)
CHS는 앞서 언급한 실린더, 헤드, 섹터 위치값을 이용하여 HDD의 데이터에 접근하는 방식이다.
물리적 구조에 기반한 주소지정 방식으로, 초기에 사용되던 방식이다. 현재는 이 방식이 쓰이지 않는데, 이유는 제한사항이 많기 때문이다.
기존의 ATA 명세에는 실린더 16bit, 헤드 4bit, 섹터 8bit 가 만땅인데, 옛날 BIOS 기준은 실린더 10bit, 헤드 8bit, 섹터 6bit 로 제한되었다.
서로 최소값에 맞춰 실린더 10bit, 헤드 4bit, 섹터 6bit 가 최대로 할당가능한 주소가 된다는 말이다. 용량으로 환산해봐야 504MB 밖에 되지 않는다.
2^10 + 2^4 + 2^6 - 1 = 504MB // 섹터는 0이 아닌 1부터 시작하므로 1을 빼주어야 함
자 그럼 CHS 주소 방식은 어떠한 구성으로 되어있는지 확인해보자. CHS의 의미는 아래와 같다.
접근하려는 섹터의 트랙 넘버를 확인하기 위한 실린더 값 (C)
몇 번째 플래터인지, 거기서 앞면인지 뒷면인지 확인하기 위한 헤드값 (H)
해당 트랙에서 몇번째 주소에 섹터가 있는지 확인하기 위한 섹터값 (S)
최초에 하드디스크에 접근하려면 BIOS에서 디스크 작업 관련 소프트웨어 인터럽트가 발생해야 한다.
해당 내용은 예전에 작성된 관련 포스트를 참고.
BIOS(Basic I/O System)와 소프트웨어 인터럽트
BIOS는 한번 언급한 적이 있는데, 뭐 쉽게 얘기해서 PC 주변장치들 즉, 하드웨어 기기들을 제어하는 ...
s2kiess.blog.me
위 포스트에서 보면 disk I/O는 INT 0x13 인터럽트에 의해 발생한다.
이 인터럽트 명령은 소프트웨어 인터럽트 벡터 테이블을 참조하여 요청한 작업을 처리할 수 있도록 한다.
INT 0x13 핸들러에 레지스터들을 이용하여 핸들러 파라미터를 전달하는데, 파라미터 중에 주소를 지정하는 놈이 하드디스크 어느 부분에 접근할지 전달한다.
CH 레지스터에 실린더값, CL 레지스터에 헤드값, DH 레지스터에 섹터값이 들어간다.
물론 INT 0x13은 CHS 방식에 한함
정리하자면, BIOS에서 소프트웨어 인터럽트 (INT 0x13)을 이용하여 접근할 CHS주소를 포함하여 작업을 명령하면 HDD가 동작하여 해당 주소에 접근할 수 있는 것이다.
자... CHS가 접근하는 방식은 알겠는데, 문제는 할당 가능한 용량이 504MB 밖에 안되는 것이다.
그래서 나온 것이 LBA 주소 지정방식이다.
- 3.2. LBA (Logical Block Addressing)
LBA 주소 지정방식은 이름에서 알 수 있듯이, 논리적 주소 할당 방식이다. 기존의 값들을 정렬하여 하나의 메모리 처럼 활용하는 방법
(CHS방식 이후 Large(=Extended CHS) 방식도 있었지만.. 어차피 안쓰이고 방식은 CHS와 별반 다를바가 없어서 넘어간다.)
CHS 방식은 CHS(1,4,2)와 같이 각 영역 값들을 명시하는 반면, LBA는 간단하게 LBA 1, LBA 2 이런 방식으로 표기된다.
기존에는 28비트 LBA표준이 사용되었으나, 해당 표준은 128GB가 만땅이라, 후에 48비트 LBA표준이 나왔다. (2^48 = 144PB)
그럼 CHS -> LBA, LBA-> CHS 변환 알고리즘을 알아보자. 사실 굳이 알 필요는 없는데 간혹 CHS를 사용하는 환경이 존재할 수 있으므로..
[ CHS -> LBA ]
* LBA = (((CYLINDER * heads_per_cylinder) + HEAD) * sectors_per_track) + SECTOR - 1
[ LBA -> CHS ]
* CYLINDER = LBA / ( heads per cylinder * sectors per track )
* HEAD = ( LBA / sectors per track ) % heads per cylinder
* SECTOR = ( LBA % sectors per track ) + 1
- 3.3. ZBR (Zone Bit Recording)
90년대 이후 대부분의 하드디스크에서 사용되고 있는 주소지정방식이다.
각 트랙마다 할당할 수 있는 섹터의 갯수가 다른점에서 나온 방법이다. (가장자리 트랙이 더 많이 할당 가능하지)
각 트랙당 섹터수를 정확하게 알고 있어야 계산이 가능하다.
// ZBR에 관해서는 언급된 내용들이 많지 않아 이 정도로만 정리. (추후 추가정보를 알게되면 다시한번 포스트 함)
# 참고 도서
<파일시스템 포렌식 분석> - 브라이언 캐리어 저
<디지털 포렌식> - 노명선 저
# 참고 URL
http://forensic-proof.com/archives/355
http://smsinfo.tistory.com/433
https://en.wikipedia.org/wiki/Zone_bit_recording
'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글
EBR(Extended Boot Record) (0) | 2021.04.10 |
---|---|
MBR(Master Boot Record) 디스크 (0) | 2021.04.10 |
볼륨(Volume), 파티션(Partition) (0) | 2021.04.10 |
하드디스크(HDD) 파기 (1) | 2021.04.10 |
하드디스크 인터페이스 (HDD Interface) (0) | 2021.04.10 |