fs Journaling

agnusdei·2025년 11월 4일

💻 컴퓨팅에서의 저널링(Journaling) 원리 및 기술 상세

컴퓨팅 시스템에서 저널링(Journaling)이란, 주로 저장 장치(Storage) 시스템에서 데이터의 무결성(Integrity)장애 복구(Crash Recovery) 시간을 보장하기 위해, 실제 데이터를 변경하기 전에 그 변경 이력(트랜잭션)을 디스크의 저널(Journal)이라는 특정 영역에 미리 기록하는 기술을 의미합니다.

이는 데이터베이스 관리 시스템(DBMS)의 로그 기록(Logging) 기법과 유사하게, 원자성(Atomicity)을 확보하고 시스템 충돌 시 일관성(Consistency) 있는 상태로의 복구(Recovery)를 신속하게 수행하는 것을 목적으로 합니다.


1. 저널링의 기본 원리: 트랜잭션과 원자성

저널링은 파일 시스템에 가해지는 일련의 변경 작업(예: 파일 생성, 삭제, 이름 변경 등)을 하나의 트랜잭션(Transaction)으로 간주하고, 이 트랜잭션의 원자성(Atomicity)을 보장하는 것을 목표로 합니다.

  • 원자성(Atomicity): 트랜잭션 내의 모든 작업은 전부 성공하거나, 전부 실패(취소)해야 합니다. 작업이 중간에 중단되는 일이 발생해도, 시스템은 일관성 있는 상태를 유지해야 합니다.
  • 저널(Journal): 디스크의 특정 영역에 할당된 순환 로그(Circular Log) 구조이며, 파일 시스템 변경 작업에 대한 로그 레코드(Log Record)를 순서대로 기록합니다.

2. 저널링의 핵심 3단계 프로세스

저널링 파일 시스템(Journaling File System, 예: Ext3, Ext4, NTFS, XFS)에서의 데이터 변경은 크게 세 단계를 거쳐 원자성을 확보합니다.

1) 📝 Journal Write (로그 기록)

  • 파일 시스템에 변경이 필요한 작업(트랜잭션)이 발생하면, 해당 변경에 대한 메타데이터 및/또는 실제 데이터저널 버퍼(Journal Buffer)에 기록한 후, 이를 디스크의 저널 영역에 먼저 기록(Write)합니다.
  • 물리적 로깅(Physical Logging): 변경될 데이터의 전체 이미지를 기록합니다. (안정성은 높으나 오버헤드 큼)
  • 논리적 로깅(Logical Logging): 변경 작업의 개요나 명령어만을 기록합니다. (오버헤드는 작으나 복구 로직이 복잡)

2) ✍️ Journal Commit (커밋 기록)

  • 저널 영역에 트랜잭션의 모든 로그 레코드가 성공적으로 기록된 후, 해당 트랜잭션의 완료를 표시하는 커밋 레코드(Commit Record)를 저널에 기록하고 디스크에 강제적으로 쓰기(Force Write)를 수행합니다.
  • 커밋 레코드가 디스크에 기록되는 시점이 해당 트랜잭션의 원자성이 보장되는 시점입니다.

3) ✅ Checkpoint (실제 반영)

  • 저널에 커밋된 내용을 이제 파일 시스템의 실제 데이터 블록 및 메타데이터 영역에 반영(반복 재생/Replay)합니다. 이 과정을 체크포인팅(Checkpointing)이라고 합니다.
  • 모든 반영 작업이 완료되면, 해당 트랜잭션은 저널에서 삭제(또는 무효화) 처리되어 순환 로그의 공간을 확보합니다.

3. 저널링 모드 (Journaling Modes)

저널링 시스템은 성능과 안정성의 균형을 위해 저널에 무엇을 기록할지에 따라 세 가지 주요 모드를 가집니다.

모드기록 대상성능안정성설명
Writeback메타데이터가장 높음가장 낮음실제 데이터는 저널에 기록하지 않고 바로 메인 파일 시스템에 기록. 충돌 시 메타데이터는 일관성이 보장되지만, 실제 데이터와 메타데이터의 불일치(Data Inconsistency) 발생 가능.
Ordered메타데이터중간중간메타데이터를 저널에 커밋하기 전에 실제 데이터를 메인 파일 시스템에 먼저 쓰도록 순서를 강제함. 메타데이터와 데이터의 불일치 가능성을 최소화. (Ext3의 기본 모드)
Data메타데이터 & 실제 데이터가장 낮음가장 높음모든 변경 사항(메타데이터와 실제 데이터)을 저널에 기록한 후 메인 파일 시스템에 반영. 가장 높은 안정성을 제공하나, 모든 쓰기가 이중으로 발생하므로 성능 오버헤드가 가장 큼.

4. 장애 복구(Crash Recovery) 메커니즘

시스템 충돌(예: 정전) 발생 시, 저널링 파일 시스템은 파일 시스템 검사(fsck)를 수행하는 대신 저널 영역만 검사하여 훨씬 빠르게 복구를 완료합니다.

  • 복구 기준: 디스크의 저널 영역에서 커밋 레코드(Commit Record)의 존재 여부를 확인합니다.
    • 커밋 레코드가 있는 경우: 저널의 해당 트랜잭션은 완료된 것으로 간주하고, 실제 파일 시스템에 반영이 덜 된 부분(Redo)을 저널의 로그를 따라 다시 실행(Replay)하여 복구합니다.
    • 커밋 레코드가 없는 경우: 트랜잭션이 완료되지 않은 것으로 간주하고, 해당 트랜잭션은 무시(Undo)합니다.

이러한 Write-Ahead Logging (WAL, 선행 기록 로깅) 원칙을 통해, 시스템 중단 이후에도 빠른 시간 내에 일관성 있는 상태(Consistent State)로 복구되어 파일 시스템 검사(fsck, File System Check)에 소요되는 시간을 획기적으로 단축합니다.

profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글