BtrFS スナップショット内のファイルを削除するとどうなりますか?

BtrFS スナップショット内のファイルを削除するとどうなりますか?

私は、初期段階 (Leap 42.2 など) で BtrFS から起動した openSUSE コンピュータを持っています。過去のある時点で、/tmp サブボリュームがいっぱいになり (1 つの大きなファイル)、再起動するまでスペースを回復できませんでした (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)根本的な原因のようです。

関連情報