[File System] 파일 저널링 (File Journaling)
저널링은 파일의 구조를 보호하기 위한 파일시스템의 핵심 개념 중 하나다.
파일을 쓰는 중에 정전이 나거나, 아니면 모종의 문제로 크래시가 나면 어떻게 해야할까?
예를 들어, Unix/Linux에서는 이런 방식으로 파일 삭제가 발생하는데
-
디렉토리를 실제로 제거
-
inodes 풀에 제거한 inode를 반환.
-
디스크 블록도 해제
여기서 1번까지 하다가 중단되거나, 2번까지 하다가 중단되면 리소스 누수가 발생할 수 있다.
실제로는 삭제를 했지만, 삭제한 것을 알 수가 없어서 재사용이 안되는 그런 문제가 생기는 것이다.
저널링
저널링은 로그 기반 구조로 이를 보완한다.
파일시스템 쓰기의 각 동작마다 로그를 기록하고, 뭔가 문제가 생겨서 중간에 중단되었다면, 재시작할 때 로그를 기반으로 복구를 진행하는 것이다. 이를 통해 최소한의 쓰기 원자성을 보장할 수 있다.
방법론적인 측면에서 보면 데이터베이스에서 WAL을 통해 장애 내구성을 보장하는 것과 사뭇 다르지 않다.
ext3, ext4 등 많은 메이저 파일시스템이 저널링을 기본 동작으로 하지만, 모든 파일시스템이 저널링을 구현하지는 않는다.
USB 등에 쓰는 원시적인 파일시스템들은 저널링을 쓰지 않는다. 그래서 구현이 단순하고 빠른 대신에 진짜 파일 영역이 깨질 수 있다.
btrfs 같은 최신 파일시스템들은 저널링 대신 CoW 같은 새롭고 도전적인 방법론을 쓰기도 한다.
자세한 항목이 궁금하다면 별도 포스트를 참조한다.
https://blog.naver.com/sssang97/223911930530