JFFS2
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
JFFS2는 플래시 메모리 장치, 특히 NAND 플래시 메모리를 위해 설계된 로깅 파일 시스템이다. 하드 링크 지원, 압축 알고리즘 사용, 성능 향상 등의 특징을 가지며, 파일 및 디렉터리 변경 사항을 노드에 기록하는 방식으로 동작한다. JFFS2는 아이노드와 디렉터리 엔트리 노드를 사용하여 파일 메타데이터와 디렉터리 정보를 저장하며, 쓰레기 수집 알고리즘을 통해 플래시 메모리 공간을 효율적으로 관리한다. 하지만 마운트 시 스캔 시간, 압축률 저하, 잔여 공간 계산의 어려움과 같은 단점도 존재한다.
더 읽어볼만한 페이지
| JFFS2 - [IT 관련 정보]에 관한 문서 | |
|---|---|
| 파일 시스템 정보 | |
| 이름 | JFFS2 |
| 개발자 | 데이비드 우드하우스 |
| 전체 이름 | 저널링 플래시 파일 시스템 버전 2 |
| 소개 날짜 | 2001년 9월 23일 |
| 소개 운영 체제 | 리눅스 2.4.10 |
| 압축 | zlib, rubin, rtime |
| 운영 체제 | 리눅스 |
2. 특징
JFFS2에는 다음과 같은 기능이 추가되었다.
- NAND 플래시 메모리 장치 지원: 일반적인 NAND 장치는 순차적 입출력 인터페이스를 통해 동작하며, 메모리 맵트(memory-mapped) 방식으로 읽기 동작을 할 수 없다. 따라서 NAND 플래시 메모리 장치를 위한 JFFS2를 개발하는 데 많은 노력이 필요했다.[6]
- 하드 링크 지원: JFFS에서는 온-디스크 포맷 때문에 불가능했지만, JFFS2에서는 가능해졌다.
- 압축 기능: zlib, rubin, rtime, lzo의 네 가지 압축 알고리즘을 사용할 수 있다.[6]
- 성능 향상: JFFS는 디스크를 순수한 원형 로그(circular log)로 간주하여 불필요한 I/O가 많이 발생했다. JFFS2의 쓰레기 수집 알고리즘은 이러한 I/O 빈도를 줄여준다.[6]
JFFS2의 웨어 레벨링 알고리즘은 NOR 플래시 메모리의 수명을 단축시키는 경향이 있었기 때문에, JFFS2에서는 알고리즘을 재설계하여 순환 로그를 폐지했다. 또한, NAND형 플래시 메모리용으로 설계되었으며, 압축을 통해 성능도 개선되었다.
JFFS와 마찬가지로 파일 및 디렉터리에 대한 변경 사항은 노드에 플래시하기 위해 "로그에 기록"된다. 노드에는 다음 두 가지 유형이 있다.[6]
- i노드: 파일 메타데이터를 포함하는 헤더와 그 뒤에 파일 데이터 페이로드(존재하는 경우)가 있다. 압축된 페이로드는 한 페이지로 제한된다.
- dirent 노드: 각각 이름과 i노드 번호를 유지하는 디렉토리 항목이다. 하드 링크는 동일한 i노드 번호를 가진 다른 이름으로 표시된다. 특수 i노드 번호 0은 링크 해제를 나타낸다.
JFFS와 마찬가지로 노드는 생성 시 유효한 것으로 시작되며, 새 버전이 다른 위치에 생성되면 폐기된다.[6]
JFFS2는 순환 로그 대신 블록을 단위로 처리한다. 블록은 플래시 메모리의 지우기 세그먼트와 동일한 크기이다. 블록은 한 번에 하나씩, 아래에서 위로 노드로 채워진다. 클린 블록은 유효한 노드만 포함하는 블록이고, 더티 블록에는 최소한 하나의 폐기된 노드가 포함되어 있다. 빈 블록에는 노드가 포함되어 있지 않다.[6]
가비지 컬렉터는 백그라운드에서 실행되어 더티 블록을 빈 블록으로 변환한다. 유효한 노드를 새 블록으로 복사하고 폐기된 노드를 건너뛰는 방식으로 수행된다. 이 작업이 완료되면 더티 블록이 지워지고 빈 블록으로 지정하는 특수 마커로 태그가 지정된다(지우기 작업 중에 전원이 손실될 경우의 혼란을 방지하기 위해).[7]
웨어 레벨링을 더욱 균일하게 하고 지우기가 거의 정적인 파일 시스템에 너무 집중되지 않도록 하기 위해 가비지 컬렉터는 클린 블록을 소비하기도 한다.[8]
3. 설계
JFFS2는 다음과 같은 새로운 점들을 도입했다.
- NAND 플래시 메모리 장치 지원: NAND 장치는 순차적 입출력 인터페이스를 가지며 읽기용으로 메모리 맵핑을 할 수 없어 많은 작업이 필요했다.
- 하드 링크 지원: 온디스크 형식의 제한으로 JFFS에서는 불가능했다.
- 압축: zlib, rubin, rtime, lzo의 네 가지 알고리즘을 사용할 수 있다.
- 성능 향상: JFFS는 디스크를 순수한 순환 로그로 취급하여 불필요한 I/O가 많았으나, JFFS2의 쓰레기 수집 알고리즘은 이를 줄여준다.
JFFS와 마찬가지로, JFFS2에서도 파일이나 디렉터리에 대한 변경 사항은 "노드"에 기록된다. 노드에는 다음 두 가지 종류가 있다.
- 아이노드(inodes): 파일 메타데이터를 내용으로 하는 헤더 및 파일 데이터 페이로드로 구성된다. 압축된 페이로드는 한 페이지로 크기가 제한된다.
- 디렉터리 엔트리 노드(dirent nodes): 이름 및 inode 번호를 담고 있는 디렉터리 엔트리들로 구성된다. 하드 링크는 같은 inode 번호를 갖고 있는 다른 이름의 디렉터리 엔트리로 표현된다. Inode 번호 0번은 unlink를 표현한다.
노드는 처음에 생성될 때 "유효"(valid) 상태로 시작했다가, 새로운 버전이 생성되면 "쓸모없음"(obsolete) 상태가 된다.
JFFS와 달리, JFFS2에는 순환 로그(circular log)가 없다. 대신, 플래시 장치의 지우기 동작의 세그먼트 크기와 같은 "블록"(block)들을 활용한다. 블록들은 한 번에 한 블록씩 채워진다.
- "깨끗한"(clean) 블록: "유효한"(valid) 노드들만 포함.
- "더러운"(dirty) 블록: 적어도 한 개의 "쓸모없는"(obsolete) 노드를 포함.
- "빈"(free) 블록: 노드를 포함하지 않음.
쓰레기 수집 알고리즘은 백그라운드로 수행된다. "더러운" 블록 내의 "유효한" 노드들을 새로운 블록으로 옮기고, "쓸모없는" 블록들은 그냥 놓아둔 후, "더러운" 블록들을 삭제하고 빈 블록이라는 것을 나타내는 특별한 마커를 달아준다.[3]
웨어 레벨링을 공평하게 하고, 정적인 파일 시스템이 집중화되는 것을 방지하기 위해, 쓰레기 수집기는 가끔 "깨끗한" 블록을 소모하기도 한다.[3]
4. 단점
JFFS2는 로그 구조 설계를 가지고 있어 다음과 같은 단점을 지닌다.[3][8]
- 모든 노드는 마운트 시점에 스캔해야 한다. 이는 속도가 느리며, 플래시 장치가 테라바이트 범위로 확장됨에 따라 점점 더 심각한 문제가 되고 있다. 이 문제를 해결하기 위해 리눅스 커널 2.6.15 버전에서 ''Erase Block Summary''(EBS)가 도입되었다. EBS는 각 블록의 끝에 위치하며 해당 블록에 대한 각 쓰기 작업 시 업데이트되어 블록의 내용을 요약한다. 마운트 시 전체 블록을 스캔하는 대신 EBS를 읽는다.
- 많은 작은 데이터 블록을 쓰는 것은 심지어 음수 압축률을 초래할 수 있으므로, 애플리케이션에서 큰 쓰기 버퍼를 사용하는 것이 필수적이다.
- 장치에 얼마나 많은 사용 가능한 여유 공간이 남아 있는지 실제로 알 방법이 없다. 이는 추가 데이터를 얼마나 잘 압축할 수 있는지와 쓰기 시퀀스에 모두 의존하기 때문이다.
참조
[1]
웹사이트
Memory Technology Device (MTD) Subsystem for Linux.
http://www.linux-mtd[...]
2021-05-15
[2]
웹사이트
The OpenWrt Flash Layout - OpenWrt Wiki
http://wiki.openwrt.[...]
2014-03-04
[3]
웹사이트
Software Profile: Journaling Flash File System, Version 2 (JFFS2)
http://www.micron.co[...]
micron.com
2014-03-04
[4]
웹사이트
Memory Technology Device (MTD) Subsystem for Linux.
http://www.linux-mtd[...]
2021-05-15
[5]
웹사이트
The OpenWrt Flash Layout - OpenWrt Wiki
http://wiki.openwrt.[...]
2014-03-04
[6]
웹사이트
Software Profile: Journaling Flash File System, Version 2 (JFFS2)
http://www.micron.co[...]
micron.com
2014-03-04
[7]
웹사이트
Software Profile: Journaling Flash File System, Version 2 (JFFS2)
http://www.micron.co[...]
micron.com
2014-03-04
[8]
웹사이트
Software Profile: Journaling Flash File System, Version 2 (JFFS2)
http://www.micron.co[...]
micron.com
2014-03-04
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com