除了文件系统之外,我的磁盘上占用了这么多空间的是什么?

我电脑里只有一块硬盘,是一块80GB的固态硬盘。它被格式化为一个单独的ext4分区(没有交换分区),所有常用文件夹都安装在上面(我把大量数据存储在外部设备上,但/home和其他文件夹都在固态硬盘上)。
今天我启动电脑时收到了一个磁盘已满的消息。我打开了磁盘使用情况分析器来查看占用空间的情况。它坚称磁盘已使用了67.8GB,而/目录占用了36.4GB。这就引出了一个问题,如果不是文件系统占用了这30GB的空间,那它们在哪里呢?
为了进行比较,我将Nautilus中列出的/目录下所有可读文件夹(包括隐藏文件夹)的大小相加。结果是20.9GB。回收站无法读取,但我知道它占用了16.2GB,所以总和是36.1GB,与磁盘使用情况分析器报告的差不多。还有一些系统文件夹无法读取,比如proc文件夹,但我怀疑它们加起来也不会有30GB——否则就不可能在小容量硬盘上安装Ubuntu了,而我曾经见过它在2.5GB的硬盘上运行。我认为它们可能是我计算和磁盘使用情况分析器报告之间的0.3GB差异所在。
所以我想知道,是什么占用了这30GB的空间,我该如何释放它们?

alt text

回答CYREX问题的编辑

  1. 从Ubuntu 10.10 64位的光盘启动(与我的系统相同)。

    fsck结果:

    root@ubuntu:~# fsck /dev/sda1
    fsck from util-linux-ng 2.17.2
    e2fsck 1.41.12 (17-May-2010)
    /dev/sda1: 清理完毕,265956/4890624个文件,18073343/19537408个块
    
  2. 从SSD启动。清空了回收站,现在有16 GB可用。还有30 GB不见了。

    alt text

  3. 我没有足够的经验来判断日志中什么是奇怪的。这是我自上次启动以来的消息日志和系统日志。也许你能在其中找到一些线索:

  4. 这里变得非常奇怪。我插入了一个外部500 GB的硬盘。磁盘使用分析器错误地报告了可用空间,然后显示缺失的空间(已使用76 GB,但只有24 GB在文件夹中)。

    alt text

再次从LiveCD启动,从中启动磁盘使用分析器,并获得与已安装的Ubuntu相同的结果,大约1-2 GB。
回答CodeMonk的编辑:
那本来是个好办法,但是分区实际上是80 GB - 我的意思是74 GB + 营销"错误",无论如何整个磁盘都被格式化了。它还显示使用了超过50 GB,那么如果不是在文件和文件夹中,那30 GB在哪里呢?

alt text

GParted还报告了外部硬盘的正确大小。

alt text


