修复 Linux 中“设备上没有空间”错误的 3 种主要方法


没有明确原因的错误是最令人恼火的问题。尽管 Linux 的错误消息通常都很具体,但这是它为数不多的失误之一。

收到“设备上没有剩余空间”错误并不能解释什么,特别是当您的驱动器远未满时。为什么会出现这个错误信息?为什么尽管磁盘上有足够的空间却无法创建新文件?最重要的是,你如何解决这个问题?

让我们来看看。

您的硬盘实际上有足够的空间吗?

在急于寻找解决方案之前,首先要确保存在问题。毕竟,如果系统上的磁盘空间实际上已用完,则无需惊慌。您只需删除不必要的数据即可释放更多空间。

有两个 Linux 系统命令可用于获取有关磁盘空间的信息 – du 和 df。 du 命令估计磁盘空间使用情况,而 df 命令分析磁盘上存在的可用空间。将它们与 须藤 结合使用,可以准确报告磁盘上实际可用的空间量。

  1. 让我们从 du 命令开始。它的输出可能相当长且麻烦,因此我们将使用 -s 和 -h 标志。 -s 总结结果,而 -h 确保它是人类可读的。因此,输入命令 sudo du -sh /,其中 /指向基本目录。
    1. 不必担心所有权限被拒绝的消息 - 这就是它遍历系统所有子目录的方式。根据驱动器的大小,您可能需要让它运行一段时间,因为它会递归地遍历所有内容。
      1. 当 du 完成扫描时,它将输出一个简单的目录列表及其大小。例如,这是应用于普通目录的 du 命令的输出。
      2. 现在我们将使用 df 来查看有多少可用空间。 df 命令使用起来要简单得多,因为它只显示已安装的文件系统及其使用统计信息。我们将再次使用 -h 标志使输出可读。

        sudo df -h .

        这个想法是计算 du 和 df 命令的结果。任何差异都表明磁盘空间无法免费使用,尽管没有被任何文件或文件夹使用。

        为什么 Linux 显示“设备上没有剩余空间”?

        如果尽管磁盘上有足够的可用空间,但仍看到“设备上没有剩余空间”错误消息,则不是硬件出现问题。找出错误的确切原因可能需要进行一些故障排除。

        • 最近删除的文件:看到此错误的最常见原因是最近删除的文件。通常,当进程仍在使用文件时,文件就会被删除,即使文件已经消失,也会保留保留的空间。
        • 索引节点不足:另一个常见原因是没有足够的索引节点 。索引节点是 Unix 文件系统的索引页,保存存储中每个文件的元数据。但是,索引节点不是无限的,在存储空间之前耗尽索引节点可能会给您带来“设备上没有剩余空间”错误。
        • 硬盘驱动器故障:当然,硬盘驱动器也有可能发生故障,并且大部分明显的可用空间被坏扇区占用。由于系统无法将任何文件写入这些位置,因此会抛出错误。
        • 修复 1:使用已删除的文件重新启动进程

          “设备上没有剩余空间”错误的最可能原因是进程仍在使用已删除的文件。值得庆幸的是,修复这个错误很容易。您只需重新启动进程 即可释放保留的存储空间。

          1. 要查找有问题的进程,您需要使用 lsof 和 grep 命令。 lsof 命令将为您提供正在运行的进程使用的所有打开文件的列表,而 grep 可以将选择范围缩小到已删除的文件。所以输入 sudo lsof / | grep 已删除其中 / 是基目录, | 是用于将 lsof 的输出链接到 grep 的管道。
            1. 现在您可以使用 sudo systemctl restart service_name命令重新启动受影响的进程,其中服务名称是搜索中出现的服务的名称。
            2. .
            3. 如果有多个这样的进程,或者您只是不想费心查找特定服务,则可以使用 sudo systemctl daemon-reload命令重置所有进程。这将重新生成所有依赖项,同时考虑文件系统中的任何更改。
            4. 此后,进程占用的存储空间应该再次可用,允许您写入文件而不会遇到任何错误。

              修复 2:检查索引节点

              虽然每个驱动器都有大量的索引节点,但它是有限的。如果您的系统中散布着数量惊人的文件,则在耗尽驱动器的存储容量之前有可能达到此限制。这就是为什么拥有大文件比拥有太多小文件更好。

              您可以通过在 df 命令中使用 -i 标志来轻松检查 inode 的可用性。像这样:

              sudo df -i

              这将清楚地告诉文件系统中存在的 inode 总数,以及当前使用的数量。如果您的系统上没有剩余空闲 inode,这就是“设备上没有剩余空间”错误的根源。

              由于索引节点仅在首次格式化驱动器时创建,因此无法生成更多索引节点。您所能做的就是删除任何不必要的文件,以释放索引节点以供将来的文件使用。

              修复 3:标记坏块

              数据损坏是任何硬盘都不可避免的命运。虽然新驱动器不会遇到此问题,但旧硬盘会逐渐开始“损坏”。

              这意味着硬盘驱动器的某些部分变得不可用,即使文件系统仍然认为它们有效。这些坏块错误地增加了驱动器上明显的可用空间,而实际上没有文件可以写入其中。这会导致“设备上没有剩余空间”错误,因为操作系统尝试在这些位置存储任何数据但失败。

              没有真正的方法来解决这个问题,因为坏扇区是硬盘物理磨损的结果。您唯一能做的就是标记坏扇区,以便文件系统不再引用它们。.

              执行此操作需要您从 现场CD 启动,因为您无法在正在运行的驱动器中执行文件系统检查。完成此操作后,只需使用以下命令:

              sudo fsck -vcck /dev/sda

              这会将 /dev/sda 替换为您要修复的驱动器的路径。这将自动检测驱动器上的所有坏块并将它们标记为不可用。但是,它不会为您提供任何额外的存储容量,因此请准备好清理一些无用的文件以释放驱动器上的空间。

              修复“设备上没有空间”错误的最佳方法是什么?

              在 Ubuntu 或任何其他 Linux 发行版上看到“设备上没有剩余空间”错误的常见原因是正在运行的进程仍在使用已删除的文件。这会保留文件占用的存储空间,防止其他操作将数据写入该空间。

              解决此问题也是最简单的,因为您所需要做的就是重新启动有问题的进程。然而,导致错误的其他原因并不那么容易解决。

              无论您的驱动器受到坏数据块的困扰还是索引节点耗尽,都没有直接的方法可以解决这些问题。您必须删除现有文件,以便为要写入的新数据腾出空间。

              .

              相关文章:


              30.08.2022