Journaling vs COW

저널링과 COW

두 방식 모두 비정상 종료 후 파일 시스템 구조가 애매한 중간 상태로 남는 일을 줄이지만, 쓰기 순서와 복구 기준은 다릅니다.

저널링 파일 시스템

log first

변경할 메타데이터를 저널에 먼저 남기고 커밋 여부로 replay를 결정합니다.

1 journal write

inode 크기, 비트맵 변경 같은 의도를 기록합니다.

2 commit block

트랜잭션이 완성됐다는 표식을 씁니다.

3 checkpoint

실제 파일 시스템 위치에 반영합니다.

4 replay

crash 뒤 커밋된 항목만 재적용합니다.

Copy-on-Write 파일 시스템

new block

기존 블록을 덮지 않고 새 블록을 쓴 뒤 메타데이터 포인터를 갱신합니다.

1 old block

수정 전 데이터와 메타데이터를 보존합니다.

2 write copy

수정본을 새로운 블록에 씁니다.

3 pointer switch

상위 메타데이터가 새 블록을 가리키게 합니다.

4 snapshot

이전 포인터를 남겨 스냅샷을 효율적으로 만듭니다.

보호하는 것

할당 비트맵, inode 크기, 디렉토리 엔트리 같은 파일 시스템 구조의 일관성입니다.

달라지는 것

ordered, journal, writeback 모드나 체크섬 정책에 따라 데이터 위험이 달라집니다.

보호하지 않는 것

사용자 실수 삭제, 애플리케이션 버그, 랜섬웨어는 별도 백업 정책이 필요합니다.

crash consistency 보장 범위

저널링과 COW는 crash consistency를 다루는 장치입니다. 내 데이터가 최신인지, 오래 보관되는지는 fsync, 복제, 백업 정책까지 함께 봐야 합니다.