JFFS2

2025. 2. 21. 11:06프로그래밍/시스템

JFFS2 (Journaling Flash File System 2) 정리


1. 개요

JFFS2(Journaling Flash File System 2)는 NOR 플래시 및 일부 NAND 플래시를 지원하는 플래시 전용 저널링 파일 시스템입니다.
Linux MTD (Memory Technology Device) 서브시스템을 기반으로 동작하며, 전력 손실이나 시스템 충돌 시 데이터 무결성을 유지하는 기능을 제공합니다.

JFFS2는 2001년 Red Hat에서 처음 발표되었으며, 기존 JFFS1의 성능과 안정성을 개선한 버전입니다.
플래시 메모리의 특성을 고려하여 Wear Leveling(균등한 블록 사용), 압축 저장, 크래시 복구 기능을 제공합니다.

📢 최신 동향:
JFFS2는 NOR 플래시가 주요 저장 매체인 임베디드 시스템에서 여전히 사용되고 있습니다. 그러나 대용량 NAND 플래시를 사용하는 최신 시스템에서는 UBIFS, F2FS와 같은 파일 시스템이 더 선호됩니다.


2. 특징

플래시 메모리 최적화

  • 기존 디스크 기반 파일 시스템과 달리 플래시 메모리의 특성(쓰기/지우기 제한, 블록 단위 삭제 필요)을 반영하여 설계됨.
  • 블록 장치가 아닌 MTD(Memory Technology Device) 인터페이스를 사용.

저널링 및 데이터 무결성 보장

  • 크래시 복구 기능 지원 → 전원 차단이나 비정상 종료 후에도 데이터 일관성을 유지.
  • 트랜잭션 기반 파일 시스템으로, 데이터가 기록될 때만 변경되므로 일관성을 보장함.

Wear Leveling (균등한 블록 사용)

  • 플래시 메모리는 특정 블록을 반복적으로 쓰면 수명이 줄어들기 때문에, 모든 블록을 균등하게 사용하여 플래시 수명을 연장.

압축 지원

  • 기본적으로 Zlib, LZO 등의 압축 알고리즘을 사용하여 저장 공간을 절약.
  • 파일 시스템 자체가 데이터를 압축하여 저장함으로써 스토리지 효율성을 극대화.

쓰기 작업 방식 (Log-Structured File System)

  • JFFS2는 로그 구조(log-structured) 파일 시스템으로 동작하며, 데이터를 기존 블록에 덮어쓰는 대신 항상 새로운 블록에 기록.
  • 이를 통해 플래시 메모리의 쓰기 성능을 향상시키고, 기존 블록의 잔여 공간을 정리하는 Garbage Collection(가비지 컬렉션) 기능을 사용.

MTD (Memory Technology Device) 인터페이스 지원

  • JFFS2는 MTD 디바이스에서 동작하며, 일반적인 블록 디바이스(예: SD 카드, HDD)에서는 사용할 수 없음.

3. 동작 방식

JFFS2는 로그 구조 파일 시스템(Log-Structured File System) 방식으로 동작하며, 다음과 같은 단계를 거칩니다.

📌 1) 파일 데이터 저장

  • 새로운 데이터를 기록할 때 기존 데이터 블록을 수정하지 않고 새로운 위치에 저장.
  • 덮어쓰기(Overwrite) 개념이 없으며, 새로운 변경사항이 계속 추가되는 형태.

📌 2) 가비지 컬렉션 (Garbage Collection)

  • 기존 블록에 남아 있는 유효 데이터를 새로운 위치로 이동한 후, 불필요한 블록을 삭제.
  • 가비지 컬렉션 과정에서 Wear Leveling을 적용하여 플래시 메모리의 특정 블록이 과도하게 사용되지 않도록 조정.

📌 3) 부팅 시 전체 파일 시스템 스캔

  • JFFS2는 부팅할 때 모든 블록을 읽어 파일 시스템 구조를 재구성.
  • 이 과정에서 파일 시스템의 일관성을 확인하고, 문제가 있는 블록을 식별하여 복구.
  • 대형 파일 시스템일수록 부팅 시간이 느려지는 단점이 있음.

4. 장점

특징 설명
전원 차단 후 데이터 보호 트랜잭션 기반 파일 시스템으로, 갑작스러운 전원 차단 후에도 데이터 무결성이 유지됨.
Wear Leveling 특정 블록이 집중적으로 사용되는 것을 방지하여 플래시 메모리의 수명을 연장.
압축 지원 기본적으로 Zlib, LZO 압축을 지원하여 저장 공간을 절약.
NOR 플래시 최적화 NOR 플래시에 적합하며, NAND 플래시도 일부 지원 가능.
저널링 기능 제공 데이터의 안정성을 높이고, 손상 가능성을 줄임.

5. 단점

특징 설명
부팅 속도 문제 부팅 시 전체 파일 시스템을 스캔해야 하므로, 파일 시스템 크기가 커질수록 부팅 시간이 길어짐.
NAND 플래시에서 비효율적 JFFS2는 원래 NOR 플래시용으로 설계되었으며, NAND 플래시에서는 성능이 떨어질 수 있음. (NAND 플래시는 YAFFS2, UBIFS가 더 적합)
대용량 파일 시스템에 적합하지 않음 큰 파일 시스템에서는 성능 저하가 발생할 수 있으며, 수십 MB 이상의 데이터 저장에 비효율적.
가비지 컬렉션 오버헤드 오래된 데이터가 많아질수록 불필요한 블록을 정리하는 작업이 많아져 성능이 떨어질 수 있음.

6. 최신 임베디드 시스템에서의 대체 기술

파일 시스템 특징 적합한 환경
JFFS2 저널링, Wear Leveling, 압축 NOR 플래시, 소규모 파일 시스템
YAFFS2 NAND 최적화, 빠른 부팅 NAND 플래시
UBIFS 대용량 데이터 지원, 동적 Wear Leveling NAND 플래시, 대형 스토리지
F2FS SSD 및 플래시 최적화 최신 플래시 기반 디바이스
ext4 범용 리눅스 파일 시스템 SD 카드, eMMC, HDD

7. JFFS2 사용 방법

📌 JFFS2 파일 시스템 생성 (환경에 따라 다를 수 있음)

mkfs.jffs2 -o rootfs.jffs2 -r /path/to/rootfs -s 512 -e 64KiB -n
  • -r /path/to/rootfs → 파일 시스템을 생성할 디렉터리 지정
  • -s 512 → 페이지 크기 설정
  • -e 64KiB → 블록 크기 설정
  • -n → 노드 크기 최적화 사용

📌 마운트 방법

mount -t jffs2 /dev/mtdblock0 /mnt/jffs2

⚠️ 주의: 특정 환경 및 커널 버전에 따라 마운트 방법이 다를 수 있음.


8. 결론

JFFS2는 NOR 플래시에 최적화된 파일 시스템으로, 데이터 일관성 유지와 Wear Leveling이 필요한 소규모 임베디드 시스템에서 유용합니다.
그러나 대형 NAND 플래시 기반 최신 시스템에서는 UBIFS, F2FS와 같은 파일 시스템이 선호되는 추세입니다.

장점: 데이터 보호, Wear Leveling, 압축 지원
단점: 느린 부팅 속도, 대용량 저장소 비효율적

📢 최신 트렌드:
JFFS2는 여전히 소규모 NOR 플래시 환경에서 사용되지만, 최신 임베디드 시스템에서는 UBIFS, YAFFS2, F2FS가 대체 기술로 자리 잡고 있음.