Linux용 btrfs 시작하기
B-트리 파일 시스템은 하나로 통합된 파일 시스템과 볼륨 관리자입니다. 이는 Linux에 고급 파일 시스템 기능 세트를 제공하는 데 많은 가능성을 제공합니다.
Btrfs는 수년 동안 Linux에서 사용 가능했기 때문에 이미 익숙할 수도 있습니다. 그렇지 않은 경우 특히 Fedora Workstation을 사용하는 경우(이제 Btrfs가 기본 파일 시스템임) 궁금한 점이 있을 수 있습니다. 이 문서의 목적은 기록 중 복사 및 체크섬과 같은 고급 기능과 이에 익숙해지는 데 도움이 되는 것입니다.
B-Tree Filesystem의 약자인 Btrfs는 실제로 파일 시스템과 볼륨 관리자가 하나로 통합된 것입니다. 이는 2005년 Sun Microsystem의 Solaris OS에 도입된 ZFS에 대한 대응으로 종종 간주되며 현재는 대부분 OpenZFS라는 오픈 소스 구현으로 대체되었습니다. Ubuntu Linux 및 FreeBSD에는 OpenZFS 기능이 있는 경우가 많습니다. 비슷한 기능을 갖춘 다른 예로는 Red Hat의 Stratis와 Linux LVM(Logical Volume Manager)이 있습니다.
설정
Btrfs를 사용해 보기 위해 Fedora 33 Workstation ISO 파일을 다운로드하여 새 가상 머신(VM)에 설치했습니다. 설치 프로세스는 이전 버전과 변경되지 않았습니다. 이 튜토리얼에서는 정확한 "기본" 설정을 유지하기 위해 드라이브 파티셔닝 및 포맷을 포함한 어떤 설정도 사용자 정의하지 않았습니다. VM을 가동하고 실행한 후 드라이브 레이아웃을 공장에서 볼 때 최신 상태로 보기 위해 GNOME Partition Editor(GParted)를 설치하고 실행했습니다.
(Alan Formy-Duvall, CC BY-SA 4.0)
이 시점에서는 익숙했던 것과 크게 다르지 않습니다. 실제로 시스템을 정상적으로 사용할 수 있으며 파일 시스템이 Btrfs라는 사실조차 인식하지 못할 수도 있습니다. 그러나 이 새로운 기본값을 사용하면 여러 가지 멋진 기능을 활용할 수 있습니다.
Btrfs 파일 시스템 검사
일부 기능이 기존 디스크 관리 도구에 통합되었지만 Btrfs 관련 그래픽 도구에 대해서는 알지 못합니다.
명령줄에서 Btrfs 형식을 자세히 살펴볼 수 있습니다.
# btrfs filesystem show
Label: 'fedora_localhost-live' uuid: f2bb02f9-5c41-4c91-8eae-827a801ee58a
Total devices 1 FS bytes used 6.36GiB
devid 1 size 10.41GiB used 8.02GiB path /dev/vda3Btrfs 레이블 변경
가장 먼저 눈에 띄는 것은 설치 프로그램에서 설정한 파일 시스템 레이블인 fedora_localhost-live였습니다. 이는 이제 설치된 시스템이고 더 이상 라이브 CD가 아니기 때문에 정확하지 않습니다. 그래서 btrfs filesystem label 명령을 사용하여 변경했습니다.
Btrfs 파일 시스템 레이블을 변경하는 것은 간단합니다.
# btrfs filesystem label /
fedora_localhost-live
# btrfs filesystem label / fedora33workstation
# btrfs filesystem label /
fedora33workstationBtrfs 하위 볼륨 관리
하위 볼륨은 Btrfs에서 관리할 수 있는 표준 디렉터리인 것처럼 보입니다. 새로운 Fedora 33 Workstation에는 여러 하위 볼륨이 있습니다.
# btrfs subvolume list /
ID 256 gen 2458 top level 5 path home
ID 258 gen 2461 top level 5 path root
ID 265 gen 1593 top level 258 path var/lib/machinesbtrfs subvolume create 명령을 사용하여 새 하위 볼륨을 생성하거나 btrfs subvolume delete를 사용하여 하위 볼륨을 삭제합니다.
# btrfs subvolume create /opt/foo
Create subvolume '/opt/foo'
# btrfs subvolume list /
ID 256 gen 2884 top level 5 path home
ID 258 gen 2888 top level 5 path root
ID 265 gen 1593 top level 258 path var/lib/machines
ID 276 gen 2888 top level 258 path opt/foo
# btrfs subvolume delete /opt/foo
Delete subvolume (no-commit): '/opt/foo'하위 볼륨을 사용하면 할당량 설정, 스냅샷 촬영, 다른 위치 및 호스트에 복제 등의 작업을 수행할 수 있습니다. 시스템 관리자는 이러한 기능을 어떻게 활용할 수 있습니까? 사용자 홈 디렉토리는 어떻습니까?
사용자 추가
예전부터 그랬듯이, 새 사용자 계정을 추가하면 해당 계정이 사용할 홈 디렉터리가 생성됩니다.
# useradd student1
# getent passwd student1
student1:x:1006:1006::/home/student1:/bin/bash
# ls -l /home
drwx------. 1 student1 student1 80 Oct 29 00:21 student1전통적으로 사용자의 홈 디렉터리는 /home의 하위 디렉터리입니다. 소유권과 권한은 소유자에게 맞춤화되어 있으나, 이를 관리하기 위한 특별한 기능은 없습니다. 엔터프라이즈 서버 환경은 또 다른 시나리오입니다. 디렉토리는 특정 응용 프로그램과 해당 사용자가 사용하도록 예약되어 있는 경우가 많습니다. Btrfs를 활용하여 이러한 디렉터리에 대한 제약 조건을 관리하고 적용할 수 있습니다.
Btrfs 하위 볼륨을 사용자 홈으로 수용하기 위해 useradd 명령에 --btrfs-subvolume-home이라는 새로운 옵션이 있습니다. 이 글을 쓰는 시점에서 매뉴얼 페이지는 업데이트되지 않았지만 useradd --help를 실행하면 해당 옵션을 볼 수 있습니다. 새 사용자를 추가할 때 이 옵션을 전달하면 새 Btrfs 하위 볼륨이 생성됩니다. 일반 디렉토리를 생성할 때 -d 옵션과 같은 기능을 합니다.
# useradd --btrfs-subvolume-home student2
Create subvolume '/home/student2'
getent passwd Student2로 사용자를 확인하면 정상적으로 표시됩니다. 그러나 btrfs subvolume 명령을 실행하여 하위 볼륨을 나열하면 흥미로운 내용을 볼 수 있습니다. 바로 새 사용자의 홈 디렉터리입니다!
# btrfs subvolume list /
ID 256 gen 2458 top level 5 path home
ID 258 gen 2461 top level 5 path root
ID 265 gen 1593 top level 258 path var/lib/machines
ID 272 gen 2459 top level 256 path home/student2엔터프라이즈 서버 환경의 두 번째 시나리오를 살펴보세요. /opt에 WildFly 서버를 설치하고 Java 웹 애플리케이션을 배포해야 한다고 가정해 보겠습니다. 대개 첫 번째 단계는 wildfly 사용자를 생성하는 것입니다. -b 옵션과 함께 새로운 --btrfs-subvolume-home 옵션을 사용하여 /opt를 기본 디렉터리로 지정하면 이 작업을 수행할 수 있습니다.
# useradd -b /opt --btrfs-subvolume-home wildfly
Create subvolume '/opt/wildfly'이제 wildfly 사용자는 /opt/wildfly에 로그인하여 설치를 완료할 수 있습니다.
사용자 삭제
사용자를 삭제할 때 해당 사용자의 파일과 홈 디렉터리를 동시에 삭제하고 싶을 때가 있습니다. userdel 명령에는 이를 위한 -r 옵션이 있으며 Btrfs 하위 볼륨도 삭제합니다.
# userdel -r student2
Delete subvolume (commit): '/home/student2'디스크 사용 할당량 설정
내 컴퓨터 과학 수업 중 하나에서 한 학생이 제어를 벗어나 전체 /home이 학과의 Unix 시스템에 채워질 때까지 디스크에 쓰는 C 프로그램을 실행했습니다. 관리자가 런어웨이 프로세스를 종료하고 일부 공간을 지울 때까지 서버를 사용할 수 없게 되었습니다. 위의 시나리오에서도 마찬가지입니다. Wildfly 엔터프라이즈 애플리케이션에는 사용자를 위한 로그 파일과 콘텐츠 저장소의 수가 점점 더 많아질 것입니다. 디스크가 가득 차서 서버가 정지되는 것을 어떻게 방지할 수 있습니까? 디스크 사용량 제약 조건을 설정하는 것이 좋습니다. 다행히 Btrfs는 할당량을 통해 이를 지원합니다.
할당량을 구성하려면 몇 가지 단계가 필요합니다. 첫 번째 단계는 Btrfs 파일 시스템에서 할당량을 활성화하는 것입니다.
# btrfs quota enable /btrfs subvolume list 명령으로 표시되는 각 하위 볼륨의 할당량 그룹(qgroup) ID 번호를 알고 있는지 확인하십시오. 각 하위 볼륨에는 ID 번호를 기반으로 연결된 qgroup이 필요합니다. 이는 btrfs qgroup create를 사용하여 개별적으로 수행할 수 있지만 편리하게 Btrfs 위키는 파일 시스템의 하위 볼륨에 대한 qgroup 생성을 신속하게 수행하기 위해 다음 명령을 제공합니다.
>btrfs subvolume list \<path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup destroy 0/{} \<path>새로 설치된 Fedora 33 워크스테이션 시스템에서는 루트 파일 시스템 경로 /에서 작업하고 있습니다. \를 루트 경로로 대체합니다.
# btrfs subvolume list / | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} /그런 다음 btrfs quota rescan을 실행하고 새 qgroup을 살펴보세요.
# btrfs quota rescan /
quota rescan started
# btrfs qgroup show /
qgroupid rfer excl
-------- ---- ----
0/5 16.00KiB 16.00KiB
0/256 272.04MiB 272.04MiB
0/258 6.08GiB 6.08GiB
0/265 16.00KiB 16.00KiB
0/271 16.00KiB 16.00KiB
0/273 16.00KiB 16.00KiB이제 qgroup 중 하나에 할당량을 할당할 수 있으며, 이는 연결된 하위 볼륨에 적용됩니다. 따라서 Student3의 홈 디렉터리 사용량을 1GB로 제한하려면 btrfs qgrouplimit 명령을 사용하세요.
# btrfs qgroup limit 1G /home/student3
특정 하위 볼륨에 대한 할당량을 확인합니다.
# btrfs qgroup show -reF /home/student3
qgroupid rfer excl max_rfer max_excl
-------- ---- ---- -------- --------
0/271 16.00KiB 16.00KiB 1.00GiB none약간 다른 옵션은 모든 qgroup과 설정된 할당량을 표시합니다.
# btrfs qgroup show -re /
qgroupid rfer excl max_rfer max_excl
-------- ---- ---- -------- --------
0/5 16.00KiB 16.00KiB none none
0/256 272.04MiB 272.04MiB none none
0/258 6.08GiB 6.08GiB none none
0/265 16.00KiB 16.00KiB none none
0/271 16.00KiB 16.00KiB 1.00GiB none
0/273 16.00KiB 16.00KiB none none다른 기능들
이러한 예는 Btrfs의 기능에 대한 몇 가지 아이디어를 제공합니다. 전체 명령 목록을 보려면 btrfs --help를 실행하세요. 그 밖에도 주목할만한 기능이 많이 있습니다. 예를 들어 스냅샷과 보내기/받기는 배울 가치가 있는 두 가지입니다.
마지막 생각들
Btrfs는 Linux에 설정된 고급 파일 시스템 기능을 제공하기 위한 많은 가능성을 제공합니다. 처음은 아니었습니다. 나는 약 15년 전에 이러한 유형의 파일 시스템을 소개한 것에 대해 ZFS를 인정하지만 Btrfs는 완전한 오픈 소스이며 특허의 제약이 없습니다.
이 파일 시스템을 탐색하려면 가상 머신이나 예비 시스템으로 시작하는 것이 좋습니다.
GUI 세계에서 작업하기를 원하는 시스템 관리자를 위해 제작된 일부 그래픽 관리 유틸리티를 보고 싶습니다. 다행스럽게도 Btrfs는 Workstation 33에서 기본으로 설정하기로 한 Fedora 프로젝트의 결정에서 알 수 있듯이 강력한 개발 활동을 하고 있습니다.
