저장장치와 파일
RAM은 빠르지만 전원을 끄면 모든 것을 잊는다. 사진, 앱, 운영체제처럼 오래 남아야 하는 것은 저장장치에 둔다. 주방으로 치면 창고다. 이 장에서는 창고가 어떻게 생겼는지(HDD와 SSD), 그 안의 물건을 어떻게 정리하는지(파일 시스템), 그리고 버렸다고 생각한 물건이 왜 여전히 창고에 남아 있는지를 알아본다.
- 휘발성 메모리와 비휘발성 저장장치의 차이를 설명한다.
- 하드디스크(HDD)가 느린 이유를 “기계가 움직이는 시간”으로 이해한다.
- SSD의 플래시 메모리가 전자를 가둬 기억하는 원리와 “덮어쓰기 불가” 특성을 안다.
- 파일 시스템이 파일을 블록에 나눠 담고 목록으로 관리하는 방식을 따라간다.
- 파일을 지워도 데이터가 남는 이유와 안전하게 지우는 방법을 안다.
잊지 않는 기억: 비휘발성
6장에서 본 DRAM은 전하가 새서 계속 새로 채워야 했다. 전원이 꺼지면 모든 것이 사라진다. 이런 성질을 휘발성(volatile)이라 한다. 반대로 전원 없이도 수년간 데이터를 유지하는 장치를 비휘발성(non-volatile) 저장장치라 한다.
| 메모리 (DRAM) | SSD | HDD | |
|---|---|---|---|
| 전원이 꺼지면 | 사라짐 | 남음 | 남음 |
| 기억 방법 | 새는 커패시터의 전하 | 절연막에 갇힌 전자 | 원판 표면의 자석 방향 |
| 무작위 읽기 시간 | ≈ 0.1 µs | ≈ 50~100 µs | ≈ 5~10 ms |
| 1 GB당 가격 (대략) | 가장 비쌈 | 중간 | 가장 쌈 |
| 움직이는 부품 | 없음 | 없음 | 있음 (회전 원판, 헤드) |
하드디스크: 레코드판과 바늘
하드디스크(HDD, Hard Disk Drive)는 자성 물질을 입힌 금속 원판이 1분에 5,400~7,200번 돌고, 그 위를 머리카락보다 얇은 높이로 떠 있는 헤드가 오가며 자석의 방향(N/S)으로 0과 1을 읽고 쓴다. 레코드판과 바늘을 떠올리면 된다.
데이터를 읽으려면 두 가지를 기다려야 한다. ① 헤드가 원하는 동심원(트랙)까지 팔을 움직이는 시간(탐색 시간), ② 원판이 돌아서 원하는 위치가 헤드 밑에 올 때까지 기다리는 시간(회전 지연). 둘 다 기계가 실제로 움직이는 시간이라 밀리초 단위다. CPU 기준으로는 몇 달이다(1장).
HDD vs SSD 읽기 경주
SSD: 전자를 가두는 감옥
SSD(Solid State Drive)는 움직이는 부품 없이 반도체 칩으로만 데이터를 저장한다. 그 칩이 플래시 메모리(정확히는 NAND 플래시)다. 플래시 셀은 트랜지스터 안에 사방이 절연체로 막힌 작은 방을 하나 더 두고, 높은 전압으로 전자를 억지로 밀어 넣어 가둔다. 갇힌 전자는 전원이 꺼져도 빠져나가지 못해 수년간 남는다. 전자가 갇혀 있는지 아닌지로 0과 1을 구분한다.
플래시는 연필이 아니라 잉크로 쓰는 공책과 비슷하다. 빈 줄에는 언제든 쓸 수 있지만, 이미 쓴 줄을 고쳐 쓸 수는 없다. 지우려면 여러 쪽이 묶인 한 장(블록)을 통째로 표백해야 한다. 그래서 내용을 고칠 때는 새 빈 줄에 다시 쓰고, 옛 줄에는 “무효” 표시만 해 둔다. 무효 줄이 쌓이면 아직 유효한 줄만 다른 장으로 옮겨 적고 그 장을 통째로 지운다.
플래시 메모리의 쓰기와 지우기
이런 복잡한 관리는 SSD 안에 들어 있는 작은 컴퓨터(컨트롤러)가 혼자 처리한다. 운영체제는 “5번 블록에 써 줘”라고만 말하고, 컨트롤러가 실제로는 빈 페이지 어딘가에 쓰고 그 위치를 자기만의 표에 적어 둔다. 9장에서 배울 가상 메모리와 놀랄 만큼 닮은 아이디어다.
파일 시스템: 창고의 정리 규칙
저장장치는 그 자체로는 번호 붙은 블록(보통 4 KB)이 길게 늘어선 공간일 뿐이다. 여기에는 “사진.jpg”나 “문서” 폴더 같은 개념이 없다. 이름 붙은 파일과 폴더라는 정리 방식을 제공하는 것이 운영체제의 파일 시스템(file system)이다. 윈도우의 NTFS, 맥의 APFS, 리눅스의 ext4가 대표적이다.
파일 시스템은 저장장치 한쪽에 목록을 두고, “사진.jpg = 크기 12 KB, 블록 5, 6, 7번”처럼 파일 이름과 데이터가 들어 있는 블록 번호를 적어 둔다. 도서관의 도서 목록 카드와 같다. 아래에서 파일을 만들고 지워 보자.
파일 시스템: 블록과 목록
| 파일 이름 | 크기 | 블록 목록 | 조각 수 |
|---|
폴더도 사실은 특별한 파일이다. “이 폴더 안에는 이런 이름의 파일들이 있고, 각각의 목록 정보는 여기 있다”라는 내용을 담은 파일이다. 그래서 폴더 안에 폴더를 끝없이 넣을 수 있다. 파일을 다른 폴더로 옮기는 일이 아무리 큰 파일이어도 순식간에 끝나는 이유도 이것이다. 데이터를 옮기는 게 아니라 목록의 한 줄만 다른 폴더로 옮겨 적기 때문이다(같은 저장장치 안에서는).
지워도 남는 데이터
위 시뮬레이터에서 보았듯이 파일을 지우면 파일 시스템은 목록에서 그 줄만 지우고 블록을 “빈 자리”로 표시한다. 내용을 일일이 0으로 덮어쓰지 않는다. 그게 훨씬 빠르기 때문이다. 그래서 새 파일이 그 자리를 덮어쓰기 전까지는 복구 프로그램으로 되살릴 수 있다. 실수로 지운 사진을 살리는 데는 고마운 일이지만, 중고로 파는 컴퓨터에서 개인 정보가 새어 나가는 원인이 되기도 한다.
컴퓨터나 휴대폰을 팔거나 버릴 때는 단순히 파일을 지우는 대신 공장 초기화나 저장장치 전체 암호화 후 초기화를 하자. 요즘 스마트폰과 노트북은 저장장치를 기본으로 암호화해 두고, 초기화할 때 암호 열쇠를 버린다. 열쇠가 없으면 남은 데이터는 의미 없는 숫자 더미다.
SSD에서는 운영체제가 파일을 지울 때 TRIM이라는 신호로 “이 블록들은 이제 안 쓴다”고 컨트롤러에 알려 준다. 컨트롤러는 그 페이지를 무효로 표시하고 가비지 컬렉션 때 지운다. 그래서 SSD는 HDD보다 지운 파일이 복구되기 어렵다. 다만 언제 실제로 지워질지는 컨트롤러 마음이다.
핵심 정리
- RAM은 휘발성, SSD와 HDD는 비휘발성이다. 오래 둘 데이터는 저장장치에, 작업 중인 데이터는 RAM에 둔다.
- HDD는 회전 원판과 움직이는 헤드로 읽는다. 기계가 움직이는 시간 때문에 흩어진 데이터를 읽을 때 특히 느리다.
- SSD는 플래시 셀에 전자를 가둬 기억한다. 덮어쓰기가 안 되고 블록 단위로 지워야 하며, 지울수록 닳는다. 컨트롤러가 이를 숨겨 준다.
- 파일 시스템은 블록 공간 위에 파일 이름, 폴더, 블록 목록이라는 정리 체계를 만든다.
- 파일을 지우면 대개 목록만 지워지고 내용은 남는다. 기기를 넘길 때는 암호화와 초기화가 필요하다.
확인 퀴즈
HDD가 흩어진 작은 파일 여러 개를 읽을 때 특히 느린 이유는?
플래시 메모리(SSD)에 이미 데이터가 쓰인 페이지를 수정하려면?
휴지통까지 비운 파일을 복구 프로그램으로 되살릴 수 있는 경우가 있는 이유는?
같은 SSD 안에서 10 GB짜리 영상 파일을 다른 폴더로 “이동”하면 순식간에 끝나는 이유는?