AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 911865
Accepted
Karl Morrison
Karl Morrison
Asked: 2017-05-05 07:21:44 +0800 CST2017-05-05 07:21:44 +0800 CST 2017-05-05 07:21:44 +0800 CST

没有更多的磁盘空间:如何找到占用空间的内容?

  • 772

我在其中一台运行 16.04 的服务器上遇到了问题:没有剩余磁盘空间。

我不知道是什么占用了空间。是否有列出当前目录大小的命令,以便我可以遍历并最终进入占用所有空间的目录?

disk-usage
  • 13 13 个回答
  • 226407 Views

13 个回答

  • Voted
  1. Best Answer
    TopHat
    2017-05-05T07:36:51+08:002017-05-05T07:36:51+08:00

    与 Linux 中的往常一样,完成工作的方法不止一种。但是,如果您需要从 CLI 执行此操作,这是我的首选方法:

    我首先以 root 或 sudo 运行它:

    du -cha --max-depth=1 / | grep -E "M|G"
    

    grep 将返回行限制为返回值在兆字节或千兆字节范围内的行。如果您的磁盘足够大,您也可以添加|T包括太字节的数量。/proc您可能会在、/sys和/或上遇到一些错误,/dev因为它们不是磁盘上的真实文件。但是,它仍应为 root 中的其余目录提供有效输出。在找到最大的那些之后,您可以在该目录中运行命令以缩小罪魁祸首。因此,例如,如果/var是最大的,您接下来可以这样做:

    du -cha --max-depth=1 /var | grep -E "M|G"
    

    那应该把你引向问题儿童!

    其他注意事项

    虽然上面的命令肯定可以解决问题,但我在下面的评论中提出了一些建设性的批评,指出了一些你也可以包括在内的东西。

    1. 如果目录或文件的名称具有大写字母 G 或 M ,grep则 I 提供的可能会导致偶尔返回“K”值。如果您绝对不希望显示任何 K 值目录,则您需要向上您的正则表达式游戏更具创造性和复杂性。例如grep -E "^[0-9\.]*[MG]"
    2. 如果您知道哪个驱动器是问题所在,并且它上面还有其他安装的驱动器,您不想浪费时间包括在搜索中,您可以将-x标志添加到您的du命令中。该标志的手册页描述:

        -x, --one-file-system
            skip directories on different file systems
      
    3. 您可以对命令的输出进行排序,du使最大值位于底部。只需将其附加到命令的末尾:| sort -h

    • 191
  2. Duncan
    2017-05-05T07:28:38+08:002017-05-05T07:28:38+08:00

    你可以用ncdu这个。它工作得很好。

    sudo apt install ncdu
    

    在此处输入图像描述

    • 129
  3. Charles Green
    2017-05-05T07:25:29+08:002017-05-05T07:25:29+08:00

    我使用这个命令:

    sudo du -aBM -d 1 . | sort -nr | head -20
    

    有时,我需要从/目录中运行它,因为我在一个奇怪的位置放置了一些东西。

    • 22
  4. Luca Citi
    2017-05-05T12:21:18+08:002017-05-05T12:21:18+08:00

    关于查找哪些目录占用大部分空间的方法,已经有很多很好的答案。如果您有理由相信一些大文件是主要问题,而不是许多小文件,您可以使用以下内容:

    find / -size +10M
    
    • 15
  5. Gabriel
    2017-05-06T13:32:14+08:002017-05-06T13:32:14+08:00

    如果您也对不使用命令感兴趣,这里有一个应用程序:Filelight

    它使您可以快速可视化任何文件夹中正在使用的磁盘空间。

    在此处输入图像描述

    • 15
  6. miracle173
    2017-05-05T23:12:37+08:002017-05-05T23:12:37+08:00

    我不了解 Ubuntu,也无法检查我的答案,但根据我很久以前作为 unix 管理员的经验在此处发布我的答案。

    1. 找出哪个文件系统空间不足

      df -h
      

      将列出所有文件系统、它们的大小和可用空间。如果您调查有足够空间的文件系统,您只会浪费时间。假设完整的文件系统是 /myfilesystem。如果 /myfilesystems 的子目录上挂载了文件系统,请检查 df 输出。如果是这样,则必须对以下 speps 进行调整以适应这种情况。

    2. 找出这个文件系统的文件使用了多少空间

      du -sh /myfilesystem
      

      -x 选项可用于保证仅考虑属于此文件系统成员的文件。某些 Unix 变体(例如 Solaris)不知道 du 的 -x 选项。然后你必须使用一些变通方法来找到你的文件系统的 du。

    3. 现在检查可见文件的 du 是否大约是 df 显示的已用空间的大小。如果是这样,您可以开始查找 /myfilesystem 文件系统的大文件/目录进行清理。

    4. 查找目录的最大子目录 /.../dir 使用

      du -sk /.../dir/*|sort -n
      

      -k 选项强制 du 以千字节为单位输出 sie,不带任何单位。这可能是某些系统的默认设置。然后你可以省略这个选项。最大的文件/子目录将显示在输出的底部。

    5. 如果您发现不再需要的大文件/目录,您可以通过适当的方式将其删除。不要担心输出顶部的小目录。如果您删除它们,它不会解决您的问题。如果您仍然没有足够的空间,您可以在列表底部显示的 larges 子目录中重复步骤 4。

    但是,如果 du 输出不是 df 显示的大约可用空间,会发生什么?

    如果 du 输出较大,则您错过了安装另一个文件系统的子目录。如果 du 输出小得多,则 som 文件不会显示在 du 检查的任何目录中。他的现象可能有不同的原因。

    1. 某些进程正在使用已删除的文件。因此,这些文件已从目录中删除,du 看不到它们。但是对于文件系统,它们的块仍在使用中,直到进程关闭文件。您可以尝试找出相关进程(例如使用 lsof)并强制它们关闭此文件(例如通过停止应用程序或终止进程)。或者您只需重新启动机器。

    2. 目录中的文件不再可见,因为在其父目录之一上安装了另一个文件系统。因此,如果您有一个文件 /myfilesysem/subdir/bigfile 并且现在在 /myfilesystem/subdir 上挂载另一个文件系统,那么您将无法再看到该文件并且

      du -shx /myfilesystem 
      

      将报告一个不包含 /myfilesystem/subdir/bigfile 大小的值。找出此类文件是否存在的唯一方法是卸载 /myfilesystem/subir 并检查

      ls -la /myfilesystem/subdir 
      

      如果它包含文件。

    3. 可能有特殊类型的文件系统使用/保留磁盘上对 ls 命令不可见的空间。你需要特殊的工具来显示它。

    除了这种使用 du 命令的系统方法之外,您还可以使用其他一些方法。因此,您可以使用 find 命令查找大于您提供的某个值的文件,您可以搜索大于您提供的某个值或新创建或具有特殊名称的文件(例如 *.log、core、* .trc)。但是你总是应该按照 1 中的描述做一个 df 以便你在正确的文件系统上工作

    • 13
  7. phuclv
    2017-05-05T19:05:34+08:002017-05-05T19:05:34+08:00

    我经常用这个

    du -sh /*/
    

    然后,如果我找到一些大文件夹,我会切换到它并做进一步调查

    cd big_dir
    du -sh */
    

    如果需要,您还可以使用

    du -s /*/ | sort -n
    
    • 4
  8. Donald Shahini
    2017-05-06T04:36:50+08:002017-05-06T04:36:50+08:00

    sudo apt-get autoremove如果您还没有这样做,请尝试删除未使用的文件

    • 4
  9. Criggie
    2017-05-05T21:11:41+08:002017-05-05T21:11:41+08:00

    不是真正的答案-而是附录。

    您空间有限,无法从@erman 的回答中安装 ncdu。

    一些建议

    • sudo apt clean all删除您已经下载的软件包。安全的
    • sudo rm -f /var/log/*gz清除一两周前的日志文件 - 不会删除较新/当前的日志。最安全
    • sudo lsof | grep deleted列出所有打开的文件,但过滤到已从磁盘中删除的文件。相当安全
    • sudo rm /tmp/*删除一些临时文件——如果有东西在使用它们,你可能会扰乱进程。不那么安全

    `lsof one 可能会返回如下行:

    server456 ~ $ lsof | grep deleted
    init          1          root    9r      REG              253,0  10406312       3104 /var/lib/sss/mc/initgro                        ups (deleted)
    salt-mini  4532          root    0r      REG              253,0        17     393614 /tmp/sh-thd-1492991421                         (deleted)
    

    不能为 init 行做太多,但第二行表明 salt-minion 有一个打开的文件被删除,一旦服务重启关闭所有文件句柄,将返回磁盘块。

    这里的其他常见嫌疑人包括 syslog / rsyslog / syslog-ng、squid、apache 或您的服务器运行的任何“重”进程。

    • 2
  10. Matteo Italia
    2017-05-07T08:57:53+08:002017-05-07T08:57:53+08:00

    我发现像 Filelight 这样的工具的输出特别有价值,但是,在您的情况下,在服务器上通常没有安装 GUI,但该du命令始终可用。

    我通常做的是:

    • 将du输出写入文件 ( du / > du_output.txt);
    • 将文件复制到我的机器上;
    • 用于DuFS将输出“挂载”到du临时目录中;DuFS根据输出使用 FUSE 创建一个虚拟文件系统(= 没有实际创建文件,都是假的)du;
    • 在这个临时目录上运行 Filelight 或其他 GUI 工具。

    免责声明:我写了dufs- 正是因为我经常需要找出无头机器上占用磁盘空间的原因。

    • 2

相关问题

  • 为什么 /var/lib/mlocate.db 几乎是 800 MB?

  • 除了文件系统之外,是什么在我的磁盘上占用了这么多空间?

  • 相当于 KdirStat 的 Gnome

  • 我可以将低磁盘空间警告配置为较小的阈值吗?

  • 如何找出剩余的磁盘空间?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve