서울대학교 컴퓨터공학과 김진수 교수님의 "고급 운영체제" 강의를 필기한 내용입니다.

다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.

Storage Interface

  • Storage interface 와 File interface 는 다르다.
    • Storage interface 는 block 단위의 논리적인 1차원 공간 (LBA 공간) 을 제공하는 interface 이다.
      • 즉, 이것은 block device 에 대해 block device driver 가 OS 에게 제공하는 abstraction 인 것.
      • 흔히 Block Interface 라고도 불린다.
    • File interface 는 block 단위가 아니고, block interface 위에서의 “파일” 단위 abstraction 이다.
      • 파일 open, close, 이름, 크기 등의 메타데이터와 오퍼레이션 등을 제공
      • 흔히 사용되는 File interface 에는 POSIX 가 있다.
      • Storage interface 를 활용해 File interface 를 제공해주는 놈을 Filesystem 이라고 부르는 것.
  • Storage 함수들:
    • identify(): 제조사 등의 정보와, 제일 중요하게 섹터의 개수를 제공
    • read(start_sect int, sect_count int, addr buffer): 읽기
    • write(start_sect int, sect_count int, addr buffer): 쓰기
  • 아랫단에서 어떻게 되어있던 간에 위와 같은 인터페이스를 제공하면 storage 를 사용할 수 있다
    • 단순하게 HDD 부터 시작해서
    • FTL 를 거친 SSD,
    • 네트워크를 거친 NFS 등등
    • 아랫단의 media 가 어떤 것이든 위와 같은 인터페이스를 제공하면 전부 storage 인 것.

여기부터는 2024-03-26 강의

Storage types

DAS (Direct Attached Storage)

  • 그냥 머신에 바로 붙어있는 storage 를 말함

SAN (Storage Area Network), NAS (Network Attached Storage)

  • 조보아씨 솔직히 SAN 이랑 NAS 아직도 헷갈리쥬?
  • 둘 다 host machine 에서 스토리지에 접근하는 느낌이어서 똑같은거 아닌가 싶을 수 있는데, 둘 간에는 차이점이 있다.
    1. 우선 “전용네트워크” 가 SAN 에서는 필요하다.
      • NAS 도 망분리해서 전용 네트워크로 구성할 수도 있지만, 그러지 않아도 된다.
      • 가령 SAN 프로토콜 중 하나인 RDMA 를 사용하기 위해서는 별도의 Infiniband LAN 을 구축해야 하지만, NAS 프로토콜인 NFS, SMB 를 사용할 때는 그러지 않아도 되잖아?
    2. SAN 은 Storage (Block) interface 로 접근하고, NAS 는 File interface 로 접근한다.
      • SAN 은 filesystem 을 host machine 에 설치하지만, NAS 는 storage 에도 설치한다.
      • 즉, SAN 을 사용하면 host machine 에 설치된 filesystem 에서 storage 로 network 를 통해 NVMe 같은 commend 를 보내는 것이고,
      • NAS 를 사용하면 host machine 의 일반 software 가 open() 와 같은 POSIX command 를 network 를 통해 storage 의 filesystem 으로 보내는 것이다.
      • 따라서 SAN 을 사용하면 host machine 에서는 하나의 block device 가 mount 된 것처럼 보이고, NAS 를 사용하면 filesystem 이 mount 된 것처럼 보인다.
    3. 추가적으로, SAN 에서는 여러 client 가 접근할 수 없다고 한다.
      • Storage 입장에서는 각기 다른 여러 client 의 fs 에서 command 가 날라오기 때문에 metadata 가 깨지는 등 문제가 생김
        • 여러 fs 들을 sync 하는 방식이 있긴 하지만, 너무 느려서 안쓴다 하더라
      • 하지만 NAS 의 경우에는 fs 가 server 에 설치되기에, 여기에 여러 client 가 접근하는 것이 가능하다.

NAS/SAN Convergence

  • 이제 NAS 에 SAN 을 접목시켜서
  • client 는 NAS 에 접속해서 fs 를 사용하고
  • NAS 는 SAN 에 접속해서 디스크를 사용하는
    • 따라서 NAS 서버에는 별도의 local disk 가 없는
  • 3계층으로 분리될 수도 있다
  • NAS Head 가 client 의 fs 접속을 처리하는 NAS 서버를 일컫는데
  • NAS Head 가 여러개의 서버로 구성되는 경우에는 각각의 서버가 fs 의 특정 subdirectory 를 담당하는 식으로 땅따먹기하기 위해서라고 한다.
    • 아니면 뭐 HA 구성도 가능할듯
  • 또는 다음과 같은 구성도 가능하다:
    • 이전에는 client 가 NAS 에 요청하고 NAS 가 SAN 에 요청하는 식이었다면 (recursive 하게)
    • 최근에는 client 가 NAS 에 요청하면 NAS 는 블럭 정보를 반환하고 그럼 client 가 직접 이 정보를 받아들고 SAN 에 접근하는 방식 (iterative 하게) 도 사용된다고 한다.

Distributed FS

  • server 여러대 중에 client 하나가 접근해서 작업을 요청하고 server 는 다른 서버의 도움을 받아 이것을 처리하는 형태

SNIA Shared Storage Model (SSM)

  • SNIA Shared Storage Model 은 storage 계의 OSI-7 model 라고 생각하면 된다.
  • Application:
    • 일반 end-user 로서 File interface (e.g. POSIX) 등을 이용해 파일 단위로 하위 레이어에 접근하는 곳이다.
  • File/Records Layer:
    • 여기에는 Filesystem 과 DBMS 가 포함된다.
      • 전에도 말한것 처럼, DBMS 도 SQL 와 같은 인터페이스를 Application 에게 제공하기에 filesystem 과 유사한 위치에 있다고 생각할 수 있다.
      • 물론 DBMS 도 filesystem 을 사용하긴 한다: 이전에는 DBMS 가 fs 없이 접근하기도 했는데 요즘은 그렇게 안한다고 한다.
    • 요즘은 device 에 이 레이어가 있는 경우도 있다고 하더라.
    • NAS 같은 경우에는 server 에 있지만 client 에서도 일부 이 layer 를 이용해서 command 를 날린다.
  • Block layer:
    • 여기서는 RAID 등으로 여러 디스크를 하나처럼 쓸 수 있게 하는 것 (block aggregation)
    • 여기서 나오는 몇가지 용어는
      • Slicing: 디스크를 합쳐 하나처럼
      • Dicing: 디스크를 나눠 여러개처럼
      • Striping: 여러 디스크에 분산 병렬 저장해 성능 향상
    • Host 상에서는
      • device driver 의 LVM (Logical Volume Manager) 에서 이 기능을 제공 - 하나의 디스크처럼 보이게 함
      • 아니면 RAID 나 HBA 에서 제공하기도 한다더라
    • SAN 에서도 switch level 에서 이런 것을 제공하기도 한다 하더라
    • Device 상에서는
      • Physical RAID Controller 같은게 이런걸 제공해준다고 생각하면 되니라