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


17

运行OpenSuse 12.2。

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

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

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

该怎么办?


1
您是否启用了快照?
MadHatter

您是否检查了文件是否还在运行任何进程?(使用lsof检查),如果是,请停止该过程,然后尝试再次删除该文件。
chocripple

Answers:


20

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

btrfs Wiki上的一项建议是破坏文件而不是删除文件。

#instead of this
rm -f ./some_file

# do this
true >| ./some_file

这将删除文件的内容,而无需更改目录条目。一旦走出角落,就可以像平常一样删除文件了。如果那给您带来麻烦,则可能需要使用该nodatacow选项临时重新安装,该选项会关闭“写时复制”行为。但是...不确定是否会有所帮助。

通常,尽管如此:不要空运行BTRFS文件系统。它仍然是预生产软件,而且情况有些复杂。


2
对于CIF安装的网络驱动器,该技巧也很好用,谢谢!
markusN

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


0

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


0

就我而言,在Linux上使用ZFS文件系统时,我什至无法截断文件。销毁旧快照可以解决问题(如果存在)。

zfs destroy /path/of/snapshot

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.