有时候最好不要依赖 GUI 工具,打开终端并运行以下命令,在根目录下获取每个目录使用空间的汇总报告:sudo du -sm /* - João Pinto
3通过在您的第一和第二张截图中不展开“/”下的磁盘使用分析器条目,您已经使自己(以及我们)无法看到所有子目录的大小,而环形图清楚地显示这些子目录被某些东西占用。可能只是像/var/log/syslog这样的目录被某个大声抱怨的硬件填满了,但我们需要那些数据。 - msw
你试过查找日志文件吗?我记得在重新启动后,我的KVM切换器和无线键盘不兼容,导致一个日志文件不断增长并填满了所有空间(两天后)。重新插拔设备有帮助。也许对于你的服务器来说情况不同,但希望能给你一些提示。 - LiveWireBT
8个回答

如果您以普通用户身份使用磁盘分析器,可能会有一些文件您无法访问或查看。您可以尝试以超级用户权限启动它。打开终端,或按下ALT+F2并输入以下内容:
gksudo baobab

Baobab是磁盘分析器的极客名称,如果你想知道的话。也许它现在可以告诉你那些丢失的兆字节在哪里了。

1另外,还要记住在Ubuntu中打开终端的另一个快捷键是Ctrl + Alt + T。 - ThunderBird

我解决了 - 多亏了你们所有的建议,特别是Javier Riveira的建议,他建议使用sudo权限运行磁盘分析器(我不知道这会对结果产生影响)。
我有Crashplan,并且它正在备份到一些外部驱动器。所以有一个备份集会发送到Milly,另一个备份集会每15分钟发送到Sto_Lat(这些是外部驱动器的名称)。当我在某个时刻启动电脑但没有连接这些驱动器时,Crashplan发现/media/Milly/media/Sto_Lat下没有文件夹,所以它只是创建了它们并将备份写入其中。
由于某种原因,磁盘分析器在没有sudo权限的情况下不显示这些文件夹。Nautilus显示它们,但将/media的大小列为16 KB,而实际上是30 GB。
我只有在卸载了所有外部驱动器,包括 Milly 和 Sto_Lat,然后运行 "gksudo baobab" 时才注意到这一点。然后我发现我的外部驱动器应该不存在的地方出现了 - 但并非全部,只有备份目标 - 我意识到这些不是挂载的驱动器,而是 Crashplan 创建的同名文件夹。当我以与现有文件夹相同的名称挂载驱动器时,肯定有一些奇怪的事情发生,我想知道为什么我没有收到错误消息之类的提示...
顺便说一下,这也解释了为什么磁盘分析器显示 Milly 的大小为530GB而不是500GB - 这30GB是所谓的“丢失”空间,它将文件夹和实际驱动器一起计算。
现在,我只需要找到一种删除这些文件夹而不会破坏 Crashplan 或失去备份的方法。

你应该将这个回答标记为被接受的答案,我已经添加了一个链接到Javier的回答,这样他就可以得到赞同的投票。 - Jorge Castro
这正是我遇到的问题。我的其中一块备份磁盘已经损坏,但我的备份脚本仍试图备份到/mnt/Backup-Drive文件夹,导致我的根目录磁盘空间被占满了。 - Michael Robinson
你需要使用sudo的原因是文件系统的某些部分对于你当前运行的用户来说是不可读的。这是非常合理的,想象一下如果任何用户都能读取你的完整备份,那将会是什么情况。 - arielf
@arielf 我想我从来没有认真考虑过这个问题。但是我确实希望一个磁盘空间计算工具能够准确地显示我所使用和剩余的磁盘空间,也许还可以显示一个灰色的区块,上面写着“这部分已满,但你没有权限查看其中内容”。作为用户,当我没有阅读权限的文件被计算在可用磁盘空间中时,我感到相当惊讶。 - rumtscho
嗯,你可以简单地运行df命令,它不会进行完整的目录扫描,只提供分区的总空间和可用空间。但是如果你想要进行完整的目录扫描,并获得baobabfilelight所提供的详细信息(包括各个文件级别),那就需要对目录具有完全的读取权限。 - arielf
将一个文件夹挂载到现有路径下会“遮盖”这个路径。这意味着在文件夹被挂载时,你将看到挂载文件夹的内容,并且无法访问原始文件夹的内容。一旦取消挂载文件夹,原始内容将再次可见。这是Linux上挂载的预期行为,没有任何奇怪之处。例如:/media/data包含一些文件,你将外部硬盘挂载为data/media下,那么它将遮盖你原来的data文件夹。 - lanoxx

你可以使用磁盘使用分析器扫描你的目录,看看文件系统上的空间都去了哪里。

alt text

关于无法看到您磁盘上的30GB,请打开GParted并查看磁盘上的空间分配情况。可能是您的分区方案不是您所认为的那样。

GParted


GParted确实是个好主意,但问题仍然存在,请参考截图。 - rumtscho
确实非常奇怪。磁盘使用分析器是否显示根目录中有任何大文件? - Nick Pascucci

你可以使用du来展示这个:
cd /
sudo du -hcsx -- .[!.]* * | sort -rh | head

或者

sudo du -hcsx -- * | sort -rh | head

这将显示使用最多空间的内容。

默认情况下,您的磁盘空间有10%被保留给root用户。您可以使用sudo tune2fs -m %percentage %device来更改这个值。在您的情况下,可以使用sudo tune2fs -m 1 /dev/cciss/c0d0p1将保留量减少到1%。您可以将其设置为任何其他数字,但我不建议设置为0%。

“sudo du -chs /” 的结果有什么需要担心的吗? - dannymcc
我不知道,但如果你没有其他问题的话,我不介意的;-) - André Stannek

请按照以下步骤操作,并告诉我进展如何:
  1. 插入LiveCD并对/dev/sda1进行fsck检查。
  2. 清空垃圾桶。
  3. 查看日志文件查看器,了解是否有异常情况发生。
  4. 如果可能,请使用普通硬盘(非固态硬盘)进行测试,以排除该选项。
请告诉我进展如何。

已发布您所请求的信息,请查看问题中的编辑。 - rumtscho

我真的不知道这是否对你有帮助,但在我的情况下,我也经历了类似的问题,我的硬盘驱动器在没有原因的情况下逐渐失去了可用空间。事实证明,synaptic软件包管理器中的默认设置也是其中的一个原因。在首选项下的文件选项卡中,默认设置会指示synaptic将所有下载的软件包保存在缓存中。随着时间的推移,这可能会积累大量的文件。
我将设置更改为安装后删除已下载的软件包。这有助于恢复相当多的可用空间。
再次强调,我不确定这是否适用于你的情况,但你可以检查一下synaptic缓存,也许里面充满了过时的文件。

1有趣的是,但这个缓存将被计算为文件系统的一部分。 - rumtscho

这个答案与此问题中的Javier Rivera's answer相同,但适用于Ubuntu 18.04+,因为gksudo命令不再可用。

如果您以普通用户身份使用磁盘分析器,则可能无法访问或查看某些文件。您可以尝试以超级用户权限启动它。

要以超级用户权限运行磁盘分析器:

sudo -H baobab