2025. 2. 21. 11:15ㆍ프로그래밍/시스템
YAFFS2 (Yet Another Flash File System 2) 정리
1. 개요
YAFFS2(Yet Another Flash File System 2)는 NAND 플래시 전용 파일 시스템으로,
JFFS2의 한계를 극복하기 위해 설계되었습니다.
YAFFS2는 쓰기 속도, 부팅 속도, 데이터 무결성, Wear Leveling(균등한 블록 사용) 등을 고려하여 NAND 플래시에 최적화되어 있습니다.
특히 전원이 갑자기 꺼져도 빠르게 복구할 수 있으며, 대용량 데이터를 안정적으로 처리하는 데 유리합니다.
YAFFS는 2002년 **Charles Manning(또마소프트, Aleph One)**에 의해 개발되었으며,
YAFFS1이 NOR 플래시 기반이었다면, YAFFS2는 NAND 플래시 기반으로 설계되었습니다.
2. 특징
✅ NAND 플래시 최적화
- 기존의 NOR 플래시 최적화 파일 시스템(JFFS2 등)과 달리 NAND 플래시의 특성을 반영하여 설계됨.
- 블록 기반 접근 방식 사용 (JFFS2는 노드 기반).
✅ 빠른 부팅 속도
- JFFS2와 달리 부팅 시 전체 파일 시스템을 스캔하지 않고도 동작 가능.
- OOB(Out-Of-Band) 영역을 활용한 메타데이터 관리를 통해 빠른 마운트 지원.
✅ 저널링 및 데이터 무결성 보장
- 트랜잭션 방식을 사용하여 파일 시스템의 일관성을 유지.
- 갑작스러운 전원 차단 후에도 빠르게 복구 가능.
✅ Wear Leveling (균등한 블록 사용)
- NAND 플래시는 특정 블록이 반복적으로 사용되면 수명이 줄어듦.
- YAFFS2는 사용되지 않은 블록을 균등하게 사용하여 플래시 메모리의 수명을 연장.
✅ 가비지 컬렉션 (Garbage Collection)
- 오래된 데이터를 정리하고, 남은 공간을 재활용하는 기능.
- JFFS2보다 훨씬 빠르고 효율적인 블록 정리 방식 사용.
✅ 대용량 데이터 처리 지원
- JFFS2는 대용량 파일 시스템에서 속도가 느려지는 반면, YAFFS2는 수백 MB ~ 수십 GB까지 원활하게 동작.
✅ MTD (Memory Technology Device) 인터페이스 지원
- 리눅스의 MTD 서브시스템과 연동하여 NAND 플래시 메모리에서 동작.
3. 동작 방식
YAFFS2는 블록 기반 파일 시스템으로, NAND 플래시의 특징을 고려한 동작 방식을 사용합니다.
📌 1) 파일 저장 구조
- 파일을 저장할 때, 데이터 블록과 메타데이터 블록을 분리.
- 메타데이터는 NAND의 OOB(Out-Of-Band) 영역에 저장하여 빠른 조회 및 복구 가능.
📌 2) 가비지 컬렉션 (Garbage Collection)
- YAFFS2는 불필요한 블록을 정리하는 백그라운드 가비지 컬렉션(GC) 기능을 수행.
- 플래시 수명을 연장하고 성능을 유지하는 데 중요한 역할을 함.
📌 3) 빠른 마운트 (Fast Mount)
- YAFFS2는 NAND 플래시의 OOB 영역을 활용하여 파일 시스템을 빠르게 마운트할 수 있음.
- JFFS2처럼 전체 파일 시스템을 스캔하는 과정이 없기 때문에 부팅 시간이 단축됨.
4. 장점
특징 | 설명 |
빠른 부팅 속도 | NAND OOB 영역을 활용하여 JFFS2보다 훨씬 빠르게 부팅 가능. |
Wear Leveling | NAND 플래시의 특정 블록이 집중적으로 사용되는 것을 방지하여 수명을 연장. |
저널링 지원 | 트랜잭션 방식으로 데이터 무결성을 보장. |
대용량 파일 처리 가능 | 수십 GB 이상의 데이터도 효율적으로 관리. |
가비지 컬렉션 최적화 | 불필요한 블록을 빠르게 정리하여 성능 유지. |
5. 단점
특징 | 설명 |
NAND 전용 | NOR 플래시에서는 비효율적이며, 지원되지 않음. |
F2FS와의 경쟁 | 최신 NAND 플래시 기반 시스템에서는 YAFFS2 대신 F2FS가 더 많이 사용됨. |
리눅스 커널 기본 지원 부족 | JFFS2, UBIFS는 리눅스 커널에 기본 포함되지만, YAFFS2는 별도 패치 필요. |
6. 최신 임베디드 시스템에서의 대체 기술
파일 시스템 | 특징 | 적합한 환경 |
JFFS2 | 저널링, Wear Leveling, 압축 | NOR 플래시, 소규모 파일 시스템 |
YAFFS2 | NAND 최적화, 빠른 부팅 | NAND 플래시 |
UBIFS | 대용량 데이터 지원, 동적 Wear Leveling | NAND 플래시, 대형 스토리지 |
F2FS | SSD 및 플래시 최적화 | 최신 플래시 기반 디바이스 |
ext4 | 범용 리눅스 파일 시스템 | SD 카드, eMMC, HDD |
7. YAFFS2 사용 방법
YAFFS2는 기본적으로 리눅스 커널에 포함되지 않으므로, 별도로 패치하거나 추가해야 합니다.
📌 YAFFS2 패치 적용
git clone https://github.com/yaffs2/yaffs2
cd yaffs2
make
📌 YAFFS2 파일 시스템 생성
mkyaffs2image /path/to/rootfs rootfs.yaffs2
📌 마운트 방법
mount -t yaffs2 /dev/mtdblock0 /mnt/yaffs2
⚠️ 주의: 특정 환경 및 커널 버전에 따라 마운트 방법이 다를 수 있음.
8. 결론
YAFFS2는 NAND 플래시에 최적화된 파일 시스템으로, 빠른 부팅 속도와 데이터 무결성을 보장하는 경량의 고속 파일 시스템입니다.
하지만 최신 시스템에서는 F2FS, UBIFS가 더 널리 사용되고 있어, 현재 YAFFS2는 특정한 레거시 시스템에서 주로 활용됩니다.
✅ 장점: 빠른 부팅, NAND 최적화, 대용량 처리
❌ 단점: NOR 플래시 지원 없음, 최신 시스템에서 채택율 감소
📢 최신 트렌드:
YAFFS2는 NAND 플래시 기반 레거시 임베디드 시스템에서 여전히 사용되지만,
최신 임베디드 시스템에서는 F2FS, UBIFS가 더 많이 사용되는 추세입니다.
'프로그래밍 > 시스템' 카테고리의 다른 글
F2FS (0) | 2025.02.21 |
---|---|
UBIFS (0) | 2025.02.21 |
JFFS2 (0) | 2025.02.21 |
임베디드 시스템 파일 시스템 (0) | 2025.02.21 |
GPIO 기본 개념 - 3. 풀업 저항과 풀다운 저항 개념 (0) | 2025.02.11 |