我可以找出什么浪费了空间:
du -sm * | sort +0nr | head -30
但是,如果“/”被填满100%,并且有很多挂载点,例如:/foo、/foo2等,该怎么办?如何获取例如:“/”中不是挂载点的目录大小列表? (递归不是挂载点?)
更新:这不起作用:
cd /; du -sxm * 2>/dev/null | sort +0nr | head -30
因为它列出了安装在 ex.: "/FOO" 中的目录(在 AIX6.1 和 SLES 9.4 下尝试过)
更新:
du -xm / | sort +0nr | head -30
这在 AIX 上有效,现在怎么办? :D
答案1
man du
其本身提到:
-x, --one-file-system
skip directories on different file systems
所以类似的东西
du -xm * | sort +0nr | head -30
就可以了,至少如果你使用的du
是 GNU coreutils(我的版本是 8.20)。
不确定这是否适用于 AIX(在我发布答案后才注意到标签,抱歉)。
答案2
如果某些东西浪费了空间而您找不到它,则它可能隐藏在其他安装点下方。例如,您有一个/mnt/backup/
并在未安装时进行了备份,备份文件将最终位于 上,但只要稍后安装,/
就不再可见。/mnt/backup/
开关--one-file-system
也无济于事。你必须做一个干净、无障碍的安装。
mkdir /mnt/something
mount /dev/yourroot /mnt/something
然后使用、或任何您喜欢的工具检查/mnt/something/
文件。du
xdiskusage
如果仍然没有产生任何结果,请检查根保留的疯狂值(对于 ext*,tune2fs
),或检查一般文件系统(fsck
),因为某些文件系统缺陷可能会导致已用/可用空间计算错误。
答案3
通过-x
du
避免遍历其他文件系统的选项。调用du
根目录本身(如果调用du -x *
,它将遍历挂载点紧邻根目录的所有文件系统)。
du -mx / | sort -nr | head -n 30
答案4
如果有很多挂载点,或者文件在挂载之前可能已写入挂载点,则将设备挂载到辅助挂载点会很有用。在我使用过的大多数系统上/mnt
都是可用且未使用的。其他人实际上在那里使用/mnt
和放置可移动媒体的安装点。在任何一种情况下,您都应该能够在那里添加一个安装点来安装磁盘。在那里安装根设备并du
针对该安装点运行。
要检查已删除但仍打开的文件,请将df
使用情况与du -k
安装点进行比较。如果块大小与设备块大小不匹配du
,通常会存在差异。
轮换日志文件而不让日志记录程序重新打开其日志文件可能会导致此类问题。许多版本syslog
将在发送信号时重新打开其日志文件HUP
,其他版本则需要重新启动。