디스크
디스크는 전원이 꺼져도 남아야 하는 데이터를 맡아 두고 필요할 때 다시 꺼내 줍니다. 서버가 다루는 파일과 데이터베이스가 쌓아 둔 내용이 모두 디스크에 놓입니다. 읽고 쓰는 데 걸리는 시간은 메모리보다 길고 담는 양은 훨씬 많습니다. 원반을 돌려 읽는 장치에서 온 이름입니다. 지금은 원반이 없는 저장 장치까지 함께 부릅니다.
쉽고 빠른 이해
디스크는 컴퓨터가 데이터를 오래 보관하는 저장 장치입니다. 서버에 올라온 이미지 파일, 데이터베이스가 쌓아 둔 레코드, 어젯밤에 남은 로그가 전부 디스크에 있습니다.
왜 따로 두는지는 전원 때문입니다. 메모리는 전기가 끊기면 담긴 내용이 사라집니다. 남겨야 할 데이터를 메모리에만 두면 서버가 한 번 꺼질 때마다 없어집니다.
도는 순서는 이렇습니다.
- 프로그램이 파일을 쓰겠다고 운영체제에 맡깁니다
- 운영체제가 그 내용을 정해진 크기의 덩어리로 잘라 디스크에 보냅니다
- 읽을 때는 그 덩어리를 찾아 다시 메모리로 올립니다
대가는 속도입니다. 디스크에서 데이터를 꺼내 오는 시간은 메모리와 견주면 한참 깁니다. 한 바이트만 고치려 해도 그 바이트가 든 덩어리 하나를 읽고 다시 써야 합니다.
상세
디스크를 창고에 빗대 봅니다. 책상 위에 안 올려 둔 물건은 전부 창고에 있습니다. 창고는 넓어서 무엇이든 들어갑니다. 대신 하나 꺼내오려면 걸어가서 찾아야 하니 시간이 걸립니다.
비유에서 창고는 디스크입니다. 책상은 메모리입니다. 프로그램이 지금 쓰는 데이터는 메모리에 있습니다. 나머지는 디스크에 있습니다.
디스크는 전기가 끊겨도 내용이 남는 저장 장치입니다. 전원과 무관하게 내용이 남는 이 성질을 비휘발성이라고 합니다. 디스크를 보조기억장치, 메모리를 주기억장치라고도 부릅니다.
원반에서 온 이름
초기 저장 장치는 자성을 띤 원반을 빠르게 돌렸습니다. 그 위를 팔에 달린 헤드가 오가며 데이터를 읽고 썼습니다. 이 원반이 disk 입니다. 원반을 쓰는 장치를 HDD(Hard Disk Drive, 하드 디스크 드라이브)라고 부릅니다.
지금은 SSD(Solid State Drive, 솔리드 스테이트 드라이브)가 널리 쓰입니다. SSD 안에는 원반이 없습니다. 전기로 데이터를 붙잡아 두는 플래시 메모리 칩이 들어 있습니다.
이름은 그대로 남았습니다. 운영체제도 둘을 같은 종류의 장치로 다룹니다. 이 항목에서 디스크라고 하면 둘을 아울러 가리킵니다.
다만 데이터를 담는 방법이 달라서 성질은 갈립니다. 아래 표에서 볼 것은 둘째 줄입니다.
| HDD | SSD | |
|---|---|---|
| 데이터를 담는 방법 | 원반의 자성으로 담습니다 | 칩에 전기로 담습니다 |
| 흩어진 위치 읽기 | 헤드가 옮겨 가는 시간이 듭니다 | 어느 위치든 비슷합니다 |
| 움직이는 부품 | 있습니다 | 없습니다 |
| 같은 용량의 가격 | 쌉니다 | 비쌉니다 |
흩어진 곳을 읽을 때 둘의 차이가 가장 크게 벌어집니다.
블록으로 잘려 담기는 데이터
디스크는 한 바이트씩 읽고 쓰지 않습니다. 정해진 크기의 덩어리를 최소 단위로 다룹니다. 이 덩어리를 블록이라고 합니다.
아래 그림은 파일 하나가 블록 넷에 나뉘어 담긴 모습입니다. 블록 1 한 칸과 마지막 칸을 봅니다.
block-beta columns 4 f["파일 하나"]:4 b0["블록 0"] b1["블록 1 · 한 글자를 고칠 칸"] b2["블록 2"] b3["블록 3 · 남는 곳은 빈다"]
파일이 커지면 아래 칸이 늘어납니다. 파일 끝이 블록 3 을 다 못 채워도 그 블록 하나를 차지합니다.
블록 단위라서 데이터 하나를 고치는 일도 덩어리 작업이 됩니다. 블록 1 안의 한 글자를 바꾸려면 그 블록을 통째로 읽어 와서 고친 뒤 다시 써야 합니다. 작은 수정이 잦은 프로그램일수록 이 비용이 쌓입니다.
요청 하나가 오래 걸리는 까닭
디스크는 CPU(Central Processing Unit, 중앙처리장치)나 메모리와 떨어져 있는 별도의 장치입니다. 요청을 보내고 답이 돌아올 때까지 기다리는 구간이 생깁니다. 이 기다림이 첫째 까닭입니다.
둘째는 찾아가는 비용입니다. 원반을 쓰는 디스크는 헤드를 목표 위치로 옮기고 그 위치가 돌아올 때까지 기다립니다. 흩어진 곳을 여기저기 읽으면 이 시간이 요청마다 붙습니다.
그래서 순차 접근과 임의 접근이 크게 갈립니다. 앞은 이어진 구간을 죽 읽는 것입니다. 뒤는 떨어진 곳을 골라 읽는 것입니다. 같은 양이어도 앞쪽이 빠릅니다.
데이터를 덧붙여 쌓기만 하는 저장 방식이 많은 까닭이 이것입니다. 새 내용을 이어 붙이면 쓰기가 순차 접근이 됩니다.
원반이 없는 디스크는 옮겨 다니는 시간이 없습니다. 그래도 요청을 주고받는 비용은 남습니다. 요청은 잘게 여러 번 보내는 것보다 크게 묶어 한 번에 보내는 쪽이 빠릅니다. 이것은 두 장치가 같습니다.
운영체제가 사이에서 하는 일
프로그램은 디스크에 데이터를 직접 쓰지 않습니다. 운영체제에 맡깁니다. 운영체제는 받은 내용을 메모리에 잠깐 모아 두었다가 나중에 디스크로 내려보냅니다. 이렇게 모아 두는 메모리 구역을 페이지 캐시라고 합니다.
flowchart TD
A["프로그램이 쓰기를 맡긴다"] --> B["운영체제가 페이지 캐시에 담는다"]
B --> C["프로그램에 완료를 알린다"]
B --> D["나중에 디스크로 내려보낸다"]
D --> E["디스크에 남는다"]
그림에서 화살표가 갈라지는 지점을 봅니다. 프로그램은 완료를 들었지만 그 내용은 아직 메모리에 있습니다. 그 사이에 전원이 끊기면 모아 둔 내용은 사라집니다.
그래서 반드시 남겨야 하는 데이터는 따로 명령을 보내 디스크까지 내려갔는지 확인합니다. 이 명령을 fsync라고 부릅니다. 데이터베이스는 커밋을 끝냈다고 답하기 전에 이 일을 합니다.
백엔드에서 디스크가 드러나는 곳
백엔드에서 디스크는 세 곳에서 드러납니다. 커밋을 인정하는 시점, 남은 용량, 느려졌을 때 보는 지표입니다.
데이터베이스는 바뀐 내용을 로그에 먼저 적고 디스크에 내려보낸 뒤에야 커밋을 인정합니다. 서버가 갑자기 죽어도 이 로그를 다시 읽어 되살립니다. 이 방식을 선행 기록 로그라고 합니다.
용량도 드러납니다. 남은 공간이 없어지면 새로 쓰려는 요청이 전부 실패합니다. 로그 파일과 임시 파일이 조용히 쌓여 이렇게 되는 일이 잦습니다.
성능은 두 가지로 잽니다. 초당 처리한 입출력 요청 수와 요청 하나가 끝나기까지 기다린 시간입니다. 앞의 것을 IOPS(Input/Output Operations Per Second, 초당 입출력 횟수), 뒤의 것을 지연이라고 부릅니다. 응답이 느려졌는데 CPU 가 한가하면 디스크를 병목으로 의심합니다.
디스크라는 낱말이 가리키는 범위
이 낱말은 기계에 꽂힌 장치 하나만 가리키지 않습니다. 장치 하나를 여러 구획으로 나눠 쓰기도 합니다. 나눈 구획을 파티션이라고 합니다. 이것도 흔히 디스크라고 부릅니다.
가상 머신에 붙은 디스크는 장치가 아니라 파일 하나일 때가 많습니다. 이 파일을 디스크 이미지라고 합니다. 그 안에서 도는 운영체제는 보통 디스크와 구별하지 않습니다.
클라우드에서 서버에 붙이는 블록 스토리지는 네트워크 건너편에 있습니다. 운영체제에는 디스크로 보입니다. 지연은 네트워크를 한 번 건너는 만큼 늘어납니다.
일상에서는 음악이나 영화를 담은 원반 매체를 디스크라고 부르기도 합니다. 데이터를 담는다는 점은 같습니다. 서버에서 디스크라고 할 때는 대개 이 항목이 다룬 쪽을 말합니다.
관련 항목
디스크와 함께 메모리 계층을 이루는 저장 장치
메모리 · CPU 캐시 · 레지스터 · 메모리 계층 · 테이프
디스크를 이루는 장치와 부품
HDD · SSD · 플래시 메모리 · 섹터 · 블록 · 디스크 컨트롤러
디스크 위에 데이터를 배치하는 소프트웨어
파일 시스템 · 아이노드 · 파티션 · 볼륨 · 마운트
쓰기가 디스크에 닿기까지 거치는 단계
시스템 콜 · 페이지 캐시 · 버퍼 · fsync · 디바이스 드라이버 · 블록 장치
디스크 성능을 재는 지표
디스크에서 자주 나는 장애
디스크 부족 · 병목 · 포화 · 배드 블록 · 데이터 손상
디스크에 데이터를 오래 남기는 방식
선행 기록 로그 · 로그 · 체크포인트 · 스냅샷 · 백업과 복구
여러 디스크를 묶거나 네트워크 너머로 붙이는 수단
RAID · 블록 스토리지 · 오브젝트 스토리지 · 네트워크 파일 시스템 · 디스크 이미지 · 가상 머신
디스크가 지닌 성질과 그 반대 성질
비휘발성 · 휘발성 · 순차 접근 · 임의 접근 · 영속성
다른 이름: disk · 보조기억장치 · 디스크 드라이브 · 하드 디스크