![btrfs 文件系统已满,但删除文件没有释放空间](https://linux22.com/image/171799/btrfs%20%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E5%B7%B2%E6%BB%A1%EF%BC%8C%E4%BD%86%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E6%B2%A1%E6%9C%89%E9%87%8A%E6%94%BE%E7%A9%BA%E9%97%B4.png)
在我的系统上df -h
报告根文件系统已满(100%
可用0
),并且还btrfs fi usage /
告诉我所有空间都已分配。重新启动后,它甚至无法启动必要的服务,所以我现在处于恢复模式。
我尝试平衡系统,如下所示btrfs 错误:平衡期间出错 - 设备上没有剩余空间。因为btrfs balance start -dusage=27 /
我得到:
Done, had to relocate 0 out of 56 chunks`
因为btrfs balance start -dusage=28 /
我得到:
ERROR: error during balancing '/': No space left on device
因此,我开始删除其中的文件,/var/log/
但即使删除了几个 100 MB 的文件,df -h
报告也没有任何可用的位。
我怀疑,一旦空间空闲,就会有一些服务填补该空间。但由于我处于恢复模式,所以不应该有这么多服务。
我怎样才能知道删除文件后立即填充空间的是什么?
如何确保有可用空间供 btrfs 用来重新平衡?
我的系统是 debian 10.3 (buster),文件系统 btrfs 并且安装了 docker,我怀疑这是问题的一部分,但它没有在恢复模式下运行,所以......
答案1
从历史上看,btrfs 上的一些空间不足的情况需要临时向卷添加额外的磁盘,因为 btrfs 的 COW 性质可能需要一些临时空间来保存块的修改版本,然后才能释放旧版本。不过,据我所知,其中许多情况已由 btrfs 开发人员修复。
对于 btrfs 卷上的紧急磁盘使用情况分析,我想推荐 btdu,这是我编写的一个工具:
https://github.com/CyberShadow/btdu
由于它只需要收集 100 个样本即可获得 1% 的分辨率,因此能够在几秒钟内识别出大型太空猪。