NILFS

**NILFS** 또는 **NILFS2**(**''N**ew **I**mplementation of a **L**og-structured **F**ile **S**ystem*)는 [[리눅스 커널]]용 [[로그 구조화 파일 시스템]] 구현이다. [[일본전신전화]] (NTT) [[Nippon Telegraph and Telephone Corporation#R.26D laboratories|사이버스페이스 연구소]]와 전 세계 커뮤니티가 개발했다. NILFS는 [[GNU 일반 공중 사용 허가서]] (GPL) 조건에 따라 출시되었다.

==설계==
"NILFS는 저장 매체를 원형 버퍼처럼 취급하고 새 블록은 항상 끝에 기록되는 로그 구조화 파일 시스템이다. [...] 로그 구조화 파일 시스템은 자연스럽게 [[웨어 레벨링]]을 수행하므로 플래시 미디어에 자주 사용된다. [...] NILFS는 스냅샷을 강조한다. 로그 구조화 방식은 특정 형태의 [[카피 온 라이트]] 동작이므로 파일 시스템 [[스냅샷 (기억 장치)|스냅샷]] 생성에 자연스럽게 적합하다. NILFS 개발자는 사용자 시작 파일 시스템 문제에서 복구하는 데 사용할 수 있는 "연속 스냅샷" 생성에 대해 이야기한다. [...]"

[[로그 구조화 파일 시스템]]으로 알려진 [[카피 온 라이트]] 기술을 사용하여 NILFS는 모든 데이터를 연속적인 로그와 같은 형식으로 기록하며, 이 형식은 덮어쓰지 않고 오직 추가만 된다. 이 방식은 [[탐색 시간]]을 줄이고 기존 파일 시스템에서 충돌 후 발생하는 [[데이터 손실]]을 최소화하도록 설계되었다. 예를 들어, 시스템이 쓰기 작업 중에 [[충돌 (컴퓨팅)|충돌]]하면 [[Ext3]] 파일 시스템에서 데이터 손실이 발생한다. 시스템이 [[부팅|재부팅]]되면 [[저널 (컴퓨팅)|저널]]은 쓰기가 완료되지 않았음을 기록하고 부분 데이터 쓰기는 손실된다.

[[솔라리스 (운영체제)|솔라리스 운영체제]] 및 [[BSD]]에서 사용되는 [[유닉스 파일 시스템|UFS]] 파생 파일 시스템과 같은 일부 파일 시스템은 이러한 데이터 손실을 방지하는 [[스냅샷 (기억 장치)|스냅샷]] 기능을 제공하지만, 대규모 파일 시스템에서는 스냅샷 구성이 길어질 수 있다. 반대로 NILFS는 NTT Labs에 따르면 "서비스를 중단하지 않고 파일 시스템의 즉각적인 상태를 지속적이고 자동으로 [저장]할 수 있다."

NILFS가 지속적으로 저장하는 "즉각적인 상태"는 실제 파일 시스템이 읽기-쓰기 방식으로 마운트된 것과 동시에 읽기 전용으로 마운트될 수 있다. 이 기능은 하드웨어 오류 및 기타 시스템 충돌 후 데이터 복구에 유용하다. 대화형 NILFS "검사" 유틸리티의 "lscp"(체크포인트 나열) 명령은 먼저 체크포인트 주소(이 경우 "2048")를 찾는 데 사용된다.

 # inspect /dev/sda2
 ...
 nilfs> listcp
    1     6 Tue Jul 12 14:55:57 2005 MajorCP|LogiBegin|LogiEnd
 2048  2352 Tue Jul 12 14:55:58 2005 MajorCP|LogiEnd
 ...
 nilfs> quit

체크포인트 주소는 체크포인트를 마운트하는 데 사용된다.

 # mount -t nilfs -r -o cp=2048 /dev/sda2 /nilfs-cp
 # df
 Filesystem           1K-blocks      Used Available Use% Mounted on
 /dev/sda2             70332412   8044540  62283776  12% /nilfs
 /dev/sda2             70332412   8044540  62283776  12% /nilfs-cp

==기능==
NILFS는 연속 스냅샷 기능을 제공한다. 전체 파일 시스템의 버전 관리 기능 외에도 사용자는 실수로 덮어쓰거나 삭제한 파일을 언제든지 최근 시점으로 복원할 수 있다. NILFS는 기존 LFS처럼 일관성을 유지할 수 있으므로 시스템 충돌 후 빠른 복구를 달성한다.

연속 [[스냅샷 (기억 장치)|스냅샷]] 기능은 시점 스냅샷을 지원하는 파일 시스템(예: [[Btrfs]])을 포함하여 대부분의 파일 시스템에서 제공되지 않는다.

NILFS는 몇 초마다 또는 동기 쓰기 기준으로 여러 개의 체크포인트를 생성한다(변경 사항이 없는 경우는 제외). 사용자는 지속적으로 생성되는 체크포인트 중에서 중요한 버전을 선택하고 이를 스냅샷으로 변경할 수 있으며, 스냅샷은 체크포인트로 다시 변경될 때까지 보존된다.

볼륨이 가득 찰 때까지 스냅샷 수에는 제한이 없다. 각 스냅샷은 읽기 전용 파일 시스템으로 마운트할 수 있다. 쓰기 가능한 마운트 및 다른 스냅샷과 동시에 마운트할 수 있으며, 이 기능은 사용 중에 일관된 백업을 만드는 데 편리하다.

NILFS의 가능한 용도는 버전 관리, 변조 감지, [[사베인스 옥슬리 법|SOX]] 규정 준수 로깅, 데이터 손실 복구 등이다.

현재 NILFS의 주요 버전은 버전 2이며 NILFS2라고 불린다. NILFS2는 여러 스냅샷을 유지하면서 디스크 공간을 회수하기 위한 온라인 [[쓰레기 수집 (컴퓨터 과학)|쓰레기 수집]]을 구현한다.

다른 NILFS 기능은 다음과 같다.

* [[B 트리]] 기반 파일 및 [[아이노드]] 관리.
* 시스템 충돌 후 즉시 복구.
* 64비트 데이터 구조; 많은 파일, 대용량 파일 및 디스크 지원.
* [[2038년 문제]]로부터 자유로운 64비트 온디스크 타임스탬프.

===현재 상태===

===문제점===
2023년 현재 NILFS는 전용 일관성 검사 유틸리티(fsck)가 없어 유효한 체크포인트를 찾지 못하게 하는 심각한 오류로부터 복구할 수 없다.
====지원 기능====
* 기본 [[POSIX]] 파일 시스템 기능
* 스냅샷
** 자동으로 지속적으로 생성됨
** 볼륨이 가득 찰 때까지 스냅샷 수에 제한 없음
** 읽기 전용 파일 시스템으로 마운트 가능
** 쓰기 가능한 마운트와 동시에 마운트 가능 (사용 중 일관된 백업 생성에 편리함)
** 빠른 목록 생성
* 백그라운드 [[쓰레기 수집 (컴퓨터 과학)|쓰레기 수집]] (GC)
** 여러 스냅샷 유지 가능
** 사용자 공간 데몬에 의해 제공되는 GC 정책 선택 가능
* 마운트 시 빠른 충돌 복구
* [[메타데이터]] 파일 및 [[데이터]] 파일에 대한 미리 읽기
* [[페이지 (컴퓨터 메모리)|페이지 크기]]보다 작은 [[블록 크기 (데이터 저장 및 전송)|블록 크기]] (예: 1&nbsp;[[킬로바이트|KB]] 또는 2&nbsp;KB)
* 온라인 크기 조정 (Linux-3.x 및 nilfs-utils 2.1부터)
* 관련 유틸리티 (세키바 지로 기여)
** [[GNU GRUB|grub2]]
** [[Util-linux]] ([[blkid]], libblkid, uuid 마운트)
** [[udisks]], palimpsest
** 파일 시스템 레이블 (nilfs-tune)

=== 추가 기능 ===
* 빠른 쓰기 및 복구 시간
* 하드웨어 오류 시 파일 데이터 및 시스템 일관성에 대한 최소한의 손상
** 무결성 보장을 위한 [[데이터]] 및 [[메타데이터]]에 대한 32비트 [[체크섬]] ([[CRC-32]]) (세그먼트 요약에서 블록 그룹당)
** 정확하게 정렬된 데이터 및 메타데이터 쓰기
** 중복 [[장치 파일#블록 장치|슈퍼블록]]
* 내부 데이터는 64비트 워드 크기로 처리됨
* 대용량 파일 생성 및 저장 가능 (8 [[엑스비바이트|EiB]])

== 호환성 ==
NILFS는 [[아치 리눅스]], [[데비안]] (버전 5.0부터), [[페도라 (운영체제)|페도라]], [[젠투 리눅스|젠투]], [[리눅스 민트]], [[NixOS]], [[우분투 (운영체제)|우분투]] (버전 9.10부터) 등 다양한 [[소프트웨어 배포판|GNU/리눅스 배포판]]에서 사용할 수 있다. 사용자는 일반적으로 nilfs-utils 또는 nilfs-tools 패키지를 설치해야 한다. NILFS가 포함된 부팅 CD는 [http://prrescue.prnet.org/index.php/Main_Page PrRescue]에서도 구할 수 있다.

또한 [[GParted]]와 같은 파티션 편집 애플리케이션에서도 지원된다.

별도의 [[BSD]] 라이선스 구현은 현재 '읽기 전용' 지원과 함께 [[NetBSD]]에 포함되어 있다.

== 상대적 성능 ==
2015년 1월 [[Linux.conf.au]]에서 발표된 *SD 카드 및 파일 시스템을 위한 임베디드 시스템''에서 다음과 같이 언급되었다.

## 라이선스
NILFS2 파일 시스템 유틸리티는 GNU 일반 공중 사용 허가서 버전 2에 따라 제공되며, lib/nilfs 라이브러리와 해당 헤더 파일은 GNU 약소 일반 공중 사용 허가서 버전 2.1에 따라 제공된다.

## 개발자
NTT Corporation 연구소에서 일했거나 현재 일하고 있는 `nilfs-utils`의 일본인 주요 저자 및 주요 기여자는 다음과 같다.
* 고니시 류스케 (주요 관리자, 2008년 2월 ~ 현재)
* 사토 코지
* 가미무라 나루히코
* 기하라 세이지
* 아마가이 요시지
* 히후미 히사시 및
* 모리아이 사토시.
다른 주요 기여자는 다음과 같다.
* 안드레아스 로너
* 댄 맥기
* 데이비드 아렌트
* 데이비드 스미드
* 덱센 드브리스
* 드미트리 스미르노프
* 에릭 샌딘
* 세키바 지로
* 마테오 프리도
* 미타케 히토시
* 이와이 타카시
* 뱌체슬라프 두베이코

## 같이 보기

* ZFS
* Btrfs
* F2FS, 또 다른 로그 구조화 파일 시스템 구현
* 파일 시스템 목록
* 파일 시스템 비교
* 로그 구조화 파일 시스템 (BSD)
* 스프라이트 운영체제

## 각주

## 외부 링크
*
*
*
*
*Manjaro tutorial NILFS: A filesystem designed to minimize the likelyhood  of data loss  

분류:지속성