파일 시스템 | |||||||||||||
{{{#!wiki style="margin: 0 -10px -5px; min-height: 26px" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin: -6px -1.5px -13px" |
마이크로소프트 | FAT | NTFS | ReFS | |||||||||
애플 | HFS | HFS+ | APFS | ||||||||||
리눅스/유닉스 | ext2 | ext3 | ext4 | ||||||||||
Btrfs | F2FS | XFS | ZFS |
B-tree file system
Btrfs 문서 (영문)
1. 개요
오픈소스 커뮤니티에서 개발하는 유닉스/ 리눅스용 파일 시스템으로, 주요 기여자는 SUSE, 메타, 웨스턴 디지털, 오라클 등이다.2. 특징
- 가볍다.
- B-Tree[1] 기반
- Copy-On-Write[2]
- 빈 공간 캐시, inode 캐시 지원
- 자동 조각모음
- 공간 압축: 작은 파일들을 한 섹터에 몰아넣는다.
- 데이터 압축: zlib, LZO, z-standard 압축 알고리즘 지원
- SSD 최적화: TRIM과는 상관없다. [3]
- 서브볼륨 관리: 각각의 서브볼륨을 파티션처럼 취급 가능
- 스냅샷 관리: 볼륨을 통째로 박제한다. 파일을 스냅샷으로 저장해두었던 상태로 쉽게 되돌릴수 있어 랜섬웨어 대응이나 백업 용도로 매우 좋으며, 증분 백업도 지원한다. 설정 예시
- 파티션 테이블이 없는 BtrFS 디스크: 파티션 테이블이 없는 BtrFS 디스크를 지원한다. 단 GRUB에서 사용을 권장하지 않는다.
- 데이터 중복제거(Data deduplication)
3. 주의사항
- 4K로 정렬된 디스크에서 최적의 속도를 발휘한다. MBR 디스크는 섹터 정렬에 주의해야 한다.
- swap 파일 기능은 리눅스 5.0 이상부터 사용이 가능하며, swap 파일의 Copy-On-Write를 비활성화해야 한다. btrfs에서의 swap 파일 생성 방법
-
LILO나 구버전
GRUB이나 구버전 리눅스 커널에서는 부트로더가 btrfs 파티션을 읽지 못하는 문제가 종종 있다.
btrfsprog
를 설치하고 initramfs를 다시 생성해도 안되는 경우 적절한 용량[4]의 파티션을 하나 파서/boot
로 할당해 FAT32(vfat
)로 포맷하고 여기다가 부트로더를 물려주면 해결된다./boot
디렉토리 파일들을 새로 판 파티션에 옮기는거 까먹으면 대략 낭패다. 잊지 말자!어차피 UEFI 쓰면 ESP 잡느라 FAT32 파티션 하나 파야 하는거 처음부터 UEFI로 설치하자 - 특이사항으로 레드햇 엔터프라이즈 리눅스 계열 배포판 ( CentOS 등)의 경우, RHEL 7에서 실험적으로 지원하기 시작하였으나 얼마 지나지 않은 RHEL 7.4부터 deprecated되었고 RHEL 8부터는 지원이 아예 제거되었다. 레드햇은 Btrfs 대신 Stratis와 XFS 조합을 밀고 싶어하는 모양새.
4. 기타
- B-tree 기반이기에 B-tree filesystem의 줄임말이지만 농담삼아 Butter filesystem의 줄임말이라 하기도 한다. 친근한 어감 때문인지 영미권 개발자들 사이에선 아예 버터FS가 B-Tree보다 더 많이 언급될만큼 완전한 별명으로 굳어가고 있다.
- Ohad Rodeh가 USENIX 2007의 발표에서 제안하였다.
- 넷기어, 시놀로지, EFM 네트웍스[5] 등 NAS 제조사에서도 도입하였다.
-
리눅스 커널 4.9에서의 mount 옵션별 벤치마크
[1]
자동으로 밸런싱이 가능한 데이터 정리 알고리즘. Binary tree 와는 다르다.
[2]
쉽게 말해 파일을 복사해 동일한 파일을 만들 경우, 실제로는 새 파일을 만들지 않고 원래 파일을 그대로 사용한다. 파일을 수정할때 비로소 새 파일을 만들어서 쓰기 시작하며 그래서 이름이 copy, on write 이다. 사용 시나리오가 맞는다면 저장 공간과 복사용 디스크 IO시간을 크게 아낄 수 있다.
[3]
mount 옵션에도 TRIM 활성화인
discard
와 별개로 SSD 최적화 알고리즘 활성화를 위한 ssd
옵션이 있다.
[4]
일반적으로 256MB 정도가 좋다.
[5]
흔히 ipTIME으로 알려져 있다.