BTRFS上的“rm:can not remove xxx:No Space left on device”

运行OpenSuse 12.2。

突然间隔根本似乎是满的(99%),但我不能再手动删除文件。

“rm:不能删除xxx:设备上没有剩余空间”,尽pipe450mb仍然是免费的。 文件系统是BTRFS。

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

该怎么办?

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

关于btrfs维基的一个build议是摧毁文件而不是删除文件。

#instead of this rm -f ./some_file # do this true >| ./some_file 

这将删除文件的内容而不更改目录条目。 一旦你走出了你所处的angular落,你可以像正常一样删除文件。 如果这给您带来麻烦,您可能需要暂时重新安装nodatacow选项,这会closures写入时复制行为。 但是…不确定,如果这将有所帮助。

一般来说,尽pipe:不要运行干燥的BTRFS文件系统。 这仍然是预生产软件,angular落的情况有点粗糙。

我遇到了同样的错误信息,但在我的情况下,文件系统没有被报告为已满:

 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 

甚至覆盖任何文件(如tylerlbuild议)是不可能的。 我的解决scheme可以在http://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html中find,它build议使用btrfs balance start -dusage=55 /path/to/filesystem来手动重新平衡文件系统btrfs balance start -dusage=55 /path/to/filesystem