无法写入磁盘但磁盘未满

fel*_*the 36 filesystems hard-drive diskmanagement

我使用的是 Ubuntu 12.04,无法写入任何文件,即使是 root,也无法执行任何其他需要写入的操作。任何需要写入的进程都不能,所以它们都失败了。df说我有足够的空间:

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       30G   14G   15G  48% /
udev            984M  4.0K  984M   1% /dev
tmpfs           399M  668K  399M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            997M     0  997M   0% /run/shm
Run Code Online (Sandbox Code Playgroud)

我发现的所有“无法写入磁盘”的结果都与合法完整的磁盘有关。我什至不知道从哪里开始。今天早上突然出现了这个问题。

PHP 的最后一个日志条目是:

失败:设备上没有剩余空间 (28)

Vim 说:

无法打开(文件)进行写入

其他应用程序会出现类似的错误。

删除 ~1gb 后只是为了确定,问题仍然存在。我也重启了。

df -i

Filesystem      Inodes   IUsed  IFree IUse% Mounted on
/dev/xvda1     1966080 1966080      0  100% /
udev            251890     378 251512    1% /dev
tmpfs           255153     296 254857    1% /run
none            255153       4 255149    1% /run/lock
none            255153       1 255152    1% /run/shm
Run Code Online (Sandbox Code Playgroud)

EEA*_*EAA 58

你的 inode 用完了。很可能您在某处有一个目录,其中包含许多非常小的文件。

  • 只是想补充一点,我什至不知道 `rm` _could_ 失败。这是一种教育。 (9认同)
  • @CarstenS:或者`find 。-name sess\* -delete` 我觉得它更容易记住,而且通常更有效。 (8认同)
  • @felwithe 其他人的建议。`rm` * 可能* 工作正常,但是 shell 将 `*` glob 扩展到太多的数据中,并且在它到达 * 调用 * rm 之前就开始呕吐。 (3认同)
  • @felwithe,我可以想象到 `find 。-name sess\* -exec rm {} +` 会起作用。 (2认同)
  • @Kaslai 限制不是 RAM,而是系统限制 ARG_MAX。不幸的是,POSIX 标准没有准确指定如何针对 ARG_MAX 测量命令行参数。一些实现没有限制,所以不定义 ARG_MAX,但这不是一个流行的选项,因为它会使太多程序无法编译。 (2认同)

Eri*_*ers 7

显然,OP 对他们的特定问题有一个答案。但是,为了完整起见,如果文件系统以只读方式重新挂载,也会出现 OP 的症状。这发生在我使用 Linux VM 时,该 VM 的存储位于集群磁盘系统上,遇到罕见的间歇性故障。有时,故障会导致文件系统以只读方式重新挂载。最终可观察到的外部症状是随着 RAM 填满(不可刷新的磁盘写入),各种服务变得无响应。

当时,唯一的解决办法是重新启动系统(丢失所有未写入的日志)。重新挂载 RW 的尝试失败。(不幸的是,我不记得尝试这些重新安装时返回的错误消息。)

所以,...,不是 OP 的问题,而是到达此页面的其他人可能会从这些信息中受益。

  • 实际上没有;当文件系统被重新挂载为只读时,您会收到一个错误,指出文件系统是只读的,而不是空间不足。 (5认同)
  • @psusi:我看到您生活在幻想世界中,在那里程序员总是做正确的事情,而不是自己编造错误消息。我好像不住在那里。 (4认同)