Linux 7.3에 FailFS가 업스트림될 것으로 보임
LINUX STORAGE
NULLFS는 조회가 실패할 때 '파일 또는 디렉터리가 없음'을 의미하는 ENOENT 에러 코드를 반환하는, 영구적으로 비어 있고 불변(immutable)인 디렉터리를 제공합니다. 곧 출시될 FailFS의 경우, 파일 시스템에 도달하는 모든 작업은 '지원되지 않는 작업'을 의미하는 Linux 에러 코드인 EOPNOTSUPP를 반환합니다.
Christian Brauner는 VFS.git의 "vfs-7.3.failfs" Git 브랜치에 FailFS를 병합 대기열에 올리며 다음과 같이 설명했습니다:
"failfs는 부팅 초기 단계에서 kern_mount()를 통해 마운트되는 단일 인스턴스로 존재하며, 이는 모든 마운트 네임스페이스(mount namespace)와 논리적으로 구별됩니다.
이 마운트는 어떤 마운트 네임스페이스의 구성원도 아니므로, 여기에 마운트하는 것은 실패합니다. 따라서 그 위에 아무것도 마운트할 수 없습니다. OPEN_TREE_CLONE을 통해 복제될 수 없으며, statmount()/listmount() 또는 /proc/self/mountinfo에도 나타나지 않습니다. 파일 시스템이 등록되지 않았기 때문에 /proc/filesystems에서도 보이지 않으며 사용자 공간(userspace)에서 마운트할 수 없습니다.
이를 통해 태스크(tasks)는 자신의 파일 시스템 상태를 완전히 벗어던질 수 있습니다. 루트 디렉터리나 작업 디렉터리가 failfs에 있는 프로세스는 모든 경로 조회(path lookup)를 명시적인 파일 디스크립터(file descriptor)에 고정해야 하며, 그렇지 않으면 모든 조회가 실패하게 됩니다. 절대 경로, 절대 심볼릭 링크(absolute symlinks), 그리고 AT_FDCWD 상대 조회가 단순히 실패합니다. 후속 패치에서는 fchdir()과 새로운 fchroot() 시스템 호출에서 인식되는 새로운 FD_FAILFS_ROOT 파일 디스크립터 센티널(sentinel)을 통해 이를 노출할 예정입니다.
재미있는 사실은, PT_INTERP를 통한 동적 바이너리 실행 방식 때문에 현재는 동적 바이너리의 실행도 방지한다는 점입니다(selftests 참조)."
FailFS는 복제할 수 없고, 사용자 공간에서 마운트할 수 없으며, 그 위에 아무것도 마운트할 수 없습니다. FailFS 드라이버의 실제 드라이버 부분은 200라인 미만의 코드로 구성됩니다.
Brauner가 FailFS를 VFS.git 브랜치에 대기열로 올렸고 심지어 "7.3"으로 표시되어 있으므로, Linus Torvalds나 다른 저명한 커널 개발자들의 반대가 없다면 이번 달 말 Linux 7.3 병합 윈도우(merge window)에 FailFS가 제출될 것으로 예상됩니다.