在花了一天时间埋头苦干之后,我希望得到一些帮助。
我在 Fedora 14 上运行 Squid-Proxy。即使我尝试,touch /tmp/foo
也会收到“设备上没有剩余空间”错误。我已经运行了fsck
。如果我删除一个 1MB 的文件,我可以再次存储 1MB 的数据,但不能超过这个数。值得注意的是,我有足够的可用空间:
df
输出:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 16311208 7614872 7867768 50% /
tmpfs 1028548 0 1028548 0% /dev/shm
/dev/sda1 198337 55345 132752 30% /boot
/dev/sdb1 25803036 19407324 5084996 80% /mnt/squid-cache
有人知道我可以尝试什么来“回收”可用空间吗?
答案1
我猜测您用完了 inode 而不是磁盘块 - 也就是说,您对文件系统可以容纳的文件数量有限制,而不是对总数据量有限制。
您可以用来df -i
检查这一点。
答案2
Linux 为超级用户保留了一定比例的块。通常设置为 5%。50% 非常高。您tune2fs -m
可以更改该比例。
答案3
如果您使用 btrfs,则可能会发生这种情况,在这种情况下,这些补救措施将不起作用。
在走了很多错误的路之后,我终于在开始搜索后找到了正确的方向
btrfs 没有
并得到
btrfs 设备上没有剩余空间
作为第一个完成。这导致了BTRFS 问题 wiki。这显然是一个常见的问题。
但即便如此,解决问题也并非易事。我能够通过启动恢复模式、选择安装文件系统,然后降级为 root 来运行正确的实用程序。
维基百科上说运行 btrfs balance,但这并不适用于所有文件系统,最终我找到了自己的方法这里(这也是第二个搜索结果。)
如果你的文件系统真的满了,那么甚至 balance 也不会运行。或者它只会在 -dusage 值较小的情况下运行。
在这种情况下,配方位于帖子的底部。我发现它令人困惑,一开始就拒绝将其作为解决方案,因为发帖人删除了快照,我认为这是必不可少的,而且由于我没有拍摄快照,所以我认为它不适用。但事实确实如此。快照步骤对某些人来说可能很重要,但对我来说并不重要。
总体而言,补救措施如下:
- 创建一个大文件
- 使其成为循环设备
- 将设备连接到无法平衡的 fs
- 运行平衡
- 分离设备
- 删除该文件以恢复该空间
引用的帖子给出了命令行步骤。