Ext4, FAT, NFS

TAEWOO HA·2023년 8월 26일
0
post-custom-banner

inode

  • 속성 + 디스크블럭 위치
  • 위치 : Direct + Indirect

꼭 이렇게 구현을 해야할까?

  • tree 구조로 나타낼 수 있다.
  • inode는 imbalanced tree.

Imbalanced tree

  • 대부분의 파일은 작다 // 작은파일을 효과적으로 지원해야함

  • 큰 파일이 스토리지의 대부분을 차지한다. // 큰 파일도 지원해야함
    ==> inode의 direct(작은파일) , indirect(큰파일)로 접근

  • 파일시스템은 굉장히 많은 파일들을 가지고 있다.

  • 파일시스템은 보통 절반정도를 사용하는 중이다.

  • 디렉토리는 작다.

inode를 만드는법

  1. 멀티레벨 인덱스 , direct + indirect
  • small + large file support
  1. extent 기반의 inode를 만든다.
  • 가변 크기의 데이터 공간 관리 가능
  • 큰 파일 지원에 효율적
  1. linked_based 접근
  • FAT 파일시스템
  • Small Storage support (USB)
  1. 다른 객체를 포인팅
  • NFS, 장치파일
  1. 첫번째 구조를 사용 , inode 위치를 고정시키지 않고 업데이트하면 위치를 바꾼다
  • LFS , F2FS // NILFS, yaffs

Ext4

  • extents based : 큰 파일 지원

목표

  • 큰 파일 사이즈 지원(16GB to 16TB), 32bit부터 64bit까지 지원
  • 기존의 inode로는 16TB까지 힘들다.
  • 한 디렉토리에 좀 더 많은 파일을 관리하도록(64000개)
  • 제한없는 디렉토리 개수

  • extent based mapping <=> 블록 기반 매핑
  • extent는 Data가 가변크기이다.
  • 블럭 베이스 - paging과 비슷
  • Extent based - Segment와 비슷
  • 현재 파일이 16KB, 연속적으로 할당되어있다면 하나의 포인터로 가능

아이노드 구조

  • 스토리지가 할당된 공간은 가변 크기다.
  • extent가 공간을 매핑
  • leaf node가 split or merge 가능 => 동적으로 트리가 바뀜
  • inode => index => leaf

Ext4 파일시스템의 특징

  • 큰 사이즈의 extent 할당 가능해야함 // 연속적 할당

  • 여러개의 블럭을 미리 할당

  • 아이노드까지 미리 할당된 공간들을 적어놔서 껐다켜지더라도 비휘발성 특성을 유지, 할당

  • 지연 할당 : 파일에 쓰여졌을 때 페이지 캐시(메모리)에 지연 쓰기가 된다.

    • flush할때 할당한다. => 연속된 공간을 할당할 가능성이 높아진다.
    • 가능하면 request를 모아서 하기 때문
  • 스토리지 단편화 => 온라인으로 조각모음

  • JBD2 사용. - 64bit

  • checksum 도입 : 저널 끝에다 도입해서 저널의 유효성 판단

  • 디렉토리 인덱싱 : 디렉토리 해쉬 사용

  • Fast Fsck : 사용하지 않는 아이노드는 미리 검사x , 블록그룹 중 스킵 판단

  • 시간 관리 : 마이크로 => 나노sec 단위

FAT 파일 시스템

  • 작은 스토리지 (USB , MEMORY CARD , IOT DEVICE)

    • 메타데이터를 위한 공간이 아깝다.
  • IDEA : 비트맵 , inode => FAT (File Allocation Table)

    • used or free
    • 데이터의 위치(파일에 속해있는 디스크 블럭이 어딘지 관리 => 링크드 리스트)

  • 00 : free

  • FAT에는 아이노드가 없다.

    • Directory Entry : 첫번째 디스크 블록에 대한 정보
    • 속성정보 : 디렉토리에 들어있다.
    • 위치정보 : 디렉토리와 FAT에 분산
  • 예시)
    • 0 : 부트 섹터 , N개 블럭의 FAT , 1개 블럭의 Root directory

  • hello.c : 7KB , a.out : 15KB

FAT 파일시스템 유형

  • FAT12/16 : 초기 FAT파일 시스템
  • FAT32 : 32비트 지원(클러스터 많이)
    • BS + FS info for metadata
  • VFAT : 긴 파일 이름 지원
  • ExFAT : 큰 파일 사이즈 지원

요약

  • 스몰 디바이스를 위한 파일 시스템
  • 레이아웃 : BS , FAT1/2 , ROOT , DATA AREA
  • FAT : dual roles

NFS

  • 아이노드가 서버를 가리킴
  • 클라이언트 pc + 서버 PC

특징

  • 상태 유지 X
  • RPC BASED : remote procedure call // remote의 함수를 호출
  • caching

GFS (구글 파일 시스템)

  • 분산환경을 위한 파일 시스템
  • GFS client , GFS master , GFS chunk servers
  • 서버를 관리하는 마스터(메타데이터 관리) // 컨트롤 플레인
  • 클라이언트가 마스터의 허락을 받는다.
  • 클라이언트 <=> chunk server // 데이터 플레인
  • 파일이 굉장히 크다.
  • 결함 허용 기법 : 3개의 청크 서버로 중복
    • 일관성 유지
  • 새로운 인터페이스 도입
    • 스냅샷 - 현재 파일시스템의 상태를 얼린다. 체크포인트 // 업그레이드 , 복구
    • 레코드 어펜드 - 뒤에 쓰면서 병렬성 , 최적화
post-custom-banner

0개의 댓글