저널링 파일 시스템

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

저널링 파일 시스템(영어: Journaling file system)은 주 파일 시스템에 변경사항을 반영(commit)하기 전에, 저널(주로 파일 시스템의 지정된 영역 안의 원형 로그)안에 생성되는 변경사항을 추적하는 파일 시스템이다. 시스템 크래시나 전원 문제가 발생하면, 이러한 파일 시스템은 더 빠르게 online 상태로 돌아오며 손상될 가능성이 낮다.[1]

원리[편집]

파일과 디렉터리에 변경을 반영하기 위한 파일시스템 수정은 여러 개의 쓰기 오퍼레이션으로 구분된다. 이러한 이유로 쓰기 동작 중에 전원공급 문제나 시스템 오류(system crash)와 같은 인터럽트가 발생하여 특정 데이터를 비정상적인 중간 상태에 남겨둘 수 있다.[1]

예를 들면, 유닉스 파일 시스템에서 파일을 지우는 것은 아래의 두 단계를 포함한다.:

  1. 그 파일의 디렉터리 엔트리를 삭제한다.
  2. 파일이 차지하던 공간과 아이노드를 해제하여 free space map에 표시한다.

만약 시스템 오류가 단계 1과 단계 2 사이에서 발생하면, orphaned inode가 발생하고 따라서 스토리지 누수가 발생한다. 또한, 만약 단계 1의 이전에 단계 2만 수행되면, 지워지지 않은 파일(not-yet-deleted file)의 영역이 사용가능한 것(free)으로 표시되어 다른 내용이 덮어쓰기 될 수 있다.

이러한 오류를 검출하고 수정하기 위해서는 해당 데이터 구조의 완전한 워크(walk)가 필요하다. 오류 검출과 수정은 보통 파일시스템이 다음에 읽기-쓰기 접근을 위해 마운트되기 이전에 수행된다. 만약 파일시스템이 크고 상대적으로 I/O 대역폭이 작고, 이 작업이 나머지 시스템이 online으로 돌아오는 것을 블로킹한다면, 이는 긴 시간이 걸리고, 결과적으로 고장시간이 길어진다.

이를 막기 위해, 저널 파일 시스템은, 변경사항을 기록하는 특별한 구역(저널, journal)을 할당한다. 크래시 이후에, 단순히 파일시스템에서 저널을 읽고, 파일시스템의 오류가 복구될 때까지 저널의 변경사항을 리플레이(replay)하는 것으로 복구가 이루어 진다. 따라서 변경사항원자적이다. 즉,

  • 성공(원래부터 성공이거나 복구를 거쳐 replay가 완전히 수행됨)이거나
  • 전혀 replay되지 않아야 한다.(크래시가 발생하기 전에 기록되어야 할 내용이 저널에 완전히 쓰이지 않아서 진행하지 않음)

참고 문헌[편집]

  1. Jones, M Tim (2008년 6월 4일). 《Anatomy of Linux journaling file systems》. IBM DeveloperWorks. 2009년 4월 13일에 확인.