BTRFS 上出现“rm:无法删除 xxx:设备上没有剩余空间”

BTRFS 上出现“rm:无法删除 xxx:设备上没有剩余空间”

运行 OpenSuse 12.2。

突然,根分区似乎已满(99%),但我无法再手动删除文件。

“rm:无法删除 xxx:设备上没有剩余空间”,尽管根据 df 的说法仍有 450mb 可用。文件系统是 BTRFS。

我尝试使用 btrfsck 检查 FS,但没有帮助。

该怎么办?

答案1

最有可能的是,您遇到了一个问题,即 BTRFS 必须分配一些元数据才能删除文件。BTRFS 的弱点之一是它对空间不足情况的处理;改进这方面的行为是该项目的优先事项之一。

btrfs wiki 上的一个建议是破坏该文件而不是删除它。

#instead of this
rm -f ./some_file

# do this
true >| ./some_file

这将删除文件的内容而不更改目录条目。一旦你走出困境,你就可以像平常一样删除文件。如果这给你带来麻烦,你可能想要暂时重新安装该nodatacow选项,关闭写时复制行为。但是……不确定这是否有帮助。

但总的来说:不要让 BTRFS 文件系统空转。它仍然是预生产软件,极端情况有些粗糙。

答案2

我遇到了同样的错误消息,但就我而言,文件系统并未报告为已满:

user@host:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       2.8G  2.0G  618M  77% /

但询问BTRFS却发现它确实已满:

user@host:/# btrfs fi show
Label: none  uuid: {UUID redacted because reasons}
        Total devices 1 FS bytes used 1.92GiB
        devid    1 size 2.79GiB used 2.79GiB path /dev/sda3

甚至覆盖任何文件(如 tylerl 建议的那样)都是不可能的。我的解决方案是在http://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html建议使用 运行文件系统的手动重新平衡btrfs balance start -dusage=55 /path/to/filesystem

答案3

对我来说,使用 ZFS,我发现删除其他文件可以在 ZFS 分区上释放足够的空间,然后我就可以删除相关文件。

答案4

就我而言,使用 Linux 上的 ZFS 文件系统,我甚至无法截断文件。销毁旧快照(如果有)就可以了。

zfs destroy /path/of/snapshot

相关内容