ext4 metadata 경로

파일 쓰기 일관성

ext4는 블록 할당 정보를 메타데이터로 관리하고, 저널 트랜잭션으로 크래시 뒤 복구 가능한 순서를 남긴다.

page cache

더티 페이지

write()는 먼저 페이지 캐시에 데이터를 놓고 해당 페이지를 dirty 상태로 표시한다.

allocator

블록 예약

블록 비트맵과 블록 그룹 정보를 보고 연속된 영역을 찾으면 extent로 묶기 쉽다.

inode

extent 갱신

inode에는 파일 크기, 시간, extent tree 루트처럼 파일 위치를 설명하는 메타데이터가 들어간다.

journal

커밋 레코드

메타데이터 변경을 저널에 먼저 기록하고 커밋 표시가 남으면 재부팅 뒤 replay할 수 있다.

checkpoint

본 위치 반영

나중에 저널의 변경분이 실제 inode 테이블과 비트맵 위치로 옮겨져 공간이 정리된다.

data=ordered

기본 모드로, 데이터 블록이 디스크에 기록된 뒤 관련 메타데이터 커밋이 완료되도록 순서를 잡는다.

data=writeback

메타데이터 일관성은 지키지만 오래된 데이터가 새 파일 위치에 보일 수 있어 복구 의미가 약해진다.

data=journal

데이터까지 저널에 넣어 강한 일관성을 얻지만, 같은 데이터를 두 번 쓰므로 처리량 비용이 크다.