우분투를 Btrfs로 설치하고 서브볼륨 설정
우분투는 Btrfs를 기본으로 지원하지 않아서, Btrfs로 설치하면 서브볼륨을 자동으로 생성하지 않습니다. 페도라는 Btrfs가 기본이고, KDE neon은 Btrfs로 설치하면 root와 home에 서브볼륨을 자동으로 생성합니다. 그래서 설치 후에 별도로 /(루트)에 서브볼륨을 설정해야 합니다.
간단하게 요약하면, 직접 파티션을 구성해서 우분투를 설치한 후 재부팅하지 않고 서브볼륨을 생성하고 마운트 지점을 변경합니다. 이후 GRUB 설정을 변경하고, 기존 시스템 파일을 제거하면 됩니다. 이렇게 구서하면, timeshift에서 Btrfs 스냅샷을 생성할 수 있습니다.
1. 설치 환경
저는 2개의 SSD에 우분투를 설치합니다. 1개(/dev/nvme1n1)는 /boot/efi와 /boot, /(root)를 설치하고, 나머지(/dev/nvme0n1)은 /home을 설치합니다. 저는 이 중에 /(root)만 Btrfs로 설치하고, /home은 Ext4로 설치했습니다.
- nvme1n1
- /boot/efi - fat32
- /boot - Ext4
- / - Btrfs
- nvme0n1
- /home - Ext4
/boot파티션을 별도로 설치해야 하는 이유일반적인 우분투 설치는
/boot파티션을 별도로 설치하지 않습니다. 하지만, 리눅스를 Btrfs로 설치할 경우/boot파티션을 Ext4 포맷으로 별도로 설치해야 합니다. 그렇지 않으면 부팅이 제대로 이루어지지 않습니다. 대표적인 문제로 GRUB 메뉴가 무조건 실행됩니다. 그리고 부팅시 USB-C 허브를 못 잡아서 매번 재연결해야 합니다.
2. 설치 과정
1) Ubuntu 설치
라이브 USB로 우분투를 설치합니다. 저는 위 처럼 파티션을 적용해서 설치했습니다. 설치 후에는 reboot을 하지 않습니다. 저는 서브볼륨을 생성하기 전에 우분투를 실행하기 싫어서 이렇게 진행했습니다. 우분투로 부팅 후 진행해도 상관 없습니다. 라이브 USB로 부팅한 우분투에서 작업합니다.
2) BTRFS 서브볼륨 생성
- 우선 /(root) 파티션을 마운트합니다.
nvme1n1p3는 사용자에 따라 다릅니다.
sudo mount /dev/nme1n1p3 /mnt- Btrfs 서브볼륨을 생성합니다.
snapshot으로 생성하겠습니다.
sudo btrfs subvolume snapshot /mnt /mnt/@3) /etc/fstab 마운트 수정
/etc/fstab 마운트를 수정합니다. 루트 부분에 subvol=@만 추가하면 됩니다. 저의 경우 아래처럼 수정했습니다.
... / btrfs defaults 0 1
... / btrfs subvol=@,defaults 0 1
4) GRUB 수정
이제 재부팅을 합니다. /boot가 Ext4라면 GRUB 메뉴가 안 뜨지만, Btrfs로 설치한 우분투는 재부팅시 무조건 GRUB에서 30초 대기합니다. 저랑 같은 방법으로 설치하셨다면, 시스템 우분투로 부팅 후, /etc/default/grub을 아래처럼 수정합니다.
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=10
GRUB_TIMEOUT_STYLE=hidden은 menu로 GRUB_TIMEOUT=0은 10으로 수정합니다. 그리고 아래 명령어를 실행합니다.
sudo update-grub
재부팅하면, GRUB 메뉴가 뜹니다. 이제 GRUB에서 e를 눌러서 메뉴를 수정합니다.
Btrfs 우분투가 GRUB에서 30초 대기하는 이유
/boot/grub/grub.cfg를 보면GRUB lacks write support for btrfs문구가 있습니다. 만약/boot를 파티션을 Ext4로 별도로 분리하지 않은 경우에는 후에도 recordfail 옵션 때문에 GRUB 메뉴가 매번 표시됩니다. 이 경우 부팅시 GRUB을 패스하도록 하려면,GRUB_RECORDFAIL_TIMEOUT등의 옵션을 추가해야 합니다.만약,
/boot를 별도 파티션으로 분리하지 않은 경우 linux와 initrd 경로에 @를 추가합니다.
“linux”로 시작하는 문장에 “rootflags=subvol=@“를 추가합니다.
linux ... ro rootflags=subvol=@ quiet splash $vt_handoff
위처럼 수정 후 F10을 눌러서 부팅합니다. 그러면, subvolume(@)으로 부팅됩니다.
5) GRUB 업데이트 및 재설치
부팅 후에는 이후로도 서브볼륨으로 부팅되도록, GRUB을 업데이트하고 재설치합니다. efi 부팅이 아닌 경우 sudo grub-install --efi-directory=/boot/efi 대신 sudo grub-install /dev/sda를 입력하라고 합니다.
sudo update-grub
sudo grub-install --efi-directory=/boot/efi
reboot3. 기존 파일 시스템 정리
위 과정을 거치면, /@(서브볼륨)을 사용합니다. 그래서 기존 시스템(/)은 필요가 없습니다. 꼭 필요하지는 않지만, 저는 지웠습니다.
1) 루트 마운트
/(루트)를 /mnt에 마운트합니다.
GRUB을 수정하기 전에 삭제하면, GRUB으로 부팅이 안되기 때문에 위 과정을 모두 거친 후에 삭제합니다. 해당 과정은 라이브 USB에서 수행하거나, 시스템 우분투에서 수행해도 상관 없습니다.
sudo mount /dev/nme1n1p3 /mnt
cd /mnt
2) 불필요한 파일 삭제
/mnt로 이동해서 아래 명령어를 수행합니다. @로 시작하는 파일과 폴더를 제외하고 /mnt에 존재하는 모든 파일과 폴더를 삭제합니다. shopt -s extglob는 Bash에서 확장된 글로빙 패턴을 활성화하는 명령어입니다.
shopt -s extglob
sudo rm -rf !(@*)
shopt -u extglob
이미 설치된 시스템에서 수행하고 싶다면, reddit의 다음 글을 참고하세요. 해당 글은 /(루트)와 /home이 하나의 파티션에 설치된 경우 /home을 별도의 subvolume으로 지정하는 방법이 추가되어 있습니다.

