【问题标题】:Linux du command without traversing mounted file systems [closed]Linux du命令不遍历已挂载的文件系统[关闭]
【发布时间】:2016-05-17 22:06:51
【问题描述】:

如果问题的措辞有误,请告诉我。这或许可以解释为什么我找不到答案。

我想使用如下命令在我的主磁盘上查找使用情况:

du -sh /*

问题是我在根级别有许多挂载点,我希望du 跳过这些。

我认为 -x 选项应该这样做,但要么我误解了它的作用,要么我以错误的方式使用它。

如何将du 仅应用于根磁盘而不遍历额外的挂载?

谢谢

【问题讨论】:

  • 也就是说,您是否正在查找/bin/etc/ 下的其他文件夹的摘要使用情况,但不包括/run/proc//sys 和等等?
  • 我还在/data/backup等处安装了额外的驱动器,但这基本上是正确的。
  • 我认为您正确使用了du,问题是/* 正在扩展到包括/ 下的每个挂载点,然后du 遍历每个挂载点,这击败了@ 987654337@ 用法。解决此问题的唯一方法可能是使用创意脚本。
  • @jamieguinan 用/ 替换/* 会有什么问题?为什么这不能解决它,而是需要一个创意脚本?
  • @DuncanXSimpson / 只会显示/ 的总和。他想查看未安装文件夹的小计。

标签: linux du mount-point


【解决方案1】:

du -x 不会遍历它遇到的任何挂载点。但如果它被告知在挂载点开始,那么它会按要求进行。

【讨论】:

  • 要在此基础上构建,如果您在根目录中安装了一个卷,du -shx /* 将扫描该卷,因为您正在启动已安装的卷。
【解决方案2】:

这是 hacky,但它似乎可以从 shell 做你想做的事,

for d in /*; do egrep " ${d} " /proc/mounts > /dev/null || du -sh ${d}; done

如果需要,请在 du 前面添加 sudo

【讨论】:

  • 对不起,我花了这么长时间才接受这个。我认为,您上面的评论解释了 为什么 -x 不起作用,您的回答是一个解决方案。在我自己的使用中,我做了如下修改:for i in /*; do if ! mountpoint -q "$i"; then du -sh $i; fi; done;。谢谢
  • 你可以避免for循环:du -d1 -x表示从当前目录开始,向下到1的深度(所以,单级子目录),也可以跳过不同文件系统上的目录。我的 rootfs 是一个 ssd,但也安装了一个 zfs raid,我想快速检查一下什么占用了 ssd 上的空间,而不会在硬盘上浪费时间;这行得通。
  • -s-d1 冲突,原来的问题是什么
猜你喜欢
  • 1970-01-01
  • 2016-07-15
  • 2019-07-22
  • 2015-12-25
  • 2013-12-24
  • 2011-03-16
  • 2017-10-01
  • 2010-11-11
  • 1970-01-01
相关资源
最近更新 更多