问题描述
Ubuntu抱怨我的根文件系统已满,但是当我使用baobab
(又名“磁盘使用分析器”)或du -h
时,它也总结了所有其他已安装文件系统的使用情况。
如何排除安装在各种子目录中的其他文件系统?
最佳解决思路
baobab:如果你想使用猴面包树,可以通过将根文件系统安装在另一个地方并进行分析来实现。这样,其他文件系统将不会安装在新的根安装中,并且/
下安装所隐藏的任何文件都将在您的分析中被发现并计算。
假设你的根文件系统在sda1
上(df
会告诉你它是哪个设备):
> mkdir deleteme-later
> sudo mount /dev/sda1 deleteme-later
> baobab deleteme-later
完成后再收拾整理:
> sudo umount deleteme-later
> rmdir deleteme-later
或者,您可以手动卸载所述文件系统。您也可以只扫描您的主文件夹,因为它很可能包含过多磁盘空间使用的来源。
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
次佳解决思路
根据文件系统的类型,可能不允许在/
下的挂载点上挂载根文件系统。你会得到类似的东西:
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
第三种解决思路
This错误报告解释了如何配置baobab来忽略目录。遗憾的是,您无法在应用程序内部执行此操作,但必须使用dconf-editor
并打开org.gnome.baobab.preferences
。在这里您可以找到商品excluded-uris
;将其更改为['file:///path/to/ignore']
(对我来说使用单引号)。
第四种思路
Baobab试图让您控制您扫描的设备/分区 – 转到Edit->Preferences
。通常,您只想在Mount Point /
上扫描设备。但是,这不能识别all types of links/mounts/bindings,因此如果您有non-trivial配置,最终Baobab可能仍会产生令人困惑的结果。
对于du
,以下名为dutop
的shell函数将显示指定文件夹(或当前文件夹)的top-level。有了这个,您可以一次探测一个sub-folders。
function dutop() { du --max-depth=1 --one-file-system -h $@ |sort -h; }
如果您将其应用于/
,这可能会报告无关紧要的”Permission denied”错误,但您可以通过以下方式解决这些问题,这将询问您的密码(如果您最近没有提供密码)。
function sudutop() { sudo du --max-depth=1 --one-file-system -h $@ |sort -h; }
对于大文件夹,这些可能需要一段时间。它们不会报告任何增量状态,因为排序操作正在缓冲所有中间结果。如果你厌倦了等待,可以用Ctrl-C中止。