BtrFS 스냅샷에서 파일을 삭제하면 어떻게 되나요?

BtrFS 스냅샷에서 파일을 삭제하면 어떻게 되나요?

BtrFS로 일찍 시작된 openSUSE 컴퓨터가 있습니다(예: Leap 42.2). 과거 어느 순간 /tmp 하위 볼륨이 가득 차서(하나의 큰 파일) 재부팅할 때까지 공간을 복구할 수 없었습니다( rm를 트리거했습니다 No space left on device). 그런 다음 적어도 1년 동안은 모든 것이 괜찮아 보였습니다.

하지만 최근(그동안 Leap 15.1에서) BtrFS가 다시 가득 차서 어떻게 해야 할지 궁금했습니다. 다음과 같은 스냅샷이 많이 있었습니다.

# ls -l /.snapshots/
total 4
drwxr-xr-x 1 root root  32 Dec 18  2015 1
drwxr-xr-x 1 root root  32 May 14 09:45 1820
drwxr-xr-x 1 root root  66 May 14 09:46 1821

...

drwxr-xr-x 1 root root  32 Aug  8 08:08 1926
drwxr-xr-x 1 root root  38 Aug  8 08:09 1927
drwxr-xr-x 1 root root  38 Aug  8 08:12 1928

모든 블록 체크섬을 성공적으로 확인한 후(문제 없음) 여유 공간이 나타나기를 바라며 "균형"을 시작했습니다. 하지만 밸런스가 끝나지 않는 것 같아서 중단하려고 했습니다. 균형이 취소될 때까지 최소 15분을 기다린 후 컴퓨터를 재부팅하여 다른 작업을 시도했습니다. 그 당시 파일 시스템은 99% 찼습니다.

1를 사용하여 가장 오래된 스냅샷( ) 을 정리하려고 생각했습니다 rm -rf /.snapshots/1. 불행하게도 작업을 마친 후 필수 프로그램이 /usr사라지고 시스템을 부팅할 수 없게 되었습니다!

그래서 제 질문은 이렇습니다. 예상된 동작인가요, 아니면 제가 뭔가 잘못한 것인가요? 내가 뭔가 잘못한 경우 오래된 스냅샷을 제거하는 올바른 절차는 무엇입니까?

답변1

제거 후 나타나는 문제는 /.snapshots/1BtrFS 자체의 기능이 아니라 SUSE Linux의 (잘못된) 기능인 것 같습니다.

루트 파일 시스템이 무엇인지는 기억나지 않지만 비슷한 SLES 15.0 시스템에서는 1어떤 이유로든 스냅샷이 루트 파일 시스템으로 마운트된 것을 발견했습니다.

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=16329060k,nr_inodes=4082265,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,size=24506344k)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
#...
/dev/sda2 on / type btrfs (rw,relatime,space_cache,subvolid=267,subvol=/@/.snapshots/1/snapshot)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=38,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=14427)
#...
/dev/sda2 on /.snapshots type btrfs (rw,relatime,space_cache,subvolid=266,subvol=/@/.snapshots)
/dev/sda2 on /opt type btrfs (rw,relatime,space_cache,subvolid=263,subvol=/@/opt)
/dev/sda2 on /usr/local type btrfs (rw,relatime,space_cache,subvolid=259,subvol=/@/usr/local)
/dev/sda2 on /var type btrfs (rw,relatime,space_cache,subvolid=258,subvol=/@/var)
#...
/dev/sda2 on /root type btrfs (rw,relatime,space_cache,subvolid=262,subvol=/@/root)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=3267512k,mode=700)

그래서 subvol=/@/.snapshots/1/snapshot)근본 원인인 것 같습니다.

관련 정보