web-dev-qa-db-ja.com

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

私はBtrFSで早くから始めたopenSUSEコンピューターを持っています(Leap42.2のように)。過去のある時点で、/ tmpサブボリュームがいっぱいになり(1つの大きなファイル)、再起動するまでスペースを回復できませんでした(rmNo 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
U. Windl

/.snapshots/1を削除した後に見られる問題は、BtrFS自体の機能ではなく、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)が根本的な原因のようです。

1
U. Windl