파일 시스템 2

EEEFFEE·2023년 12월 21일

raspberrypi4-kernel

목록 보기
10/12

23.12.21 최초 작성

1. 파일 시스템 일관성

일관성 (Consistency)

  • 유효한 상태를 유지하는 것
  • 파일 시스템 사용 시 유효한 상태에서 다른 유효한 상태로 전이하는 것을 보장
  • 유효하지 않은 상태(inconsistency)
    • 한 블록이 사용되고 있는 중에도 비트맵에는 가용 상태로 표기
    • 파일이 생성되는 도중 전원 결함이 발생 시 가용 상태로 표기

1.1 inconsistency 예시

파일 수정이 이뤄지는 경우

  • bitmap, inode, data block에 수정 발생, 지연 쓰기 중 전원 결함으로 시스템 고장 발생 해 수정된 내용 일부 write
    • data block에만 write : 문제 X
    • bitmap에만 write : space leak 발생
    • inode에만 write : garbage read, 비트맵과 아이노드 간 inconsistency발생
    • data block, bitmapwrite : 비트맵과 아이노드 간 inconsistency발생
    • data block, inodewrite : 비트맵과 아이노드 간 inconsistency발생
    • bitmap, inodewrite : garbage read

1.2 consistency 유지 방법 예시

  1. fsck (file system checker)

    • 파일의 일관성을 확인하고 복구하는 방법

    • 확인 절차

      1. superblock 확인 (magic number, file size 등 체크)
      2. free block 확인 (free block 체크)
      3. inode 확인 (link 갯수, data block를 여러 inode가 가르키는지, bad block 등 체크)
      4. directory 체크 (file nameinde체크)
    • 전부 확인하기 때문에 느린 속도를 가짐

  2. COW (Copy On Write)

    • 데이터의 수정을 요청하면 다른 위치에 갱신하는 방법(out of place update)

    • transaction 단위의 동작

      • commit : 해당 수정 내용을 반영 (다른 위치에 기록된 내용)
      • roll back : 수정되지 않은 원래 내용 반영 (같은 위치에 기록된 내용)
  3. Journaling

    • WAL (Write-Ahead Logging)이라고도 하며 수정 요청 시 이후 작업 내용을 미리 기록

    • 전원 결함 발생 시 기록해 놓은 내용을 바탕으로 다시 작업 수행

    • 디스크의 journal공간을 생성해 기록

    • write 동작 과정

      • write 요청 시 내용 기록하기 전 commit을 통해 작업 내용 기록

        • journal공간에 TxB, TxE를 기준으로 작업 내용 기록 → transaction
          (bitmap, inode, data block)
      • checkpointing을 통해 내용 수정

    • fault handling

      • redo : commit이후 checkpointing도중 전원 오류 발생 시 journal 내용이 유효하다면 해당 내용을 바탕으로 다시 수행
      • undo : commit도중 오류 발생 시 journal 내용이 유효하지 않다면 journal삭제
    • journal 유효성 판단

      • TxB, bitmap, inode, data block, TxE 순으로 잘 기록되어있는지 확인

EXT3

  • journaling 이 도입된 파일 시스템

2. 이외 다른 파일 시스템

2.1 EXT4

  • 큰 용량의 파일(16TB)과 더 많은 하위 디렉토리를 지원하기 위한 파일 시스템
  • Extent 기반 매핑을 통해 가변적인 크기의 데이터 블록을 가르키는 것이 가능해짐

2.1.1 EXT4 파일 시스템 특징

  • I/O를 순차적으로 하기 위해 블록들을 선할당(Pre-allocation)

  • 선할당 시 inode에 정보를 저장해 consistency를 유지

  • 지연 할당을 사용 해 I/O 횟수 줄임

  • JBD (Journaling)를 사용

  • 디렉토리 인덱싱(Directory hash)를 사용해 빠른 접근 가능

  • 빠른 fsck을 통해 무결성 확인을 위한 시간 단축

  • 나노 초 단위 관리

inode 구조

  • inodeindex node ~ → leaf node 순으로 각 노드를 가리키며 이를 트리 형태로 관리 함

    • inode의 경우 오직 root디렉토리만 가리킴
    • index nodeextententry정보를 저장하며 extent를 가리킴
    • leaf nodeextent를 관리하며 extent 실제 물리적 하드 디스크를 매핑함
  • 파일이 삭제/생성되면 트리에서 merge/split을 통해 디스크 관리


//	/fs/ext4/ext4_extent.h

2.2 FAT

  • 작은 파일 시스템에서 메타 데이터를 위한 공간을 줄이기 위해 고안

    • bitmapinode 기능을 FAT (File Allocation Table)이란 자료구조로 통합
  • linked list형태로 관리

  • inode

    • linked list형태로 관리하며 각 node에 숫자를 기록

    • 데이터 블록의 위치는 디스크 블록과 FAT에 분산해 저장

      • 한 파일의 디스크 블록에 해당 파일의 데이터 블록의 위치가 저장 된 FAT 주소를 저장
      • 해당 위치에 다음 데이터 블록의 위치가 저장 된 FAT 주소를 저장
      • 위 과정을 반복하다 FATEOF로 이동해 파일의 마지막 위치를 인식
  • bitmap

    • 00이면 free block을 나타 냄
    • 다른 숫자일 시 사용 중인 블록임을 나타냄

2.3 NFS

  • 네트워크를 위한 파일 시스템(Network File System)으로 clientserver로 나뉨

2.4 GFS

  • 분산 환경을 위해 구글에서 고안한 파일 시스템 (Google File System)b

0개의 댓글