我有一台 openSUSE 计算机,它很早就开始使用 BtrFS(比如 Leap 42.2)。在过去的某个时刻,/tmp 子卷已满(一个大文件),我无法恢复空间,直到重新启动(rm
触发了一个No space left on device
)。然后一切看起来都很好至少一年。
但是最近(同时在 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
消失了,我的系统变得无法启动!
所以我的问题是:这是预期的行为,还是我做错了什么?如果我做错了什么,删除旧快照的正确步骤是什么?
似乎删除后出现的问题
/.snapshots/1
与其说是 BtrFS 本身的一个功能,不如说是 SUSE Linux 的一个(错误?)功能:我不记得根文件系统是什么,但在可比较的 SLES 15.0 系统上,我注意到快照
1
被挂载为根文件系统(无论出于何种原因):所以
subvol=/@/.snapshots/1/snapshot)
似乎是根本原因。