가상 기계에 설치된 데비안을 ext4에서 btrfs으로 전환했을 때, 필요한 내용을 기록해 둡니다.
Make sub volume
가상 기계에 설치된 데비안 bullseye에서, 하나의 ext4 / 파티션을 btrfs으로 전화하고 @, @home 2개의 서브 파티션으로 나누는 과정입니다.
- sudo su
- lsblk
/dev/vda1 / ext4, /dev/vda2 /boot ext4
- fsck.ext4 -fyv /dev/vda1
- btrfs-convert /dev/vda1
- mount /dev/vda1 /mnt
- btrfs subvolume list /mnt
- cd /mnt
- btrfs subvolume snapshot ./ ./@
- btrfs subvolume create @home
- cp -a home/* @home
- /mnt 아래에 @, @home 및 ext2_saved를 제외한 모든 디렉토리와 파일을 제거
- rm -rf @/home/*
- cd
- umount /mnt
- mount -o subvol=@ /dev/vda1 /mnt
- mount -o subvol=@home /dev/vda1 /mnt/home
- mount /dev/vda2 /mnt/boot
- for fs in proc sys dev dev/pts; do mount --bind /$fs /mnt/$fs; done
- chroot /mnt /bin/bash
- blkid /dev/vda1
- nano /etc/fstab
UUID=..... / btrfs noatime,subvol=@,compress=zstd:1 0 1
UUID=..... /home btrfs noatime,subvol=@home,compress=zstd:1 0 1
- grub-mkconfig -o /boot/grub/grub.cfg
- update-initramfs -u
- grub-install /dev/vda
- update-grub
확인
- cat /boot/grub/grub.cfg
Manage btrfs
파티션 테이블을 봅니다
- lsblk
- df -h | grep vda
/dev/vda1 25G 12G 13G 49% /
/dev/vda1 25G 12G 13G 49% /home
/dev/vda1 511M 4.0K 511M 1% /boot/efi
시스템 전체의 서브 볼륨을 확인합니다:
- sudo btrfs subvolume list /
ID 256 gen 3 top level 5 path ext2_saved
ID 257 gen 517 top level 5 path @
ID 258 gen 518 top level 5 path @home
관련 프로그램을 설치합니다:
- sudo apt install snapper
데비안 패키지에서 받아서 설치했습니다:
- sudo dpkg -i apt-btrfs-snapshot
루트 설정을 만듭니다:
- sudo snapper -c root create-config /
- sudo btrfs subvolume list /
ID 256 gen 3 top level 5 path ext2_saved
ID 257 gen 592 top level 5 path @
ID 258 gen 592 top level 5 path @home
ID 268 gen 592 top level 257 path .snapshots
스냅샷을 별도로 관리하고 싶기 때문에, 서브 볼륨 root 아래에 두지 않고, vda1 바로 아래에 두기를 원합니다. 이전의 서브 볼륨을 지웁니다:
- sudo btrfs subvolume delete /.snapshots
- sudo mkdir /.snapshots
- sudo mkdir /mnt/btrfs
- sudo mount /dev/vda1 /mnt/btrfs
- cd /mnt/btrfs
- ls
@ ext2_saved @home
- sudo btrfs subvolume create @snapshots
- ls
@ ext2_saved @home @snapshots
- cd ..
- sudo umount /mnt/btrfs
- sudo rmdir /mnt/btrfs
- cd
- sudo nano /etc/fstab
UUID=xxx / btrfs subvol=@,compress=zstd:1 0 0
UUID=yyy /boot ext4 defaults 1 2
UUID=xxx /home btrfs subvol=@home,compress=zstd:1 0 0
UUID=xxx /.snapshots btrfs subvol=@snapshots 0 0
- sudo mount -a
확인하기
- mount |grep btrfs
/dev/vda1 on / type btrfs (rw,noatime,compress=zstd:1,space_cache,subvolid=257,subvol=/@)
/dev/vda1 on /home type btrfs (rw,noatime,compress=zstd:1,space_cache,subvolid=258,subvol=/@home)
/dev/vda1 on /.snapshots type btrfs (rw,relatime,compress=zstd:1,space_cache,subvolid=269,subvol=/@snapshots)
서브 볼륨의 기본 볼륨을 root 서브 볼륨으로 바꿉니다:
- sudo btrfs subvolume get-default /
ID 5 (FS_TREE)
- sudo btrfs subvolume set-default 256 /
- sudo btrfs subvolume get-default /
ID 256 gen 3 top level 5 path ext2_saved
그럽에서 rootflags=subvol=@를 제거하고 부팅을 해야 하는데, 이 과정을 해야 롤백이 됩니다.
- sudo apt install grub-customizer
오류가 발생합니다:
- sudo rm /etc/apt/apt.conf.d/80-btrfs-snapshot
- sudo apt install grub-customizer
rootflags=subvol=@를 찾아서 공백으로 바꿔치기 하고 저장합니다. 이미지의 절대 경로에 /@/boot/를 추가해 줍니다.
- sudo update-grub
- reboot
바뀐 내용 확인
- sudo btrfs subvolume get-default /
ID 256 gen 4822 top level 5 path root
부트로더에서 옵션을 제거하고 재부팅 후에, imitram 프롬트트가 올라오고 부팅이 되지 않을 수 있습니다. 부팅을 이어서 하면, 커널 패닉이 발생할 수 있습니다. 커널을 최신 커널로 올리고 테스트해 보십시오!! 5.15.5 커널을 사용했습니다.
Snapper
이제, 스냅샷을 다루는 것에 대해 알아보려고 합니다.
- sudo snapper ls
이제 하나의 프로그램을 설치해 봅니다:
- sudo apt install neofetch
- sudo snapper ls
# | Type | Pre # | Date | User | Cleanup | Description | Userdata
---+--------+-------+---------------------------------+------+---------+-------------+---------
0 | single | | | root | | current |
1 | single | | Mon 29 Nov 2021 01:09:14 AM KST | root | number | boot |
2 | pre | | Mon 29 Nov 2021 01:12:46 AM KST | root | number | apt |
3 | post | 2 | Mon 29 Nov 2021 01:12:48 AM KST | root | number | apt |
- neofetch
실행됩니다.
이제 neofetch가 설치되기 전의 상태로 돌아가 보겠습니다:
- sudo snapper rollback 2
Creating read-only snapshot of current system. (Snapshot 4.)
Creating read-write snapshot of snapshot 2. (Snapshot 5.)
Setting default subvolume to snapshot 5.
위에서 오류가 발생하면 아래와 같이 입력해 보십시오.
- sudo snapper --ambit classic rollback 2
이제 확인을 합니다:
- sudo snapper ls
- reboot
롤백이 되는지 확인하려고 합니다.
리부팅 후에 터미널을 열어서 neofetch를 입력해도 실행되지 않습니다. 정상적으로 롤백이 되었음을 알 수 있습니다:
- sudo snapper ls
이제 neofetch가 설치된 3번으로 롤백해 보겠습니다:
- sudo snapper rollback 3
Creating read-only snapshot of current system. (Snapshot 6.)
Creating read-write snapshot of snapshot 3. (Snapshot 7.)
Setting default subvolume to snapshot 7.
- reboot
리부팅 후에 터미널을 열어서 neofetch를 입력하면 실행됩니다. 정상적으로 롤백이 되었음을 알 수 있습니다:
- sudo snapper ls
필요 없는 스냅샷을 지워 보겠습니다:
- sudo snapper delete 4
- sudo snapper ls
ext2_save remove
- sudo mount /dev/vda5 /mnt -o subvol=/
- sudo btrfs subvolume delete /mnt/ext2_saved/