当前位置: 首页>>网站问题>>正文


在Linux上,追踪磁盘空间已经消失的地方?

webfans 网站问题 , , , , 去评论

问题描述

在管理Linux系统时,我经常发现自己在分区满员后很难找到罪魁祸首。我通常使用du / | sort -nr,但在大型文件系统上,这需要很长时间才能返回任何结果。

此外,这通常是成功突出最严重的罪犯,但我经常发现自己在没有sort的情况下使用du在更微妙的情况下然后不得不拖网输出。

我更喜欢一个依赖于标准Linux命令的命令行解决方案,因为我必须管理相当多的系统并且安装新软件很麻烦(特别是当磁盘空间不足时!)

最佳解决思路

试试ncdu,一款优秀的命令行磁盘使用分析仪:

次佳解决思路

不要直接去du /。使用df查找损害您的分区,然后尝试du命令。

我喜欢尝试的是

# U.S.
du -h <dir> | grep '[0-9\.]\+G'
# Others
du -h <dir> | grep '[0-9\,]\+G'

因为它以“人类可读的形式”打印尺寸。除非你有非常小的分区,否则为数据库中的目录进行grepping是一个非常好的过滤器,可以满足您的需求。这将花费你一些时间,但除非你设置配额,我认为这就是它的方式。

正如@jchavannes在评论中指出的那样,如果你发现了太多的误报,那么这个表达可以更精确。我收集了建议,这确实使它更好,但仍然存在误报,因此只有权衡(更简单的expr,更糟糕的结果;更复杂和更长的expr,更好的结果)。如果输出中显示的目录太多,请相应地调整正则表达式。例如,

grep '^\s*[0-9\.]\+G'

更准确(不会列出<1GB目录)。

如果你有配额,你可以使用

quota -v

找到占用磁盘的用户。

第三种解决思路

GNU du和BSD du都可以是depth-restricted(但POSIX du不能!):

  • GNU(Linux,…):

    du --max-depth 3
    
  • BSD(macOS,…):

    du -d 3
    

这会将输出显示限制为深度3.当然,计算和显示的尺寸仍然是完整深度的总和。但尽管如此,限制显示深度会大大加快计算速度。

对于“human-readable”输出(即使用KiB,MiB etc.),另一个有用的选择是-h(GNU和BSD上的字,但是再次,不是在POSIX-only du上)。

第四种思路

您还可以使用du运行以下命令:

~# du -Pshx /* 2>/dev/null
  • -s选项汇总并显示每个参数的总计。

  • h打印Mio,Gio等

  • x =保留在一个文件系统中(非常有用)。

  • P =不遵循符号链接(例如,可能导致文件被计数两次)。

小心,/root目录不会显示,你必须运行~# du -Pshx /root 2>/dev/null才能得到它(曾经,我挣扎了许多没有指出我的/root目录已经满了)。

编辑:更正选项-P

第五种思路

查找文件系统中最大的文件总是需要很长时间。根据定义,您必须遍历整个文件系统以查找大文件。唯一的解决方案可能是在所有系统上运行cron作业,以提前准备好文件。

另外一点,du的x选项对于保持du跟随挂载点到其他文件系统非常有用。即:

du -x [path]

我经常运行的完整命令是:

sudo du -xm / | sort -rn > usage.txt

-m表示以兆字节为单位返回结果,sort -rn将首先对结果进行排序。然后,您可以在编辑器中打开usage.txt,最大的文件夹(以/开头)将位于顶部。

第六种思路

我总是使用du -sm * | sort -n,它以mebibytes为您提供当前工作目录的子目录耗尽量的排序列表。

您还可以尝试Konqueror,它具有”size view”模式,类似于WinDirStat在Windows上的作用:它为您提供了一个表示哪些文件/目录占用了大部分空间的虚拟表示。

更新:在更新版本上,您还可以使用du -sh * | sort -h,它将显示human-readable文件大小并按其排序。 (数字将以K,M,G,……为后缀)

对于寻找替代KDE3的Konqueror文件大小视图的人来说,可能会看一下filelight,虽然它不是很好。

第七种思路

我将它用于当前目录下的前25名最严重的违规者

# -S to not include subdir size, sorted and limited to top 25
du -S . | sort -nr | head -25

第八种思路

在以前的公司,我们曾经有一个在一夜之间运行的cron作业,并且识别出一定大小的任何文件,例如:

找/-size + 10000k

您可能希望对要搜索的目录更具选择性,并注意可能脱机的任何远程安装的驱动器。

第九种思路

一种选择是将du /sort命令作为cron作业运行,并输出到文件,因此当您需要它时它已经存在。

第十种思路

对于命令行,我认为du /sort方法是最好的。如果您不在服务器上,则应该查看Baobab – Disk usage analyzer。这个程序也需要一些时间来运行,但你可以很容易地在所有旧的Linux ISO所在的深层,深层找到子目录。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/3041.html,转载请务必附带本地址声明。