NILFS

NILFS 또는 NILFS2(New Implementation of a Log-structured File System)는 리눅스 커널용 로그 구조화 파일 시스템 구현이다. 일본전신전화 (NTT) 사이버스페이스 연구소와 전 세계 커뮤니티가 개발했다. 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 KB 또는 2 KB)
 온라인 크기 조정 (Linux-3.x 및 nilfs-utils 2.1부터)
 관련 유틸리티 (세키바 지로 기여)
 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는 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 [sic] of data loss 

분류:지속성