分析磁盘使用情况,忽略挂载点。

Ubuntu抱怨我的根文件系统几乎满了,但是当我使用“Disk Usage Analyser”(也称为baobab)或者du -h时,它会总结所有其他已挂载的文件系统的使用情况。
我该如何排除那些挂载在各种子目录下的其他文件系统呢?
4个回答

猴面包树: 如果你想使用猴面包树,可以通过将根文件系统挂载到另一个位置并进行分析来实现。这样,其他文件系统将不会被挂载到新的根挂载点上,并且任何在/下被挂载隐藏的文件都将被揭示出来并计入你的分析结果。
假设你的根文件系统位于sda1上(df命令可以告诉你它是哪个设备):
mkdir root-rebound
sudo mount /dev/sda1 root-rebound
baobab root-rebound

然后完成后整理一下:
sudo umount root-rebound
rmdir root-rebound

或者,您可以手动卸载这些文件系统。您还可以仅扫描您的主文件夹,因为它很可能包含了过多磁盘空间使用的源头。
du命令有两个选项可以防止计算其他文件系统:
 -x, --one-file-system
         skip directories on different file systems
     --exclude=PATTERN
         exclude files that match PATTERN
因此,
du -hx

忽略所有其他已挂载的文件系统。
du -h --exclude /media

忽略所有位于 /media 目录下的文件,因为大多数文件系统都会挂载在这里。
如果你正在使用 du 命令,可以按照文件大小排序,将最大的文件显示在列表底部,以便更好地解读输出结果。例如:
du -hx | sort -h

2酷,我没看到 -x 选项。我还找到另一种方法:你可以再次挂载文件系统到其他地方,然后使用 du 或者 baobab 来分析它。另外,我发现使用 du -hx | sort -h 很有用,虽然 baobab 更容易理解。 - drevicko
@Cumulos007 - 如果你没意见的话,我会在你的答案上添加我的解决方案和建议,并接受它。 - drevicko
没问题,我可以接受! - user77111
谢谢Ian..你找到任何方法可以像在GUI版本中使用du -x一样使用“排除”吗? - wim
-x选项对你有用吗?我在使用Fedora(我知道,离题了,但请忍耐一下),du -x /似乎会遍历其他已挂载的文件系统。重新挂载根文件系统对我很有效——非常好的提示! - dovetalk
1@wim 不,GUI 版本似乎无法使用 du 的 -x 选项。不过,在其他地方挂载根文件系统是可行的 - 这就是我现在经常这样做的方法 (: - drevicko
在baobab 3.12中,我没有看到任何偏好设置。 - Anwar
1du -kx | sort -n 是我的方式。 - Alejandro Teixeira Muñoz
3你可以使用ncdu -x来代替baobab。 - rubo77

根据文件系统的类型,您可能不被允许将根文件系统挂载到/下的挂载点上。您会得到类似于以下内容的提示:
mount: /dev/sda1 already mounted or /mnt busy
mount: according to mtab, /dev/sda1 is mounted on /

挂载为只读(-o ro)可能会有帮助。如果失败了,可以使用绑定挂载:
mount --bind / /mnt

安装后,使用任何工具来分析磁盘使用情况,例如 du -sh * | sort -h

这个错误报告解释了如何配置baobab以忽略目录。不幸的是,你不能在应用程序内部完成,而必须使用dconf-editor并打开org.gnome.baobab.preferences。在这里,你会找到一个项目excluded-uris;将其更改为['file:///path/to/ignore'](对我来说使用单引号有效)。


这并不真正回答问题,但是它是有用的信息,而且寻找这样信息的人可能会来到这里,所以我点赞(: - drevicko
它回答了如何在baobab中忽略挂载点(通过排除挂载点)而无需重新挂载根分区的问题。问题的另一半(du)已经在被接受的帖子中得到了解答。 - geira

Baobab试图让您对扫描的设备/分区拥有控制权 - 前往“编辑->首选项”。通常,您只想扫描挂载点为“/”的设备。然而,它无法识别所有类型的链接/挂载/绑定,因此如果您的配置不太简单,Baobab可能仍会产生混乱的结果。
对于du命令,下面的shell函数称为dutop,它将显示指定文件夹(或当前文件夹)的顶层目录。通过这个函数,你可以逐个探查子文件夹。
function dutop() { du --max-depth=1 --one-file-system -h $@ |sort -h; }

这可能会报告无关紧要的“权限被拒绝”错误,如果你将其应用于/,但你可以通过类似以下的方式解决这些问题,它会要求你输入密码(如果你最近没有提供过)。
function sudutop() { sudo du --max-depth=1 --one-file-system -h $@ |sort -h; }

对于大型文件夹,可能需要一些时间。由于排序操作正在缓冲所有中间结果,它们不会报告任何增量状态。如果等待时间太长,可以使用Ctrl-C终止操作,这是可以接受的。