GEFS on OpenBSD: A very early preview
OpenBSD로 포팅된 GEFS — 매우 이른 단계의 프리뷰
Ori Bernstein이 9front용으로 개발한 crash-safe 스냅샷 지원 copy-on-write 파일시스템 GEFS의 OpenBSD 포팅 프리뷰를 공개했습니다. 아직 프로덕션 수준이 아니며 데이터 손실이 예상되는 단계지만, 남은 문제들이 대체로 파악되어 다른 사람들이 살펴볼 수 있는 상태에 도달했다고 밝혔습니다.
- 주제
본문
OpenBSD tech 메일링 리스트에 Ori Bernstein이 GEFS의 OpenBSD 포팅 프리뷰를 공개했습니다. 저자는 글 서두에서 "당분간은 트리에 넣자고 제안하는 것이 아니다"라고 못 박으며, 현재 상태는 거칠고 버그가 많은 프리뷰이며 특히 오류 상황에서 데이터 손실이 예상된다고 명시했습니다. 다만 남은 문제들이 대체로 합리적으로 이해된 상태에 도달했기 때문에 관심 있는 사람들이 코드를 살펴볼 수 있는 단계라고 설명합니다.
GEFS란 무엇인가
GEFS는 저자가 9front를 위해 작성한 새로운 파일시스템으로, crash-safe하고 스냅샷을 지원하는 copy-on-write 설계를 갖습니다. 전체 설계는 orib.dev/gefs.pdf 문서에 기술되어 있으며, 현재 커널 측 코드는 9,000줄 미만이지만 아직 빠진 부분이 많아 시간이 지나면 다소 늘어날 것으로 예상합니다.
포팅 방식
저자는 이를 Plan 9와 OpenBSD 사이에 추상화 계층을 끼워 넣는 방식이 아니라, 각 환경에 맞는 정통 in-kernel 파일시스템으로 접근하고 있습니다. 데이터 구조와 까다로운 코드는 양쪽 간에 상당히 동기화된 상태를 유지하되, 코드 자체는 복사-붙여넣기 방식으로 가져갑니다. 두 환경의 요구사항이 다르기 때문에 코드가 직접 포팅되지는 않겠지만, 서로 "운율이 맞는(rhyme)" 상태를 유지해 수정사항을 공유할 수 있게 하는 것이 목표이며, 추상화 계층을 억지로 끼워 넣는 것은 나쁜 아이디어라고 판단했다고 밝힙니다.
남은 과제들
저자가 꼽은 가장 큰 미지의 문제는 일관성 프로토콜(consistency protocol)입니다. superblock에 대한 쓰기는 스냅샷의 모든 쓰기 이후에 이루어져야 하며, 블록들이 디스크에 도달한 후에만 기록되면 안전합니다. 9front 쪽에서 백포트해야 할 쓰기 순서 관련 수정도 몇 건 있다고 합니다. 오류 처리는 대부분 주석 처리된 상태인데, 9front에서 취했던 오류 처리 방식은 OpenBSD에서는 받아들일 수 없어 경로를 하나씩 신중하게 변환해야 하며, 한 번에 하나의 마운트만 가능하게 만드는 전역 변수 사용 같은 문제도 남아 있습니다. userspace 도구도 과제인데, 사람들에게 newfs나 fsck를 위해 VM에서 9front를 부팅하라고 하는 것은 장기적 해법이 아니며, 스냅샷 관리와 관련 ioctl도 여기에 해당합니다. 원본 시스템이 POSIX 시스템이 아니었기 때문에 POSIX 제약을 정확히 맞추지 못하는 지점이 많을 것이고, Plan 9에는 작은 테스트 스위트가 있지만 OpenBSD에는 regress 테스트가 없습니다. hardlink는 파일별 refcount만 있으면 구현이 쉽고, kqueue도 구현이 쉬운 편이며, NFS는 지저분한 hook이 필요해 무엇이 필요할지 확실치 않다고 적습니다. 부트로더 지원, boot environment, quota 같은 것들은 우선순위가 낮은데, quota가 있으면 /usr/obj를 미리 할당하지 않고도 LLVM이 알려진 우주 크기만큼 커지려는 시도를 계속할 수 있게 해줄 것이라는 농담도 덧붙였습니다. 당장은 KNF 스타일 정리는 하지 않을 계획이며, upstreaming에 가까워질 때까지 원본과 유사한 상태를 유지하고 싶다고 합니다. 9front와 OpenBSD 양쪽과 무관한 비치명적 문제로는 대용량 파일 삭제가 느린 점이 있는데, 개선 아이디어는 있다고 합니다.
코드 얻는 법
하나의 패치로 받을 수도 있고, git 저장소는 shithub에 있지만 서버가 작아 새로 클론하면 과부하가 걸리므로 GitHub에서 openbsd/src를 먼저 클론한 뒤 git://shithub.us/ori/openbsd를 remote로 추가해 변경분만 가져오는 방식을 안내합니다. OpenBSD current를 따라가기 위해 브랜치를 리베이스하고 강제 푸시할 예정이므로 커밋 ID가 바뀔 수 있다는 점도 미리 공지했습니다.
Lobsters 반응
- @orib — 본인의 작업이며 질문을 환영한다고 밝혔고, EuroBSD에서 이 주제로 발표한 영상 링크를 공유했습니다. 슬라이드의 URL이 아니라 메일에 있는 URL을 사용하라고 덧붙였습니다.
원문: Lobsters / 번역·요약: Trawling