运行 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