Spindle: 디스크의 중심. 데이터를 읽고 쓰기 위해서 spindle이 반드시 회전 해야함
Track: 여러 개의 sector로 구성
Sector: 데이터가 저장되는 최소 단위
Cylinder: spindle로부터 동일한 거리에 있는 track들의 집합
Platter: 데이터가 저장되는 공간. 여러 개의 track으로 구성
Arm assembly: 여러 개의 arm으로 구성됨
Read-write head
arm의 끝 부분.
특정 데이터를 읽고 쓰기 위해서 read-write head가 해당 track으로 가야함(seek).
Read-write head가 서로 다른 cylinder를 가리킬 수 없음
Seek time: read-write head가 요청한 sector가 위치한 track으로 이동하는데 걸리는 시간
Rotational latency: 해당 sector가 read-write head의 밑으로 회전하는데 걸리는 시간
Transfer time: 데이터를 읽고 전송하는데 걸리는 시간
access time = seek time (트랙 찾기) + rotational latency (섹터 찾기) + transfer time (전송)
HDD보다 비쌈
HDD보다 안정적
수명 짧음
-> write 횟수 제한있기 때문에 wear-leveling을 통해 골고루 write 해야 함
용량 작음
더 빠름
안움직임
-> seek time, rotational delay 없음
overwrite 안됨 : erase before write
R/W page 단위
erase block 단위 : 특정 page만 지울 수 없음
블록을 실제로 삭제하지 않고, 표기 후 적절한 시점에 일괄 삭제 처리하는 기술
특정 content가 동일한 page에 계속 존재하지 않음 -> 특정 위치에 overwrite (X)
OS에서 보는 page 위치 계속 바뀜 -> mapping layer 하나 더 존재
Disk를 사용하기 위해선 Host page에 미리 attach 해줘야 한다.
이때, PC에서 일반적으로 HDD를 장착하는 방식은 SCSI라는 bus를 I/O bus 로 사용하는 것이다.
SCSI bus는 최대 16개의 disk를 장착 가능하다.
SAN과 NAS의 차이점
NAS에서 client가 일단 network를 통해 server에 먼저 접근한 후, 서버에 저장된 storage에서는 SAN을 이용해 Storage array에 접근하게 되는 것이다.
순서대로 진행
현재 헤드 위치에서 가장 가까운 요청부터 처리한다.
한 방향으로 쭉 훑었다가, 맨 끝에 다다르면 다시 다른 방향으로 바꿔서 훑어 나가면서 request들을 처리한다
Scan과 비슷하지만, 단방향으로만 처리하며, 끝에 다다르면 다시 반대편 끝으로 가서 그 방향대로 request를 처리한다.
request가 없을 경우에는 끝까지 가지 않고, 해당 방향에서 더이상 처리할 request가 없으면 방향을 튼다.
단방향으로만 처리하는 Look
physical formatting (low-level formatting)
disk를 sector 단위로 분할
logical formatting (Making a file system)
흔히 말하는 포맷
file system 생성하려면 데이터를 다 지워야함 (file system 초기화)
file system 자료구조를 disk에 저장
Disk storage의 앞부분에는 주로 boot block이 위치하고 있다.
boot block은 부팅할 때 중요한 정보들이 들어있는 block으로, boot strap이 ROM에 내장되어있는데, Boot strap loader가 boot block을 메모리에 로딩하고, 제어권을 boot block에게 넘겨주게 된다.
normal file system밑에서 관리 될 수도 있다.
또는 별도의 파티션을 두어서 해당 영역을 관리할 수도 있다.
-> 이 경우, 별도의 swap space manager가 존재하게 된다.
swap space는 page slot과 swap map으로 이루어져 있다.
page slot들은 swap out된 페이지들을 담고 있는 영역이다.
swap map은 해당 swap out된 페이지를 사용하는 프로세스의 개수이다. => 한 페이지를 여러 프로세스가 사용 가능.
RAID(Redundant Array of Inexpensive(Independent) Disks)란 여러 디스크를 병렬적으로 구성하여, storage 용량과 throughput을 늘리기 위한 저장장치를 말한다.
1) bit-level striping : 한 번 R/W 할 때 모든 디스크 동시 사용. 동기화 필요
2) block-level striping : 특정 disk에서만 R/W 될 수 있음
Disk 하나는 신뢰성이 높은데, disk개수가 많아지면 많아질 수록 고장날 확률이 늘어난다.
mirroring : disk 복제, storage 용량 2배 필요
parity : parity block 사용 (XOR)
RAID 0
non-redundant striping
복구 불가
RAID 1
mirrored disks
storage 2배
RAID 3
bit-interleaved parity
parity + bit striping
RAID 4
block-interleaved parity
parity + block striping
디스크 고장 안나면 낭비
RAID 5
block-interleaved distributed parity
parity 분산 + block striping
RAID 6
P+Q redundancy
2개 동시에 고장나도 복구 가능
Hot spare
자동차를 몰고 다니면 spare tire를 갖고 다니는 것과 비슷하다. 고장난 디스크를 대체하기 위해 spare disk를 두는 것이다. 평소에는 사용하지 않는다.
Rebuilding
만약 disk가 고장나면, 복구하는 과정에서 rebuilding data가 hot spare에 저장된다.